示例#1
0
 /**
  * Returns SQL query.
  * @param  string list of columns
  * @return string
  */
 public function buildSelectQuery($columns = NULL)
 {
     $queryCondition = $this->buildConditions();
     $queryEnd = $this->buildQueryEnd();
     $joins = [];
     $this->parseJoins($joins, $queryCondition);
     $this->parseJoins($joins, $queryEnd);
     if ($this->select) {
         $querySelect = $this->buildSelect($this->select);
         $this->parseJoins($joins, $querySelect);
     } elseif ($columns) {
         $prefix = $joins ? "{$this->delimitedTable}." : '';
         $cols = [];
         foreach ($columns as $col) {
             $cols[] = $prefix . $col;
         }
         $querySelect = $this->buildSelect($cols);
     } elseif ($this->group && !$this->driver->isSupported(ISupplementalDriver::SUPPORT_SELECT_UNGROUPED_COLUMNS)) {
         $querySelect = $this->buildSelect([$this->group]);
         $this->parseJoins($joins, $querySelect);
     } else {
         $prefix = $joins ? "{$this->delimitedTable}." : '';
         $querySelect = $this->buildSelect([$prefix . '*']);
     }
     $queryJoins = $this->buildQueryJoins($joins);
     $query = "{$querySelect} FROM {$this->delimitedTable}{$queryJoins}{$queryCondition}{$queryEnd}";
     $this->driver->applyLimit($query, $this->limit, $this->offset);
     return $this->tryDelimite($query);
 }
示例#2
0
 /**
  * Returns SQL query.
  * @param  string list of columns
  * @return string
  */
 public function buildSelectQuery($columns = NULL)
 {
     if (!$this->order && ($this->limit !== NULL || $this->offset)) {
         $this->order = array_map(function ($col) {
             return "{$this->tableName}.{$col}";
         }, (array) $this->conventions->getPrimary($this->tableName));
     }
     $queryJoinConditions = $this->buildJoinConditions();
     $queryCondition = $this->buildConditions();
     $queryEnd = $this->buildQueryEnd();
     $joins = [];
     $finalJoinConditions = $this->parseJoinConditions($joins, $queryJoinConditions);
     $this->parseJoins($joins, $queryCondition);
     $this->parseJoins($joins, $queryEnd);
     if ($this->select) {
         $querySelect = $this->buildSelect($this->select);
         $this->parseJoins($joins, $querySelect);
     } elseif ($columns) {
         $prefix = $joins ? "{$this->delimitedTable}." : '';
         $cols = [];
         foreach ($columns as $col) {
             $cols[] = $prefix . $col;
         }
         $querySelect = $this->buildSelect($cols);
     } elseif ($this->group && !$this->driver->isSupported(ISupplementalDriver::SUPPORT_SELECT_UNGROUPED_COLUMNS)) {
         $querySelect = $this->buildSelect([$this->group]);
         $this->parseJoins($joins, $querySelect);
     } else {
         $prefix = $joins ? "{$this->delimitedTable}." : '';
         $querySelect = $this->buildSelect([$prefix . '*']);
     }
     $queryJoins = $this->buildQueryJoins($joins, $finalJoinConditions);
     $query = "{$querySelect} FROM {$this->delimitedTable}{$queryJoins}{$queryCondition}{$queryEnd}";
     $this->driver->applyLimit($query, $this->limit, $this->offset);
     return $this->tryDelimite($query);
 }