Handle empty table name in where clause

This commit is contained in:
Dennis Eichhorn 2018-08-18 12:41:53 +02:00
parent 1caf381603
commit de2fdb61bc

View File

@ -281,10 +281,15 @@ class Grammar extends GrammarAbstract
$expression = ''; $expression = '';
if (!$first) { if (!$first) {
$expression = ' ' . strtoupper($element['boolean']) . ' '; $expression = ' ' . \strtoupper($element['boolean']) . ' ';
} }
if (is_string($element['column'])) { if (\is_string($element['column'])) {
// handle bug when no table is specified in the where column
if (count($query->from) === 1 && \stripos($element['column'], '.') === false) {
$element['column'] = $query->from[0] . '.' . $element['column'];
}
$expression .= $this->compileSystem($element['column'], $query->getPrefix()); $expression .= $this->compileSystem($element['column'], $query->getPrefix());
} elseif ($element['column'] instanceof \Closure) { } elseif ($element['column'] instanceof \Closure) {
$expression .= $element['column'](); $expression .= $element['column']();
@ -297,9 +302,9 @@ class Grammar extends GrammarAbstract
// todo: handle IN(...) as operator // todo: handle IN(...) as operator
if (isset($element['value'])) { if (isset($element['value'])) {
$expression .= ' ' . strtoupper($element['operator']) . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix()); $expression .= ' ' . \strtoupper($element['operator']) . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix());
} else { } else {
$operator = strtoupper($element['operator']) === '=' ? 'IS' : 'IS NOT'; $operator = \strtoupper($element['operator']) === '=' ? 'IS' : 'IS NOT';
$expression .= ' ' . $operator . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix()); $expression .= ' ' . $operator . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix());
} }
@ -327,29 +332,29 @@ class Grammar extends GrammarAbstract
*/ */
protected function compileValue(Builder $query, $value, string $prefix = '') : string protected function compileValue(Builder $query, $value, string $prefix = '') : string
{ {
if (is_string($value)) { if (\is_string($value)) {
if (strpos($value, ':') === 0) { if (\strpos($value, ':') === 0) {
return $value; return $value;
} }
return $query->quote($value); return $query->quote($value);
} elseif (is_int($value)) { } elseif (\is_int($value)) {
return (string) $value; return (string) $value;
} elseif (is_array($value)) { } elseif (\is_array($value)) {
$values = ''; $values = '';
foreach ($value as $val) { foreach ($value as $val) {
$values .= $this->compileValue($query, $val, $prefix) . ', '; $values .= $this->compileValue($query, $val, $prefix) . ', ';
} }
return '(' . rtrim($values, ', ') . ')'; return '(' . \rtrim($values, ', ') . ')';
} elseif ($value instanceof \DateTime) { } elseif ($value instanceof \DateTime) {
return $query->quote($value->format('Y-m-d H:i:s')); return $query->quote($value->format('Y-m-d H:i:s'));
} elseif ($value === null) { } elseif ($value === null) {
return 'NULL'; return 'NULL';
} elseif (is_bool($value)) { } elseif (\is_bool($value)) {
return (string) ((int) $value); return (string) ((int) $value);
} elseif (is_float($value)) { } elseif (\is_float($value)) {
return (string) $value; return (string) $value;
} elseif ($value instanceof Column) { } elseif ($value instanceof Column) {
return $this->compileSystem($value->getColumn(), $prefix); return $this->compileSystem($value->getColumn(), $prefix);
@ -411,7 +416,7 @@ class Grammar extends GrammarAbstract
$expression .= $this->compileSystem($group, $query->getPrefix()) . ', '; $expression .= $this->compileSystem($group, $query->getPrefix()) . ', ';
} }
$expression = rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
return 'GROUP BY ' . $expression; return 'GROUP BY ' . $expression;
} }
@ -435,7 +440,7 @@ class Grammar extends GrammarAbstract
$expression .= $this->compileSystem($column, $query->getPrefix()) . ', '; $expression .= $this->compileSystem($column, $query->getPrefix()) . ', ';
} }
$expression = rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
$expression .= ' ' . $key . ', '; $expression .= ' ' . $key . ', ';
} }
@ -443,7 +448,7 @@ class Grammar extends GrammarAbstract
return ''; return '';
} }
$expression = rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
return 'ORDER BY ' . $expression; return 'ORDER BY ' . $expression;
} }
@ -495,7 +500,7 @@ class Grammar extends GrammarAbstract
return ''; return '';
} }
return '(' . rtrim($cols, ', ') . ')'; return '(' . \rtrim($cols, ', ') . ')';
} }
/** /**
@ -520,7 +525,7 @@ class Grammar extends GrammarAbstract
return ''; return '';
} }
return 'VALUES ' . rtrim($vals, ', '); return 'VALUES ' . \rtrim($vals, ', ');
} }
/** /**
@ -548,6 +553,6 @@ class Grammar extends GrammarAbstract
return ''; return '';
} }
return 'SET ' . rtrim($vals, ', '); return 'SET ' . \rtrim($vals, ', ');
} }
} }