public static function swap(DAOConnected $first, DAOConnected $second, $property = 'position') { Assert::isTrue(get_class($first) === get_class($second)); $setMethod = 'set' . ucfirst($property); $getMethod = 'get' . ucfirst($property); Assert::isTrue(method_exists($first, $setMethod) && method_exists($first, $getMethod)); /** @var StorableDAO $dao */ $dao = $first->dao(); $db = DBPool::me()->getByDao($dao); $oldPosition = $first->{$getMethod}(); $newPosition = $second->{$getMethod}(); $db->begin(); $e = null; try { $dao->save($first->{$setMethod}(self::$nullValue)); $dao->save($second->{$setMethod}($oldPosition)); $dao->save($first->{$setMethod}($newPosition)); $db->commit(); } catch (DatabaseException $e) { $db->rollback(); } $dao->uncacheByIds([$first->getId(), $second->getId()]); if ($e) { throw $e; } }
public static function eq(Query $query, $prefix = null) { if ($prefix === null) { $trace = debug_backtrace(); $prefix = basename($trace[0]['file']) . ':' . $trace[0]['line']; } error_log($prefix . ": " . $query->toDialectString(DBPool::me()->getLink()->getDialect())); }
private function checkEnumerationReferentialIntegrity($enumeration, $tableName) { Assert::isTrue($enumeration instanceof Enumeration || $enumeration instanceof Enum || $enumeration instanceof Registry, 'argument enumeation must be instacne of Enumeration or Enum! gived, "' . gettype($enumeration) . '"'); $updateQueries = null; $db = DBPool::me()->getLink(); $class = get_class($enumeration); $ids = []; if ($enumeration instanceof Enumeration) { $list = $enumeration->getList(); } elseif ($enumeration instanceof Enum) { $list = ClassUtils::callStaticMethod($class . '::getList'); } elseif ($enumeration instanceof Registry) { $list = ClassUtils::callStaticMethod($class . '::getList'); } foreach ($list as $enumerationObject) { $ids[$enumerationObject->getId()] = $enumerationObject->getName(); } $rows = $db->querySet(OSQL::select()->from($tableName)->multiGet('id', 'name')); echo "\n"; foreach ($rows as $row) { if (!isset($ids[$row['id']])) { echo "Class '{$class}', strange id: {$row['id']} found. \n"; } else { if ($ids[$row['id']] != $row['name']) { echo "Class '{$class}',id: {$row['id']} sync names. \n"; $updateQueries .= OSQL::update($tableName)->set('name', $ids[$row['id']])->where(Expression::eq('id', $row['id']))->toDialectString($db->getDialect()) . ";\n"; } unset($ids[$row['id']]); } } foreach ($ids as $id => $name) { echo "Class '{$class}', id: {$id} not present in database. \n"; } echo $updateQueries; return $this; }
public function getCustomRowList(SelectQuery $query, $expires = Cache::DO_NOT_CACHE) { if ($query->getFieldsCount() !== 1) { throw new WrongArgumentException('you should select only one row when using this method'); } if ($expires !== Cache::DO_NOT_CACHE && ($list = $this->getCachedByQuery($query))) { if ($list === Cache::NOT_FOUND) { throw new CachedObjectNotFoundException(); } return $list; } elseif ($list = DBPool::getByDao($this->dao)->queryColumn($query)) { if (Cache::DO_NOT_CACHE === $expires) { return $list; } else { return $this->cacheByQuery($query, $list, $expires); } } else { throw new ObjectNotFoundException("empty list" . (defined('__LOCAL_DEBUG__') ? " for such query - " . $query->toDialectString(DBPool::me()->getByDao($this->dao)->getDialect()) : null)); } }