86 lines
2.6 KiB
PHP
86 lines
2.6 KiB
PHP
<?php
|
|
namespace nulib\db\_private;
|
|
|
|
use nulib\exceptions;
|
|
|
|
abstract class _base extends _common {
|
|
protected static function verifix(&$sql, ?array &$bindings=null, ?array &$meta=null): void {
|
|
if (is_array($sql)) {
|
|
$prefix = $sql[0] ?? null;
|
|
if ($prefix === null) {
|
|
throw exceptions::invalid_type($sql, "cette requête sql");
|
|
} elseif (_create::isa($prefix)) {
|
|
$sql = _create::parse($sql, $bindings);
|
|
$meta = ["isa" => "create", "type" => "ddl"];
|
|
} elseif (_select::isa($prefix)) {
|
|
$sql = _select::parse($sql, $bindings);
|
|
$meta = ["isa" => "select", "type" => "dql"];
|
|
} elseif (_insert::isa($prefix)) {
|
|
$sql = _insert::parse($sql, $bindings);
|
|
$meta = ["isa" => "insert", "type" => "dml"];
|
|
} elseif (_update::isa($prefix)) {
|
|
$sql = _update::parse($sql, $bindings);
|
|
$meta = ["isa" => "update", "type" => "dml"];
|
|
} elseif (_delete::isa($prefix)) {
|
|
$sql = _delete::parse($sql, $bindings);
|
|
$meta = ["isa" => "delete", "type" => "dml"];
|
|
} elseif (_generic::isa($prefix)) {
|
|
$sql = _generic::parse($sql, $bindings);
|
|
$meta = ["isa" => "generic", "type" => null];
|
|
} else {
|
|
throw exceptions::invalid_type($sql, "cette requête sql");
|
|
}
|
|
} else {
|
|
if (!is_string($sql)) $sql = strval($sql);
|
|
if (_create::isa($sql)) {
|
|
$meta = ["isa" => "create", "type" => "ddl"];
|
|
} elseif (_select::isa($sql)) {
|
|
$meta = ["isa" => "select", "type" => "dql"];
|
|
} elseif (_insert::isa($sql)) {
|
|
$meta = ["isa" => "insert", "type" => "dml"];
|
|
} elseif (_update::isa($sql)) {
|
|
$meta = ["isa" => "update", "type" => "dml"];
|
|
} elseif (_delete::isa($sql)) {
|
|
$meta = ["isa" => "delete", "type" => "dml"];
|
|
} elseif (_generic::isa($sql)) {
|
|
$meta = ["isa" => "generic", "type" => null];
|
|
} else {
|
|
$meta = ["isa" => "generic", "type" => null];
|
|
}
|
|
}
|
|
}
|
|
|
|
static function with($sql, ?array $params=null): array {
|
|
static::verifix($sql, $params);
|
|
return [$sql, $params];
|
|
}
|
|
|
|
function __construct($sql, ?array $bindings=null) {
|
|
static::verifix($sql, $bindings, $meta);
|
|
$this->sql = $sql;
|
|
$this->bindings = $bindings;
|
|
$this->meta = $meta;
|
|
}
|
|
|
|
/** @var string */
|
|
protected $sql;
|
|
|
|
function getSql(): string {
|
|
return $this->sql;
|
|
}
|
|
|
|
/** @var ?array */
|
|
protected $bindings;
|
|
|
|
function getBindings(): ?array {
|
|
return $this->bindings;
|
|
}
|
|
|
|
/** @var ?array */
|
|
protected $meta;
|
|
|
|
function isInsert(): bool {
|
|
return ($this->meta["isa"] ?? null) === "insert";
|
|
}
|
|
}
|