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