use Friendica\Core\Config\ValueObject\Cache;
use Friendica\Core\System;
+use Friendica\Database\Definition\DbaDefinition;
+use Friendica\Database\Definition\ViewDefinition;
use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
protected $in_retrial = false;
protected $testmode = false;
private $relation = [];
+ /** @var DbaDefinition */
+ protected $dbaDefinition;
+ /** @var ViewDefinition */
+ protected $viewDefinition;
- public function __construct(Cache $configCache, Profiler $profiler, LoggerInterface $logger)
+ public function __construct(Cache $configCache, Profiler $profiler, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition, LoggerInterface $logger)
{
// We are storing these values for being able to perform a reconnect
- $this->configCache = $configCache;
- $this->profiler = $profiler;
- $this->logger = $logger;
+ $this->configCache = $configCache;
+ $this->profiler = $profiler;
+ $this->logger = $logger;
+ $this->dbaDefinition = $dbaDefinition;
+ $this->viewDefinition = $viewDefinition;
$this->connect();
-
- if ($this->isConnected()) {
- // Loads DB_UPDATE_VERSION constant
- DBStructure::definition($configCache->get('system', 'basepath'), false);
- }
}
/**
*
* @return boolean Are there rows for that condition?
* @throws \Exception
+ * @todo Please unwrap the DBStructure::existsTable() call so this method has one behavior only: checking existence on records
*/
public function exists(string $table, array $condition): bool
{
array_walk($fields, function(&$value, $key) use ($options)
{
$field = $value;
- $value = '`' . str_replace('`', '``', $value) . '`';
+ $value = DBA::quoteIdentifier($field);
if (!empty($options['group_by']) && !in_array($field, $options['group_by'])) {
$value = 'ANY_VALUE(' . $value . ') AS ' . $value;
$types = [];
- $tables = DBStructure::definition('', false);
+ $tables = $this->dbaDefinition->getAll();
if (empty($tables[$table])) {
// When a matching table wasn't found we check if it is a view
- $views = View::definition('', false);
+ $views = $this->viewDefinition->getAll();
if (empty($views[$table])) {
return $fields;
}