mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-08 21:28:40 +00:00
value, werhe and raw to builder
This commit is contained in:
parent
0d686243be
commit
dbb7ac5b02
|
|
@ -159,6 +159,8 @@ class Builder extends BuilderAbstract
|
||||||
|
|
||||||
protected $unionOrders = [];
|
protected $unionOrders = [];
|
||||||
|
|
||||||
|
public $raw = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comparison operators.
|
* Comparison operators.
|
||||||
*
|
*
|
||||||
|
|
@ -204,6 +206,11 @@ class Builder extends BuilderAbstract
|
||||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||||
*/
|
*/
|
||||||
public function __construct(ConnectionAbstract $connection)
|
public function __construct(ConnectionAbstract $connection)
|
||||||
|
{
|
||||||
|
$this->setConnection($connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setConnection(ConnectionAbstract $connection)
|
||||||
{
|
{
|
||||||
$this->connection = $connection;
|
$this->connection = $connection;
|
||||||
$this->grammar = $connection->getGrammar();
|
$this->grammar = $connection->getGrammar();
|
||||||
|
|
@ -308,6 +315,14 @@ class Builder extends BuilderAbstract
|
||||||
return $this->grammar->compileQuery($this);
|
return $this->grammar->compileQuery($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function raw(string $raw) : Builder
|
||||||
|
{
|
||||||
|
$this->type = QueryType::RAW;
|
||||||
|
$this->raw = $raw;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make raw column selection.
|
* Make raw column selection.
|
||||||
*
|
*
|
||||||
|
|
@ -333,7 +348,7 @@ class Builder extends BuilderAbstract
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||||
*/
|
*/
|
||||||
public function distinct() : Builder
|
public function distinct(...$columns) : Builder
|
||||||
{
|
{
|
||||||
$this->distinct = true;
|
$this->distinct = true;
|
||||||
|
|
||||||
|
|
@ -380,23 +395,6 @@ class Builder extends BuilderAbstract
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Or Where.
|
|
||||||
*
|
|
||||||
* @param string|array|\Closure $columns Columns
|
|
||||||
* @param string $operator Operator
|
|
||||||
* @param string|array|\Closure $values Values
|
|
||||||
*
|
|
||||||
* @return Builder
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
|
||||||
*/
|
|
||||||
public function orWhere($columns, string $operator = null, $values = null) : Builder
|
|
||||||
{
|
|
||||||
return $this->where($columns, $operator, $values, 'or');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Where.
|
* Where.
|
||||||
*
|
*
|
||||||
|
|
@ -426,9 +424,13 @@ class Builder extends BuilderAbstract
|
||||||
throw new \InvalidArgumentException('Unknown operator.');
|
throw new \InvalidArgumentException('Unknown operator.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->wheres[$key][] = ['column' => $column, 'operator' => $operator[$i],
|
$this->wheres[$key][] = [
|
||||||
'value' => $values[$i],
|
'column' => $column,
|
||||||
'boolean' => $boolean[$i],];
|
'operator' => $operator[$i],
|
||||||
|
'value' => $values[$i],
|
||||||
|
'boolean' => $boolean[$i],
|
||||||
|
];
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
} elseif (is_string($columns)) {
|
} elseif (is_string($columns)) {
|
||||||
|
|
@ -445,6 +447,26 @@ class Builder extends BuilderAbstract
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function andWhere(Where $where)
|
||||||
|
{
|
||||||
|
$this->wheres[][] = [
|
||||||
|
'column' => $where,
|
||||||
|
'boolean' => 'and',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function orWhere(Where $where)
|
||||||
|
{
|
||||||
|
$this->wheres[][] = [
|
||||||
|
'column' => $where,
|
||||||
|
'boolean' => 'or',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Where in.
|
* Where in.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ use phpOMS\DataStorage\Database\GrammarAbstract;
|
||||||
use phpOMS\DataStorage\Database\Query\Builder;
|
use phpOMS\DataStorage\Database\Query\Builder;
|
||||||
use phpOMS\DataStorage\Database\Query\Column;
|
use phpOMS\DataStorage\Database\Query\Column;
|
||||||
use phpOMS\DataStorage\Database\Query\QueryType;
|
use phpOMS\DataStorage\Database\Query\QueryType;
|
||||||
|
use phpOMS\DataStorage\Database\Query\Where;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database query grammar.
|
* Database query grammar.
|
||||||
|
|
@ -122,6 +123,9 @@ class Grammar extends GrammarAbstract
|
||||||
case QueryType::RANDOM:
|
case QueryType::RANDOM:
|
||||||
$components = $this->selectComponents;
|
$components = $this->selectComponents;
|
||||||
break;
|
break;
|
||||||
|
case QueryType::RAW:
|
||||||
|
return $query->raw;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new \InvalidArgumentException('Unknown query type.');
|
throw new \InvalidArgumentException('Unknown query type.');
|
||||||
}
|
}
|
||||||
|
|
@ -198,28 +202,7 @@ class Grammar extends GrammarAbstract
|
||||||
|
|
||||||
foreach ($wheres as $key => $where) {
|
foreach ($wheres as $key => $where) {
|
||||||
foreach ($where as $key2 => $element) {
|
foreach ($where as $key2 => $element) {
|
||||||
if (!$first) {
|
$expression .= $this->compileWhereElement($element, $query, $first);
|
||||||
$expression .= ' ' . strtoupper($element['boolean']) . ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_string($element['column'])) {
|
|
||||||
$expression .= $this->compileSystem($element['column'], $query->getPrefix()) . ' ' . strtoupper($element['operator']) . ' ' . $this->compileValue($element['value'], $query->getPrefix());
|
|
||||||
} elseif ($element['column'] instanceof \Closure) {
|
|
||||||
} elseif ($element['column'] instanceof Builder) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_string($element['value'])) {
|
|
||||||
} elseif ($element['value'] instanceof \Closure) {
|
|
||||||
} elseif ($element['value'] instanceof Builder) {
|
|
||||||
} elseif ($element['value'] instanceof \DateTime) {
|
|
||||||
} elseif (is_int($element['value'])) {
|
|
||||||
} elseif (is_bool($element['value'])) {
|
|
||||||
} elseif (is_null($element['value'])) {
|
|
||||||
} elseif (is_float($element['value'])) {
|
|
||||||
} elseif (is_array($element['value'])) {
|
|
||||||
// is bind
|
|
||||||
}
|
|
||||||
|
|
||||||
$first = false;
|
$first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -231,6 +214,37 @@ class Grammar extends GrammarAbstract
|
||||||
return 'WHERE ' . $expression;
|
return 'WHERE ' . $expression;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function compileWhereElement(array $element, Builder $query, bool $first = true) : string
|
||||||
|
{
|
||||||
|
$expression = '';
|
||||||
|
|
||||||
|
if(!$first) {
|
||||||
|
$expression = ' ' . strtoupper($element['boolean']) . ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($element['column'])) {
|
||||||
|
$expression .= $this->compileSystem($element['column'], $query->getPrefix());
|
||||||
|
} elseif ($element['column'] instanceof \Closure) {
|
||||||
|
$expression .= $element['column']();
|
||||||
|
} elseif ($element['column'] instanceof Builder) {
|
||||||
|
$expression .= '(' . $element['column']->toSql() . ')';
|
||||||
|
} elseif ($element['column'] instanceof Where) {
|
||||||
|
$expression .= '(' . $this->compileWhere($element['column'], $query->getPrefix()) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($element['value'])) {
|
||||||
|
$expression .= ' ' . strtoupper($element['operator']) . ' ' . $this->compileValue($element['value'], $query->getPrefix());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function compileWhere(Where $where, string $prefix = '', bool $first = true) : string
|
||||||
|
{
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile value.
|
* Compile value.
|
||||||
*
|
*
|
||||||
|
|
@ -247,6 +261,10 @@ class Grammar extends GrammarAbstract
|
||||||
protected function compileValue($value, $prefix = '') : string
|
protected function compileValue($value, $prefix = '') : string
|
||||||
{
|
{
|
||||||
if (is_string($value)) {
|
if (is_string($value)) {
|
||||||
|
if(strpos($value, ':') === 0) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->valueQuotes . $value . $this->valueQuotes;
|
return $this->valueQuotes . $value . $this->valueQuotes;
|
||||||
} elseif (is_int($value)) {
|
} elseif (is_int($value)) {
|
||||||
return $value;
|
return $value;
|
||||||
|
|
|
||||||
|
|
@ -35,4 +35,5 @@ abstract class QueryType extends Enum
|
||||||
const UPDATE = 2;
|
const UPDATE = 2;
|
||||||
const DELETE = 3;
|
const DELETE = 3;
|
||||||
const RANDOM = 4;
|
const RANDOM = 4;
|
||||||
|
const RAW = 5;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user