OSDN Git Service

move sqlite
[nucleus-jp/nucleus-plugins.git] / sqlite / trunk / nucleus / sqlite / sqlite.php
diff --git a/sqlite/trunk/nucleus/sqlite/sqlite.php b/sqlite/trunk/nucleus/sqlite/sqlite.php
new file mode 100644 (file)
index 0000000..09a9863
--- /dev/null
@@ -0,0 +1,557 @@
+<?php
+    /****************************************
+    * SQLite-MySQL wrapper for Nucleus      *
+    *                           ver 0.9.0.3 *
+    * Written by Katsumi                    *
+    ****************************************/
+
+// Check SQLite installed
+
+if (!function_exists('sqlite_open')) exit('Sorry, SQLite is not available from PHP (maybe, not installed in the server).');
+
+// Initializiation stuff
+require_once dirname(__FILE__) . '/sqliteconfig.php';
+$SQLITE_DBHANDLE=sqlite_open($SQLITECONF['DBFILENAME']);
+require_once dirname(__FILE__) . '/sqlitequeryfunctions.php';
+$SQLITECONF['VERSION']='0.9.0.3';
+
+//Following thing may work if MySQL is NOT installed in server.
+if (!function_exists('mysql_query')) {
+       define ("MYSQL_ASSOC", SQLITE_ASSOC);
+       define ("MYSQL_BOTH", SQLITE_BOTH);
+       define ("MYSQL_NUM", SQLITE_NUM);
+       function mysql_connect(){
+               global $SQLITECONF;
+               $SQLITECONF['OVERRIDEMODE']=true;
+               $args=func_get_args();
+               return call_user_func_array('nucleus_mysql_connect',$args);
+       }
+       foreach (array('mysql_affected_rows','mysql_change_user','mysql_client_encoding','mysql_close',
+               'mysql_create_db','mysql_data_seek','mysql_db_name','mysql_db_query','mysql_drop_db','mysql_errno',
+               'mysql_error','mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc','mysql_fetch_field','mysql_fetch_lengths',
+               'mysql_fetch_object','mysql_fetch_row','mysql_field_flags','mysql_field_len','mysql_field_name','mysql_field_seek',
+               'mysql_field_table','mysql_field_type','mysql_free_result','mysql_get_client_info','mysql_get_host_info',
+               'mysql_get_proto_info','mysql_get_server_info','mysql_info','mysql_insert_id','mysql_list_dbs',
+               'mysql_list_fields','mysql_list_processes','mysql_list_tables','mysql_num_fields','mysql_num_rows','mysql_numrows',
+               'mysql_pconnect','mysql_ping','mysql_query','mysql_real_escape_string','mysql_result','mysql_select_db',
+               'mysql_stat','mysql_tablename','mysql_thread_id','mysql_unbuffered_query')
+                as $value) eval(
+               "function $value(){\n".
+               "  \$args=func_get_args();\n".
+               "  return call_user_func_array('nucleus_$value',\$args);\n".
+               "}\n");
+}
+
+// Empty object for mysql_fetch_object().
+class SQLITE_OBJECT {}
+
+function sqlite_ReturnWithError($text='Not supported',$more=''){
+       // Show warning when error_reporting() is set.
+       if (!(error_reporting() & E_WARNING)) return false;
+       
+       // Seek the file and line that originally called sql function.
+       $a=debug_backtrace();
+       foreach($a as $key=>$btrace) {
+               if (!($templine=$btrace['line'])) continue;
+               if (!($tempfile=$btrace['file'])) continue;
+               $file=str_replace('\\','/',$file);
+               if (!$line && !$file && strpos($tempfile,'/sqlite.php')===false && strpos($tempfile,'/sqlitequeryfunctions.php')===false) {
+                       $line=$templine;
+                       $file=$tempfile;
+               }
+               echo "\n<!--$tempfile line:$templine-->\n";
+       }
+       echo "Warning from SQLite-MySQL wrapper: $text<br />\n";
+       if ($line && $file) echo "in <b>$file</b> on line <b>$line</b><br />\n";
+       echo $more;
+       return false;
+}
+function sqlite_DebugMessage($text=''){
+       global $SQLITECONF;
+       if (!$SQLITECONF['DEBUGREPORT']) return;
+       if ($text) $SQLITECONF['DEBUGMESSAGE'].="\n".$text."\n";
+       if (headers_sent()) {
+               echo '<!--sqlite_DebugMessage'.$SQLITECONF['DEBUGMESSAGE'].'sqlite_DebugMessage-->';
+               unset($SQLITECONF['DEBUGMESSAGE']);
+       }
+}
+
+// nucleus_mysql_XXXX() functions follow.
+
+function nucleus_mysql_connect($p1=null,$p2=null,$p3=null,$p4=null,$p5=null){
+       // All prameters are ignored.
+       global $SQLITE_DBHANDLE,$SQLITECONF;
+       if (!$SQLITE_DBHANDLE) $SQLITE_DBHANDLE=sqlite_open($SQLITECONF['DBFILENAME']);
+       // Initialization queries.
+       foreach($SQLITECONF['INITIALIZE'] as $value) nucleus_mysql_query($value);
+       // Unregister the function 'php' in sql query.
+       sqlite_create_function($SQLITE_DBHANDLE,'php','pi');
+       return $SQLITE_DBHANDLE;
+}
+
+function nucleus_mysql_close($p1=null){
+       global $SQLITE_DBHANDLE;
+       if (!($dbhandle=$p1)) $dbhandle=$SQLITE_DBHANDLE;
+       $SQLITE_DBHANDLE='';
+       return sqlite_close ($dbhandle);
+}
+
+function nucleus_mysql_select_db($p1,$p2=null){
+       // SQLite does not support multiple databases in a file.
+       // So this function do nothing and always returns true.
+       // Note: mysql_select_db() function returns true/false,
+       // not link-ID.
+       return true;
+}
+
+function nucleus_mysql_query($p1,$p2=null,$unbuffered=false){//echo htmlspecialchars($p1)."<br />\n";
+       global $SQLITE_DBHANDLE,$SQLITECONF;
+       if (!($dbhandle=$p2)) $dbhandle=$SQLITE_DBHANDLE;
+       $query=trim($p1);
+       if (strpos($query,"\xEF\xBB\xBF")===0) $query=substr($query,3);// UTF-8 stuff
+       if (substr($query,-1)==';') $query=substr($query,0,strlen($query)-1);
+       
+       // Escape style is changed from MySQL type to SQLite type here.
+       // This is important to avoid possible SQL-injection.
+       $strpositions=array();// contains the data show where the strings are (startposition => endposition)
+       if (strpos($query,'`')!==false || strpos($query,'"')!==false || strpos($query,"'")!==false)
+               $strpositions=sqlite_changeQuote($query);
+       //echo "<br />".htmlspecialchars($p1)."<br /><br />\n".htmlspecialchars($query)."<hr />\n";
+
+       // Debug mode
+       if ($SQLITECONF['DEBUGMODE']) $query=sqlite_mysql_query_debug($query);
+       
+       // Anyway try it.
+       if ($unbuffered) {
+               if ($ret=@sqlite_unbuffered_query($dbhandle,$query)) return $ret;
+       } else {
+               if ($ret=@sqlite_query($dbhandle,$query)) return $ret;
+       }
+       
+       // Error occured. Query must be translated.
+       return sqlite_mysql_query_sub($dbhandle,$query,$strpositions,$p1,$unbuffered);
+}
+function sqlite_mysql_query_sub($dbhandle,$query,$strpositions=array(),$p1=null,$unbuffered=false){//echo htmlspecialchars($p1)."<br />\n";
+       // Query translation is needed, especially when changing the data in database.
+       // So far, this routine is written for 'CREATE TABLE','DROP TABLE', 'INSERT INTO',
+       // 'SHOW TABLES LIKE', 'SHOW KEYS FROM', 'SHOW INDEX FROM'
+       // and several functions used in query.
+       // How about 'UPDATE' ???
+       global $SQLITE_DBHANDLE,$SQLITECONF;
+       $beforetrans=time()+microtime();
+       if (!$p1) $p1=$query;
+       $morequeries=array();
+       $temptable=false;
+       $uquery=strtoupper($query);
+       if (strpos($uquery,'CREATE TABLE')===0 || ($temptable=(strpos($uquery,'CREATE TEMPORARY TABLE')===0))) {
+               if (!($i=strpos($query,'('))) return sqlite_ReturnWithError('nucleus_mysql_query: '.$p1);
+               //check if the command is 'CREATE TABLE IF NOT EXISTS'
+               if (strpos(strtoupper($uquery),'CREATE TABLE IF NOT EXISTS')===0) {
+                       $tablename=trim(substr($query,26,$i-26));
+                       if (substr($tablename,0,1)!="'") $tablename="'$tablename'";
+                       $res=sqlite_query($dbhandle,"SELECT tbl_name FROM sqlite_master WHERE tbl_name=$tablename LIMIT 1");
+                       if (nucleus_mysql_num_rows($res)) return true;
+               } else {
+                       $tablename=trim(substr($query,12,$i-12));
+                       if (substr($tablename,0,1)!="'") $tablename="'$tablename'";
+               }
+               $query=trim(substr($query,$i+1));
+               for ($i=strlen($query);0<$i;$i--) if ($query[$i]==')') break;
+               $query=substr($query,0,$i);
+               $commands=_sqlite_divideByChar(',',$query);
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               $query=sqlite_createtable_query($commands,$tablename,$temptable,$morequeries);
+       } else if (strpos($uquery,'DROP TABLE IF EXISTS')===0) {
+               if (!($i=strpos($query,';'))) $i=strlen($query);
+               $tablename=trim(substr($query,20,$i-20));
+               if (substr($tablename,0,1)!="'") $tablename="'$tablename'";
+               $res=sqlite_query($dbhandle,"SELECT tbl_name FROM sqlite_master WHERE tbl_name=$tablename LIMIT 1");
+               if (!nucleus_mysql_num_rows($res)) return true;
+               $query='DROP TABLE '.$tablename;
+       } else if (strpos($uquery,'ALTER TABLE ')===0) {
+               $query=trim(substr($query,11));
+               if ($i=strpos($query,' ')) {
+                       $tablename=trim(substr($query,0,$i));
+                       $query=trim(substr($query,$i));
+                       require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+                       $ret =sqlite_altertable($tablename,$query,$dbhandle);
+                       if (!$ret) sqlite_ReturnWithError('SQL error',"<br /><i>".nucleus_mysql_error()."</i><br />".htmlspecialchars($p1)."<br /><br />\n".htmlspecialchars("ALTER TABLE $tablename $query")."<hr />\n");
+                       return $ret;
+               }
+               // Else, syntax error
+       } else if (strpos($uquery,'RENAME TABLE ')===0) {
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               return sqlite_renametable(_sqlite_divideByChar(',',substr($query,13)),$dbhandle);
+       } else if (strpos($uquery,'INSERT INTO ')===0 || strpos($uquery,'REPLACE INTO ')===0 ||
+                       strpos($uquery,'INSERT IGNORE INTO ')===0 || strpos($uquery,'REPLACE IGNORE INTO ')===0) {
+               $buff=str_replace(' IGNORE ',' OR IGNORE ',substr($uquery,0,($i=strpos($uquery,' INTO ')+6)));
+               $query=trim(substr($query,$i));
+               if ($i=strpos($query,' ')) {
+                       $buff.=trim(substr($query,0,$i+1));
+                       $query=trim(substr($query,$i));
+               }
+               if ($i=strpos($query,' ')) {
+                       if (strpos(strtoupper($query),'SET')===0) {
+                               $query=trim(substr($query,3));
+                               $commands=_sqlite_divideByChar(',',$query);
+                               $query=' VALUES(';
+                               $buff.=' (';
+                               foreach($commands as $key=>$value){
+                                       //echo "[".htmlspecialchars($value)."]";
+                                       if (0<$key) {
+                                               $buff.=', ';
+                                               $query.=', ';
+                                       }
+                                       if ($i=strpos($value,'=')) {
+                                               $buff.=trim(substr($value,0,$i));
+                                               $query.=substr($value,$i+1);
+                                       }
+                               }
+                               $buff.=')';
+                               $query.=')';
+                       } else {
+                               $beforevalues='';
+                               $commands=_sqlite_divideByChar(',',$query);
+                               $query='';
+                               foreach($commands as $key=>$value){
+                                       if ($beforevalues=='' && preg_match('/^(.*)\)\s+VALUES\s+\(/i',$value,$matches)) {
+                                               $beforevalues=$buff.' '.$query.$matches[1].')';
+                                       }
+                                       if (0<$key) $query.=$beforevalues.' VALUES ';// supports multiple insertion
+                                       $query.=$value.';';
+                               }
+                       }
+               }
+               $query=$buff.' '.$query;
+       } else if (strpos($uquery,'SHOW TABLES LIKE ')===0) {
+               $query='SELECT name FROM sqlite_master WHERE type=\'table\' AND name LIKE '.substr($query,17);
+       } else if (strpos($uquery,'SHOW TABLES')===0) {
+               $query='SELECT name FROM sqlite_master WHERE type=\'table\'';
+       } else if (strpos($uquery,'SHOW KEYS FROM ')===0) {
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               $query=sqlite_showKeysFrom(trim(substr($query,15)),$dbhandle);
+       } else if (strpos($uquery,'SHOW INDEX FROM ')===0) {
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               $query=sqlite_showKeysFrom(trim(substr($query,16)),$dbhandle);
+       } else if (strpos($uquery,'SHOW FIELDS FROM ')===0) {
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               $query=sqlite_showFieldsFrom(trim(substr($query,17)),$dbhandle);
+       } else if (strpos($uquery,'SHOW COLUMNS FROM ')===0) {
+               require_once(dirname(__FILE__) . '/sqlitealtertable.php');
+               $query=sqlite_showFieldsFrom(trim(substr($query,18)),$dbhandle);
+       } else if (strpos($uquery,'TRUNCATE TABLE ')===0) {
+               $query='DELETE FROM '.substr($query,15);
+       } else if (preg_match('/^DESC \'([^\']+)\' \'([^\']+)\'$/',$query,$m)) {
+               return nucleus_mysql_query("SHOW FIELDS FROM '$m[1]' LIKE '$m[2]'");
+       } else if (preg_match('/^DESC ([^\s]+) ([^\s]+)$/',$query,$m)) {
+               return nucleus_mysql_query("SHOW FIELDS FROM '$m[1]' LIKE '$m[2]'");
+       } else SQLite_Functions::sqlite_modifyQueryForUserFunc($query,$strpositions);
+
+       //Throw query again.
+       $aftertrans=time()+microtime();
+       if ($unbuffered) {
+               $ret=sqlite_unbuffered_query($dbhandle,$query);
+       } else {
+               $ret=sqlite_query($dbhandle,$query);
+       }
+
+       $afterquery=time()+microtime();
+       if ($SQLITECONF['MEASURESPEED']) sqlite_DebugMessage("translated query:$query\n".
+               'translation: '.($aftertrans-$beforetrans).'sec, query: '.($afterquery-$aftertrans).'sec');
+       if (!$ret) sqlite_ReturnWithError('SQL error',"<br /><i>".nucleus_mysql_error()."</i><br />".htmlspecialchars($p1)."<br /><br />\n".htmlspecialchars($query)."<hr />\n");
+       foreach ($morequeries as $value) if ($value) @sqlite_query($dbhandle,$value);
+       return $ret;
+}
+function sqlite_changeQuote(&$query){
+       // This function is most important.
+       // When you modify this function, do it very carefully.
+       // Otherwise, you may allow crackers to do SQL-injection.
+       // This function returns array that shows where the strings are.
+       $sarray=array();
+       $ret='';
+       $qlen=strlen($query);
+       for ($i=0;$i<$qlen;$i++) {
+               // Go to next quote
+               if (($i1=strpos($query,'"',$i))===false) $i1=$qlen;
+               if (($i2=strpos($query,"'",$i))===false) $i2=$qlen;
+               if (($i3=strpos($query,'`',$i))===false) $i3=$qlen;
+               if ($i1==$qlen && $i2==$qlen && $i3==$qlen) {
+                       $temp=preg_replace('/[\s]+/',' ',substr($query,$i)); // Change all spacying to ' '.
+                       $ret.=($temp);
+                       if (strstr($temp,';')) exit('Warning: try to use more than two queries?');
+                       break;
+               }
+               if ($i2<($j=$i1)) $j=$i2;
+               if ($i3<$j) $j=$i3;
+               $temp=preg_replace('/[\s]+/',' ',substr($query,$i,$j-$i)); // Change all spacying to ' '.
+               $ret.=($temp);
+               $c=$query[($i=$j)]; // $c keeps the type of quote.
+               if (strstr($temp,';')) exit('Warning: try to use more than two queries?');
+               
+               // Check between quotes.
+               // $j shows the begging positioin.
+               // $i will show the ending position.
+               $j=(++$i);
+               while ($i<$qlen) {
+                       if (($i1=strpos($query,$c,$i))===false) $i1=$qlen;
+                       if (($i2=strpos($query,"\\",$i))===false) $i2=$qlen;
+                       if ($i2<$i1) {
+                               // \something. Skip two characters.
+                               $i=$i2+2;
+                               continue;
+                       } if ($i1<($qlen-1) && $query[$i1+1]==$c) {
+                               // "", '' or ``.  Skip two characters.
+                               $i=$i1+2;
+                               continue;
+                       } else {// OK. Reached the end position
+                               $i=$i1;
+                               break;
+                       }
+               }
+               $i1=strlen($ret);
+               $ret.="'".sqlite_changeslashes(substr($query,$j,$i-$j));
+               if ($i<$qlen) $ret.="'"; //else Syntax error in query.
+               $i2=strlen($ret);
+               $sarray[$i1]=$i2;
+       }//echo htmlspecialchars($query).'<br />'.htmlspecialchars($ret).'<br />';
+       $query=$ret;
+       return $sarray;
+}
+function sqlite_changeslashes(&$text){
+       // By SQLite, "''" is used in the quoted string instead of "\'".
+       // In addition, only "'" seems to be allowed for perfect quotation of string.
+       // This routine is used for the conversion from MySQL type to SQL type.
+       // Do NOT use stripslashes() but use stripcslashes().  Otherwise, "\r\n" is not converted.
+       if ($text==='') return '';
+       return (sqlite_escape_string (stripcslashes((string)$text)));
+}
+function _sqlite_divideByChar($char,$query,$limit=-1){
+       if (!is_array($char)) $char=array($char);
+       $ret=array();
+       $query=trim($query);
+       $buff='';
+       while (strlen($query)){
+               $i=strlen($query);
+               foreach($char as $value){
+                       if (($j=strpos($query,$value))!==false) {
+                               if ($j<$i) $i=$j;
+                       }
+               }
+               if (($j=strpos($query,'('))===false) $j=strlen($query);
+               if (($k=strpos($query,"'"))===false) $k=strlen($query);
+               if ($i<$j && $i<$k) {// ',' found
+                       $buff.=substr($query,0,$i);
+                       if (strlen($buff)) $ret[]=$buff;
+                       $query=trim(substr($query,$i+1));
+                       $buff='';
+                       $limit--;
+                       if ($limit==0) exit;
+               } else if ($j<$i && $j<$k) {// '(' found
+                       if (($i=strpos($query,')',$j))===false) {
+                               $buff.=$query;
+                               if (strlen($buff)) $ret[]=$buff;
+                               $query=$buff='';
+                       } else {
+                               $buff.=substr($query,0,$i+1);
+                               $query=substr($query,$i+1);
+                       }
+               } else if ($k<$i && $k<$j) {// "'" found
+                       if (($i=strpos($query,"'",$k+1))===false) {
+                               $buff.=$query;
+                               if (strlen($buff)) $ret[]=$buff;
+                               $query=$buff='';
+                       } else {
+                               $buff.=substr($query,0,$i+1);
+                               $query=substr($query,$i+1);
+                       }
+               } else {// last column
+                       $buff.=$query;
+                       if (strlen($buff)) $ret[]=$buff;
+                       $query=$buff='';
+               }
+       }
+       if (strlen($buff)) $ret[]=$buff;
+       return $ret;
+}
+function sqlite_mysql_query_debug(&$query){
+       // There is nothing to do here in this version.
+       return $query;
+}
+
+function nucleus_mysql_list_tables($p1=null,$p2=null) {
+       global $SQLITE_DBHANDLE,$MYSQL_DATABASE;
+       return sqlite_query($SQLITE_DBHANDLE,"SELECT name as Tables_in_$MYSQL_DATABASE FROM sqlite_master WHERE type='table'");
+}
+function nucleus_mysql_listtables($p1=null,$p2=null) { return nucleus_mysql_list_tables($p1,$p2);}
+
+function nucleus_mysql_affected_rows($p1=null){
+       global $SQLITE_DBHANDLE;
+       if (!($dbhandle=$p1)) $dbhandle=$SQLITE_DBHANDLE;
+       return sqlite_changes($dbhandle);
+}
+
+function nucleus_mysql_error($p1=null){
+       global $SQLITE_DBHANDLE;
+       if (!($dbhandle=$p1)) $dbhandle=$SQLITE_DBHANDLE;
+       return sqlite_error_string ( sqlite_last_error ($dbhandle) );
+}
+
+function nucleus_mysql_fetch_array($p1,$p2=SQLITE_BOTH){
+       return sqlite_fetch_array ($p1,$p2);
+}
+
+function nucleus_mysql_fetch_assoc($p1){
+       return sqlite_fetch_array($p1,SQLITE_ASSOC);
+}
+
+function nucleus_mysql_fetch_object($p1,$p2=SQLITE_BOTH){
+       if (is_array($ret=sqlite_fetch_array ($p1,$p2))) {
+               $o=new SQLITE_OBJECT;
+               foreach ($ret as $key=>$value) {
+                       if (strstr($key,'.')) {// Remove table name.
+                               $key=preg_replace('/^(.+)\."(.+)"$/','"$2"',$key);
+                               $key=preg_replace('/^(.+)\.([^.^"]+)$/','$2',$key);
+                       }
+                       $o->$key=$value;
+               }
+               return $o;
+       } else return false;
+}
+
+function nucleus_mysql_fetch_row($p1){
+       return sqlite_fetch_array($p1,SQLITE_NUM);
+}
+
+function nucleus_mysql_field_name($p1,$p2){
+       return sqlite_field_name ($p1,$p2);
+}
+
+function nucleus_mysql_free_result($p1){
+       // ???? Cannot find corresponding function of SQLite.
+       // Maybe SQLite is NOT used for the high spec server
+       // that need mysql_free_result() function because of
+       // many SQL-queries in a script.
+       return true;
+}
+
+function nucleus_mysql_insert_id($p1=null){
+       global $SQLITE_DBHANDLE;
+       if (!($dbhandle=$p1)) $dbhandle=$SQLITE_DBHANDLE;
+       return sqlite_last_insert_rowid ($dbhandle);
+}
+
+function nucleus_mysql_num_fields($p1){
+       return sqlite_num_fields ($p1);
+}
+
+function nucleus_mysql_num_rows($p1){
+       return sqlite_num_rows ($p1);
+}
+function nucleus_mysql_numrows($p1){
+       return sqlite_num_rows ($p1);
+}
+
+function nucleus_mysql_result($p1,$p2,$p3=null){
+       if ($p3) return sqlite_ReturnWithError('nucleus_mysql_result');
+       if (!$p2) return sqlite_fetch_single ($p1);
+       $a=sqlite_fetch_array ($p1);
+       return $a[$p2];
+}
+
+function nucleus_mysql_unbuffered_query($p1,$p2=null){
+       return nucleus_mysql_query($p1,$p2,true);
+}
+
+function nucleus_mysql_client_encoding($p1=null){
+       return sqlite_libencoding();
+}
+
+function nucleus_mysql_data_seek($p1,$p2) {
+       return sqlite_seek($p1,$p2);
+}
+
+function nucleus_mysql_errno ($p1=null){
+       global $SQLITE_DBHANDLE;
+       if (!($dbhandle=$p1)) $dbhandle=$SQLITE_DBHANDLE;
+       return sqlite_last_error($dbhandle);
+}
+
+function nucleus_mysql_escape_string ($p1){
+       // The "'" will be changed to "''".
+       // This way works for both MySQL and SQLite when single quotes are used for string.
+       // Note that single quote is always used in this wrapper.
+       // If a plugin is made on SQLite-Nucleus and such plugin will be used for MySQL-Nucleus,
+       // nucleus_mysql_escape_string() will be changed to mysql_escape_string() and
+       // this routine won't be used, so this way won't be problem.
+       return sqlite_escape_string($p1);
+}
+
+function nucleus_mysql_real_escape_string ($p1,$p2=null){
+       //addslashes used here.
+       return addslashes($p1);
+}
+
+function nucleus_mysql_create_db ($p1,$p2=null){
+       // All prameters are ignored.
+       // Returns always true;
+       return true;
+}
+
+function nucleus_mysql_pconnect($p1=null,$p2=null,$p3=null,$p4=null,$p5=null){
+       global $SQLITE_DBHANDLE,$SQLITECONF;
+       sqlite_close ($SQLITE_DBHANDLE);
+       $SQLITE_DBHANDLE=sqlite_popen($SQLITECONF['DBFILENAME']);
+       return ($SQLITE['DBHANDLE']=$SQLITE_DBHANDLE);
+}
+
+function nucleus_mysql_fetch_field($p1,$p2=null){
+       if ($p2) return sqlite_ReturnWithError('nucleus_mysql_fetch_field');
+       // Only 'name' is supported.
+       $o=new SQLITE_OBJECT;
+       $o->name=array();
+       if(is_array($ret=sqlite_fetch_array ($p1,SQLITE_ASSOC )))
+               foreach ($ret as $key=>$value) {
+                       if (is_string($key)) array_push($o->name,$key);
+               }
+       return $o;
+
+}
+
+// This function is called instead of _execute_queries() in backp.php
+function sqlite_restore_execute_queries(&$query){
+       global $DIR_NUCLEUS,$DIR_LIBS,$DIR_PLUGINS,$CONF;
+       
+       // Skip until the first "#" or "--"
+       if (($i=strpos($query,"\n#"))===false) $i=strlen($query);
+       if (($j=strpos($query,"\n--"))===false) $j=strlen($query);
+       if ($i<$j) $query=substr($query,$i+1);
+       else  $query=substr($query,$j+1);
+       
+       // Save the query to temporary file in sqlite directory.
+       if (function_exists('microtime')) {
+               $prefix=preg_replace('/[^0-9]/','',microtime());
+       } else {
+               srand(time());
+               $prefix=(string)rand(0,999999);
+       }
+       $tmpname=tempnam($DIR_NUCLEUS.'sqlite/',"tmp$prefix");
+       if (!($handle=@fopen($tmpname,'w'))) return 'Cannot save temporary DB file.';
+       fwrite($handle,$query);
+       fclose($handle);
+       $tmpname=preg_replace('/[\s\S]*?[\/\\\\]([^\/\\\\]+)$/','$1',$tmpname);
+       
+       // Read the option from NP_SQLite
+       if (!class_exists('NucleusPlugin')) { include($DIR_LIBS.'PLUGIN.php');}
+       if (!class_exists('NP_SQLite')) { include($DIR_PLUGINS.'NP_SQLite.php'); }
+       $p=new NP_SQLite();
+       if (!($numatonce=@$p->getOption('numatonce'))) $numatonce=20;
+       if (!($refreshwait=@$p->getOption('refreshwait'))) $refreshwait=1;
+       
+       // Start process.
+       $url="plugins/sqlite/restore.php?dbfile=$tmpname&numatonce=$numatonce&refreshwait=$refreshwait";
+       header('HTTP/1.0 301 Moved Permanently');
+       header('Location: '.$url);
+       exit('<html><body>Moved Permanently</body></html>');
+}
+
+?>
\ No newline at end of file