SQL expression rewrite, Pagination, some frontend stuff
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class Compare extends Condition {
|
||||
|
||||
private string $operator;
|
||||
@@ -18,4 +20,16 @@ class Compare extends Condition {
|
||||
public function getValue() { return $this->value; }
|
||||
public function getOperator(): string { return $this->operator; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
|
||||
if ($this->value === null) {
|
||||
if ($this->operator === "=") {
|
||||
return $sql->columnName($this->column) . " IS NULL";
|
||||
} else if ($this->operator === "!=") {
|
||||
return $sql->columnName($this->column) . " IS NOT NULL";
|
||||
}
|
||||
}
|
||||
|
||||
return $sql->columnName($this->column) . $this->operator . $sql->addValue($this->value, $params);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondAnd extends Condition {
|
||||
|
||||
private array $conditions;
|
||||
@@ -11,4 +13,12 @@ class CondAnd extends Condition {
|
||||
}
|
||||
|
||||
public function getConditions(): array { return $this->conditions; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
$conditions = array();
|
||||
foreach($this->getConditions() as $cond) {
|
||||
$conditions[] = $sql->addValue($cond, $params);
|
||||
}
|
||||
return "(" . implode(" AND ", $conditions) . ")";
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondBool extends Condition {
|
||||
|
||||
private $value;
|
||||
@@ -12,4 +14,11 @@ class CondBool extends Condition {
|
||||
|
||||
public function getValue() { return $this->value; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
if (is_string($this->value)) {
|
||||
return $sql->columnName($this->value);
|
||||
} else {
|
||||
return $sql->addValue($this->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\Query\Select;
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondIn extends Condition {
|
||||
|
||||
private $needle;
|
||||
@@ -14,4 +17,25 @@ class CondIn extends Condition {
|
||||
|
||||
public function getNeedle() { return $this->needle; }
|
||||
public function getHaystack() { return $this->haystack; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
|
||||
$haystack = $this->getHaystack();
|
||||
if (is_array($haystack)) {
|
||||
$values = array();
|
||||
foreach ($haystack as $value) {
|
||||
$values[] = $sql->addValue($value, $params);
|
||||
}
|
||||
|
||||
$values = implode(",", $values);
|
||||
$values = "($values)";
|
||||
} else if($haystack instanceof Select) {
|
||||
$values = $haystack->build($params);
|
||||
} else {
|
||||
$sql->getLogger()->error("Unsupported in-expression value: " . get_class($haystack));
|
||||
return false;
|
||||
}
|
||||
|
||||
return $sql->addValue($this->needle, $params) . " IN $values";
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
abstract class CondKeyword extends Condition {
|
||||
|
||||
private $leftExpression;
|
||||
@@ -17,4 +19,11 @@ abstract class CondKeyword extends Condition {
|
||||
public function getLeftExp() { return $this->leftExpression; }
|
||||
public function getRightExp() { return $this->rightExpression; }
|
||||
public function getKeyword(): string { return $this->keyword; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
$keyword = $this->getKeyword();
|
||||
$left = $sql->addValue($this->getLeftExp(), $params);
|
||||
$right = $sql->addValue($this->getRightExp(), $params);
|
||||
return "$left $keyword $right";
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,5 @@ class CondLike extends CondKeyword {
|
||||
public function __construct($leftExpression, $rightExpression) {
|
||||
parent::__construct("LIKE", $leftExpression, $rightExpression);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,15 +2,21 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondNot extends Condition {
|
||||
|
||||
private $expression; // string or condition
|
||||
private mixed $expression; // string or condition
|
||||
|
||||
public function __construct($expression) {
|
||||
public function __construct(mixed $expression) {
|
||||
$this->expression = $expression;
|
||||
}
|
||||
|
||||
public function getExpression() {
|
||||
return $this->expression;
|
||||
public function getExpression(SQL $sql, array &$params): string {
|
||||
if (is_string($this->expression)) {
|
||||
return "NOT " . $sql->columnName($this->expression);
|
||||
} else {
|
||||
return "NOT " . $sql->addValue($this->expression, $params);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondNull extends Condition {
|
||||
|
||||
private string $column;
|
||||
@@ -11,4 +13,8 @@ class CondNull extends Condition {
|
||||
}
|
||||
|
||||
public function getColumn(): string { return $this->column; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
return $sql->columnName($this->getColumn()) . " IS NULL";
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class CondOr extends Condition {
|
||||
|
||||
private array $conditions;
|
||||
@@ -11,4 +13,12 @@ class CondOr extends Condition {
|
||||
}
|
||||
|
||||
public function getConditions(): array { return $this->conditions; }
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
$conditions = array();
|
||||
foreach($this->getConditions() as $cond) {
|
||||
$conditions[] = $sql->addValue($cond, $params);
|
||||
}
|
||||
return "(" . implode(" OR ", $conditions) . ")";
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,23 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Core\Driver\SQL\Condition;
|
||||
|
||||
|
||||
use Core\Driver\SQL\Query\Select;
|
||||
use Core\Driver\SQL\SQL;
|
||||
|
||||
class Exists extends Condition {
|
||||
|
||||
class Exists extends Condition
|
||||
{
|
||||
private Select $subQuery;
|
||||
|
||||
public function __construct(Select $subQuery)
|
||||
{
|
||||
public function __construct(Select $subQuery) {
|
||||
$this->subQuery = $subQuery;
|
||||
}
|
||||
|
||||
public function getSubQuery(): Select
|
||||
{
|
||||
public function getSubQuery(): Select {
|
||||
return $this->subQuery;
|
||||
}
|
||||
|
||||
function getExpression(SQL $sql, array &$params): string {
|
||||
return "EXISTS(" .$this->getSubQuery()->build($params) . ")";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user