コード例 #1
0
 /**
  * @param \obo\Carriers\QueryCarrier $queryCarrier
  * @param boolean $asArray
  * @return string
  */
 public function constructQuery(\obo\Carriers\QueryCarrier $queryCarrier, $asArray = false)
 {
     if ($queryCarrier->getDefaultEntityClassName() === null) {
         throw new \obo\Exceptions\Exception("Default entity hasn't been set for QueryCarrier");
     }
     $query = "";
     $data = [];
     $queryCarrier = clone $queryCarrier;
     $joins = array();
     $needDistinct = false;
     $entityInformation = $queryCarrier->getDefaultEntityEntityInformation();
     $repositoryName = $entityInformation->repositoryName;
     $primaryPropertyColumn = $entityInformation->informationForPropertyWithName($entityInformation->primaryPropertyName)->columnName;
     $select = $queryCarrier->getSelect();
     $where = $queryCarrier->getWhere();
     $orderBy = $queryCarrier->getOrderBy();
     $join = $queryCarrier->getJoin();
     $needDistinct = $this->process($queryCarrier->getDefaultEntityClassName(), $select, $joins, true) || $needDistinct;
     $needDistinct = $this->process($queryCarrier->getDefaultEntityClassName(), $where, $joins) || $needDistinct;
     $needDistinct = $this->process($queryCarrier->getDefaultEntityClassName(), $orderBy, $joins) || $needDistinct;
     $needDistinct = $this->process($queryCarrier->getDefaultEntityClassName(), $join, $joins) || $needDistinct;
     if ("COUNT([{$repositoryName}].[{$primaryPropertyColumn}])" === $select["query"]) {
         $query .= "SELECT  COUNT(" . ($needDistinct ? "DISTINCT " : "") . "[{$repositoryName}].[{$primaryPropertyColumn}])";
     } else {
         $query .= "SELECT " . ($needDistinct ? "DISTINCT " : "") . rtrim($select["query"], ",");
     }
     $data = \array_merge($data, $select["data"]);
     if ($queryCarrier->getFrom()["query"] === "") {
         $defaultEntityClassName = $queryCarrier->getDefaultEntityClassName();
         $query .= " FROM [{$repositoryName}]";
     } else {
         $query .= " FROM " . rtrim($queryCarrier->getFrom()["query"], ",");
         $data = \array_merge($data, $queryCarrier->getFrom()["data"]);
     }
     $query .= implode($joins, " ");
     if ($where["query"] !== "") {
         $query .= " WHERE " . \preg_replace("#^ *(AND|OR) *#i", "", $where["query"]);
         $data = \array_merge($data, $where["data"]);
     }
     if ($orderBy["query"] !== "") {
         $query .= " ORDER BY " . rtrim($orderBy["query"], ",");
         $data = \array_merge($data, $orderBy["data"]);
     }
     if ($queryCarrier->getLimit()["query"] !== "") {
         $query .= " LIMIT " . $queryCarrier->getLimit()["query"];
         $data = \array_merge($data, $queryCarrier->getLimit()["data"]);
     }
     if ($queryCarrier->getOffset()["query"] !== "") {
         $query .= " OFFSET " . $queryCarrier->getOffset()["query"];
         $data = \array_merge($data, $queryCarrier->getOffset()["data"]);
     }
     if ($asArray) {
         return \array_merge([$query], $data);
     }
     return $this->dibiTranslator->translate(\array_merge([$query], $data));
 }
コード例 #2
0
ファイル: DibiConnection.php プロジェクト: vrana/dibi
 /**
  * Generates (translates) and returns SQL query as DibiDataSource.
  * @param  array|mixed      one or more arguments
  * @return DibiDataSource
  * @throws DibiException
  */
 public final function dataSource($args)
 {
     $args = func_get_args();
     $this->connect();
     $translator = new DibiTranslator($this->driver);
     return new DibiDataSource($translator->translate($args), $this);
 }
コード例 #3
0
 public function toSql(DibiTranslator $translator, $modifier)
 {
     return $translator->formatValue($this->value, $this->modifier);
 }
コード例 #4
0
 /**
  * Generates SQL query.
  * @param  array
  * @return string
  */
 private function translateArgs($args)
 {
     $this->connected || $this->connect();
     return $this->translator->translate($args);
 }
コード例 #5
0
 /**
  * Generates (translates) and returns SQL query as DibiDataSource.
  * @param  array|mixed      one or more arguments
  * @return DibiDataSource
  * @throws DibiException
  */
 public final function dataSource($args)
 {
     $this->connected || $this->connect();
     $args = func_get_args();
     return new DibiDataSource($this->translator->translate($args), $this);
 }
コード例 #6
0
ファイル: dibi.min.php プロジェクト: jaroslavlibal/MDW
 public function hasColumn($name)
 {
     $name = DibiTranslator::substitute($name);
     $this->initColumns();
     return isset($this->names[strtolower($name)]);
 }
コード例 #7
0
ファイル: DibiConnection.php プロジェクト: laiello/webuntucms
 /**
  * Generates and prints SQL query.
  *
  * @param  array|mixed  one or more arguments
  * @return bool
  */
 public final function test($args)
 {
     $args = func_get_args();
     $this->connect();
     $trans = new DibiTranslator($this->driver);
     $ok = $trans->translate($args);
     dibi::dump($trans->sql);
     return $ok;
 }
コード例 #8
0
ファイル: Database.php プロジェクト: pracj3am/osto
 /**
  * Sets SQL
  * @param string $sql
  */
 public function setSql($sql)
 {
     $this->sql = self::$translator->translate((array) $sql);
     $this->result = $this->count = $this->totalCount = NULL;
 }