Skip to content

Commit

Permalink
Extract driver check conditions to top
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Jan 20, 2017
1 parent d8310d6 commit af5bd49
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 33 deletions.
79 changes: 49 additions & 30 deletions SQLBuilder/Universal/Query/SelectQuery.php
Expand Up @@ -206,7 +206,7 @@ public function groupBy($expr, array $modifiers = null)
return $this;
}

public function clearGroupBy()
public function removeGroupBy()
{
$this->groupByList = array();
}
Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -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;
Expand All @@ -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()
;
}

Expand Down
4 changes: 1 addition & 3 deletions SQLBuilder/Universal/Traits/OptionTrait.php
Expand Up @@ -41,8 +41,6 @@ public function buildOptionClause()
if (empty($this->options)) {
return '';
}
$sql = ' '.implode(' ', $this->options);

return $sql;
return ' '.join(' ', $this->options);
}
}

0 comments on commit af5bd49

Please sign in to comment.