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";
}
}