Remove the database abstraction layer and write a new PDO backend.
authorRobert Sesek <rsesek@bluestatic.org>
Sun, 19 May 2013 18:41:02 +0000 (14:41 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Sat, 11 Apr 2020 04:44:15 +0000 (00:44 -0400)
PDO is the future and what Hoplite requires. This hacks in a new
DB_Abstract-like backend that uses PDO instead of the mysql_* family of
functions.

(cherry picked from commit 101c9dc4f6c1189fdb38c464d50773f56b5e7bb9)

framework/db_mysql.php [deleted file]
framework/db_mysql_pdo.php [moved from framework/db.php with 64% similarity]
framework/db_mysqli.php [deleted file]
framework/db_postgresql.php [deleted file]
includes/init.php

diff --git a/framework/db_mysql.php b/framework/db_mysql.php
deleted file mode 100755 (executable)
index 04a96d7..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-<?php
-/*=====================================================================*\
-|| ###################################################################
-|| # Blue Static ISSO Framework
-|| # Copyright (c)2002-[#]year[#] Blue Static
-|| #
-|| # This program is free software; you can redistribute it and/or modify
-|| # it under the terms of the GNU General Public License as published by
-|| # the Free Software Foundation; version [#]gpl[#] of the License.
-|| #
-|| # This program is distributed in the hope that it will be useful, but
-|| # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-|| # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-|| # more details.
-|| #
-|| # You should have received a copy of the GNU General Public License along
-|| # with this program; if not, write to the Free Software Foundation, Inc.,
-|| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-|| ###################################################################
-\*=====================================================================*/
-
-/**
-* MySQL Database Abstraction Layer
-* db_mysql.php
-*
-* @package     ISSO
-*/
-
-$this->load('db', null);
-
-/**
-* MySQL Database Abstraction Layer
-*
-* This framework is a function wrapper for MySQL functions so we can have
-* better error reporting and query reporting.
-*
-* @author              Blue Static
-* @copyright   Copyright (c)2002 - [#]year[#], Blue Static
-* @version             $Revision$
-* @package             ISSO
-* 
-*/
-class DB_MySQL extends DB_Abstract
-{
-       /**
-       * Command mapping list
-       * @var  array
-       * @access       private
-       */
-       var $commands = array(
-               'pconnect'                      => '$this->command_mysql_pconnect',
-               'connect'                       => '$this->command_mysql_connect',
-               'query'                         => '$this->command_mysql_query',
-               'error_num'                     => 'mysql_errno',
-               'error_str'                     => 'mysql_error',
-               'escape_string'         => '$this->command_mysql_escape_string',
-               'escape_binary'         => '$this->escape_binary',
-               'fetch_assoc'           => 'mysql_fetch_assoc',
-               'fetch_row'                     => 'mysql_fetch_row',
-               'fetch_object'          => 'mysql_fetch_object',
-               'free_result'           => 'mysql_free_result',
-               'insert_id'                     => 'mysql_insert_id',
-               'num_rows'                      => 'mysql_num_rows',
-               'affected_rows'         => 'mysql_affected_rows'
-       );
-       
-       // ###################################################################
-       /**
-       * Constructor
-       */
-       function __construct(&$registry)
-       {
-               parent::__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * (PHP 4) Constructor
-       */
-       function DB_MySQL(&$registry)
-       {
-               $this->__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysql_pconnect
-       *
-       * @access       protected
-       *
-       * @param        string  Server name
-       * @param        string  User name
-       * @param        string  Password
-       * @param        string  Database
-       *
-       * @return       integer DB-Link
-       */
-       function command_mysql_pconnect($server, $user, $password, $database)
-       {
-               $link = mysql_pconnect($server, $user, $password);
-               $this->select_db($database, $link);
-               
-               return $link;
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysql_connect
-       *
-       * @access       protected
-       *
-       * @param        string  Server name
-       * @param        string  User name
-       * @param        string  Password
-       * @param        string  Database
-       *
-       * @return       integer DB-Link
-       */
-       function command_mysql_connect($server, $user, $password, $database)
-       {
-               $link = mysql_connect($server, $user, $password, true);
-               $this->select_db($database, $link);
-               
-               return $link;
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysql_select_db
-       *
-       * @access       protected
-       *
-       * @param        string  Database name
-       * @param        integer DB-Link
-       */
-       function select_db($database, $link)
-       {
-               if (!mysql_select_db($database, $link))
-               {
-                       $this->error('Cannot use the database \'' . $database . '\'');
-               }
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysql_query
-       *
-       * @access       protected
-       *
-       * @param        integer DB-Link
-       * @param        string  Query string
-       *
-       * @return       integer Result
-       */
-       function command_mysql_query($link, $string)
-       {
-               return mysql_query($string, $link);
-       }
-       
-       // ###################################################################
-       /**
-       * Escapes a binary string for insertion into the database
-       *
-       * @access       public
-       *
-       * @param        string  Unescaped data
-       *
-       * @return       string  Escaped binary data
-       */
-       function escape_binary($binary)
-       {
-               return mysql_escape_string($binary);
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysql(_real)_escape_string
-       *
-       * @access       protected
-       *
-       * @param        integer DB-Link
-       * @param        string  Unescaped text
-       *
-       * @return       string  Escaped text
-       */
-       function command_mysql_escape_string($link, $string)
-       {
-               if (function_exists('mysql_real_escape_string'))
-               {
-                       return @mysql_real_escape_string($string, $link);
-               }
-               else
-               {
-                       return @mysql_escape_string($string);
-               }
-       }
-       
-       // ###################################################################
-       /**
-       * Not supported: unescape binary string
-       *
-       * @access       protected
-       *
-       * @param        string  Escaped data
-       *
-       * @return       string  Same data
-       */
-       function command_unescape_binary($string)
-       {
-               return $string;
-       }
-       
-       // ###################################################################
-       /**
-       * Starts a database transaction
-       *
-       * @access       public
-       */
-       function transaction_start()
-       {
-               $this->query("BEGIN WORK");
-       }
-       
-       // ###################################################################
-       /**
-       * Saves current transaction steps as a savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_savepoint($name)
-       {
-               $this->query("SAVEPOINT $name");
-       }
-       
-       // ###################################################################
-       /**
-       * Reverts a transaction back to a given savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_rollback($name = null)
-       {
-               $this->query("ROLLBACK" . ($name != null ? " TO SAVEPOINT $name" : ""));
-       }
-       
-       // ###################################################################
-       /**
-       * Commits a database transaction
-       *
-       * @access       public
-       */
-       function transaction_commit()
-       {
-               $this->query("COMMIT");
-       }
-}
-
similarity index 64%
rename from framework/db.php
rename to framework/db_mysql_pdo.php
index e79d8df00be52971933469188af0500fd3f83dde..dbbba6d29d8566eac3cbd588827a514b54c95068 100755 (executable)
 */
 
 /**
-* Abstract Database Layer
+* PDO MySQL Driver
 *
-* This class provides an abstract template for all RDBMS layers. All
-* ISSO abstraction layers should inherit this class. It provides error
-* reporting, SQL analysis, and general connection functionality.
+* This class wraps PDO-MySQL in the old DB_Abstract ISSO API.
 *
 * Constants:
-*              [required] ISSO_DB_LAYER - The name of the DB layer module used in the application
 *              ISSO_SHOW_QUERIES_LIVE - Show queries in page output as they are sent
 *
 * @author              Blue Static
 * @copyright   Copyright (c)2002 - [#]year[#], Blue Static
 * @version             $Revision$
 * @package             ISSO
-* 
+*
 */
-class DB_Abstract
+class DB_MySQL_PDO
 {
        /**
        * Framework registry object
@@ -51,79 +48,56 @@ class DB_Abstract
        * @access       protected
        */
        var $registry = null;
-       
+
        /**
        * Determines whether or not errors should be shown
        * @var  bool
        * @access       public
        */
        var $showerrors = true;
-       
+
        /**
        * Current error number
        * @var  integer
        * @access       protected
        */
        var $errnum = 0;
-       
+
        /**
        * Description of current error
        * @var  string
        * @access       protected
        */
        var $errstr = '';
-       
+
        /**
        * Currend open MySQL connexion
        * @var  resource
        * @access       protected
        */
        var $dblink = null;
-       
+
        /**
        * Current query ID
        * @var  integer
        * @access       protected
        */
        var $result = null;
-       
+
        /**
        * Current query string
        * @var  string
        * @access       protected
        */
        var $querystr = '';
-       
+
        /**
        * History of all executed queryies
        * @var  array
        * @access       protected
        */
        var $history = array();
-       
-       /**
-       * Command mapping list
-       * @var  array
-       * @access       protected
-       */
-       var $commands = array(
-               'pconnect'                      => '%server %user %password %database',
-               'connect'                       => '%server %user %password %database',
-               'query'                         => '%link %query',
-               'error_num'                     => '%link',
-               'error_str'                     => '%link',
-               'escape_string'         => '%link %string',
-               'escape_binary'         => '%string',
-               'unescape_binary'       => '%string',
-               'fetch_assoc'           => '%result',
-               'fetch_row'                     => '%result',
-               'fetch_object'          => '%result',
-               'free_result'           => '%result',
-               'insert_id'                     => '%link',
-               'num_rows'                      => '%result',
-               'affected_rows'         => '%result'
-       );
-       
+
        // ###################################################################
        /**
        * Constructor
@@ -131,45 +105,8 @@ class DB_Abstract
        function __construct(&$registry)
        {
                $this->registry =& $registry;
-               
-               // because ivars and call_user_func() are conspiring against us...
-               foreach ($this->commands AS $key => $string)
-               {
-                       if (strpos($string, '$this->') !== false)
-                       {
-                               $this->commands["$key"] = array($this, str_replace('$this->', '', $string));
-                       }
-               }
        }
-       
-       // ###################################################################
-       /**
-       * (PHP 4) Constructor
-       */
-       function DB_Abstract(&$registry)
-       {
-               $this->__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * Initializes the class and all subclasses under a common package name
-       *
-       * @access       protected
-       *
-       * @return       string  The package name
-       */
-       function init_as_package()
-       {
-               if (!defined('ISSO_DB_LAYER'))
-               {
-                       define('ISSO_DB_LAYER', get_class($this));
-                       trigger_error('ISSO_DB_LAYER was defined automatically by DB::init_as_package(). Define the constant yourself to remove this warning', E_USER_WARNING);
-               }
-               
-               return 'db';
-       }
-       
+
        // ###################################################################
        /**
        * Connect to a the specified database
@@ -186,20 +123,19 @@ class DB_Abstract
        */
        function connect($server, $user, $password, $database, $pconnect)
        {
+               define('ISSO_DB_LAYER', 'db_mysql_pdo');
                if ($this->dblink == false)
                {
-                       $this->dblink = call_user_func(($pconnect ? $this->commands['pconnect'] : $this->commands['connect']), $server, $user, $password, $database);
-                       
+                       $this->dblink = new PDO("mysql:dbname=$database;host=$server", $user, $password);
                        if ($this->dblink == false)
                        {
                                $this->error('DB-Link == false, cannot connect');
                                return false;
                        }
-                       
                        return true;
                }
        }
-       
+
        // ###################################################################
        /**
        * Send a query to the open database link
@@ -213,17 +149,17 @@ class DB_Abstract
        function query($string)
        {
                $time = microtime();
-               
+
                $this->querystr = $string;
-               $this->result = @call_user_func($this->commands['query'], $this->dblink, $string);
-                               
+               $this->result = $this->dblink->query($string);
+
                if (!$this->result)
                {
                        $this->error('Invalid SQL query');
                }
-               
+
                $this->history[] = $history = array('query' => $string, 'time' => ($this->registry->is_loaded('functions') ? $this->registry->modules['functions']->fetch_microtime_diff($time) : 0), 'trace' => $this->registry->format_debug_trace(debug_backtrace()));
-               
+
                if (defined('ISSO_SHOW_QUERIES_LIVE'))
                {
                        if (constant('ISSO_SHOW_QUERIES_LIVE'))
@@ -231,10 +167,10 @@ class DB_Abstract
                                print($this->construct_query_debug($history));
                        }
                }
-               
+
                return $this->result;
        }
-       
+
        // ###################################################################
        /**
        * Escape a string (depending on character set, if supported)
@@ -247,9 +183,9 @@ class DB_Abstract
        */
        function escape_string($string)
        {
-               return call_user_func($this->commands['escape_string'], $this->dblink, $string);
+               return $this->dblink->quote($string);
        }
-       
+
        // ###################################################################
        /**
        * Escapes a binary string for insertion into the database
@@ -264,22 +200,7 @@ class DB_Abstract
        {
                return call_user_func($this->commands['escape_binary'], $binary);
        }
-       
-       // ###################################################################
-       /**
-       * Unescapes a binary string that was fetched from the database
-       *
-       * @access       public
-       *
-       * @param        string  Escaped data
-       *
-       * @return       string  Unescaped binary data
-       */
-       function unescape_binary($binary)
-       {
-               return call_user_func($this->commands['unescape_binary'], $binary);
-       }
-       
+
        // ###################################################################
        /**
        * Fetch the query result as an array
@@ -293,9 +214,10 @@ class DB_Abstract
        */
        function fetch_array($result, $assoc = true)
        {
-               return call_user_func($this->commands[ ($assoc ? 'fetch_assoc' : 'fetch_row') ], $result);
+               $style = $assoc ? PDO::FETCH_ASSOC : PDO::FETCH_NUM;
+               return $result->fetch($style);
        }
-       
+
        // ###################################################################
        /**
        * Fetch the query result as an object
@@ -308,9 +230,9 @@ class DB_Abstract
        */
        function fetch_object($result)
        {
-               return call_user_func($this->commands['fetch_object'], $result);
+               return $result->fetch(PDO::FETCH_OBJ);
        }
-       
+
        // ###################################################################
        /**
        * Send a query and return the first row of the results
@@ -336,7 +258,7 @@ class DB_Abstract
                        return false;
                }
        }
-       
+
        // ###################################################################
        /**
        * Free the current query result
@@ -347,11 +269,11 @@ class DB_Abstract
        */
        function free_result($result)
        {
-               call_user_func($this->commands['free_result'], $result);
+               $result->closeCursor();
                $this->result = null;
                $this->querystr = '';
        }
-       
+
        // ###################################################################
        /**
        * Fetch the unique ID of the record just inserted
@@ -362,9 +284,9 @@ class DB_Abstract
        */
        function insert_id()
        {
-               return call_user_func($this->commands['insert_id'], $this->dblink);
+               return $this->dblink->lastInsertId();
        }
-       
+
        // ###################################################################
        /**
        * Fetch the number of rows in the result
@@ -377,9 +299,9 @@ class DB_Abstract
        */
        function num_rows($result)
        {
-               return call_user_func($this->commands['num_rows'], $result);
+               return $result->rowCount();
        }
-       
+
        // ###################################################################
        /**
        * Fetch the number of rows affected by the query
@@ -392,61 +314,9 @@ class DB_Abstract
        */
        function affected_rows($result)
        {
-               return call_user_func($this->commands['affected_rows'], $result);
-       }
-       
-       // ###################################################################
-       /**
-       * Sends the command to start a transaction. This command should never
-       * be reached as it's always overridden
-       *
-       * @access       public
-       */
-       function transaction_start()
-       {
-               trigger_error('DB_Abstract::transaction_start() needs to be overridden when subclassed', E_USER_ERROR);
+               return $result->rowCount();
        }
-       
-       // ###################################################################
-       /**
-       * Sends the command to set this as a savepoint. This command should never
-       * be reached as it's always overridden
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_savepoint($name)
-       {
-               trigger_error('DB_Abstract::transaction_savepoint() needs to be overridden when subclassed', E_USER_ERROR);
-       }
-       
-       // ###################################################################
-       /**
-       * Sends the command to rollback to a given savepoint. This command
-       * should never be reached as it's always overridden
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_rollback($name)
-       {
-               trigger_error('DB_Abstract::transaction_rollback() needs to be overridden when subclassed', E_USER_ERROR);
-       }
-       
-       // ###################################################################
-       /**
-       * Sends the command to commit the entire transaction. This command
-       * should never be reached as it's always overridden
-       *
-       * @access       public
-       */
-       function transaction_commit($name)
-       {
-               trigger_error('DB_Abstract::transaction_commit() needs to be overridden when subclassed', E_USER_ERROR);
-       }
-       
+
        // ###################################################################
        /**
        * Constructs a table of query information output that is used in some
@@ -465,10 +335,10 @@ class DB_Abstract
                $block .= "<tr style=\"background-color: #FFFFFF; text-align: left\">\n\t<td>\n\t\t";
                $block .= "<strong>Time:</strong> $query[time]<br />\n\t\t<br />\n\t\t";
                $block .= "<strong>Backtrace:</strong>\n\t\t<div>" . implode("<br />\n", $query['trace']) . "</div>\n\t</td>\n</tr>";
-               
+
                return $this->registry->message('Query Debug', $block, 1, true, false, 0);
        }
-       
+
        // ###################################################################
        /**
        * Error wrapper for ISSO->message()
@@ -483,12 +353,13 @@ class DB_Abstract
                {
                        if ($this->dblink)
                        {
-                               $this->errnum = call_user_func($this->commands['error_num'], $this->dblink);
-                               $this->errstr = call_user_func($this->commands['error_str'], $this->dblink);
+                               $err = $this->dblink->errorInfo();
+                               $this->errnum = $err[0];
+                               $this->errstr = $err[1] . ': ' . $err[2];
                        }
-                       
+
                        $style['code'] = 'font-family: \'Courier New\', Courier, mono; font-size: 11px;';
-                       
+
                        $message_prepped = "<blockquote>\n<p>";
                        $message_prepped .= "\n\t&raquo; <strong>Query:</strong>\n<br /> <pre style=\"$style[code]\">" . htmlspecialchars($this->querystr) ."</pre>\n<br />";
                        $message_prepped .= "\n\t&raquo; <strong>Error Number:</strong> <span style=\"$style[code]\">" . $this->errnum . "</span>\n<br />";
@@ -496,7 +367,7 @@ class DB_Abstract
                        $message_prepped .= "\n\t&raquo; <strong>Additional Notes:</strong> <span style=\"$style[code]\">" . $message . "</span>\n<br />";
                        $message_prepped .= "\n\t&raquo; <strong>File:</strong> <span style=\"$style[code]\">" . $_SERVER['PHP_SELF'] . "</span>\n";
                        $message_prepped .= "\n</p>\n</blockquote>";
-                       
+
                        $this->registry->message('Database Error in `<em>' . $this->registry->application . '</em>`', $message_prepped, 3);
                        exit;
                }
diff --git a/framework/db_mysqli.php b/framework/db_mysqli.php
deleted file mode 100755 (executable)
index 5527c08..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-/*=====================================================================*\
-|| ###################################################################
-|| # Blue Static ISSO Framework
-|| # Copyright (c)2002-[#]year[#] Blue Static
-|| #
-|| # This program is free software; you can redistribute it and/or modify
-|| # it under the terms of the GNU General Public License as published by
-|| # the Free Software Foundation; version [#]gpl[#] of the License.
-|| #
-|| # This program is distributed in the hope that it will be useful, but
-|| # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-|| # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-|| # more details.
-|| #
-|| # You should have received a copy of the GNU General Public License along
-|| # with this program; if not, write to the Free Software Foundation, Inc.,
-|| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-|| ###################################################################
-\*=====================================================================*/
-
-/**
-* MySQLi Database Abstraction Layer
-* db_mysqli.php
-*
-* @package     ISSO
-*/
-
-$this->load('db', null);
-
-/**
-* MySQLi Database Abstraction Layer
-*
-* This framework is a function wrapper for MySQLi functions so we can have
-* better error reporting and query reporting.
-*
-* @author              Blue Static
-* @copyright   Copyright (c)2002 - [#]year[#], Blue Static
-* @version             $Revision$
-* @package             ISSO
-* 
-*/
-class DB_MySQLi extends DB_Abstract
-{
-       /**
-       * Command mapping list
-       * @var  array
-       * @access       private
-       */
-       var $commands = array(
-               'pconnect'                      => '$this->command_mysqli_connect',
-               'connect'                       => '$this->command_mysqli_connect',
-               'query'                         => 'mysqli_query',
-               'error_num'                     => 'mysqli_errno',
-               'error_str'                     => 'mysqli_error',
-               'escape_string'         => 'mysqli_real_escape_string',
-               'escape_binary'         => 'mysqli_real_escape_string',
-               'unescape_binary'       => '$this->command_unescape_binary',
-               'fetch_assoc'           => 'mysqli_fetch_assoc',
-               'fetch_row'                     => 'mysqli_fetch_row',
-               'fetch_object'          => 'mysqli_fetch_object',
-               'free_result'           => 'mysqli_free_result',
-               'insert_id'                     => 'mysqli_insert_id',
-               'num_rows'                      => 'mysqli_num_rows',
-               'affected_rows'         => 'mysqli_affected_rows'
-       );
-       
-       // ###################################################################
-       /**
-       * Constructor
-       */
-       function __construct(&$registry)
-       {
-               parent::__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * (PHP 4) Constructor
-       */
-       function DB_MySQLi(&$registry)
-       {
-               $this->__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: mysqli_connect
-       *
-       * @access       protected
-       *
-       * @param        string  Server name
-       * @param        string  User name
-       * @param        string  Password
-       * @param        string  Database
-       *
-       * @return       integer DB-Link
-       */
-       function command_mysqli_connect($server, $user, $password, $database)
-       {
-               return mysqli_connect($server, $user, $password, $database);
-       }
-       
-       // ###################################################################
-       /**
-       * Not supported: unescape binary string
-       *
-       * @access       protected
-       *
-       * @param        string  Escaped data
-       *
-       * @return       string  Same data
-       */
-       function command_unescape_binary($string)
-       {
-               return $string;
-       }
-       
-       // ###################################################################
-       /**
-       * Starts a database transaction
-       *
-       * @access       public
-       */
-       function transaction_start()
-       {
-               $this->query("START TRANSACTION");
-       }
-       
-       // ###################################################################
-       /**
-       * Saves current transaction steps as a savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_savepoint($name)
-       {
-               $this->query("SAVEPOINT $name");
-       }
-       
-       // ###################################################################
-       /**
-       * Reverts a transaction back to a given savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_rollback($name = null)
-       {
-               $this->query("ROLLBACK" . ($name != null ? " TO SAVEPOINT $name" : ""));
-       }
-       
-       // ###################################################################
-       /**
-       * Commits a database transaction
-       *
-       * @access       public
-       */
-       function transaction_commit()
-       {
-               $this->query("COMMIT");
-       }
-}
-
diff --git a/framework/db_postgresql.php b/framework/db_postgresql.php
deleted file mode 100755 (executable)
index 00529ff..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-/*=====================================================================*\
-|| ###################################################################
-|| # Blue Static ISSO Framework
-|| # Copyright (c)2002-[#]year[#] Blue Static
-|| #
-|| # This program is free software; you can redistribute it and/or modify
-|| # it under the terms of the GNU General Public License as published by
-|| # the Free Software Foundation; version [#]gpl[#] of the License.
-|| #
-|| # This program is distributed in the hope that it will be useful, but
-|| # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-|| # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-|| # more details.
-|| #
-|| # You should have received a copy of the GNU General Public License along
-|| # with this program; if not, write to the Free Software Foundation, Inc.,
-|| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-|| ###################################################################
-\*=====================================================================*/
-
-/**
-* PostgreSQL Database Abstraction Layer
-* db_postgresql.php
-*
-* @package     ISSO
-*/
-
-$this->load('db', null);
-
-/**
-* PostgreSQL Database Abstraction Layer
-*
-* This framework is a function wrapper for PostgresQL functions so we can have
-* better error reporting and query reporting.
-*
-* @author              Blue Static
-* @copyright   Copyright (c)2002 - [#]year[#], Blue Static
-* @version             $Revision$
-* @package             ISSO
-* 
-*/
-class DB_PostgreSQL extends DB_Abstract
-{
-       /**
-       * Command mapping list
-       * @var  array
-       * @access       private
-       */
-       var $commands = array(
-               'pconnect'                      => '$this->command_pg_pconnect',
-               'connect'                       => '$this->command_pg_connect',
-               'query'                         => 'pg_query',
-               'error_num'                     => '$this->command_error_num',
-               'error_str'                     => '$this->command_error_str',
-               'escape_string'         => '$this->command_pg_escape_string',
-               'escape_binary'         => 'pg_escape_bytea',
-               'unescape_binary'       => 'pg_unescape_bytea',
-               'fetch_assoc'           => 'pg_fetch_assoc',
-               'fetch_row'                     => 'pg_fetch_row',
-               'fetch_object'          => 'pg_fetch_object',
-               'free_result'           => 'pg_free_result',
-               'insert_id'                     => '%link', // how do we support this...?
-               'num_rows'                      => 'pg_num_rows',
-               'affected_rows'         => 'pg_affected_rows'
-       );
-       
-       /**
-       * Port number to connect to
-       * @var  integer
-       * @access       private
-       */
-       var $port = 5432;
-       
-       // ###################################################################
-       /**
-       * Constructor
-       */
-       function __construct(&$registry)
-       {
-               parent::__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * (PHP 4) Constructor
-       */
-       function DB_PostgreSQL(&$registry)
-       {
-               $this->__construct($registry);
-       }
-       
-       // ###################################################################
-       /**
-       * Sets the PGSQL port number
-       *
-       * @access       public
-       *
-       * @param        integer The port number
-       */
-       function setPort($port)
-       {
-               $this->port = $port;
-       }
-       
-       // ###################################################################
-       /**
-       * Gets the currently-set port number
-       *
-       * @access       public
-       *
-       * @return       integer The port number
-       */
-       function getPort()
-       {
-               return $this->port;
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: pg_connect
-       *
-       * @access       protected
-       *
-       * @param        string  Server name
-       * @param        string  User name
-       * @param        string  Password
-       * @param        string  Database
-       *
-       * @return       integer DB-Link
-       */
-       function command_pg_connect($server, $user, $password, $database)
-       {
-               return pg_connect("host='$server' port={$this->port} user='$user' password='$password' dbname='$database'");
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: pg_pconnect
-       *
-       * @access       protected
-       *
-       * @param        string  Server name
-       * @param        string  User name
-       * @param        string  Password
-       * @param        string  Database
-       *
-       * @return       integer DB-Link
-       */
-       function command_pg_pconnect($server, $user, $password, $database)
-       {
-               return pg_pconnect("host='$server' port={$this->port} user='$user' password='$password' dbname='$database'");
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper: pg_escape_string
-       *
-       * @access       protected
-       *
-       * @param        integer DB-Link (unused)
-       * @param        string  Raw string
-       *
-       * @return       string  Escaped string
-       */
-       function command_pg_escape_string($link, $string)
-       {
-               return pg_escape_string($string);
-       }
-       
-       // ###################################################################
-       /**
-       * Wrapper/no support: error string
-       *
-       * @access       protected
-       *
-       * @param        integer DB-Link
-       *
-       * @return       string  Error string
-       */
-       function command_error_str($link)
-       {
-               if ($this->result)
-               {
-                       return pg_result_error($this->result);
-               }
-               
-               return pg_last_error($link);
-       }
-       
-       // ###################################################################
-       /**
-       * Not supported: error numbers
-       *
-       * @access       protected
-       *
-       * @param        integer DB-Link
-       *
-       * @return       integer Returns -1 always
-       */
-       function command_error_num($link)
-       {
-               return -1;
-       }
-       
-       // ###################################################################
-       /**
-       * Overload: insert_id
-       *
-       * @access       public
-       *
-       * @param        string  Table name
-       * @param        string  Auto-up field
-       *
-       * @return       integer Insert ID
-       */
-       function insert_id($table, $field)
-       {
-               $temp = $this->query_first("SELECT last_value FROM {$table}_{$field}_seq");
-               return $temp['last_value'];
-       }
-       
-       // ###################################################################
-       /**
-       * Starts a database transaction
-       *
-       * @access       public
-       */
-       function transaction_start()
-       {
-               $this->query("BEGIN");
-       }
-       
-       // ###################################################################
-       /**
-       * Saves current transaction steps as a savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_savepoint($name)
-       {
-               $this->query("SAVEPOINT $name");
-       }
-       
-       // ###################################################################
-       /**
-       * Reverts a transaction back to a given savepoint
-       *
-       * @access       public
-       *
-       * @param        string  Named savepoint
-       */
-       function transaction_rollback($name = null)
-       {
-               $this->query("ROLLBACK" . ($name != null ? " TO $name" : ""));
-       }
-       
-       // ###################################################################
-       /**
-       * Commits a database transaction
-       *
-       * @access       public
-       */
-       function transaction_commit()
-       {
-               $this->query("COMMIT");
-       }
-}
-
index aa83f68043c52dbcf49ca28e0b5e17c39d36d652..d1d0ba4300afd9013d5b9a5f566e6edb5bd0fad6 100755 (executable)
@@ -46,8 +46,7 @@ require_once('./includes/config.php');
 
 $bugsys->setDebug($debug);
 
-define('ISSO_DB_LAYER', 'db_mysql');
-$bugsys->load('db_mysql', 'db', true);
+$bugsys->load('db_mysql_pdo', 'db', true);
 $db->connect($servername, $username, $password, $database, $usepconnect);
 if ($utf8)
 {