sql expression (lots of todo)

This commit is contained in:
2021-04-08 19:08:05 +02:00
parent 43d9a65def
commit 4582ca0f9f
13 changed files with 187 additions and 31 deletions

View File

@@ -16,6 +16,9 @@ use Driver\SQL\Column\JsonColumn;
use Driver\SQL\Condition\CondRegex;
use Driver\SQL\Expression\Add;
use Driver\SQL\Expression\CurrentTimeStamp;
use Driver\SQL\Expression\DateAdd;
use Driver\SQL\Expression\Expression;
use Driver\SQL\Query\CreateProcedure;
use Driver\SQL\Query\CreateTrigger;
use Driver\SQL\Query\Query;
@@ -192,7 +195,7 @@ class MySQL extends SQL {
$columnName = $this->columnName($value->getName());
$updateValues[] = "$leftColumn=VALUES($columnName)";
} else if($value instanceof Add) {
$columnName = $this->columnName($value->getColumn());
$columnName = $this->columnName($value->getLHS());
$operator = $value->getOperator();
$value = $value->getValue();
$updateValues[] = "$leftColumn=$columnName$operator" . $this->addValue($value, $params);
@@ -278,6 +281,8 @@ class MySQL extends SQL {
return "NULL";
} else if($value instanceof Keyword) {
return $value->getValue();
} else if ($value instanceof CurrentTimeStamp) {
return "CURRENT_TIMESTAMP";
} else {
$str = addslashes($value);
return "'$str'";
@@ -291,6 +296,8 @@ class MySQL extends SQL {
return $val->getName();
} else if ($val instanceof Column) {
return $this->columnName($val->getName());
} else if ($val instanceof Expression) {
return $this->createExpression($val, $params);
} else {
$params[] = $val;
return "?";
@@ -329,10 +336,6 @@ class MySQL extends SQL {
}
}
public function currentTimestamp(): Keyword {
return new Keyword("NOW()");
}
public function getStatus() {
return mysqli_stat($this->connection);
}
@@ -397,4 +400,17 @@ class MySQL extends SQL {
return $query;
}
protected function createExpression(Expression $exp, array &$params) {
if ($exp instanceof DateAdd) {
$lhs = $this->addValue($exp->getLHS(), $params);
$rhs = $this->addValue($exp->getRHS(), $params);
$unit = $exp->getUnit();
return "DATE_ADD($lhs, INTERVAL $rhs $unit)";
} else if ($exp instanceof CurrentTimeStamp) {
return "NOW()";
} else {
return parent::createExpression($exp, $params);
}
}
}