ulmus/src/Common/Sql.php
Dave Mc Nicoll 026a0f4f83 - Fixed the QueryBuilder's escaping problem - adapters are now responsible for escaping identifiers.
- Added a MsSQL offset query fragment. There is still a problem with the way the Repository must act within another adapter.
2020-04-14 09:47:09 -04:00

64 lines
1.5 KiB
PHP

<?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):
return "'$value'";
case is_null($value):
return "NULL";
}
return $value;
}
public static function parameter($value) : string
{
}
}