124 lines
3.2 KiB
PHP
124 lines
3.2 KiB
PHP
<?php
|
|
namespace nur\sery\db\sqlite;
|
|
|
|
use nur\sery\StateException;
|
|
use nur\sery\ValueException;
|
|
use SQLite3;
|
|
use SQLite3Stmt;
|
|
|
|
class SqliteQuery {
|
|
static function verifix(&$query, ?array &$params=null): void {
|
|
if (is_array($query)) {
|
|
throw StateException::not_implemented(); #XXX
|
|
$prefix = $query[0] ?? null;
|
|
if ($prefix === null) {
|
|
throw new ValueException("requête invalide");
|
|
} elseif (self::is_create($prefix)) {
|
|
$query = self::parse_create($query, $params);
|
|
} elseif (self::is_select($prefix)) {
|
|
$query = self::parse_select($query, $params);
|
|
} elseif (self::is_insert($prefix)) {
|
|
$query = self::parse_insert($query, $params);
|
|
} elseif (self::is_update($prefix)) {
|
|
$query = self::parse_update($query, $params);
|
|
} elseif (self::is_delete($prefix)) {
|
|
$query = self::parse_delete($query, $params);
|
|
} else {
|
|
throw new ValueException("requête invalide");
|
|
}
|
|
} elseif (!is_string($query)) {
|
|
$query = strval($query);
|
|
}
|
|
}
|
|
|
|
const create_SCHEMA = [
|
|
"prefix" => "string",
|
|
"table" => "string",
|
|
"cols" => "array",
|
|
"suffix" => "?string",
|
|
];
|
|
static function is_create(string $sql): bool {
|
|
}
|
|
static function parse_create(array $query, ?array &$params=null): string {
|
|
}
|
|
|
|
const select_SCHEMA = [
|
|
"prefix" => "string",
|
|
"cols" => "?array",
|
|
"from" => "?string",
|
|
"where" => "?array",
|
|
"order by" => "?array",
|
|
"group by" => "?array",
|
|
"having" => "?array",
|
|
];
|
|
static function is_select(string $sql): bool {
|
|
}
|
|
static function parse_select(array $query, ?array &$params=null): string {
|
|
}
|
|
|
|
const insert_SCHEMA = [
|
|
"prefix" => "string",
|
|
"into" => "?string",
|
|
"cols" => "?array",
|
|
"values" => "?array",
|
|
];
|
|
static function is_insert(string $sql): bool {
|
|
}
|
|
static function parse_insert(array $query, ?array &$params=null): string {
|
|
}
|
|
|
|
const update_SCHEMA = [
|
|
"prefix" => "string",
|
|
"table" => "?string",
|
|
"cols" => "?array",
|
|
"values" => "?array",
|
|
"where" => "?array",
|
|
];
|
|
static function is_update(string $sql): bool {
|
|
}
|
|
static function parse_update(array $query, ?array &$params=null): string {
|
|
}
|
|
|
|
const delete_SCHEMA = [
|
|
"prefix" => "string",
|
|
"from" => "?string",
|
|
"where" => "?array",
|
|
];
|
|
static function is_delete(string $sql): bool {
|
|
}
|
|
static function parse_delete(array $query, ?array &$params=null): string {
|
|
}
|
|
|
|
function __construct($sql, ?array $params=null) {
|
|
self::verifix($sql, $params);
|
|
$this->sql = $sql;
|
|
$this->params = $params;
|
|
}
|
|
|
|
/** @var string */
|
|
protected $sql;
|
|
|
|
/** @var ?array */
|
|
protected $params;
|
|
|
|
function useStmt(SQLite3 $db, ?SQLite3Stmt &$stmt=null, ?string &$sql=null): bool {
|
|
if ($this->params !== null) {
|
|
/** @var SQLite3Stmt $stmt */
|
|
$stmt = SqliteException::check($db, $db->prepare($this->sql));
|
|
$close = true;
|
|
try {
|
|
foreach ($this->params as $param => $value) {
|
|
SqliteException::check($db, $stmt->bindValue($param, $value));
|
|
}
|
|
$close = false;
|
|
return true;
|
|
} finally {
|
|
if ($close) $stmt->close();
|
|
}
|
|
} else {
|
|
$sql = $this->sql;
|
|
return false;
|
|
}
|
|
}
|
|
}
|