web-base/Core/Driver/SQL/Expression/DateSub.class.php

49 lines
1.4 KiB
PHP
Raw Normal View History

2021-04-08 19:48:04 +02:00
<?php
2022-11-18 18:06:46 +01:00
namespace Core\Driver\SQL\Expression;
2021-04-08 19:48:04 +02:00
use Core\Driver\SQL\Column\Column;
use Core\Driver\SQL\MySQL;
use Core\Driver\SQL\PostgreSQL;
use Core\Driver\SQL\SQL;
use Core\External\PHPMailer\Exception;
2021-04-08 19:48:04 +02:00
class DateSub extends Expression {
private Expression $lhs;
private Expression $rhs;
private string $unit;
public function __construct(Expression $lhs, Expression $rhs, string $unit) {
$this->lhs = $lhs;
$this->rhs = $rhs;
$this->unit = $unit;
}
public function getLHS(): Expression { return $this->lhs; }
public function getRHS(): Expression { return $this->rhs; }
public function getUnit(): string { return $this->unit; }
function getExpression(SQL $sql, array &$params): string {
if ($sql instanceof MySQL) {
$lhs = $sql->addValue($this->getLHS(), $params);
$rhs = $sql->addValue($this->getRHS(), $params);
$unit = $this->getUnit();
return "DATE_SUB($lhs, INTERVAL $rhs $unit)";
} else if ($sql instanceof PostgreSQL) {
$lhs = $sql->addValue($this->getLHS(), $params);
$rhs = $sql->addValue($this->getRHS(), $params);
$unit = $this->getUnit();
if ($this->getRHS() instanceof Column) {
$rhs = "$rhs * INTERVAL '1 $unit'";
} else {
$rhs = "$rhs $unit";
}
return "$lhs - $rhs";
} else {
throw new Exception("DateSub Not implemented for driver type: " . get_class($sql));
}
}
2021-04-08 19:48:04 +02:00
}