diff --git a/SQLBuilder/Universal/Query/SelectQuery.php b/SQLBuilder/Universal/Query/SelectQuery.php index ac325af..57a37a5 100644 --- a/SQLBuilder/Universal/Query/SelectQuery.php +++ b/SQLBuilder/Universal/Query/SelectQuery.php @@ -206,7 +206,7 @@ public function groupBy($expr, array $modifiers = null) return $this; } - public function clearGroupBy() + public function removeGroupBy() { $this->groupByList = array(); } @@ -263,36 +263,42 @@ public function buildSelectClause(BaseDriver $driver, ArgumentArray $args) return $sql; } - public function buildFromClause(BaseDriver $driver, ArgumentArray $args) + protected function buildFromClauseMySQL(BaseDriver $driver, ArgumentArray $args) { $tableRefs = array(); - if ($driver instanceof MySQLDriver) { - foreach ($this->from as $k => $v) { - /* "column AS alias" OR just "column" */ - if (is_string($k)) { - $sql = $driver->quoteTable($k).' AS '.$v; - if ($this->definedIndexHint($v)) { - $sql .= $this->buildIndexHintClauseByTableRef($v, $driver, $args); - } elseif ($this->definedIndexHint($k)) { - $sql .= $this->buildIndexHintClauseByTableRef($k, $driver, $args); - } - $tableRefs[] = $sql; - } else if (is_integer($k) || is_numeric($k)) { - $sql = $driver->quoteTable($v); - if ($this->definedIndexHint($v)) { - $sql .= $this->buildIndexHintClauseByTableRef($v, $driver, $args); - } - $tableRefs[] = $sql; + foreach ($this->from as $k => $v) { + /* "column AS alias" OR just "column" */ + if (is_string($k)) { + $sql = $driver->quoteTable($k).' AS '.$v; + if ($this->definedIndexHint($v)) { + $sql .= $this->buildIndexHintClauseByTableRef($v, $driver, $args); + } elseif ($this->definedIndexHint($k)) { + $sql .= $this->buildIndexHintClauseByTableRef($k, $driver, $args); } - } - } else { - foreach ($this->from as $k => $v) { - /* "column AS alias" OR just "column" */ - if (is_string($k)) { - $tableRefs[] = $driver->quoteTable($k).' AS '.$v; - } elseif (is_integer($k) || is_numeric($k)) { - $tableRefs[] = $driver->quoteTable($v); + $tableRefs[] = $sql; + } else if (is_integer($k) || is_numeric($k)) { + $sql = $driver->quoteTable($v); + if ($this->definedIndexHint($v)) { + $sql .= $this->buildIndexHintClauseByTableRef($v, $driver, $args); } + $tableRefs[] = $sql; + } + } + if (!empty($tableRefs)) { + return ' FROM '.join(', ', $tableRefs); + } + return ''; + } + + protected function buildFromClause(BaseDriver $driver, ArgumentArray $args) + { + $tableRefs = array(); + foreach ($this->from as $k => $v) { + /* "column AS alias" OR just "column" */ + if (is_string($k)) { + $tableRefs[] = $driver->quoteTable($k).' AS '.$v; + } elseif (is_integer($k) || is_numeric($k)) { + $tableRefs[] = $driver->quoteTable($v); } } if (!empty($tableRefs)) { @@ -324,7 +330,7 @@ public function buildGroupByClause(BaseDriver $driver, ArgumentArray $args) return $sql; } - public function buildLockModifierClause() + public function buildLockModifierClauseMySQL() { if ($this->lockModifier) { return ' '.$this->lockModifier; @@ -343,18 +349,31 @@ public function buildHavingClause(BaseDriver $driver, ArgumentArray $args) public function toSql(BaseDriver $driver, ArgumentArray $args) { + if ($driver instanceof MySQLDriver) { + return 'SELECT' + .$this->buildOptionClause() + .$this->buildSelectClause($driver, $args) + .$this->buildFromClauseMySQL($driver, $args) + .$this->buildPartitionClause($driver, $args) + .$this->buildJoinClause($driver, $args) + .$this->buildWhereClause($driver, $args) + .$this->buildGroupByClause($driver, $args) + .$this->buildHavingClause($driver, $args) + .$this->buildOrderByClause($driver, $args) + .$this->buildPagingClause($driver, $args) + .$this->buildLockModifierClauseMySQL() + ; + } return 'SELECT' .$this->buildOptionClause() .$this->buildSelectClause($driver, $args) .$this->buildFromClause($driver, $args) - .$this->buildPartitionClause($driver, $args) .$this->buildJoinClause($driver, $args) .$this->buildWhereClause($driver, $args) .$this->buildGroupByClause($driver, $args) .$this->buildHavingClause($driver, $args) .$this->buildOrderByClause($driver, $args) .$this->buildPagingClause($driver, $args) - .$this->buildLockModifierClause() ; } diff --git a/SQLBuilder/Universal/Traits/OptionTrait.php b/SQLBuilder/Universal/Traits/OptionTrait.php index f0fd70a..a0422d0 100644 --- a/SQLBuilder/Universal/Traits/OptionTrait.php +++ b/SQLBuilder/Universal/Traits/OptionTrait.php @@ -41,8 +41,6 @@ public function buildOptionClause() if (empty($this->options)) { return ''; } - $sql = ' '.implode(' ', $this->options); - - return $sql; + return ' '.join(' ', $this->options); } }