WordPress.org

Make WordPress Core

Ticket #2317: sqlite_wp2.patch

File sqlite_wp2.patch, 32.1 KB (added by tume, 12 years ago)

SQLite support

  • wp-includes/comment-functions.php

     
    277277function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') {
    278278        global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb;
    279279        global $comment_count_cache;
    280        
     280
    281281        if (! is_single() && ! is_page()) {
    282282        if ( !isset($comment_count_cache[$id]) )
    283                 $comment_count_cache[$id] = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved = '1';");
     283                $comment_count_cache[$id] = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = '$id' AND comment_approved = '1';");
    284284       
    285285        $number = $comment_count_cache[$id];
    286286       
  • wp-includes/wp-sqlite.php

     
     1<?php
     2
     3//  ORIGINAL CODE FROM:
     4//  Justin Vincent (justin@visunet.ie)
     5//      http://php.justinvincent.com
     6
     7
     8define("EZSQL_VERSION","1.26");
     9define("OBJECT","OBJECT",true);
     10define("ARRAY_A","ARRAY_A",true);
     11define("ARRAY_N","ARRAY_N",true);
     12
     13if (!defined('SAVEQUERIES'))
     14        define('SAVEQUERIES', false);
     15
     16        // ==================================================================
     17        //      The Main Class
     18
     19class wpdb {
     20
     21        var $show_errors = true;
     22        var $num_queries = 0;   
     23        var $last_query;
     24        var $col_info;
     25        var $queries;
     26
     27        // Our tables
     28        var $posts;
     29        var $users;
     30        var $categories;
     31        var $post2cat;
     32        var $comments;
     33        var $links;
     34        var $linkcategories;
     35        var $options;
     36        var $optiontypes;
     37        var $optionvalues;
     38        var $optiongroups;
     39        var $optiongroup_options;
     40        var $postmeta;
     41               
     42        // ==================================================================
     43        //      DB Constructor - connects to the server and selects a database
     44
     45        function wpdb($dbpath, $dbname) {
     46                $this->dbh = sqlite_open($dbpath.$dbname);
     47                if ( ! $this->dbh ) {
     48                        $this->print_error("Error","<ol><b>Error establishing a database!</b><li>Are you sure you have the correct path?<li>Are you sure that you have typed the correct database instance name?<li>Are you sure that the database is installed?</ol>");
     49                }
     50               
     51                sqlite_query($this->dbh, 'PRAGMA short_column_names = 1');
     52               
     53                // User defined functions to use in SQLite
     54                sqlite_create_function($this->dbh, 'trim', 'trim', 1);         
     55
     56        }
     57
     58        // ==================================================================
     59        //      Select a DB instance (if another one needs to be selected)
     60
     61        function select($dbpath, $dbname) {
     62                $this->wpdb($dbpath, $dbname);
     63        }
     64
     65        // ====================================================================
     66        //      Format a string correctly for safe insert under all PHP conditions
     67
     68        function escape($str) {
     69                return str_replace("'","''",str_replace("''","'",stripslashes($str)));
     70        }
     71
     72        // ==================================================================
     73        //      Print SQL/DB error.
     74
     75        function print_error($title = "SQL/DB Error", $str = "") {
     76
     77                // All erros go to the global error array $EZSQL_ERROR..
     78                global $EZSQL_ERROR;
     79
     80                // If no error string then you're SOL
     81                if ( !$str ) {
     82                        $str = "An error occured, quick go tell someone!";
     83                }
     84
     85                // Log this error to the global array..
     86                $EZSQL_ERROR[] = array
     87                                                (
     88                                                        "query" => $this->last_query,
     89                                                        "error_str"  => $str
     90                                                );
     91
     92                // Is error output turned on or not..
     93                if ( $this->show_errors ) {
     94                        // If there is an error then take note of it
     95                        print "<div id='error'>
     96                        <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br />
     97                        <code>$this->last_query</code></p>
     98                        </div>";
     99                }
     100                else {
     101                        return false;
     102                }
     103        }
     104
     105        // ==================================================================
     106        //      Turn error handling on or off..
     107
     108        function show_errors() {
     109                $this->show_errors = true;
     110        }
     111
     112        function hide_errors() {
     113                $this->show_errors = false;
     114        }
     115
     116        // ==================================================================
     117        //      Kill cached query results
     118
     119        function flush() {
     120
     121                // Get rid of these
     122                $this->last_result = null;
     123                $this->col_info = null;
     124                $this->last_query = null;
     125
     126        }
     127
     128        // ==================================================================
     129        //      Basic Query     - see docs for more detail
     130
     131        function query($query) {
     132
     133                // For reg expressions
     134                $query = trim($query);
     135
     136                // Flush cached values..
     137                $this->flush();
     138               
     139                // Parse query to be used in SQLite
     140                $query = $this->parse($query);
     141
     142                // Log how the function was called
     143                $this->func_call = "\$wpdb->query(\"$query\")";
     144               
     145                // Keep track of the last query for debug..
     146                $this->last_query = $query;
     147
     148                if (SAVEQUERIES)
     149                        $this->timer_start();
     150
     151                $handle = @sqlite_query($this->dbh,$query);
     152               
     153                       
     154                if (SAVEQUERIES)
     155                        $this->queries[] = array( $query, $this->timer_stop() );
     156                       
     157                // If there was an insert, delete or update see how many rows were affected
     158                // (Also, If there there was an insert take note of the insert_id
     159                $query_type = array("insert","delete","update","replace");
     160
     161                // loop through the above array
     162                foreach ( $query_type as $word ) {
     163                        // This is true if the query starts with insert, delete or update
     164                        if ( preg_match("/^$word\s+/i",$query) ) {
     165                                $this->rows_affected = sqlite_changes($this->dbh);
     166
     167                                // This gets the insert ID
     168                                if ( $word == "insert" || $word == "replace" ) {
     169                                        $this->insert_id = sqlite_last_insert_rowid($this->dbh);
     170                                               
     171                                        // If insert id then return it - true evaluation
     172                                        return $this->insert_id;
     173                                }
     174
     175                                // Set to false if there was no insert id
     176                                $this->result = false;
     177
     178                        }
     179
     180                }
     181
     182                if ( ! $handle ) {
     183
     184                        // If there is an error then take note of it..
     185                        if ( $php_errormsg ) {
     186                                $this->print_error($php_errormsg,$query);
     187                        } else {
     188                                $this->print_error("Invalid Query",$query);
     189                        }
     190
     191                } else {
     192
     193
     194                                $i=0;
     195                                while ( $row = sqlite_fetch_object($handle) ) {
     196                                        $this->last_result[$i++] = $row;
     197                                }
     198
     199                                // Log number of rows the query returned
     200                                $this->num_rows = $i;
     201
     202                                // If debug ALL queries
     203                                $this->debug_all ? $this->debug() : null ;
     204
     205                                // If there were results then return true for $db->query
     206                                if ( $i ) {
     207                                        return true;
     208                                } else {
     209                                        return false;
     210                                }
     211
     212                }
     213        }
     214       
     215        // ==================================================================
     216        //      Parse statement and make it SQLite friendly
     217        //      original code from tikiwiki project
     218
     219        function parse($stmt) {
     220
     221                // variable for statements that have to be appended
     222                global $poststmt;
     223                $poststmt = "\n\n";
     224               
     225                // SQLite don't support 'SHOW TABLES'
     226                $stmt = preg_replace("/SHOW TABLES/", "SELECT name FROM sqlite_master WHERE type='table'", $stmt);
     227               
     228
     229                $stmt = preg_replace("/COUNT[(]DISTINCT([^)]*)[)] FROM ([^'']*) (.*)/","COUNT(*) FROM (SELECT DISTINCT $1 FROM $2 $3)",$stmt);
     230               
     231                // Date and time functions
     232                $stmt = preg_replace("/YEAR[(]([^)]*)[)]/","strftime(\"%Y\", $1)",$stmt);
     233                $stmt = preg_replace("/MONTH[(]([^)]*)[)]/","strftime(\"%m\", $1)",$stmt);
     234                $stmt = preg_replace("/DAY[(]([^)]*)[)]/","strftime(\"%d\", $1)",$stmt);
     235                $stmt = preg_replace("/NOW[(][)]/","date('now')",$stmt);
     236                $stmt = preg_replace("/INTERVAL ([0-9]*)([^)]*)/","\"+$1 $2\"",$stmt);
     237                $stmt = preg_replace("/DATE_ADD[(]([^,]*),([^)]*)[)]/","datetime($1, $2)",$stmt);
     238                $stmt = preg_replace("/UNIX_TIMESTAMP[(]([^)]*)[)]/","strftime('%s',$1)",$stmt);
     239               
     240                $stmt = preg_replace("/[`]/","'",$stmt);
     241               
     242                // MD5
     243                $stmt = preg_replace("/MD5[(][']([^']*)['][)]/e", "'\''.md5('$1').'\''" ,$stmt);
     244               
     245                // Enum
     246                $stmt = preg_replace("/enum[(][^)]*[)]/","varchar(255)",$stmt);
     247       
     248                // Random function
     249                $stmt = preg_replace("/rand[(][)]/","random()",$stmt);
     250
     251                // IF statement ##FIXME not a good way to do this               
     252                $stmt = preg_replace("/IF [(](.*)[,] [0-1][,][0-1][)]/","$1",$stmt);
     253
     254                //replace comments
     255                $stmt = preg_replace("/#/","--",$stmt);
     256               
     257                $stmt = preg_replace("/TYPE=MyISAM/","",$stmt);
     258                //$stmt = preg_replace("/AUTO_INCREMENT=1/","",$stmt);
     259               
     260                //postgres cannot DROP TABLE IF EXISTS ( sqlite?? )
     261                $stmt = preg_replace("/DROP TABLE IF EXISTS/","DROP TABLE",$stmt);
     262               
     263                //auto_increment things
     264                $stmt = preg_replace("/(big)int\(.\) (unsigned )*NOT NULL auto_increment/","INTEGER",$stmt);
     265                $stmt = preg_replace("/(big)int\(..\) (unsigned )*NOT NULL auto_increment/","INTEGER",$stmt);
     266               
     267                // integer types
     268                $stmt = preg_replace("/tinyint\([1-4]\)/","smallint",$stmt);
     269                $stmt = preg_replace("/int\([1-4]\)/","smallint",$stmt);
     270                $stmt = preg_replace("/int\([5-9]\)/","integer",$stmt);
     271                $stmt = preg_replace("/int\(..\)/","bigint",$stmt);
     272       
     273                // timestamps
     274                $stmt = preg_replace("/timestamp\([^\)]+\)/","timestamp(3)",$stmt);
     275               
     276                // blobs
     277                $stmt = preg_replace("/longblob|tinyblob|blob/","bytea",$stmt);
     278               
     279                // ##FIXME quote column names, not sure if needed...
     280                //$stmt = preg_replace("/\n[ \t]+([a-zA-Z0-9_]+)/","\n  \"$1\"",$stmt);
     281
     282                // quote and record table names
     283                $stmt = preg_replace("/(DROP TABLE |CREATE TABLE )([a-zA-Z0-9_]+)( \()*/e","record_tablename('$1','$2','$3')",$stmt);
     284               
     285                // unquote the PRIMARY and other Keys
     286                $stmt = preg_replace("/\n[ \t]+\"(PRIMARY|KEY|FULLTEXT|UNIQUE)\"/","\n  $1",$stmt);
     287               
     288                // convert enums
     289                $stmt = preg_replace("/\n[ \t]+(\"[a-zA-Z0-9_]+\") enum\(([^\)]+)\)/e","convert_enums('$1','$2')",$stmt);
     290                // quote column names in primary keys
     291                $stmt = preg_replace("/\n[ \t]+(PRIMARY KEY)  \((.+)\),*/e","quote_prim_cols('$1','$2')",$stmt);
     292               
     293                // create indexes from KEY ...
     294                $stmt = preg_replace("/\n[ \t]+KEY ([a-zA-Z0-9_]+) \((.+)\),*/e","create_index('$1','$2')",$stmt);
     295                $stmt = preg_replace("/\n[ \t]+FULLTEXT KEY ([a-zA-Z0-9_]+) \((.+)\),*/e","create_index('$1','$2')",$stmt);
     296                $stmt = preg_replace("/\n[ \t]+(UNIQUE) KEY ([a-zA-Z0-9_]+) \((.+)\),*/e","create_index('$2','$3','$1')",$stmt);
     297               
     298                // handle inserts
     299                $stmt = preg_replace("/INSERT INTO ([a-zA-Z0-9_]*).*\(([^\)]+)\) VALUES (.*)/e","do_inserts('$1','$2','$3')",$stmt);
     300                $stmt = preg_replace("/INSERT IGNORE INTO ([a-zA-Z0-9_]*).*\(([^\)]+)\) VALUES (.*)/e","do_inserts('$1','$2','$3')",    $stmt);
     301               
     302                // why does i modifier not work???
     303                $stmt = preg_replace("/insert into ([a-zA-Z0-9_]*).*\(([^\)]+)\) values(.*)/e","do_inserts('$1','$2','$3')",$stmt);
     304               
     305                // the update
     306                $stmt = preg_replace("/update ([a-zA-Z0-9_]+) set (.*)/e","do_updates('$1','$2')",$stmt);
     307                $stmt = preg_replace("/UPDATE ([a-zA-Z0-9_]+) set (.*)/e","do_updates('$1','$2')",$stmt);
     308               
     309                // Ignore 'IGNORE'
     310                $stmt = preg_replace("/IGNORE/","",$stmt);
     311
     312                // clean cases where UNIQUE was alone at the end
     313                $stmt = preg_replace("/,(\s*)\)/","$1)",$stmt);
     314                return $stmt.";".$poststmt;
     315        }
     316
     317
     318
     319        // ==================================================================
     320        //      Get one variable from the DB - see docs for more detail
     321
     322        function get_var($query=null,$x=0,$y=0) {
     323               
     324                // Log how the function was called
     325                $this->func_call = "\$wpdb->get_var(\"$query\",$x,$y)";
     326
     327                // If there is a query then perform it if not then use cached results..
     328                if ( $query ) {
     329                        $this->query($query);
     330                }
     331
     332                // Extract var out of cached results based x,y vals
     333                if ( $this->last_result[$y] ) {
     334                        $values = array_values(get_object_vars($this->last_result[$y]));
     335                }
     336
     337                // If there is a value return it else return null
     338                return (isset($values[$x]) && $values[$x]!=='')?$values[$x]:null;
     339        }
     340
     341        // ==================================================================
     342        //      Get one row from the DB - see docs for more detail
     343
     344        function get_row($query=null,$output=OBJECT,$y=0) {
     345
     346                // Log how the function was called
     347                $this->func_call = "\$wpdb->get_row(\"$query\",$output,$y)";
     348
     349                // If there is a query then perform it if not then use cached results..
     350                if ( $query ) {
     351                        $this->query($query);
     352                }
     353
     354                // If the output is an object then return object using the row offset..
     355                if ( $output == OBJECT ) {
     356                        return $this->last_result[$y]?$this->last_result[$y]:null;
     357                }
     358                // If the output is an associative array then return row as such..
     359                elseif ( $output == ARRAY_A ) {
     360                        return $this->last_result[$y]?get_object_vars($this->last_result[$y]):null;
     361                }
     362                // If the output is an numerical array then return row as such..
     363                elseif ( $output == ARRAY_N ) {
     364                        return $this->last_result[$y]?array_values(get_object_vars($this->last_result[$y])):null;
     365                }
     366                // If invalid output type was specified..
     367                else {
     368                        $this->print_error(" \$wpdb->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
     369                }
     370
     371        }
     372
     373        // ==================================================================
     374        //      Function to get 1 column from the cached result set based in X index
     375        // se docs for usage and info
     376
     377        function get_col($query=null,$x=0) {
     378
     379                // If there is a query then perform it if not then use cached results..
     380                if ( $query ) {
     381                        $this->query($query);
     382                }
     383
     384                // Extract the column values
     385                for ( $i=0; $i < count($this->last_result); $i++ ) {
     386                        $new_array[$i] = $this->get_var(null,$x,$i);
     387                }
     388
     389                return $new_array;
     390        }
     391
     392        // ==================================================================
     393        // Return the the query as a result set - see docs for more details
     394
     395        function get_results($query=null, $output = OBJECT) {
     396
     397                // Log how the function was called
     398                $this->func_call = "\$dwpb->get_results(\"$query\", $output)";
     399
     400                // If there is a query then perform it if not then use cached results..
     401                if ( $query ) {
     402                        $this->query($query);
     403                }
     404
     405                // Send back array of objects. Each row is an object
     406                if ( $output == OBJECT ) {
     407                        return $this->last_result;
     408                }
     409                elseif ( $output == ARRAY_A || $output == ARRAY_N ) {
     410                        if ( $this->last_result ) {
     411                                $i=0;
     412                                foreach( $this->last_result as $row ) {
     413
     414                                        $new_array[$i] = get_object_vars($row);
     415
     416                                        if ( $output == ARRAY_N ) {
     417                                                $new_array[$i] = array_values($new_array[$i]);
     418                                        }
     419
     420                                        $i++;
     421                                }
     422
     423                                return $new_array;
     424                        } else {
     425                                return null;
     426                        }
     427                }
     428        }
     429
     430        // ==================================================================
     431        // Function to get column meta data info pertaining to the last query
     432        // see docs for more info and usage
     433
     434        function get_col_info($info_type="name",$col_offset=-1) {
     435
     436                if ( $this->col_info ) {
     437                        if ( $col_offset == -1 ) {
     438                                $i=0;
     439                                foreach($this->col_info as $col ) {
     440                                        $new_array[$i] = $col->{$info_type};
     441                                        $i++;
     442                                }
     443                                return $new_array;
     444                        } else {
     445                                return $this->col_info[$col_offset]->{$info_type};
     446                        }
     447
     448                }
     449
     450        }
     451
     452        function timer_start() {
     453                $mtime = microtime();
     454                $mtime = explode(' ', $mtime);
     455                $this->time_start = $mtime[1] + $mtime[0];
     456                return true;
     457        }
     458       
     459        function timer_stop($precision = 3) {
     460                $mtime = microtime();
     461                $mtime = explode(' ', $mtime);
     462                $time_end = $mtime[1] + $mtime[0];
     463                $time_total = $time_end - $this->time_start;
     464                return $time_total;
     465        }
     466
     467        // ==================================================================
     468        // Dumps the contents of any input variable to screen in a nicely
     469        // formatted and easy to understand way - any type: Object, Var or Array
     470
     471        function vardump($mixed='') {
     472
     473                echo "<p><table><tr><td bgcolor=ffffff><blockquote><font color=000090>";
     474                echo "<pre><font face=arial>";
     475
     476                if ( ! $this->vardump_called ) {
     477                        echo "<font color=800080><b>ezSQL</b> (v".EZSQL_VERSION.") <b>Variable Dump..</b></font>\n\n";
     478                }
     479
     480                $var_type = gettype ($mixed);
     481                print_r(($mixed?$mixed:"<font color=red>No Value / False</font>"));
     482                echo "\n\n<b>Type:</b> " . ucfirst($var_type) . "\n";
     483                echo "<b>Last Query</b> [$this->num_queries]<b>:</b> ".($this->last_query?$this->last_query:"NULL")."\n";
     484                echo "<b>Last Function Call:</b> " . ($this->func_call?$this->func_call:"None")."\n";
     485                echo "<b>Last Rows Returned:</b> ".count($this->last_result)."\n";
     486                echo "</font></pre></font></blockquote></td></tr></table>".$this->donation();
     487                echo "\n<hr size=1 noshade color=dddddd>";
     488
     489                $this->vardump_called = true;
     490
     491        }
     492
     493        // Alias for the above function
     494        function dumpvar($mixed) {
     495                $this->vardump($mixed);
     496        }
     497
     498        // ==================================================================
     499        // Displays the last query string that was sent to the database & a
     500        // table listing results (if there were any).
     501        // (abstracted into a seperate file to save server overhead).
     502
     503        function debug() {
     504
     505                echo "<blockquote>";
     506
     507                // Only show ezSQL credits once..
     508                if ( ! $this->debug_called ) {
     509                        echo "<font color=800080 face=arial size=2><b>ezSQL</b> (v".EZSQL_VERSION.") <b>Debug..</b></font><p>\n";
     510                }
     511                echo "<font face=arial size=2 color=000099><b>Query</b> [$this->num_queries] <b>--</b> ";
     512                echo "[<font color=000000><b>$this->last_query</b></font>]</font><p>";
     513
     514                        echo "<font face=arial size=2 color=000099><b>Query Result..</b></font>";
     515                        echo "<blockquote>";
     516
     517                if ( $this->col_info ) {
     518
     519                        // =====================================================
     520                        // Results top rows
     521
     522                        echo "<table cellpadding=5 cellspacing=1 bgcolor=555555>";
     523                        echo "<tr bgcolor=eeeeee><td nowrap valign=bottom><font color=555599 face=arial size=2><b>(row)</b></font></td>";
     524
     525
     526                        for ( $i=0; $i < count($this->col_info); $i++ ) {
     527                                echo "<td nowrap align=left valign=top><font size=1 color=555599 face=arial>{$this->col_info[$i]->type} {$this->col_info[$i]->max_length}</font><br><span style='font-family: arial; font-size: 10pt; font-weight: bold;'>{$this->col_info[$i]->name}</span></td>";
     528                        }
     529
     530                        echo "</tr>";
     531
     532                        // ======================================================
     533                        // print main results
     534
     535                if ( $this->last_result ) {
     536
     537                        $i=0;
     538                        foreach ( $this->get_results(null,ARRAY_N) as $one_row ) {
     539                                $i++;
     540                                echo "<tr bgcolor=ffffff><td bgcolor=eeeeee nowrap align=middle><font size=2 color=555599 face=arial>$i</font></td>";
     541
     542                                foreach ( $one_row as $item ) {
     543                                        echo "<td nowrap><font face=arial size=2>$item</font></td>";
     544                                }
     545
     546                                echo "</tr>";
     547                        }
     548
     549                } // if last result
     550                else {
     551                        echo "<tr bgcolor=ffffff><td colspan=".(count($this->col_info)+1)."><font face=arial size=2>No Results</font></td></tr>";
     552                }
     553
     554                echo "</table>";
     555
     556                } // if col_info
     557                else {
     558                        echo "<font face=arial size=2>No Results</font>";
     559                }
     560
     561                echo "</blockquote></blockquote>".$this->donation()."<hr noshade color=dddddd size=1>";
     562
     563
     564                $this->debug_called = true;
     565        }
     566
     567
     568}
     569
     570        function record_tablename($stmt,$tabnam,$tail) {
     571       
     572                global $table_name;
     573                $table_name = $tabnam;
     574                return ($stmt."\"".$tabnam."\"".$tail);
     575        }
     576
     577        function create_index($name,$content,$type=""){
     578       
     579                global $table_name;
     580                global $poststmt;
     581                $poststmt.="CREATE $type INDEX \"".$table_name."_".$name."\" ON \"".$table_name."\"(";
     582                $cols=split(",",$content);
     583                $allvals="";
     584
     585                foreach ($cols as $vals) {
     586                        $vals=preg_replace("/\(.*\)/","",$vals);
     587                        $vals=preg_replace("/([a-zA-Z0-9_]+)/","\"$1\"",$vals);
     588                        $allvals.=$vals;
     589                }
     590
     591                $allvals=preg_replace("/\"\"/","\",\"",$allvals);
     592                $poststmt.=$allvals.");\n";
     593        }
     594
     595        function do_updates($tab,$content) {
     596       
     597                $ret="UPDATE \"".$tab."\" SET ";
     598                $cols=split(",",$content);
     599
     600                foreach ($cols as $vals) {
     601                        $vals=preg_replace("/([a-zA-Z0-9_]+)=([a-zA-Z0-9_]+)/","\"$1\"=\"$2\"",$vals);
     602                        $ret.=$vals;
     603                }
     604               
     605                $ret=preg_replace("/\"\"/","\",\"",$ret);
     606                $ret=preg_replace("/`/","",$ret);
     607               
     608                return($ret);
     609        }
     610
     611        function do_inserts($tab,$content,$tail) {
     612       
     613                // for some reason are the quotes in $tail addslashed. i dont know why
     614                $tail=preg_replace('/\\\"/','"',$tail);
     615                $ret="INSERT INTO \"".$tab."\" (";
     616                $cols=split(",",$content);
     617
     618                foreach ($cols as $vals) {
     619                        $vals=preg_replace("/ /","",$vals);
     620                        $ret.="\"$vals\"";
     621                }
     622       
     623                $ret=preg_replace("/\"\"/","\",\"",$ret);
     624                $ret.=")";
     625 
     626                $tail=preg_replace("/md5\(\'(.+)\'\)/e","quotemd5('$1')",$tail);
     627                return $ret." VALUES ".$tail;
     628        }
     629
     630        function quotemd5($a) {
     631                return ("'".md5($a)."'");
     632        }
     633
     634        function quote_prim_cols($key,$content) {
     635       
     636                $ret="\n  $key (";
     637                $cols=split(",",$content);
     638
     639                foreach ($cols as $vals) {
     640                        $vals=preg_replace("/\(.*\)/","",$vals);
     641                        $ret.="\"".trim($vals)."\"";
     642                }
     643               
     644                $ret=preg_replace("/\"\"/","\",\"",$ret);
     645                $ret.=")";
     646
     647                return $ret;
     648        }
     649
     650        function convert_enums($colname,$content) {
     651       
     652                $enumvals=split(",",$content);
     653                $isnum=true;
     654                $length=0;
     655                $colname=stripslashes($colname);
     656                $ret="\n  $colname ";
     657                foreach ($enumvals as $vals) {
     658                        if (!is_int($vals)) $isnum=false;
     659                        if (strlen($vals)>$length) $length=strlen($vals);
     660                }
     661                if ($isnum) {
     662                        if ($length < 4) $ret.="smallint ";
     663                        elseif ($length < 9) $ret.="integer ";
     664                                else $ret.="bigint ";
     665                } else {
     666                        $ret.="varchar($length) ";
     667                }
     668                $ret.="CHECK ($colname IN ($content))";
     669               
     670                return $ret;
     671        }
     672
     673$wpdb = new wpdb( DB_PATH, DB_NAME );
     674
     675?>
  • wp-config.php.sample

    Property changes on: wp-includes/wp-sqlite.php
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1<?php
     2// ** MySQL settings ** //
     3define('DB_NAME', 'moro');    // The name of the database
     4define('DB_USER', 'username');     // Your MySQL username
     5define('DB_PASSWORD', 'password'); // ...and password
     6define('DB_HOST', 'localhost');    // 99% chance you won't need to change this value
     7
     8// ** SQLite settings ** //
     9define('USE_SQLITE', 1);
     10define('DB_PATH', '/home/tume/public_html/wordpress/trunk/');
     11// DB_NAME same as above
     12
     13// You can have multiple installations in one database if you give each a unique prefix
     14$table_prefix  = 'wp_';   // Only numbers, letters, and underscores please!
     15
     16// Change this to localize WordPress.  A corresponding MO file for the
     17// chosen language must be installed to wp-includes/languages.
     18// For example, install de.mo to wp-includes/languages and set WPLANG to 'de'
     19// to enable German language support.
     20define ('WPLANG', '');
     21
     22/* That's all, stop editing! Happy blogging. */
     23
     24define('ABSPATH', dirname(__FILE__).'/');
     25require_once(ABSPATH.'wp-settings.php');
     26?>
  • wp-settings.php

    Property changes on: wp-config.php.sample
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
    5050if ( !(phpversion() >= '4.1') )
    5151        die( 'Your server is running PHP version ' . phpversion() . ' but WordPress requires at least 4.1' );
    5252
    53 if ( !extension_loaded('mysql') )
     53if ( !extension_loaded('mysql') && !USE_SQLITE )
    5454        die( 'Your PHP installation appears to be missing the MySQL which is required for WordPress.' );
    5555
    5656function timer_start() {
     
    6868// For an advanced caching plugin to use, static because you would only want one
    6969if ( defined('WP_CACHE') )
    7070        require (ABSPATH . 'wp-content/advanced-cache.php');
    71 
     71;
    7272define('WPINC', 'wp-includes');
    73 require_once (ABSPATH . WPINC . '/wp-db.php');
     73if ( extension_loaded('mysql') && !USE_SQLITE )
     74        require_once (ABSPATH . WPINC . '/wp-db.php');
    7475
     76if ( USE_SQLITE )
     77        require_once (ABSPATH . WPINC . '/wp-sqlite.php');
     78
    7579// Table names
    7680$wpdb->posts            = $table_prefix . 'posts';
    7781$wpdb->users            = $table_prefix . 'users';
     
    120124require_once (ABSPATH . WPINC . '/wp-l10n.php');
    121125
    122126$wpdb->hide_errors();
     127
    123128$db_check = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'");
     129
    124130if ( !$db_check && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !defined('WP_INSTALLING')) ) {
    125131        if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') )
    126132                $link = 'install.php';
     
    228234// Everything is loaded and initialized.
    229235do_action('init');
    230236
    231 ?>
    232  No newline at end of file
     237?>
  • wp-admin/upgrade-functions.php

     
    336336            return true;
    337337        }
    338338    }
     339
    339340    //didn't find it try to create it.
    340341    $q = $wpdb->query($create_ddl);
    341342    // we cannot directly tell that whether this succeeded!
  • wp-admin/admin-functions.php

     
    575575        if (!$categories)
    576576                $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_name");
    577577
     578
    578579        if ($categories) {
     580               
    579581                foreach ($categories as $category) {
     582                       
    580583                        if ($category->category_parent == $parent) {
    581584                                $category->cat_name = wp_specialchars($category->cat_name);
    582585                                $count = $wpdb->get_var("SELECT COUNT(post_id) FROM $wpdb->post2cat WHERE category_id = $category->cat_ID");
     586                               
    583587                                $pad = str_repeat('&#8212; ', $level);
    584588                                if ( current_user_can('manage_categories') ) {
    585589                                        $edit = "<a href='categories.php?action=edit&amp;cat_ID=$category->cat_ID' class='edit'>".__('Edit')."</a></td>";
     
    12491253                return $title;
    12501254        }
    12511255
    1252         $hook = get_plugin_page_hook($plugin_page, $pagenow);
    1253 
    1254         $parent = $parent1 = get_admin_page_parent();
     1256        $parent = get_admin_page_parent();
    12551257        if (empty ($parent)) {
    12561258                foreach ($menu as $menu_array) {
    12571259                        if (isset ($menu_array[3])) {
     
    12591261                                        $title = $menu_array[3];
    12601262                                        return $menu_array[3];
    12611263                                } else
    1262                                         if (isset ($plugin_page) && ($plugin_page == $menu_array[2]) && ($hook == $menu_array[3])) {
     1264                                        if (isset ($plugin_page) && ($plugin_page == $menu_array[2])) {
    12631265                                                $title = $menu_array[3];
    12641266                                                return $menu_array[3];
    12651267                                        }
     
    12731275                                                $title = $submenu_array[3];
    12741276                                                return $submenu_array[3];
    12751277                                        } else
    1276                                                 if (isset ($plugin_page) && ($plugin_page == $submenu_array[2]) && (($parent == $pagenow) || ($parent == $plugin_page) || ($plugin_page == $hook) || (($pagenow == 'admin.php') && ($parent1 != $submenu_array[2])))) {
     1278                                                if (isset ($plugin_page) && ($plugin_page == $submenu_array[2])) {
    12771279                                                        $title = $submenu_array[3];
    12781280                                                        return $submenu_array[3];
    12791281                                                }
     
    17211723                return $upload_error_handler($file, __('File is empty. Please upload something more substantial.'));
    17221724
    17231725        // A properly uploaded file will pass this test. There should be no reason to override this one.
    1724         if (! @ is_uploaded_file($file['tmp_name']) )
     1726        if (! is_uploaded_file($file['tmp_name']) )
    17251727                return $upload_error_handler($file, __('Specified file failed upload test.'));
    17261728
    17271729        // A correct MIME type will pass this test.
     
    17501752        } else {
    17511753                $number = '';
    17521754                $filename = str_replace('#', '_', $file['name']);
     1755<<<<<<< .mine
     1756                while ( file_exists($uploads['path'] . "/$filename") )
     1757                        $filename = str_replace("$number.$ext", ++$number . ".$ext", $filename);
     1758=======
    17531759                $filename = str_replace(array('\\', "'"), '', $filename);
    17541760                if ( empty($ext) )
    17551761                        $ext = '';
     
    17611767                        else
    17621768                                $filename = str_replace("$number$ext", ++$number . $ext, $filename);
    17631769                }
     1770>>>>>>> .r3465
    17641771        }
    17651772
    17661773        // Move the file to the uploads dir
    17671774        $new_file = $uploads['path'] . "/$filename";
    1768         if ( false === @ move_uploaded_file($file['tmp_name'], $new_file) )
     1775        if ( false === move_uploaded_file($file['tmp_name'], $new_file) )
    17691776                die(printf(__('The uploaded file could not be moved to %s.'), $file['path']));
    17701777
    17711778        // Set correct file permissions
  • wp-admin/install.php

     
    11<?php
    22define('WP_INSTALLING', true);
     3
    34if (!file_exists('../wp-config.php'))
    45    die("There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started. Need more help? <a href='http://wordpress.org/docs/faq/#wp-config'>We got it</a>. You can <a href='setup-config.php'>create a <code>wp-config.php</code> file through a web interface</a>, but this doesn't work for all server setups. The safest way is to manually create the file.");
    56
     
    1415else
    1516        $step = 0;
    1617header( 'Content-Type: text/html; charset=utf-8' );
     18
    1719?>
    1820<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    1921<html xmlns="http://www.w3.org/1999/xhtml">
     
    7678<body>
    7779<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png" /></h1>
    7880<?php
     81
     82
    7983// Let's check to make sure WP isn't already installed.
    8084$wpdb->hide_errors();
    8185$installed = $wpdb->get_results("SELECT * FROM $wpdb->users");
     
    156160$wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://dougal.gunters.org/', 'Dougal', 1, 'http://dougal.gunters.org/feed/', '');");
    157161
    158162// Default category
    159 $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_count, category_description) VALUES ('0', '".$wpdb->escape(__('Uncategorized'))."', '".sanitize_title(__('Uncategorized'))."', '1', '')");
     163$wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_count, category_description) VALUES ('1', '".$wpdb->escape(__('Uncategorized'))."', '".sanitize_title(__('Uncategorized'))."', '1', '')");
    160164
    161165// First post
    162166$now = date('Y-m-d H:i:s');
    163167$now_gmt = gmdate('Y-m-d H:i:s');
    164168$wpdb->query("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, comment_count, to_ping, pinged, post_content_filtered) VALUES ('1', '$now', '$now_gmt', '".$wpdb->escape(__('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'))."', '', '".$wpdb->escape(__('Hello world!'))."', '0', '".$wpdb->escape(__('hello-world'))."', '$now', '$now_gmt', '1', '', '', '')");
    165169
    166 $wpdb->query( "INSERT INTO $wpdb->post2cat (`rel_id`, `post_id`, `category_id`) VALUES (1, 1, 1)" );
    167 
    168170// Default comment
    169171$wpdb->query("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content) VALUES ('1', '".$wpdb->escape(__('Mr WordPress'))."', '', 'http://wordpress.org/', '$now', '$now_gmt', '".$wpdb->escape(__('Hi, this is a comment.<br />To delete a comment, just log in, and view the posts\' comments, there you will have the option to edit or delete them.'))."')");
    170172
     
    182184$admin_caps = serialize(array('administrator' => true));
    183185$wpdb->query("INSERT INTO $wpdb->usermeta (user_id, meta_key, meta_value) VALUES ({$wpdb->insert_id}, '{$table_prefix}capabilities', '{$admin_caps}');");
    184186
     187
     188$wpdb->query( "INSERT INTO $wpdb->post2cat (rel_id, post_id, category_id) VALUES (1, 1, 1)" );
     189
    185190$message_headers = 'From: ' . $weblog_title . ' <wordpress@' . $_SERVER['SERVER_NAME'] . '>';
    186191$message = sprintf(__("Your new WordPress blog has been successfully set up at:
    187192
  • wp-admin/admin-db.php

     
    106106                $category_parent = 0;
    107107
    108108        if (!$update) {
    109                 $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_description, category_parent) VALUES ('0', '$cat_name', '$category_nicename', '$category_description', '$category_parent')");
     109                $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, category_nicename, category_description, category_parent) VALUES ('1', '$cat_name', '$category_nicename', '$category_description', '$category_parent')");
    110110                $cat_ID = $wpdb->insert_id;
    111111        } else {
    112112                $wpdb->query ("UPDATE $wpdb->categories SET cat_name = '$cat_name', category_nicename = '$category_nicename', category_description = '$category_description', category_parent = '$category_parent' WHERE cat_ID = '$cat_ID'");