define(DB_BOTH,0);
define(DB_ASSOC,1);
define(DB_NUM,2);
class DB{
var $handle;
function DB($handle){
$this->handle = $handle;
}
function fetch_assoc($result){
return $this->fetch_array($result,DB_ASSOC);
}
function fetch_row($result){
return $this->fetch_array($result,DB_NUM);
}
}
class SQLiteDB extends DB{
var $error;
function SQLiteDB(){
$this->error = '';
$args = func_get_args();
set_error_handler(array(&$this, 'catcherror'));
switch(func_num_args()){
case 1:
$handle = sqlite_open($args[0]);
break;
case 2:
$handle = sqlite_open($args[0], $args[1]);
break;
default:
$handle = sqlite_open($args[0], $args[1], $args[2]);
break;
}
restore_error_handler();
if($this->error){
return null;
}
$this->DB($handle);
}
function query($sql){
$this->error = '';
if(strtolower(substr(ltrim($sql),0,5))=='alter'){
$queryparts = preg_split("/[\s]+/",$sql,4,PREG_SPLIT_NO_EMPTY);
$tablename = $queryparts[2];
$alterdefs = $queryparts[3];
if(strtolower($queryparts[1]) != 'table' || $queryparts[2] == '')
$this->error = 'near "'.$queryparts[0] . '": syntax error';
else{
set_error_handler(array(&$this, 'catcherror'));
$result = $this->altertable($tablename,$alterdefs);
restore_error_handler();
}
}
else{
set_error_handler(array(&$this, 'catcherror'));
$result = sqlite_query($this->handle,$sql);
restore_error_handler();
if($this->error){
return null;
}
}
return $result;
}
function altertable($table,$alterdefs){
if($alterdefs != ''){
$result = sqlite_query($this->handle,"SELECT sql,name,type FROM sqlite_master WHERE tbl_name = '".$table."' ORDER BY type DESC");
if(sqlite_num_rows($result)>0){
$row = sqlite_fetch_array($result); //table sql
$tmpname = 't'.time();
$origsql = trim(preg_replace("/[\s]+/"," ",str_replace(",",", ",preg_replace("/[\(]/","( ",$row['sql'],1))));
$createtemptableSQL = 'CREATE TEMPORARY '.substr(trim(preg_replace("'".$table."'",$tmpname,$origsql,1)),6);
$createindexsql = array();
$i = 0;
$defs = preg_split("/[,]+/",$alterdefs,-1,PREG_SPLIT_NO_EMPTY);
$prevword = $table;
$oldcols = preg_split("/[,]+/",substr(trim($createtemptableSQL),strpos(trim($createtemptableSQL),'(')+1),-1,PREG_SPLIT_NO_EMPTY);
$newcols = array();
for($i=0;$i
todo: optimize error handling...';
exit;
}
}
function seek($result,$rownum){
return sqlite_seek($result,$rownum);
}
function insert_id(){
return sqlite_last_insert_rowid($this->handle);
}
}
?>