2019-08-21 20:13:00 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Ulmus\Common;
|
|
|
|
|
|
|
|
abstract class Sql {
|
|
|
|
|
|
|
|
public static function function($name, ...$arguments)
|
|
|
|
{
|
|
|
|
return new class($name, ...$arguments) {
|
|
|
|
|
|
|
|
protected string $as = "";
|
|
|
|
|
|
|
|
protected string $name;
|
|
|
|
|
|
|
|
protected array $arguments;
|
|
|
|
|
|
|
|
public function __construct(string $name, ...$arguments) {
|
|
|
|
$this->name = $name;
|
|
|
|
$this->arguments = $arguments;
|
|
|
|
$this->parseArguments();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function __toString() {
|
|
|
|
return implode(' ', array_filter([
|
|
|
|
"{$this->name}(" . implode(", ", $this->arguments) . ")",
|
|
|
|
$this->as ? "AS {$this->as}" : false,
|
|
|
|
]));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function as($fieldName) {
|
|
|
|
$this->as = $fieldName;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function parseArguments() {
|
|
|
|
foreach($this->arguments as &$item) {
|
|
|
|
$item = Sql::escape($item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function escape($value)
|
|
|
|
{
|
|
|
|
switch(true) {
|
|
|
|
case is_object($value):
|
|
|
|
return (string) $value;
|
|
|
|
|
|
|
|
case is_string($value):
|
2020-04-14 13:47:09 +00:00
|
|
|
return "'$value'";
|
2019-08-21 20:13:00 +00:00
|
|
|
|
|
|
|
case is_null($value):
|
2020-04-14 13:47:09 +00:00
|
|
|
return "NULL";
|
2019-08-21 20:13:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function parameter($value) : string
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|