128 lines
3.9 KiB
PHP
Executable File
128 lines
3.9 KiB
PHP
Executable File
<?php
|
|
|
|
namespace WMarkDown;
|
|
|
|
class SQLite{
|
|
|
|
private $kmardown;
|
|
private $connection = null;
|
|
private $connected = false;
|
|
private $error = 0;
|
|
|
|
private function connect(){
|
|
if($this->connection)
|
|
return;
|
|
|
|
try{
|
|
$this->connection = new \PDO("sqlite:" . $this->wmarkdown->settings("database_file"));
|
|
$this->connected = true;
|
|
}catch(\Exception $exception){
|
|
$this->error |= 1 << 0;
|
|
$this->close();
|
|
return;
|
|
};
|
|
|
|
$this->connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
|
|
|
|
$this->connection->beginTransaction();
|
|
|
|
if(!$this->query("select * from sqlite_master")["tables"][0]){
|
|
$this->query(file_get_contents($this->wmarkdown->settings("sql_generator")));
|
|
$this->query(file_get_contents($this->wmarkdown->settings("sql_views")));
|
|
};
|
|
|
|
}
|
|
|
|
public function __construct($wmarkdown){
|
|
|
|
$this->wmarkdown = $wmarkdown;
|
|
$this->connect();
|
|
|
|
}
|
|
|
|
private function close(){
|
|
|
|
if($this->connection){
|
|
try{
|
|
$this->connection->commit();
|
|
}catch(\Exception $exception){
|
|
try{
|
|
$this->connection->rollback();
|
|
}catch(\Exception $exception){
|
|
$this->error |= 1 << 3;
|
|
};
|
|
$this->error |= 1 << 2;
|
|
};
|
|
}else
|
|
$this->error |= 1 << 1;
|
|
|
|
$this->connection = null;
|
|
|
|
}
|
|
|
|
public function __destruct(){
|
|
|
|
$this->close();
|
|
|
|
}
|
|
|
|
public function is_connected(){
|
|
return !!$this->connected;
|
|
}
|
|
|
|
public function reconnect(){
|
|
|
|
$this->close();
|
|
$this->connect();
|
|
|
|
}
|
|
|
|
public function query($query){
|
|
|
|
$results = [
|
|
"connection_error" => $this->error,
|
|
"tables" => [],
|
|
"query_error" => 0
|
|
];
|
|
|
|
if(!$this->is_connected()){
|
|
$results["query_error"] |= 1 << 1;
|
|
return $results;
|
|
};
|
|
|
|
preg_replace_callback('/(([^\;\'"]+|\'(([^\'\\\\]+|\\\\(.|[\r\n]))*)\'|"(([^"\\\\]+|\\\\(.|[\r\n]))*)")+);?/', function($values) use(&$results){
|
|
|
|
$statement = $this->connection->prepare($values[1]);
|
|
$statement->execute();
|
|
|
|
try{
|
|
$table = [];
|
|
foreach($statement->fetchAll(\PDO::FETCH_ASSOC) as $new_row){
|
|
$row = [];
|
|
foreach($new_row as $key => $value){
|
|
if(is_string($value)){
|
|
if($value[0] == "[" || $value[0] == "{"){
|
|
try{
|
|
$row[$key] = $this->ur3->json_decode(utf8_encode($value), true);
|
|
if(!$row[$key])
|
|
$row[$key] = utf8_encode($value);
|
|
}catch(\Exception $exception){
|
|
$row[$key] = utf8_encode($value);
|
|
};
|
|
}else
|
|
$row[$key] = utf8_encode($value);
|
|
}else
|
|
$row[$key] = $value;
|
|
};
|
|
$table[] = $row;
|
|
};
|
|
$results["tables"][] = $table;
|
|
}catch(\Exception $exception){};
|
|
|
|
}, $query);
|
|
|
|
return $results;
|
|
}
|
|
|
|
};
|