67 lines
1.6 KiB
PHP
67 lines
1.6 KiB
PHP
|
<?php
|
||
|
namespace nur\m\sqlite;
|
||
|
|
||
|
use Exception;
|
||
|
use nur\A;
|
||
|
use nur\m\base\AbstractConn;
|
||
|
use nur\m\base\QueryException;
|
||
|
use SQLite3;
|
||
|
|
||
|
class SqliteConn extends AbstractConn {
|
||
|
protected $filename, $flags, $encryptionKey;
|
||
|
|
||
|
protected function beforeInit(?int &$flags, ?string &$encryptionKey): void {
|
||
|
if ($flags === null) $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE;
|
||
|
if ($encryptionKey === null) $encryptionKey = "";
|
||
|
}
|
||
|
|
||
|
protected function afterInit(SQLite3 $conn): void {
|
||
|
$conn->enableExceptions(true);
|
||
|
}
|
||
|
|
||
|
protected $conn;
|
||
|
|
||
|
function __construct($filename="", ?int $flags=null, ?string $encryptionKey=null) {
|
||
|
if (is_array($filename)) {
|
||
|
if ($flags === null) $flags = A::get($filename, "flags");
|
||
|
if ($encryptionKey === null) $encryptionKey = A::get($filename, "encryption_key");
|
||
|
$filename = $filename["name"];
|
||
|
}
|
||
|
$this->beforeInit($flags, $encryptionKey);
|
||
|
$this->filename = $filename;
|
||
|
$this->flags = $flags;
|
||
|
$this->encryptionKey = $encryptionKey;
|
||
|
try {
|
||
|
$conn = new SQLite3($filename, $flags, $encryptionKey);
|
||
|
} catch (Exception $e) {
|
||
|
throw new QueryException("unable to open database '$filename'", $e);
|
||
|
}
|
||
|
$this->afterInit($conn);
|
||
|
$this->conn = $conn;
|
||
|
}
|
||
|
|
||
|
function __destruct() {
|
||
|
$this->close();
|
||
|
}
|
||
|
|
||
|
function getInfos(): array {
|
||
|
return [$this->filename, $this->flags, $this->encryptionKey];
|
||
|
}
|
||
|
|
||
|
function beginTransaction(): void {
|
||
|
}
|
||
|
|
||
|
function commit(): void {
|
||
|
}
|
||
|
|
||
|
function rollback(): void {
|
||
|
}
|
||
|
|
||
|
function close(): void {
|
||
|
if ($this->conn !== null) {
|
||
|
$this->conn->close();
|
||
|
$this->conn = null;
|
||
|
}
|
||
|
}
|
||
|
}
|