Ignore:
Timestamp:
May 2, 2016, 12:09:23 PM (3 years ago)
Author:
jrpelegrina
Message:

Updated to moodle 3.0.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • moodle/trunk/fuentes/lib/adodb/adodb.inc.php

    r136 r1331  
    1515        \mainpage
    1616
    17          @version V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
     17        @version   v5.20.1  06-Dec-2015
     18        @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
     19        @copyright (c) 2014      Damien Regad, Mark Newnham and the ADOdb community
    1820
    1921        Released under both BSD license and Lesser GPL library license. You can choose which license
     
    4547         * This constant was formerly called $ADODB_RootPath
    4648         */
    47         if (!defined('ADODB_DIR')) define('ADODB_DIR',dirname(__FILE__));
     49        if (!defined('ADODB_DIR')) {
     50                define('ADODB_DIR',dirname(__FILE__));
     51        }
    4852
    4953        //==============================================================================================
     
    5256
    5357        GLOBAL
    54                 $ADODB_vers,            // database version
     58                $ADODB_vers,            // database version
    5559                $ADODB_COUNTRECS,       // count number of records returned - slows down query
    5660                $ADODB_CACHE_DIR,       // directory to cache recordsets
     
    5963                $ADODB_EXTENSION,   // ADODB extension installed
    6064                $ADODB_COMPAT_FETCH, // If $ADODB_COUNTRECS and this is true, $rs->fields is available on EOF
    61                 $ADODB_FETCH_MODE,      // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default...
     65                $ADODB_FETCH_MODE,      // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default...
    6266                $ADODB_GETONE_EOF,
    6367                $ADODB_QUOTE_FIELDNAMES; // Allows you to force quotes (backticks) around field names in queries generated by getinsertsql and getupdatesql.
     
    9397
    9498        // prefetching used by oracle
    95                 if (!defined('ADODB_PREFETCH_ROWS')) define('ADODB_PREFETCH_ROWS',10);
    96 
    97 
    98         /*
    99         Controls ADODB_FETCH_ASSOC field-name case. Default is 2, use native case-names.
    100         This currently works only with mssql, odbc, oci8po and ibase derived drivers.
    101 
    102                 0 = assoc lowercase field names. $rs->fields['orderid']
    103                 1 = assoc uppercase field names. $rs->fields['ORDERID']
    104                 2 = use native-case field names. $rs->fields['OrderID']
    105         */
     99                if (!defined('ADODB_PREFETCH_ROWS')) {
     100                        define('ADODB_PREFETCH_ROWS',10);
     101                }
     102
     103
     104        /**
     105         * Fetch mode
     106         *
     107         * Set global variable $ADODB_FETCH_MODE to one of these constants or use
     108         * the SetFetchMode() method to control how recordset fields are returned
     109         * when fetching data.
     110         *
     111         *   - NUM:     array()
     112         *   - ASSOC:   array('id' => 456, 'name' => 'john')
     113         *   - BOTH:    array(0 => 456, 'id' => 456, 1 => 'john', 'name' => 'john')
     114         *   - DEFAULT: driver-dependent
     115         */
     116                define('ADODB_FETCH_DEFAULT', 0);
     117                define('ADODB_FETCH_NUM', 1);
     118                define('ADODB_FETCH_ASSOC', 2);
     119                define('ADODB_FETCH_BOTH', 3);
     120
     121        /**
     122         * Associative array case constants
     123         *
     124         * By defining the ADODB_ASSOC_CASE constant to one of these values, it is
     125         * possible to control the case of field names (associative array's keys)
     126         * when operating in ADODB_FETCH_ASSOC fetch mode.
     127         *   - LOWER:  $rs->fields['orderid']
     128         *   - UPPER:  $rs->fields['ORDERID']
     129         *   - NATIVE: $rs->fields['OrderID'] (or whatever the RDBMS will return)
     130         *
     131         * The default is to use native case-names.
     132         *
     133         * NOTE: This functionality is not implemented everywhere, it currently
     134         * works only with: mssql, odbc, oci8 and ibase derived drivers
     135         */
    106136                define('ADODB_ASSOC_CASE_LOWER', 0);
    107137                define('ADODB_ASSOC_CASE_UPPER', 1);
    108138                define('ADODB_ASSOC_CASE_NATIVE', 2);
    109139
    110                 define('ADODB_FETCH_DEFAULT',0);
    111                 define('ADODB_FETCH_NUM',1);
    112                 define('ADODB_FETCH_ASSOC',2);
    113                 define('ADODB_FETCH_BOTH',3);
    114 
    115                 if (!defined('TIMESTAMP_FIRST_YEAR')) define('TIMESTAMP_FIRST_YEAR',100);
     140
     141                if (!defined('TIMESTAMP_FIRST_YEAR')) {
     142                        define('TIMESTAMP_FIRST_YEAR',100);
     143                }
     144
     145                /**
     146                 * AutoExecute constants
     147                 * (moved from adodb-pear.inc.php since they are only used in here)
     148                 */
     149                define('DB_AUTOQUERY_INSERT', 1);
     150                define('DB_AUTOQUERY_UPDATE', 2);
     151
    116152
    117153                // PHP's version scheme makes converting to numbers difficult - workaround
     
    121157                } else if ($_adodb_ver >= 5.0) {
    122158                        define('ADODB_PHPVER',0x5000);
    123                 } else
     159                } else {
    124160                        die("PHP5 or later required. You are running ".PHP_VERSION);
    125         }
    126 
    127 
    128         //if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2);
    129 
    130 
    131         /**
    132                 Accepts $src and $dest arrays, replacing string $data
     161                }
     162                unset($_adodb_ver);
     163        }
     164
     165
     166        /**
     167                Accepts $src and $dest arrays, replacing string $data
    133168        */
    134         function ADODB_str_replace($src, $dest, $data)
    135         {
    136                 if (ADODB_PHPVER >= 0x4050) return str_replace($src,$dest,$data);
     169        function ADODB_str_replace($src, $dest, $data) {
     170                if (ADODB_PHPVER >= 0x4050) {
     171                        return str_replace($src,$dest,$data);
     172                }
    137173
    138174                $s = reset($src);
     
    146182        }
    147183
    148         function ADODB_Setup()
    149         {
     184        function ADODB_Setup() {
    150185        GLOBAL
    151                 $ADODB_vers,            // database version
     186                $ADODB_vers,            // database version
    152187                $ADODB_COUNTRECS,       // count number of records returned - slows down query
    153188                $ADODB_CACHE_DIR,       // directory to cache recordsets
    154                 $ADODB_FETCH_MODE,
     189                $ADODB_FETCH_MODE,
    155190                $ADODB_CACHE,
    156191                $ADODB_CACHE_CLASS,
     
    159194                $ADODB_QUOTE_FIELDNAMES;
    160195
    161                 if (empty($ADODB_CACHE_CLASS)) $ADODB_CACHE_CLASS =  'ADODB_Cache_File' ;
     196                if (empty($ADODB_CACHE_CLASS)) {
     197                        $ADODB_CACHE_CLASS =  'ADODB_Cache_File' ;
     198                }
    162199                $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT;
    163200                $ADODB_FORCE_TYPE = ADODB_FORCE_VALUE;
     
    168205                } else {
    169206                        // do not accept url based paths, eg. http:/ or ftp:/
    170                         if (strpos($ADODB_CACHE_DIR,'://') !== false)
     207                        if (strpos($ADODB_CACHE_DIR,'://') !== false) {
    171208                                die("Illegal path http:// or ftp://");
     209                        }
    172210                }
    173211
     
    181219                 * ADODB version as a string.
    182220                 */
    183                 $ADODB_vers = 'V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved. Released BSD & LGPL.';
     221                $ADODB_vers = 'v5.20.1  06-Dec-2015';
    184222
    185223                /**
     
    188226                 * for databases that provide "virtual" recordcounts...
    189227                 */
    190                 if (!isset($ADODB_COUNTRECS)) $ADODB_COUNTRECS = true;
     228                if (!isset($ADODB_COUNTRECS)) {
     229                        $ADODB_COUNTRECS = true;
     230                }
    191231        }
    192232
     
    221261
    222262
    223         function _adodb_safedate($s)
    224         {
     263        function _adodb_safedate($s) {
    225264                return str_replace(array("'", '\\'), '', $s);
    226265        }
     
    228267        // parse date string to prevent injection attack
    229268        // date string will have one quote at beginning e.g. '3434343'
    230         function _adodb_safedateq($s)
    231         {
     269        function _adodb_safedateq($s) {
    232270                $len = strlen($s);
    233                 if ($s[0] !== "'") $s2 = "'".$s[0];
    234                 else $s2 = "'";
     271                if ($s[0] !== "'") {
     272                        $s2 = "'".$s[0];
     273                } else {
     274                        $s2 = "'";
     275                }
    235276                for($i=1; $i<$len; $i++) {
    236277                        $ch = $s[$i];
     
    252293        // for transaction handling
    253294
    254         function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection)
    255         {
     295        function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection) {
    256296                //print "Errorno ($fn errno=$errno m=$errmsg) ";
    257297                $thisConnection->_transOK = false;
     
    268308                var $createdir = true; // requires creation of temp dirs
    269309
    270                 function ADODB_Cache_File()
    271                 {
    272                 global $ADODB_INCLUDED_CSV;
    273                         if (empty($ADODB_INCLUDED_CSV)) include_once(ADODB_DIR.'/adodb-csvlib.inc.php');
     310                function __construct() {
     311                        global $ADODB_INCLUDED_CSV;
     312                        if (empty($ADODB_INCLUDED_CSV)) {
     313                                include_once(ADODB_DIR.'/adodb-csvlib.inc.php');
     314                        }
    274315                }
    275316
    276317                // write serialised recordset to cache item/file
    277                 function writecache($filename, $contents,  $debug, $secs2cache)
    278                 {
     318                function writecache($filename, $contents,  $debug, $secs2cache) {
    279319                        return adodb_write_file($filename, $contents,$debug);
    280320                }
    281321
    282322                // load serialised recordset and unserialise it
    283                 function &readcache($filename, &$err, $secs2cache, $rsClass)
    284                 {
     323                function &readcache($filename, &$err, $secs2cache, $rsClass) {
    285324                        $rs = csv2rs($filename,$err,$secs2cache,$rsClass);
    286325                        return $rs;
     
    288327
    289328                // flush all items in cache
    290                 function flushall($debug=false)
    291                 {
    292                 global $ADODB_CACHE_DIR;
    293 
    294                 $rez = false;
     329                function flushall($debug=false) {
     330                        global $ADODB_CACHE_DIR;
     331
     332                        $rez = false;
    295333
    296334                        if (strlen($ADODB_CACHE_DIR) > 1) {
    297335                                $rez = $this->_dirFlush($ADODB_CACHE_DIR);
    298                         if ($debug) ADOConnection::outp( "flushall: $dir<br><pre>\n". $rez."</pre>");
    299                         }
     336                                if ($debug) {
     337                                        ADOConnection::outp( "flushall: $ADODB_CACHE_DIR<br><pre>\n". $rez."</pre>");
     338                                }
     339                        }
    300340                        return $rez;
    301341                }
    302342
    303343                // flush one file in cache
    304                 function flushcache($f, $debug=false)
    305                 {
     344                function flushcache($f, $debug=false) {
    306345                        if (!@unlink($f)) {
    307                                 if ($debug) ADOConnection::outp( "flushcache: failed for $f");
    308                         }
    309                 }
    310 
    311                 function getdirname($hash)
    312                 {
    313                 global $ADODB_CACHE_DIR;
    314                         if (!isset($this->notSafeMode)) $this->notSafeMode = !ini_get('safe_mode');
     346                                if ($debug) {
     347                                        ADOConnection::outp( "flushcache: failed for $f");
     348                                }
     349                        }
     350                }
     351
     352                function getdirname($hash) {
     353                        global $ADODB_CACHE_DIR;
     354                        if (!isset($this->notSafeMode)) {
     355                                $this->notSafeMode = !ini_get('safe_mode');
     356                        }
    315357                        return ($this->notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($hash,0,2) : $ADODB_CACHE_DIR;
    316358                }
    317359
    318360                // create temp directories
    319                 function createdir($hash, $debug)
    320                 {
    321                 global $ADODB_CACHE_PERMS;
     361                function createdir($hash, $debug) {
     362                        global $ADODB_CACHE_PERMS;
    322363
    323364                        $dir = $this->getdirname($hash);
    324365                        if ($this->notSafeMode && !file_exists($dir)) {
    325366                                $oldu = umask(0);
    326                                 if (!@mkdir($dir, empty($ADODB_CACHE_PERMS) ? 0771 : $ADODB_CACHE_PERMS)) if(!is_dir($dir) && $debug) ADOConnection::outp("Cannot create $dir");
     367                                if (!@mkdir($dir, empty($ADODB_CACHE_PERMS) ? 0771 : $ADODB_CACHE_PERMS)) {
     368                                        if(!is_dir($dir) && $debug) {
     369                                                ADOConnection::outp("Cannot create $dir");
     370                                        }
     371                                }
    327372                                umask($oldu);
    328373                        }
     
    337382                * Note: $kill_top_level is used internally in the function to flush subdirectories.
    338383                */
    339                 function _dirFlush($dir, $kill_top_level = false)
    340                 {
    341                    if(!$dh = @opendir($dir)) return;
    342 
    343                    while (($obj = readdir($dh))) {
    344                                 if($obj=='.' || $obj=='..') continue;
     384                function _dirFlush($dir, $kill_top_level = false) {
     385                        if(!$dh = @opendir($dir)) return;
     386
     387                        while (($obj = readdir($dh))) {
     388                                if($obj=='.' || $obj=='..') continue;
    345389                                $f = $dir.'/'.$obj;
    346390
    347                                 if (strpos($obj,'.cache')) @unlink($f);
    348                                 if (is_dir($f)) $this->_dirFlush($f, true);
    349                    }
    350                    if ($kill_top_level === true) @rmdir($dir);
    351                    return true;
     391                                if (strpos($obj,'.cache')) {
     392                                        @unlink($f);
     393                                }
     394                                if (is_dir($f)) {
     395                                        $this->_dirFlush($f, true);
     396                                }
     397                        }
     398                        if ($kill_top_level === true) {
     399                                @rmdir($dir);
     400                        }
     401                        return true;
    352402                }
    353403        }
     
    367417        var $databaseType = '';         /// RDBMS currently in use, eg. odbc, mysql, mssql
    368418        var $database = '';                     /// Name of database to be used.
    369         var $host = '';                         /// The hostname of the database server
    370         var $user = '';                         /// The username which is used to connect to the database server.
    371         var $password = '';             /// Password for the username. For security, we no longer store it.
    372         var $debug = false;             /// if set to true will output sql statements
    373         var $maxblobsize = 262144;      /// maximum size of blobs or large text fields (262144 = 256K)-- some db's die otherwise like foxpro
     419        var $host = '';                         /// The hostname of the database server
     420        var $user = '';                         /// The username which is used to connect to the database server.
     421        var $password = '';                     /// Password for the username. For security, we no longer store it.
     422        var $debug = false;                     /// if set to true will output sql statements
     423        var $maxblobsize = 262144;      /// maximum size of blobs or large text fields (262144 = 256K)-- some db's die otherwise like foxpro
    374424        var $concat_operator = '+'; /// default concat operator -- change to || for Oracle/Interbase
    375425        var $substr = 'substr';         /// substring operator
     
    379429        var $fmtDate = "'Y-m-d'";       /// used by DBDate() as the default date format used by the database
    380430        var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt.
    381         var $true = '1';                        /// string that represents TRUE for a database
    382         var $false = '0';                       /// string that represents FALSE for a database
    383         var $replaceQuote = "\\'";      /// string to use to replace quotes
     431        var $true = '1';                        /// string that represents TRUE for a database
     432        var $false = '0';                       /// string that represents FALSE for a database
     433        var $replaceQuote = "\\'";      /// string to use to replace quotes
    384434        var $nameQuote = '"';           /// string to use to quote identifiers and names
    385         var $charSet=false;             /// character set to use - only for interbase, postgres and oci8
     435        var $charSet=false;                     /// character set to use - only for interbase, postgres and oci8
    386436        var $metaDatabasesSQL = '';
    387437        var $metaTablesSQL = '';
     
    391441        var $lastInsID = false;
    392442        //--
    393         var $hasInsertID = false;               /// supports autoincrement ID?
    394         var $hasAffectedRows = false;   /// supports affected rows for update/delete?
     443        var $hasInsertID = false;               /// supports autoincrement ID?
     444        var $hasAffectedRows = false;   /// supports affected rows for update/delete?
    395445        var $hasTop = false;                    /// support mssql/access SELECT TOP 10 * FROM TABLE
    396446        var $hasLimit = false;                  /// support pgsql/mysql SELECT * FROM TABLE LIMIT 10
    397         var $readOnly = false;                  /// this is a readonly database - used by phpLens
    398         var $hasMoveFirst = false;  /// has ability to run MoveFirst(), scrolling backwards
    399         var $hasGenID = false;          /// can generate sequences using GenID();
    400         var $hasTransactions = true; /// has transactions
     447        var $readOnly = false;                  /// this is a readonly database - used by phpLens
     448        var $hasMoveFirst = false;              /// has ability to run MoveFirst(), scrolling backwards
     449        var $hasGenID = false;                  /// can generate sequences using GenID();
     450        var $hasTransactions = true;    /// has transactions
    401451        //--
    402         var $genID = 0;                         /// sequence id used by GenID();
    403         var $raiseErrorFn = false;      /// error function to call
    404         var $isoDates = false; /// accepts dates in ISO format
    405         var $cacheSecs = 3600; /// cache for 1 hour
     452        var $genID = 0;                                 /// sequence id used by GenID();
     453        var $raiseErrorFn = false;              /// error function to call
     454        var $isoDates = false;                  /// accepts dates in ISO format
     455        var $cacheSecs = 3600;                  /// cache for 1 hour
    406456
    407457        // memcache
     
    432482        var $rsPrefix = "ADORecordSet_";
    433483
    434         var $autoCommit = true;         /// do not modify this yourself - actually private
    435         var $transOff = 0;                      /// temporarily disable transactions
    436         var $transCnt = 0;                      /// count of nested transactions
     484        var $autoCommit = true;         /// do not modify this yourself - actually private
     485        var $transOff = 0;                      /// temporarily disable transactions
     486        var $transCnt = 0;                      /// count of nested transactions
    437487
    438488        var $fetchMode=false;
     
    440490        var $null2null = 'null'; // in autoexecute/getinsertsql/getupdatesql, this value will be converted to a null
    441491        var $bulkBind = false; // enable 2D Execute array
    442          //
    443          // PRIVATE VARS
    444          //
     492        //
     493        // PRIVATE VARS
     494        //
    445495        var $_oldRaiseFn =  false;
    446496        var $_transOK = null;
     
    458508        var $_transmode = ''; // transaction mode
    459509
    460 
    461         static function Version()
     510        /*
     511         * Additional parameters that may be passed to drivers in the connect string
     512         * Driver must be coded to accept the parameters
     513         */
     514        protected $connectionParameters = array();
     515
     516        /**
     517        * Adds a parameter to the connection string.
     518        *
     519        * These parameters are added to the connection string when connecting,
     520        * if the driver is coded to use it.
     521        *
     522        * @param        string  $parameter      The name of the parameter to set
     523        * @param        string  $value          The value of the parameter
     524        *
     525        * @return null
     526        *
     527        * @example, for mssqlnative driver ('CharacterSet','UTF-8')
     528        */
     529        final public function setConnectionParameter($parameter,$value)
    462530        {
    463         global $ADODB_vers;
    464 
    465                 $ok = preg_match( '/^[Vv]?([0-9]\.[0-9]+(dev|[a-z]))?/', $ADODB_vers, $matches );
    466                 if (!$ok) return (float) substr($ADODB_vers,1);
    467                 else return $matches[1];
     531
     532                $this->connectionParameters[$parameter] = $value;
     533
     534        }
     535
     536        static function Version() {
     537                global $ADODB_vers;
     538
     539                // Semantic Version number matching regex
     540                $regex = '^[vV]?(\d+\.\d+\.\d+'         // Version number (X.Y.Z) with optional 'V'
     541                        . '(?:-(?:'                         // Optional preprod version: a '-'
     542                        . 'dev|'                            // followed by 'dev'
     543                        . '(?:(?:alpha|beta|rc)(?:\.\d+))'  // or a preprod suffix and version number
     544                        . '))?)(?:\s|$)';                   // Whitespace or end of string
     545
     546                if (!preg_match("/$regex/", $ADODB_vers, $matches)) {
     547                        // This should normally not happen... Return whatever is between the start
     548                        // of the string and the first whitespace (or the end of the string).
     549                        self::outp("Invalid version number: '$ADODB_vers'", 'Version');
     550                        $regex = '^[vV]?(.*?)(?:\s|$)';
     551                        preg_match("/$regex/", $ADODB_vers, $matches);
     552                }
     553                return $matches[1];
    468554        }
    469555
     
    474560                        and $arr[version] is the version (also a string).
    475561        */
    476         function ServerInfo()
    477         {
     562        function ServerInfo() {
    478563                return array('description' => '', 'version' => '');
    479564        }
    480565
    481         function IsConnected()
    482         {
     566        function IsConnected() {
    483567                return !empty($this->_connectionID);
    484568        }
    485569
    486         function _findvers($str)
    487         {
    488                 if (preg_match('/([0-9]+\.([0-9\.])+)/',$str, $arr)) return $arr[1];
    489                 else return '';
     570        function _findvers($str) {
     571                if (preg_match('/([0-9]+\.([0-9\.])+)/',$str, $arr)) {
     572                        return $arr[1];
     573                } else {
     574                        return '';
     575                }
    490576        }
    491577
     
    494580        * You can define your own handler by defining the function name in ADODB_OUTP.
    495581        */
    496         static function outp($msg,$newline=true)
    497         {
    498         global $ADODB_FLUSH,$ADODB_OUTP;
     582        static function outp($msg,$newline=true) {
     583                global $ADODB_FLUSH,$ADODB_OUTP;
    499584
    500585                if (defined('ADODB_OUTP')) {
     
    508593                }
    509594
    510                 if ($newline) $msg .= "<br>\n";
    511 
    512                 if (isset($_SERVER['HTTP_USER_AGENT']) || !$newline) echo $msg;
    513                 else echo strip_tags($msg);
    514 
    515 
    516                 if (!empty($ADODB_FLUSH) && ob_get_length() !== false) flush(); //  do not flush if output buffering enabled - useless - thx to Jesse Mullan
    517 
    518         }
    519 
    520         function Time()
    521         {
     595                if ($newline) {
     596                        $msg .= "<br>\n";
     597                }
     598
     599                if (isset($_SERVER['HTTP_USER_AGENT']) || !$newline) {
     600                        echo $msg;
     601                } else {
     602                        echo strip_tags($msg);
     603                }
     604
     605
     606                if (!empty($ADODB_FLUSH) && ob_get_length() !== false) {
     607                        flush(); //  do not flush if output buffering enabled - useless - thx to Jesse Mullan
     608                }
     609
     610        }
     611
     612        function Time() {
    522613                $rs = $this->_Execute("select $this->sysTimeStamp");
    523                 if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields));
     614                if ($rs && !$rs->EOF) {
     615                        return $this->UnixTimeStamp(reset($rs->fields));
     616                }
    524617
    525618                return false;
     
    537630         * @return true or false
    538631         */
    539         function Connect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "", $forceNew = false)
    540         {
    541                 if ($argHostname != "") $this->host = $argHostname;
    542                 if ($argUsername != "") $this->user = $argUsername;
    543                 if ($argPassword != "") $this->password = 'not stored'; // not stored for security reasons
    544                 if ($argDatabaseName != "") $this->database = $argDatabaseName;
     632        function Connect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "", $forceNew = false) {
     633                if ($argHostname != "") {
     634                        $this->host = $argHostname;
     635                }
     636                if ( strpos($this->host, ':') > 0 && isset($this->port) ) {
     637                        list($this->host, $this->port) = explode(":", $this->host, 2);
     638                }
     639                if ($argUsername != "") {
     640                        $this->user = $argUsername;
     641                }
     642                if ($argPassword != "") {
     643                        $this->password = 'not stored'; // not stored for security reasons
     644                }
     645                if ($argDatabaseName != "") {
     646                        $this->database = $argDatabaseName;
     647                }
    545648
    546649                $this->_isPersistentConnection = false;
    547650
    548651                if ($forceNew) {
    549                         if ($rez=$this->_nconnect($this->host, $this->user, $argPassword, $this->database)) return true;
     652                        if ($rez=$this->_nconnect($this->host, $this->user, $argPassword, $this->database)) {
     653                                return true;
     654                        }
    550655                } else {
    551                          if ($rez=$this->_connect($this->host, $this->user, $argPassword, $this->database)) return true;
     656                        if ($rez=$this->_connect($this->host, $this->user, $argPassword, $this->database)) {
     657                                return true;
     658                        }
    552659                }
    553660                if (isset($rez)) {
    554661                        $err = $this->ErrorMsg();
    555                         if (empty($err)) $err = "Connection error to server '$argHostname' with user '$argUsername'";
     662                        if (empty($err)) {
     663                                $err = "Connection error to server '$argHostname' with user '$argUsername'";
     664                        }
    556665                        $ret = false;
    557666                } else {
     
    559668                        $ret = 0;
    560669                }
    561                 if ($fn = $this->raiseErrorFn)
     670                if ($fn = $this->raiseErrorFn) {
    562671                        $fn($this->databaseType,'CONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this);
    563 
     672                }
    564673
    565674                $this->_connectionID = false;
    566                 if ($this->debug) ADOConnection::outp( $this->host.': '.$err);
     675                if ($this->debug) {
     676                        ADOConnection::outp( $this->host.': '.$err);
     677                }
    567678                return $ret;
    568679        }
    569680
    570         function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName)
    571         {
     681        function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) {
    572682                return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName);
    573683        }
     
    584694         * @return true or false
    585695         */
    586         function NConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "")
    587         {
     696        function NConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") {
    588697                return $this->Connect($argHostname, $argUsername, $argPassword, $argDatabaseName, true);
    589698        }
     
    599708         * @return return true or false
    600709         */
    601         function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "")
    602         {
    603 
    604                 if (defined('ADODB_NEVER_PERSIST'))
     710        function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") {
     711
     712                if (defined('ADODB_NEVER_PERSIST')) {
    605713                        return $this->Connect($argHostname,$argUsername,$argPassword,$argDatabaseName);
    606 
    607                 if ($argHostname != "") $this->host = $argHostname;
    608                 if ($argUsername != "") $this->user = $argUsername;
    609                 if ($argPassword != "") $this->password = 'not stored';
    610                 if ($argDatabaseName != "") $this->database = $argDatabaseName;
     714                }
     715
     716                if ($argHostname != "") {
     717                        $this->host = $argHostname;
     718                }
     719                if ( strpos($this->host, ':') > 0 && isset($this->port) ) {
     720                        list($this->host, $this->port) = explode(":", $this->host, 2);
     721                }
     722                if ($argUsername != "") {
     723                        $this->user = $argUsername;
     724                }
     725                if ($argPassword != "") {
     726                        $this->password = 'not stored';
     727                }
     728                if ($argDatabaseName != "") {
     729                        $this->database = $argDatabaseName;
     730                }
    611731
    612732                $this->_isPersistentConnection = true;
    613733
    614                 if ($rez = $this->_pconnect($this->host, $this->user, $argPassword, $this->database)) return true;
     734                if ($rez = $this->_pconnect($this->host, $this->user, $argPassword, $this->database)) {
     735                        return true;
     736                }
    615737                if (isset($rez)) {
    616738                        $err = $this->ErrorMsg();
    617                         if (empty($err)) $err = "Connection error to server '$argHostname' with user '$argUsername'";
     739                        if (empty($err)) {
     740                                $err = "Connection error to server '$argHostname' with user '$argUsername'";
     741                        }
    618742                        $ret = false;
    619743                } else {
     
    626750
    627751                $this->_connectionID = false;
    628                 if ($this->debug) ADOConnection::outp( $this->host.': '.$err);
     752                if ($this->debug) {
     753                        ADOConnection::outp( $this->host.': '.$err);
     754                }
    629755                return $ret;
    630756        }
    631757
    632         function outp_throw($msg,$src='WARN',$sql='')
    633         {
     758        function outp_throw($msg,$src='WARN',$sql='') {
    634759                if (defined('ADODB_ERROR_HANDLER') &&  ADODB_ERROR_HANDLER == 'adodb_throw') {
    635760                        adodb_throw($this->databaseType,$src,-9999,$msg,$sql,false,$this);
     
    640765
    641766        // create cache class. Code is backward compat with old memcache implementation
    642         function _CreateCache()
    643         {
    644         global $ADODB_CACHE, $ADODB_CACHE_CLASS;
     767        function _CreateCache() {
     768                global $ADODB_CACHE, $ADODB_CACHE_CLASS;
    645769
    646770                if ($this->memCache) {
    647                 global $ADODB_INCLUDED_MEMCACHE;
    648 
    649                         if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php');
    650                                 $ADODB_CACHE = new ADODB_Cache_MemCache($this);
    651                 } else
    652                                 $ADODB_CACHE = new $ADODB_CACHE_CLASS($this);
    653 
     771                        global $ADODB_INCLUDED_MEMCACHE;
     772
     773                        if (empty($ADODB_INCLUDED_MEMCACHE)) {
     774                                include_once(ADODB_DIR.'/adodb-memcache.lib.inc.php');
     775                        }
     776                        $ADODB_CACHE = new ADODB_Cache_MemCache($this);
     777                } else {
     778                        $ADODB_CACHE = new $ADODB_CACHE_CLASS($this);
     779                }
    654780        }
    655781
    656782        // Format date column in sql string given an input format that understands Y M D
    657         function SQLDate($fmt, $col=false)
    658         {
    659                 if (!$col) $col = $this->sysDate;
     783        function SQLDate($fmt, $col=false) {
     784                if (!$col) {
     785                        $col = $this->sysDate;
     786                }
    660787                return $col; // child class implement
    661788        }
     
    673800         *
    674801         * @return return FALSE, or the prepared statement, or the original sql if
    675          *                      if the database does not support prepare.
    676          *
    677          */
    678         function Prepare($sql)
    679         {
     802         *         if the database does not support prepare.
     803         *
     804         */
     805        function Prepare($sql) {
    680806                return $sql;
    681807        }
     
    692818         *
    693819         * @return return FALSE, or the prepared statement, or the original sql if
    694          *                      if the database does not support prepare.
    695          *
    696          */
    697         function PrepareSP($sql,$param=true)
    698         {
     820         *         if the database does not support prepare.
     821         *
     822         */
     823        function PrepareSP($sql,$param=true) {
    699824                return $this->Prepare($sql,$param);
    700825        }
     
    703828        * PEAR DB Compat
    704829        */
    705         function Quote($s)
    706         {
     830        function Quote($s) {
    707831                return $this->qstr($s,false);
    708832        }
    709833
    710834        /**
    711          Requested by "Karsten Dambekalns" <k.dambekalns@fishfarm.de>
    712         */
    713         function QMagic($s)
    714         {
     835         * Requested by "Karsten Dambekalns" <k.dambekalns@fishfarm.de>
     836         */
     837        function QMagic($s) {
    715838                return $this->qstr($s,get_magic_quotes_gpc());
    716839        }
    717840
    718         function q(&$s)
    719         {
    720                 #if (!empty($this->qNull)) if ($s == 'null') return $s;
     841        function q(&$s) {
     842                //if (!empty($this->qNull && $s == 'null') {
     843                //      return $s;
     844                //}
    721845                $s = $this->qstr($s,false);
    722846        }
     
    725849        * PEAR DB Compat - do not use internally.
    726850        */
    727         function ErrorNative()
    728         {
     851        function ErrorNative() {
    729852                return $this->ErrorNo();
    730853        }
     
    734857         * PEAR DB Compat - do not use internally.
    735858         */
    736         function nextId($seq_name)
    737         {
     859        function nextId($seq_name) {
    738860                return $this->GenID($seq_name);
    739861        }
    740862
    741863        /**
    742          *       Lock a row, will escalate and lock the table if row locking not supported
    743          *      will normally free the lock at the end of the transaction
    744          *
    745          *  @param $table       name of table to lock
    746          *  @param $where       where clause to use, eg: "WHERE row=12". If left empty, will escalate to table lock
    747          */
    748         function RowLock($table,$where,$col='1 as adodbignore')
    749         {
     864         * Lock a row, will escalate and lock the table if row locking not supported
     865         * will normally free the lock at the end of the transaction
     866         *
     867         * @param $table        name of table to lock
     868         * @param $where        where clause to use, eg: "WHERE row=12". If left empty, will escalate to table lock
     869         */
     870        function RowLock($table,$where,$col='1 as adodbignore') {
    750871                return false;
    751872        }
    752873
    753         function CommitLock($table)
    754         {
     874        function CommitLock($table) {
    755875                return $this->CommitTrans();
    756876        }
    757877
    758         function RollbackLock($table)
    759         {
     878        function RollbackLock($table) {
    760879                return $this->RollbackTrans();
    761880        }
     
    765884        *
    766885        * The fetch modes for NUMERIC and ASSOC for PEAR DB and ADODB are identical
    767         *       for easy porting :-)
     886        * for easy porting :-)
    768887        *
    769888        * @param mode   The fetchmode ADODB_FETCH_ASSOC or ADODB_FETCH_NUM
    770889        * @returns              The previous fetch mode
    771890        */
    772         function SetFetchMode($mode)
    773         {
     891        function SetFetchMode($mode) {
    774892                $old = $this->fetchMode;
    775893                $this->fetchMode = $mode;
    776894
    777895                if ($old === false) {
    778                 global $ADODB_FETCH_MODE;
     896                        global $ADODB_FETCH_MODE;
    779897                        return $ADODB_FETCH_MODE;
    780898                }
     
    786904        * PEAR DB Compat - do not use internally.
    787905        */
    788         function Query($sql, $inputarr=false)
    789         {
     906        function Query($sql, $inputarr=false) {
    790907                $rs = $this->Execute($sql, $inputarr);
    791                 if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error();
     908                if (!$rs && defined('ADODB_PEAR')) {
     909                        return ADODB_PEAR_Error();
     910                }
    792911                return $rs;
    793912        }
     
    797916        * PEAR DB Compat - do not use internally
    798917        */
    799         function LimitQuery($sql, $offset, $count, $params=false)
    800         {
     918        function LimitQuery($sql, $offset, $count, $params=false) {
    801919                $rs = $this->SelectLimit($sql, $count, $offset, $params);
    802                 if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error();
     920                if (!$rs && defined('ADODB_PEAR')) {
     921                        return ADODB_PEAR_Error();
     922                }
    803923                return $rs;
    804924        }
     
    808928        * PEAR DB Compat - do not use internally
    809929        */
    810         function Disconnect()
    811         {
     930        function Disconnect() {
    812931                return $this->Close();
    813932        }
     
    826945         * @return string query parameter placeholder
    827946         */
    828         function Param($name,$type='C')
    829         {
     947        function Param($name,$type='C') {
    830948                return '?';
    831949        }
     
    834952                InParameter and OutParameter are self-documenting versions of Parameter().
    835953        */
    836         function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false)
    837         {
     954        function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) {
    838955                return $this->Parameter($stmt,$var,$name,false,$maxLen,$type);
    839956        }
     
    841958        /*
    842959        */
    843         function OutParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false)
    844         {
     960        function OutParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) {
    845961                return $this->Parameter($stmt,$var,$name,true,$maxLen,$type);
    846962
     
    863979
    864980        */
    865         function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false)
    866         {
     981        function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) {
    867982                return false;
    868983        }
    869984
    870985
    871         function IgnoreErrors($saveErrs=false)
    872         {
     986        function IgnoreErrors($saveErrs=false) {
    873987                if (!$saveErrs) {
    874988                        $saveErrs = array($this->raiseErrorFn,$this->_transOK);
     
    882996
    883997        /**
    884                 Improved method of initiating a transaction. Used together with CompleteTrans().
    885                 Advantages include:
    886 
    887                 a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans.
    888                    Only the outermost block is treated as a transaction.<br>
    889                 b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.<br>
    890                 c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block
    891                    are disabled, making it backward compatible.
    892         */
    893         function StartTrans($errfn = 'ADODB_TransMonitor')
    894         {
     998         * Improved method of initiating a transaction. Used together with CompleteTrans().
     999         * Advantages include:
     1000     *
     1001         * a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans.
     1002         *    Only the outermost block is treated as a transaction.<br>
     1003         * b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.<br>
     1004         * c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block
     1005         *    are disabled, making it backward compatible.
     1006         */
     1007        function StartTrans($errfn = 'ADODB_TransMonitor') {
    8951008                if ($this->transOff > 0) {
    8961009                        $this->transOff += 1;
     
    9021015                $this->_transOK = true;
    9031016
    904                 if ($this->debug && $this->transCnt > 0) ADOConnection::outp("Bad Transaction: StartTrans called within BeginTrans");
     1017                if ($this->debug && $this->transCnt > 0) {
     1018                        ADOConnection::outp("Bad Transaction: StartTrans called within BeginTrans");
     1019                }
    9051020                $ok = $this->BeginTrans();
    9061021                $this->transOff = 1;
     
    9171032                @returns true on commit, false on rollback.
    9181033        */
    919         function CompleteTrans($autoComplete = true)
    920         {
     1034        function CompleteTrans($autoComplete = true) {
    9211035                if ($this->transOff > 1) {
    9221036                        $this->transOff -= 1;
     
    9291043                        if (!$this->CommitTrans()) {
    9301044                                $this->_transOK = false;
    931                                 if ($this->debug) ADOConnection::outp("Smart Commit failed");
    932                         } else
    933                                 if ($this->debug) ADOConnection::outp("Smart Commit occurred");
     1045                                if ($this->debug) {
     1046                                        ADOConnection::outp("Smart Commit failed");
     1047                                }
     1048                        } else {
     1049                                if ($this->debug) {
     1050                                        ADOConnection::outp("Smart Commit occurred");
     1051                                }
     1052                        }
    9341053                } else {
    9351054                        $this->_transOK = false;
    9361055                        $this->RollbackTrans();
    937                         if ($this->debug) ADOCOnnection::outp("Smart Rollback occurred");
     1056                        if ($this->debug) {
     1057                                ADOCOnnection::outp("Smart Rollback occurred");
     1058                        }
    9381059                }
    9391060
     
    9441065                At the end of a StartTrans/CompleteTrans block, perform a rollback.
    9451066        */
    946         function FailTrans()
    947         {
     1067        function FailTrans() {
    9481068                if ($this->debug)
    9491069                        if ($this->transOff == 0) {
     
    9591079                Check if transaction has failed, only for Smart Transactions.
    9601080        */
    961         function HasFailedTrans()
    962         {
    963                 if ($this->transOff > 0) return $this->_transOK == false;
     1081        function HasFailedTrans() {
     1082                if ($this->transOff > 0) {
     1083                        return $this->_transOK == false;
     1084                }
    9641085                return false;
    9651086        }
     
    9701091         * @param sql           SQL statement to execute, or possibly an array holding prepared statement ($sql[0] will hold sql text)
    9711092         * @param [inputarr]    holds the input data to bind to. Null elements will be set to null.
    972          * @return              RecordSet or false
    973          */
    974         function Execute($sql,$inputarr=false)
    975         {
     1093         * @return RecordSet or false
     1094         */
     1095        function Execute($sql,$inputarr=false) {
    9761096                if ($this->fnExecute) {
    9771097                        $fn = $this->fnExecute;
    9781098                        $ret = $fn($this,$sql,$inputarr);
    979                         if (isset($ret)) return $ret;
     1099                        if (isset($ret)) {
     1100                                return $ret;
     1101                        }
    9801102                }
    9811103                if ($inputarr !== false) {
    982                         if (!is_array($inputarr)) $inputarr = array($inputarr);
     1104                        if (!is_array($inputarr)) {
     1105                                $inputarr = array($inputarr);
     1106                        }
    9831107
    9841108                        $element0 = reset($inputarr);
     
    9901114
    9911115                        if (!is_array($sql) && !$this->_bindInputArray) {
     1116                                // @TODO this would consider a '?' within a string as a parameter...
    9921117                                $sqlarr = explode('?',$sql);
    9931118                                $nparams = sizeof($sqlarr)-1;
    994                                 if (!$array_2d) $inputarr = array($inputarr);
     1119
     1120                                // Make sure the number of parameters provided in the input
     1121                                // array matches what the query expects
     1122                                if ($nparams != count($inputarr)) {
     1123                                        $this->outp_throw(
     1124                                                "Input array has " . count($inputarr) .
     1125                                                " params, does not match query: '" . htmlspecialchars($sql) . "'",
     1126                                                'Execute'
     1127                                        );
     1128                                        return false;
     1129                                }
     1130
     1131                                if (!$array_2d) {
     1132                                        $inputarr = array($inputarr);
     1133                                }
    9951134
    9961135                                foreach($inputarr as $arr) {
     
    10021141                                                // Only quote string types
    10031142                                                $typ = gettype($v);
    1004                                                 if ($typ == 'string')
     1143                                                if ($typ == 'string') {
    10051144                                                        //New memory copy of input created here -mikefedyk
    10061145                                                        $sql .= $this->qstr($v);
    1007                                                 else if ($typ == 'double')
     1146                                                } else if ($typ == 'double') {
    10081147                                                        $sql .= str_replace(',','.',$v); // locales fix so 1.1 does not get converted to 1,1
    1009                                                 else if ($typ == 'boolean')
     1148                                                } else if ($typ == 'boolean') {
    10101149                                                        $sql .= $v ? $this->true : $this->false;
    1011                                                 else if ($typ == 'object') {
    1012                                                         if (method_exists($v, '__toString')) $sql .= $this->qstr($v->__toString());
    1013                                                         else $sql .= $this->qstr((string) $v);
    1014                                                 } else if ($v === null)
     1150                                                } else if ($typ == 'object') {
     1151                                                        if (method_exists($v, '__toString')) {
     1152                                                                $sql .= $this->qstr($v->__toString());
     1153                                                        } else {
     1154                                                                $sql .= $this->qstr((string) $v);
     1155                                                        }
     1156                                                } else if ($v === null) {
    10151157                                                        $sql .= 'NULL';
    1016                                                 else
     1158                                                } else {
    10171159                                                        $sql .= $v;
     1160                                                }
    10181161                                                $i += 1;
    10191162
    1020                                                 if ($i == $nparams) break;
     1163                                                if ($i == $nparams) {
     1164                                                        break;
     1165                                                }
    10211166                                        } // while
    10221167                                        if (isset($sqlarr[$i])) {
    10231168                                                $sql .= $sqlarr[$i];
    1024                                                 if ($i+1 != sizeof($sqlarr)) $this->outp_throw( "Input Array does not match ?: ".htmlspecialchars($sql),'Execute');
    1025                                         } else if ($i != sizeof($sqlarr))
     1169                                                if ($i+1 != sizeof($sqlarr)) {
     1170                                                        $this->outp_throw( "Input Array does not match ?: ".htmlspecialchars($sql),'Execute');
     1171                                                }
     1172                                        } else if ($i != sizeof($sqlarr)) {
    10261173                                                $this->outp_throw( "Input array does not match ?: ".htmlspecialchars($sql),'Execute');
     1174                                        }
    10271175
    10281176                                        $ret = $this->_Execute($sql);
    1029                                         if (!$ret) return $ret;
     1177                                        if (!$ret) {
     1178                                                return $ret;
     1179                                        }
    10301180                                }
    10311181                        } else {
    10321182                                if ($array_2d) {
    1033                                         if (is_string($sql))
     1183                                        if (is_string($sql)) {
    10341184                                                $stmt = $this->Prepare($sql);
    1035                                         else
     1185                                        } else {
    10361186                                                $stmt = $sql;
     1187                                        }
    10371188
    10381189                                        foreach($inputarr as $arr) {
    10391190                                                $ret = $this->_Execute($stmt,$arr);
    1040                                                 if (!$ret) return $ret;
     1191                                                if (!$ret) {
     1192                                                        return $ret;
     1193                                                }
    10411194                                        }
    10421195                                } else {
     
    10511204        }
    10521205
    1053 
    1054         function _Execute($sql,$inputarr=false)
    1055         {
     1206        function _Execute($sql,$inputarr=false) {
     1207                // ExecuteCursor() may send non-string queries (such as arrays),
     1208                // so we need to ignore those.
     1209                if( is_string($sql) ) {
     1210                        // Strips keyword used to help generate SELECT COUNT(*) queries
     1211                        // from SQL if it exists.
     1212                        $sql = ADODB_str_replace( '_ADODB_COUNT', '', $sql );
     1213                }
     1214
    10561215                if ($this->debug) {
    10571216                        global $ADODB_INCLUDED_LIB;
    1058                         if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     1217                        if (empty($ADODB_INCLUDED_LIB)) {
     1218                                include(ADODB_DIR.'/adodb-lib.inc.php');
     1219                        }
    10591220                        $this->_queryID = _adodb_debug_execute($this, $sql,$inputarr);
    10601221                } else {
     
    10661227                // ************************
    10671228
    1068                 if ($this->_queryID === false) { // error handling if query fails
    1069                         if ($this->debug == 99) adodb_backtrace(true,5);
     1229                // error handling if query fails
     1230                if ($this->_queryID === false) {
     1231                        if ($this->debug == 99) {
     1232                                adodb_backtrace(true,5);
     1233                        }
    10701234                        $fn = $this->raiseErrorFn;
    10711235                        if ($fn) {
    10721236                                $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr,$this);
    10731237                        }
    1074                         $false = false;
    1075                         return $false;
    1076                 }
    1077 
    1078                 if ($this->_queryID === true) { // return simplified recordset for inserts/updates/deletes with lower overhead
     1238                        return false;
     1239                }
     1240
     1241                // return simplified recordset for inserts/updates/deletes with lower overhead
     1242                if ($this->_queryID === true) {
    10791243                        $rsclass = $this->rsPrefix.'empty';
    10801244                        $rs = (class_exists($rsclass)) ? new $rsclass():  new ADORecordSet_empty();
     
    10881252                $rs->connection = $this; // Pablo suggestion
    10891253                $rs->Init();
    1090                 if (is_array($sql)) $rs->sql = $sql[0];
    1091                 else $rs->sql = $sql;
     1254                if (is_array($sql)) {
     1255                        $rs->sql = $sql[0];
     1256                } else {
     1257                        $rs->sql = $sql;
     1258                }
    10921259                if ($rs->_numOfRows <= 0) {
    1093                 global $ADODB_COUNTRECS;
     1260                        global $ADODB_COUNTRECS;
    10941261                        if ($ADODB_COUNTRECS) {
    10951262                                if (!$rs->EOF) {
     
    11031270        }
    11041271
    1105         function CreateSequence($seqname='adodbseq',$startID=1)
    1106         {
    1107                 if (empty($this->_genSeqSQL)) return false;
     1272        function CreateSequence($seqname='adodbseq',$startID=1) {
     1273                if (empty($this->_genSeqSQL)) {
     1274                        return false;
     1275                }
    11081276                return $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID));
    11091277        }
    11101278
    1111         function DropSequence($seqname='adodbseq')
    1112         {
    1113                 if (empty($this->_dropSeqSQL)) return false;
     1279        function DropSequence($seqname='adodbseq') {
     1280                if (empty($this->_dropSeqSQL)) {
     1281                        return false;
     1282                }
    11141283                return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
    11151284        }
     
    11231292         * @return              0 if not supported, otherwise a sequence id
    11241293         */
    1125         function GenID($seqname='adodbseq',$startID=1)
    1126         {
     1294        function GenID($seqname='adodbseq',$startID=1) {
    11271295                if (!$this->hasGenID) {
    11281296                        return 0; // formerly returns false pre 1.60
     
    11431311                        $rs = $this->Execute($getnext);
    11441312                }
    1145                 if ($rs && !$rs->EOF) $this->genID = reset($rs->fields);
    1146                 else $this->genID = 0; // false
    1147 
    1148                 if ($rs) $rs->Close();
     1313                if ($rs && !$rs->EOF) {
     1314                        $this->genID = reset($rs->fields);
     1315                } else {
     1316                        $this->genID = 0; // false
     1317                }
     1318
     1319                if ($rs) {
     1320                        $rs->Close();
     1321                }
    11491322
    11501323                return $this->genID;
     
    11561329         * @return  the last inserted ID. Not all databases support this.
    11571330         */
    1158         function Insert_ID($table='',$column='')
    1159         {
    1160                 if ($this->_logsql && $this->lastInsID) return $this->lastInsID;
    1161                 if ($this->hasInsertID) return $this->_insertid($table,$column);
     1331        function Insert_ID($table='',$column='') {
     1332                if ($this->_logsql && $this->lastInsID) {
     1333                        return $this->lastInsID;
     1334                }
     1335                if ($this->hasInsertID) {
     1336                        return $this->_insertid($table,$column);
     1337                }
    11621338                if ($this->debug) {
    11631339                        ADOConnection::outp( '<p>Insert_ID error</p>');
     
    11741350         * problems in multiuser environments. Heavy test this before deploying.
    11751351         */
    1176         function PO_Insert_ID($table="", $id="")
    1177         {
    1178            if ($this->hasInsertID){
    1179                    return $this->Insert_ID($table,$id);
    1180            } else {
    1181                    return $this->GetOne("SELECT MAX($id) FROM $table");
    1182            }
     1352        function PO_Insert_ID($table="", $id="") {
     1353                if ($this->hasInsertID){
     1354                        return $this->Insert_ID($table,$id);
     1355                } else {
     1356                        return $this->GetOne("SELECT MAX($id) FROM $table");
     1357                }
    11831358        }
    11841359
     
    11861361        * @return # rows affected by UPDATE/DELETE
    11871362        */
    1188         function Affected_Rows()
    1189         {
     1363        function Affected_Rows() {
    11901364                if ($this->hasAffectedRows) {
    11911365                        if ($this->fnExecute === 'adodb_log_sql') {
    1192                                 if ($this->_logsql && $this->_affected !== false) return $this->_affected;
     1366                                if ($this->_logsql && $this->_affected !== false) {
     1367                                        return $this->_affected;
     1368                                }
    11931369                        }
    11941370                        $val = $this->_affectedrows();
     
    11961372                }
    11971373
    1198                 if ($this->debug) ADOConnection::outp( '<p>Affected_Rows error</p>',false);
     1374                if ($this->debug) {
     1375                        ADOConnection::outp( '<p>Affected_Rows error</p>',false);
     1376                }
    11991377                return false;
    12001378        }
     
    12041382         * @return  the last error message
    12051383         */
    1206         function ErrorMsg()
    1207         {
    1208                 if ($this->_errorMsg) return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg;
    1209                 else return '';
     1384        function ErrorMsg() {
     1385                if ($this->_errorMsg) {
     1386                        return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg;
     1387                } else {
     1388                        return '';
     1389                }
    12101390        }
    12111391
     
    12141394         * @return the last error number. Normally 0 means no error.
    12151395         */
    1216         function ErrorNo()
    1217         {
     1396        function ErrorNo() {
    12181397                return ($this->_errorMsg) ? -1 : 0;
    12191398        }
    12201399
    1221         function MetaError($err=false)
    1222         {
     1400        function MetaError($err=false) {
    12231401                include_once(ADODB_DIR."/adodb-error.inc.php");
    1224                 if ($err === false) $err = $this->ErrorNo();
     1402                if ($err === false) {
     1403                        $err = $this->ErrorNo();
     1404                }
    12251405                return adodb_error($this->dataProvider,$this->databaseType,$err);
    12261406        }
    12271407
    1228         function MetaErrorMsg($errno)
    1229         {
     1408        function MetaErrorMsg($errno) {
    12301409                include_once(ADODB_DIR."/adodb-error.inc.php");
    12311410                return adodb_errormsg($errno);
     
    12351414         * @returns an array with the primary key columns in it.
    12361415         */
    1237         function MetaPrimaryKeys($table, $owner=false)
    1238         {
     1416        function MetaPrimaryKeys($table, $owner=false) {
    12391417        // owner not used in base class - see oci8
    12401418                $p = array();
     
    12421420                if ($objs) {
    12431421                        foreach($objs as $v) {
    1244                                 if (!empty($v->primary_key))
     1422                                if (!empty($v->primary_key)) {
    12451423                                        $p[] = $v->name;
    1246                         }
    1247                 }
    1248                 if (sizeof($p)) return $p;
    1249                 if (function_exists('ADODB_VIEW_PRIMARYKEYS'))
     1424                                }
     1425                        }
     1426                }
     1427                if (sizeof($p)) {
     1428                        return $p;
     1429                }
     1430                if (function_exists('ADODB_VIEW_PRIMARYKEYS')) {
    12501431                        return ADODB_VIEW_PRIMARYKEYS($this->databaseType, $this->database, $table, $owner);
     1432                }
    12511433                return false;
    12521434        }
     
    12551437         * @returns assoc array where keys are tables, and values are foreign keys
    12561438         */
    1257         function MetaForeignKeys($table, $owner=false, $upper=false)
    1258         {
     1439        function MetaForeignKeys($table, $owner=false, $upper=false) {
    12591440                return false;
    12601441        }
     
    12621443         * Choose a database to connect to. Many databases do not support this.
    12631444         *
    1264          * @param dbName        is the name of the database to select
    1265          * @return              true or false
    1266          */
    1267         function SelectDB($dbName)
    1268         {return false;}
     1445         * @param dbName is the name of the database to select
     1446         * @return true or false
     1447         */
     1448        function SelectDB($dbName) {return false;}
    12691449
    12701450
     
    12881468         * @return              the recordset ($rs->databaseType == 'array')
    12891469         */
    1290         function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
    1291         {
     1470        function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) {
    12921471                if ($this->hasTop && $nrows > 0) {
    1293                 // suggested by Reinhard Balling. Access requires top after distinct
    1294                  // Informix requires first before distinct - F Riosa
     1472                        // suggested by Reinhard Balling. Access requires top after distinct
     1473                        // Informix requires first before distinct - F Riosa
    12951474                        $ismssql = (strpos($this->databaseType,'mssql') !== false);
    1296                         if ($ismssql) $isaccess = false;
    1297                         else $isaccess = (strpos($this->databaseType,'access') !== false);
    1298 
    1299                         if ($offset <=  0) {
    1300 
     1475                        if ($ismssql) {
     1476                                $isaccess = false;
     1477                        } else {
     1478                                $isaccess = (strpos($this->databaseType,'access') !== false);
     1479                        }
     1480
     1481                        if ($offset <= 0) {
    13011482                                        // access includes ties in result
    13021483                                        if ($isaccess) {
     
    13371518
    13381519
    1339                 if ($secs2cache != 0) $rs = $this->CacheExecute($secs2cache,$sql,$inputarr);
    1340                 else $rs = $this->Execute($sql,$inputarr);
     1520                if ($secs2cache != 0) {
     1521                        $rs = $this->CacheExecute($secs2cache,$sql,$inputarr);
     1522                } else {
     1523                        $rs = $this->Execute($sql,$inputarr);
     1524                }
    13411525
    13421526                $ADODB_COUNTRECS = $savec;
     
    13531537        * @param rs                     the recordset to serialize
    13541538        */
    1355         function SerializableRS(&$rs)
    1356         {
     1539        function SerializableRS(&$rs) {
    13571540                $rs2 = $this->_rs2rs($rs);
    13581541                $ignore = false;
     
    13681551        *
    13691552        * @param rs                     the recordset to copy
    1370         * @param [nrows]        number of rows to retrieve (optional)
    1371         * @param [offset]       offset by number of rows (optional)
    1372         * @return                       the new recordset
     1553        * @param [nrows]        number of rows to retrieve (optional)
     1554        * @param [offset]       offset by number of rows (optional)
     1555        * @return                       the new recordset
    13731556        */
    1374         function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true)
    1375         {
     1557        function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true) {
    13761558                if (! $rs) {
    1377                         $false = false;
    1378                         return $false;
     1559                        return false;
    13791560                }
    13801561                $dbtype = $rs->databaseType;
     
    13951576                $arr = $rs->GetArrayLimit($nrows,$offset);
    13961577                //print_r($arr);
    1397                 if ($close) $rs->Close();
     1578                if ($close) {
     1579                        $rs->Close();
     1580                }
    13981581
    13991582                $arrayClass = $this->arrayClass;
     
    14111594        * Return all rows. Compat with PEAR DB
    14121595        */
    1413         function GetAll($sql, $inputarr=false)
    1414         {
     1596        function GetAll($sql, $inputarr=false) {
    14151597                $arr = $this->GetArray($sql,$inputarr);
    14161598                return $arr;
    14171599        }
    14181600
    1419         function GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false)
    1420         {
     1601        function GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false) {
    14211602                $rs = $this->Execute($sql, $inputarr);
    14221603                if (!$rs) {
    1423                         $false = false;
    1424                         return $false;
     1604                        return false;
    14251605                }
    14261606                $arr = $rs->GetAssoc($force_array,$first2cols);
     
    14281608        }
    14291609
    1430         function CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false)
    1431         {
     1610        function CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false) {
    14321611                if (!is_numeric($secs2cache)) {
    14331612                        $first2cols = $force_array;
     
    14361615                $rs = $this->CacheExecute($secs2cache, $sql, $inputarr);
    14371616                if (!$rs) {
    1438                         $false = false;
    1439                         return $false;
     1617                        return false;
    14401618                }
    14411619                $arr = $rs->GetAssoc($force_array,$first2cols);
     
    14501628        * @param [inputarr]             input bind array
    14511629        */
    1452         function GetOne($sql,$inputarr=false)
    1453         {
    1454         global $ADODB_COUNTRECS,$ADODB_GETONE_EOF;
     1630        function GetOne($sql,$inputarr=false) {
     1631                global $ADODB_COUNTRECS,$ADODB_GETONE_EOF;
     1632
    14551633                $crecs = $ADODB_COUNTRECS;
    14561634                $ADODB_COUNTRECS = false;
     
    14591637                $rs = $this->Execute($sql,$inputarr);
    14601638                if ($rs) {
    1461                         if ($rs->EOF) $ret = $ADODB_GETONE_EOF;
    1462                         else $ret = reset($rs->fields);
     1639                        if ($rs->EOF) {
     1640                                $ret = $ADODB_GETONE_EOF;
     1641                        } else {
     1642                                $ret = reset($rs->fields);
     1643                        }
    14631644
    14641645                        $rs->Close();
     
    14691650
    14701651        // $where should include 'WHERE fld=value'
    1471         function GetMedian($table, $field,$where = '')
    1472         {
     1652        function GetMedian($table, $field,$where = '') {
    14731653                $total = $this->GetOne("select count(*) from $table $where");
    1474                 if (!$total) return false;
     1654                if (!$total) {
     1655                        return false;
     1656                }
    14751657
    14761658                $midrow = (integer) ($total/2);
    14771659                $rs = $this->SelectLimit("select $field from $table $where order by 1",1,$midrow);
    1478                 if ($rs && !$rs->EOF) return reset($rs->fields);
     1660                if ($rs && !$rs->EOF) {
     1661                        return reset($rs->fields);
     1662                }
    14791663                return false;
    14801664        }
    14811665
    14821666
    1483         function CacheGetOne($secs2cache,$sql=false,$inputarr=false)
    1484         {
    1485         global $ADODB_GETONE_EOF;
     1667        function CacheGetOne($secs2cache,$sql=false,$inputarr=false) {
     1668                global $ADODB_GETONE_EOF;
     1669
    14861670                $ret = false;
    14871671                $rs = $this->CacheExecute($secs2cache,$sql,$inputarr);
    14881672                if ($rs) {
    1489                         if ($rs->EOF) $ret = $ADODB_GETONE_EOF;
    1490                         else $ret = reset($rs->fields);
     1673                        if ($rs->EOF) {
     1674                                $ret = $ADODB_GETONE_EOF;
     1675                        } else {
     1676                                $ret = reset($rs->fields);
     1677                        }
    14911678                        $rs->Close();
    14921679                }
     
    14951682        }
    14961683
    1497         function GetCol($sql, $inputarr = false, $trim = false)
    1498         {
    1499 
    1500                 $rs = $this->Execute($sql, $inputarr);
    1501                 if ($rs) {
    1502                         $rv = array();
    1503                         if ($trim) {
    1504                                 while (!$rs->EOF) {
    1505                                         $rv[] = trim(reset($rs->fields));
    1506                                         $rs->MoveNext();
    1507                                 }
    1508                         } else {
    1509                                 while (!$rs->EOF) {
    1510                                         $rv[] = reset($rs->fields);
    1511                                         $rs->MoveNext();
    1512                                 }
    1513                         }
    1514                         $rs->Close();
    1515                 } else
    1516                         $rv = false;
    1517                 return $rv;
    1518         }
    1519 
    1520         function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false)
    1521         {
    1522                 $rs = $this->CacheExecute($secs, $sql, $inputarr);
    1523                 if ($rs) {
     1684        function GetCol($sql, $inputarr = false, $trim = false) {
     1685
     1686                $rs = $this->Execute($sql, $inputarr);
     1687                if ($rs) {
    15241688                        $rv = array();
    15251689                        if ($trim) {
     
    15271691                                        $rv[] = trim(reset($rs->fields));
    15281692                                        $rs->MoveNext();
    1529                                 }
     1693                                }
    15301694                        } else {
    15311695                                while (!$rs->EOF) {
    15321696                                        $rv[] = reset($rs->fields);
    15331697                                        $rs->MoveNext();
    1534                                 }
    1535                         }
    1536                         $rs->Close();
    1537                 } else
     1698                                }
     1699                        }
     1700                        $rs->Close();
     1701                } else {
    15381702                        $rv = false;
    1539 
    1540                 return $rv;
    1541         }
    1542 
    1543         function Transpose(&$rs,$addfieldnames=true)
    1544         {
     1703                }
     1704                return $rv;
     1705        }
     1706
     1707        function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false) {
     1708                $rs = $this->CacheExecute($secs, $sql, $inputarr);
     1709                if ($rs) {
     1710                        $rv = array();
     1711                        if ($trim) {
     1712                                while (!$rs->EOF) {
     1713                                        $rv[] = trim(reset($rs->fields));
     1714                                        $rs->MoveNext();
     1715                                }
     1716                        } else {
     1717                                while (!$rs->EOF) {
     1718                                        $rv[] = reset($rs->fields);
     1719                                        $rs->MoveNext();
     1720                                }
     1721                        }
     1722                        $rs->Close();
     1723                } else
     1724                        $rv = false;
     1725
     1726                return $rv;
     1727        }
     1728
     1729        function Transpose(&$rs,$addfieldnames=true) {
    15451730                $rs2 = $this->_rs2rs($rs);
    1546                 $false = false;
    1547                 if (!$rs2) return $false;
     1731                if (!$rs2) {
     1732                        return false;
     1733                }
    15481734
    15491735                $rs2->_transpose($addfieldnames);
     
    15581744                If dayFraction=1.5 means 1.5 days from now, 1.0/24 for 1 hour.
    15591745        */
    1560         function OffsetDate($dayFraction,$date=false)
    1561         {
    1562                 if (!$date) $date = $this->sysDate;
     1746        function OffsetDate($dayFraction,$date=false) {
     1747                if (!$date) {
     1748                        $date = $this->sysDate;
     1749                }
    15631750                return  '('.$date.'+'.$dayFraction.')';
    15641751        }
     
    15701757        * @param [inputarr]             input bind array
    15711758        */
    1572         function GetArray($sql,$inputarr=false)
    1573         {
    1574         global $ADODB_COUNTRECS;
     1759        function GetArray($sql,$inputarr=false) {
     1760                global $ADODB_COUNTRECS;
    15751761
    15761762                $savec = $ADODB_COUNTRECS;
     
    15831769                                return $cls;
    15841770                        } else {
    1585                                 $false = false;
    1586                                 return $false;
     1771                                return false;
    15871772                        }
    15881773                $arr = $rs->GetArray();
     
    15911776        }
    15921777
    1593         function CacheGetAll($secs2cache,$sql=false,$inputarr=false)
    1594         {
     1778        function CacheGetAll($secs2cache,$sql=false,$inputarr=false) {
    15951779                $arr = $this->CacheGetArray($secs2cache,$sql,$inputarr);
    15961780                return $arr;
    15971781        }
    15981782
    1599         function CacheGetArray($secs2cache,$sql=false,$inputarr=false)
    1600         {
    1601         global $ADODB_COUNTRECS;
     1783        function CacheGetArray($secs2cache,$sql=false,$inputarr=false) {
     1784                global $ADODB_COUNTRECS;
    16021785
    16031786                $savec = $ADODB_COUNTRECS;
     
    16111794                                return $cls;
    16121795                        } else {
    1613                                 $false = false;
    1614                                 return $false;
     1796                                return false;
    16151797                        }
    16161798                $arr = $rs->GetArray();
     
    16191801        }
    16201802
    1621         function GetRandRow($sql, $arr= false)
    1622         {
     1803        function GetRandRow($sql, $arr= false) {
    16231804                $rezarr = $this->GetAll($sql, $arr);
    16241805                $sz = sizeof($rezarr);
     
    16331814        * @param [inputarr]             input bind array
    16341815        */
    1635         function GetRow($sql,$inputarr=false)
    1636         {
    1637         global $ADODB_COUNTRECS;
     1816        function GetRow($sql,$inputarr=false) {
     1817                global $ADODB_COUNTRECS;
     1818
    16381819                $crecs = $ADODB_COUNTRECS;
    16391820                $ADODB_COUNTRECS = false;
     
    16431824                $ADODB_COUNTRECS = $crecs;
    16441825                if ($rs) {
    1645                         if (!$rs->EOF) $arr = $rs->fields;
    1646                         else $arr = array();
     1826                        if (!$rs->EOF) {
     1827                                $arr = $rs->fields;
     1828                        } else {
     1829                                $arr = array();
     1830                        }
    16471831                        $rs->Close();
    16481832                        return $arr;
    16491833                }
    16501834
    1651                 $false = false;
    1652                 return $false;
    1653         }
    1654 
    1655         function CacheGetRow($secs2cache,$sql=false,$inputarr=false)
    1656         {
     1835                return false;
     1836        }
     1837
     1838        function CacheGetRow($secs2cache,$sql=false,$inputarr=false) {
    16571839                $rs = $this->CacheExecute($secs2cache,$sql,$inputarr);
    16581840                if ($rs) {
    1659                         if (!$rs->EOF) $arr = $rs->fields;
    1660                         else $arr = array();
     1841                        if (!$rs->EOF) {
     1842                                $arr = $rs->fields;
     1843                        } else {
     1844                                $arr = array();
     1845                        }
    16611846
    16621847                        $rs->Close();
    16631848                        return $arr;
    16641849                }
    1665                 $false = false;
    1666                 return $false;
     1850                return false;
    16671851        }
    16681852
     
    16871871        */
    16881872
    1689         function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false)
    1690         {
     1873        function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false) {
    16911874                global $ADODB_INCLUDED_LIB;
    1692                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     1875                if (empty($ADODB_INCLUDED_LIB)) {
     1876                        include(ADODB_DIR.'/adodb-lib.inc.php');
     1877                }
    16931878
    16941879                return _adodb_replace($this, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc);
     
    17141899         * @return              the recordset ($rs->databaseType == 'array')
    17151900         */
    1716         function CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false)
    1717         {
     1901        function CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false) {
    17181902                if (!is_numeric($secs2cache)) {
    1719                         if ($sql === false) $sql = -1;
    1720                         if ($offset == -1) $offset = false;
    1721                                                                           // sql,       nrows, offset,inputarr
     1903                        if ($sql === false) {
     1904                                $sql = -1;
     1905                        }
     1906                        if ($offset == -1) {
     1907                                $offset = false;
     1908                        }
     1909                                                                                                // sql, nrows, offset,inputarr
    17221910                        $rs = $this->SelectLimit($secs2cache,$sql,$nrows,$offset,$this->cacheSecs);
    17231911                } else {
    1724                         if ($sql === false) $this->outp_throw("Warning: \$sql missing from CacheSelectLimit()",'CacheSelectLimit');
     1912                        if ($sql === false) {
     1913                                $this->outp_throw("Warning: \$sql missing from CacheSelectLimit()",'CacheSelectLimit');
     1914                        }
    17251915                        $rs = $this->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
    17261916                }
    17271917                return $rs;
    17281918        }
    1729 
    17301919
    17311920        /**
     
    17331922         * If $sql == false, then we purge all files in the cache.
    17341923         */
    1735 
    1736         /**
    1737          * Flush cached recordsets that match a particular $sql statement.
    1738          * If $sql == false, then we purge all files in the cache.
    1739          */
    1740         function CacheFlush($sql=false,$inputarr=false)
    1741         {
    1742         global $ADODB_CACHE_DIR, $ADODB_CACHE;
    1743 
    1744                 if (empty($ADODB_CACHE)) return false;
     1924        function CacheFlush($sql=false,$inputarr=false) {
     1925                global $ADODB_CACHE_DIR, $ADODB_CACHE;
     1926
     1927                # Create cache if it does not exist
     1928                if (empty($ADODB_CACHE)) {
     1929                        $this->_CreateCache();
     1930                }
    17451931
    17461932                if (!$sql) {
    1747                          $ADODB_CACHE->flushall($this->debug);
    1748                  return;
    1749             }
     1933                        $ADODB_CACHE->flushall($this->debug);
     1934                        return;
     1935                }
    17501936
    17511937                $f = $this->_gencachename($sql.serialize($inputarr),false);
     
    17681954         * then we can scale to 12.8 million unique cached recordsets. Wow!
    17691955         */
    1770         function _gencachename($sql,$createdir)
    1771         {
    1772         global $ADODB_CACHE, $ADODB_CACHE_DIR;
     1956        function _gencachename($sql,$createdir) {
     1957                global $ADODB_CACHE, $ADODB_CACHE_DIR;
    17731958
    17741959                if ($this->fetchMode === false) {
    1775                 global $ADODB_FETCH_MODE;
     1960                        global $ADODB_FETCH_MODE;
    17761961                        $mode = $ADODB_FETCH_MODE;
    17771962                } else {
     
    17791964                }
    17801965                $m = md5($sql.$this->databaseType.$this->database.$this->user.$mode);
    1781                 if (!$ADODB_CACHE->createdir) return $m;
    1782                 if (!$createdir) $dir = $ADODB_CACHE->getdirname($m);
    1783                 else $dir = $ADODB_CACHE->createdir($m, $this->debug);
     1966                if (!$ADODB_CACHE->createdir) {
     1967                        return $m;
     1968                }
     1969                if (!$createdir) {
     1970                        $dir = $ADODB_CACHE->getdirname($m);
     1971                } else {
     1972                        $dir = $ADODB_CACHE->createdir($m, $this->debug);
     1973                }
    17841974
    17851975                return $dir.'/adodb_'.$m.'.cache';
     
    17941984         * @param sql           SQL statement to execute
    17951985         * @param [inputarr]    holds the input data  to bind to
    1796          * @return              RecordSet or false
    1797          */
    1798         function CacheExecute($secs2cache,$sql=false,$inputarr=false)
    1799         {
    1800         global $ADODB_CACHE;
    1801 
    1802                 if (empty($ADODB_CACHE)) $this->_CreateCache();
     1986         * @return              RecordSet or false
     1987         */
     1988        function CacheExecute($secs2cache,$sql=false,$inputarr=false) {
     1989                global $ADODB_CACHE;
     1990
     1991                if (empty($ADODB_CACHE)) {
     1992                        $this->_CreateCache();
     1993                }
    18031994
    18041995                if (!is_numeric($secs2cache)) {
     
    18332024                                        ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :(");
    18342025                                }
    1835                                 if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (this is a notice and not an error)");
     2026                                if ($this->debug !== -1) {
     2027                                        ADOConnection::outp( " $md5file cache failure: $err (this is a notice and not an error)");
     2028                                }
    18362029                        }
    18372030
     
    18392032
    18402033                        if ($rs) {
    1841 
    18422034                                $eof = $rs->EOF;
    18432035                                $rs = $this->_rs2rs($rs); // read entire recordset into memory immediately
     
    18602052                                        }
    18612053
    1862                                         if ($this->debug) ADOConnection::outp( " ".$em);
     2054                                        if ($this->debug) {
     2055                                                ADOConnection::outp( " ".$em);
     2056                                        }
    18632057                                }
    18642058                                if ($rs->EOF && !$eof) {
     
    18682062                                }
    18692063
    1870                         } else if (!$this->memCache)
     2064                        } else if (!$this->memCache) {
    18712065                                $ADODB_CACHE->flushcache($md5file);
     2066                        }
    18722067                } else {
    18732068                        $this->_errorMsg = '';
     
    18782073                                $fn($this, $secs2cache, $sql, $inputarr);
    18792074                        }
    1880                 // ok, set cached object found
     2075                        // ok, set cached object found
    18812076                        $rs->connection = $this; // Pablo suggestion
    18822077                        if ($this->debug){
    1883                                 if ($this->debug == 99) adodb_backtrace();
     2078                                if ($this->debug == 99) {
     2079                                        adodb_backtrace();
     2080                                }
    18842081                                $inBrowser = isset($_SERVER['HTTP_USER_AGENT']);
    18852082                                $ttl = $rs->timeCreated + $secs2cache - time();
    18862083                                $s = is_array($sql) ? $sql[0] : $sql;
    1887                                 if ($inBrowser) $s = '<i>'.htmlspecialchars($s).'</i>';
     2084                                if ($inBrowser) {
     2085                                        $s = '<i>'.htmlspecialchars($s).'</i>';
     2086                                }
    18882087
    18892088                                ADOConnection::outp( " $md5file reloaded, ttl=$ttl [ $s ]");
     
    19012100                $forceUpdate means that even if the data has not changed, perform update.
    19022101         */
    1903         function AutoExecute($table, $fields_values, $mode = 'INSERT', $where = FALSE, $forceUpdate=true, $magicq=false)
    1904         {
    1905                 $false = false;
    1906                 $sql = 'SELECT * FROM '.$table;
    1907                 if ($where!==FALSE) $sql .= ' WHERE '.$where;
    1908                 else if ($mode == 'UPDATE' || $mode == 2 /* DB_AUTOQUERY_UPDATE */) {
    1909                         $this->outp_throw('AutoExecute: Illegal mode=UPDATE with empty WHERE clause','AutoExecute');
    1910                         return $false;
    1911                 }
    1912 
    1913                 $rs = $this->SelectLimit($sql,1);
    1914                 if (!$rs) return $false; // table does not exist
     2102        function AutoExecute($table, $fields_values, $mode = 'INSERT', $where = false, $forceUpdate = true, $magicq = false) {
     2103                if ($where === false && ($mode == 'UPDATE' || $mode == 2 /* DB_AUTOQUERY_UPDATE */) ) {
     2104                        $this->outp_throw('AutoExecute: Illegal mode=UPDATE with empty WHERE clause', 'AutoExecute');
     2105                        return false;
     2106                }
     2107
     2108                $sql = "SELECT * FROM $table";
     2109                $rs = $this->SelectLimit($sql, 1);
     2110                if (!$rs) {
     2111                        return false; // table does not exist
     2112                }
     2113
    19152114                $rs->tableName = $table;
     2115                if ($where !== false) {
     2116                        $sql .= " WHERE $where";
     2117                }
    19162118                $rs->sql = $sql;
    19172119
    1918                 switch((string) $mode) {
    1919                 case 'UPDATE':
    1920                 case '2':
    1921                         $sql = $this->GetUpdateSQL($rs, $fields_values, $forceUpdate, $magicq);
    1922                         break;
    1923                 case 'INSERT':
    1924                 case '1':
    1925                         $sql = $this->GetInsertSQL($rs, $fields_values, $magicq);
    1926                         break;
    1927                 default:
    1928                         $this->outp_throw("AutoExecute: Unknown mode=$mode",'AutoExecute');
    1929                         return $false;
    1930                 }
    1931                 $ret = false;
    1932                 if ($sql) $ret = $this->Execute($sql);
    1933                 if ($ret) $ret = true;
    1934                 return $ret;
     2120                switch($mode) {
     2121                        case 'UPDATE':
     2122                        case DB_AUTOQUERY_UPDATE:
     2123                                $sql = $this->GetUpdateSQL($rs, $fields_values, $forceUpdate, $magicq);
     2124                                break;
     2125                        case 'INSERT':
     2126                        case DB_AUTOQUERY_INSERT:
     2127                                $sql = $this->GetInsertSQL($rs, $fields_values, $magicq);
     2128                                break;
     2129                        default:
     2130                                $this->outp_throw("AutoExecute: Unknown mode=$mode", 'AutoExecute');
     2131                                return false;
     2132                }
     2133                return $sql && $this->Execute($sql);
    19352134        }
    19362135
     
    19472146         * "Jonathan Younger" <jyounger@unilab.com>
    19482147         */
    1949         function GetUpdateSQL(&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=null)
    1950         {
     2148        function GetUpdateSQL(&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=null) {
    19512149                global $ADODB_INCLUDED_LIB;
    19522150
     
    19552153                // with older adodb versions. Sets force type to force nulls if $forcenulls is set.
    19562154                if (!isset($force)) {
    1957                                 global $ADODB_FORCE_TYPE;
    1958                             $force = $ADODB_FORCE_TYPE;
     2155                        global $ADODB_FORCE_TYPE;
     2156                        $force = $ADODB_FORCE_TYPE;
    19592157                }
    19602158                // ********************************************************
    19612159
    1962                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     2160                if (empty($ADODB_INCLUDED_LIB)) {
     2161                        include(ADODB_DIR.'/adodb-lib.inc.php');
     2162                }
    19632163                return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq,$force);
    19642164        }
     
    19722172         *       that is run against a single table.
    19732173         */
    1974         function GetInsertSQL(&$rs, $arrFields,$magicq=false,$force=null)
    1975         {
     2174        function GetInsertSQL(&$rs, $arrFields,$magicq=false,$force=null) {
    19762175                global $ADODB_INCLUDED_LIB;
    19772176                if (!isset($force)) {
    19782177                        global $ADODB_FORCE_TYPE;
    19792178                        $force = $ADODB_FORCE_TYPE;
    1980 
    1981                 }
    1982                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     2179                }
     2180                if (empty($ADODB_INCLUDED_LIB)) {
     2181                        include(ADODB_DIR.'/adodb-lib.inc.php');
     2182                }
    19832183                return _adodb_getinsertsql($this,$rs,$arrFields,$magicq,$force);
    19842184        }
     
    20032203        *       $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
    20042204        */
    2005 
    2006         function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
    2007         {
     2205        function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') {
    20082206                return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false;
    20092207        }
     
    20182216        *       $conn->UpdateBlob('blobtable','blobcol',$blobpath,'id=1');
    20192217        */
    2020         function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB')
    2021         {
     2218        function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') {
    20222219                $fd = fopen($path,'rb');
    2023                 if ($fd === false) return false;
     2220                if ($fd === false) {
     2221                        return false;
     2222                }
    20242223                $val = fread($fd,filesize($path));
    20252224                fclose($fd);
     
    20272226        }
    20282227
    2029         function BlobDecode($blob)
    2030         {
     2228        function BlobDecode($blob) {
    20312229                return $blob;
    20322230        }
    20332231
    2034         function BlobEncode($blob)
    2035         {
     2232        function BlobEncode($blob) {
    20362233                return $blob;
    20372234        }
    20382235
    2039         function SetCharSet($charset)
    2040         {
    2041                 return false;
    2042         }
    2043 
    2044         function IfNull( $field, $ifNull )
    2045         {
     2236        function GetCharSet() {
     2237                return $this->charSet;
     2238        }
     2239
     2240        function SetCharSet($charset) {
     2241                $this->charSet = $charset;
     2242                return true;
     2243        }
     2244
     2245        function IfNull( $field, $ifNull ) {
    20462246                return " CASE WHEN $field is null THEN $ifNull ELSE $field END ";
    20472247        }
    20482248
    2049         function LogSQL($enable=true)
    2050         {
     2249        function LogSQL($enable=true) {
    20512250                include_once(ADODB_DIR.'/adodb-perf.inc.php');
    20522251
    2053                 if ($enable) $this->fnExecute = 'adodb_log_sql';
    2054                 else $this->fnExecute = false;
     2252                if ($enable) {
     2253                        $this->fnExecute = 'adodb_log_sql';
     2254                } else {
     2255                        $this->fnExecute = false;
     2256                }
    20552257
    20562258                $old = $this->_logsql;
    20572259                $this->_logsql = $enable;
    2058                 if ($enable && !$old) $this->_affected = false;
     2260                if ($enable && !$old) {
     2261                        $this->_affected = false;
     2262                }
    20592263                return $old;
    2060         }
    2061 
    2062         function GetCharSet()
    2063         {
    2064                 return false;
    20652264        }
    20662265
     
    20722271        *       $conn->UpdateClob('clobtable','clobcol',$clob,'id=1');
    20732272        */
    2074         function UpdateClob($table,$column,$val,$where)
    2075         {
     2273        function UpdateClob($table,$column,$val,$where) {
    20762274                return $this->UpdateBlob($table,$column,$val,$where,'CLOB');
    20772275        }
     
    20792277        // not the fastest implementation - quick and dirty - jlim
    20802278        // for best performance, use the actual $rs->MetaType().
    2081         function MetaType($t,$len=-1,$fieldobj=false)
    2082         {
     2279        function MetaType($t,$len=-1,$fieldobj=false) {
    20832280
    20842281                if (empty($this->_metars)) {
     
    20952292        *  This is used to get the date formats written depending on the client locale.
    20962293        */
    2097         function SetDateLocale($locale = 'En')
    2098         {
     2294        function SetDateLocale($locale = 'En') {
    20992295                $this->locale = $locale;
    21002296                switch (strtoupper($locale))
     
    21492345                        $relations=array())
    21502346        {
    2151         global $_ADODB_ACTIVE_DBS;
     2347                global $_ADODB_ACTIVE_DBS;
    21522348                ## reduce overhead of adodb.inc.php -- moved to adodb-active-record.inc.php
    21532349                ## if adodb-active-recordx is loaded -- should be no issue as they will probably use Find()
    2154                 if (!isset($_ADODB_ACTIVE_DBS))include_once(ADODB_DIR.'/adodb-active-record.inc.php');
     2350                if (!isset($_ADODB_ACTIVE_DBS)) {
     2351                        include_once(ADODB_DIR.'/adodb-active-record.inc.php');
     2352                }
    21552353                return adodb_GetActiveRecordsClass($this, $class, $table, $whereOrderBy, $bindarr, $primkeyArr, $extra, $relations);
    21562354        }
    21572355
    2158         function GetActiveRecords($table,$where=false,$bindarr=false,$primkeyArr=false)
    2159         {
     2356        function GetActiveRecords($table,$where=false,$bindarr=false,$primkeyArr=false) {
    21602357                $arr = $this->GetActiveRecordsClass('ADODB_Active_Record', $table, $where, $bindarr, $primkeyArr);
    21612358                return $arr;
     
    21652362         * Close Connection
    21662363         */
    2167         function Close()
    2168         {
     2364        function Close() {
    21692365                $rez = $this->_close();
    21702366                $this->_connectionID = false;
     
    21772373         * @return true if succeeded or false if database does not support transactions
    21782374         */
    2179         function BeginTrans()
    2180         {
    2181                 if ($this->debug) ADOConnection::outp("BeginTrans: Transactions not supported for this driver");
     2375        function BeginTrans() {
     2376                if ($this->debug) {
     2377                        ADOConnection::outp("BeginTrans: Transactions not supported for this driver");
     2378                }
    21822379                return false;
    21832380        }
    21842381
    21852382        /* set transaction mode */
    2186         function SetTransactionMode( $transaction_mode )
    2187         {
     2383        function SetTransactionMode( $transaction_mode ) {
    21882384                $transaction_mode = $this->MetaTransaction($transaction_mode, $this->dataProvider);
    21892385                $this->_transmode  = $transaction_mode;
     
    21952391http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_10005.htm
    21962392*/
    2197         function MetaTransaction($mode,$db)
    2198         {
     2393        function MetaTransaction($mode,$db) {
    21992394                $mode = strtoupper($mode);
    22002395                $mode = str_replace('ISOLATION LEVEL ','',$mode);
     
    22422437         * @return true/false.
    22432438         */
    2244         function CommitTrans($ok=true)
    2245         { return true;}
     2439        function CommitTrans($ok=true) {
     2440                return true;
     2441        }
    22462442
    22472443
     
    22512447         * @return true/false.
    22522448         */
    2253         function RollbackTrans()
    2254         { return false;}
     2449        function RollbackTrans() {
     2450                return false;
     2451        }
    22552452
    22562453
     
    22612458         * @return an array of database names.
    22622459         */
    2263                 function MetaDatabases()
    2264                 {
     2460        function MetaDatabases() {
    22652461                global $ADODB_FETCH_MODE;
    22662462
    2267                         if ($this->metaDatabasesSQL) {
    2268                                 $save = $ADODB_FETCH_MODE;
    2269                                 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    2270 
    2271                                 if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
    2272 
    2273                                 $arr = $this->GetCol($this->metaDatabasesSQL);
    2274                                 if (isset($savem)) $this->SetFetchMode($savem);
    2275                                 $ADODB_FETCH_MODE = $save;
    2276 
    2277                                 return $arr;
    2278                         }
    2279 
    2280                         return false;
    2281                 }
     2463                if ($this->metaDatabasesSQL) {
     2464                        $save = $ADODB_FETCH_MODE;
     2465                        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
     2466
     2467                        if ($this->fetchMode !== false) {
     2468                                $savem = $this->SetFetchMode(false);
     2469                        }
     2470
     2471                        $arr = $this->GetCol($this->metaDatabasesSQL);
     2472                        if (isset($savem)) {
     2473                                $this->SetFetchMode($savem);
     2474                        }
     2475                        $ADODB_FETCH_MODE = $save;
     2476
     2477                        return $arr;
     2478                }
     2479
     2480                return false;
     2481        }
    22822482
    22832483        /**
     
    22982498         * )
    22992499         */
    2300         function MetaProcedures($procedureNamePattern = null, $catalog  = null, $schemaPattern  = null)
    2301         {
     2500        function MetaProcedures($procedureNamePattern = null, $catalog  = null, $schemaPattern  = null) {
    23022501                return false;
    23032502        }
     
    23062505        /**
    23072506         * @param ttype can either be 'VIEW' or 'TABLE' or false.
    2308          *              If false, both views and tables are returned.
     2507         *              If false, both views and tables are returned.
    23092508         *              "VIEW" returns only views
    23102509         *              "TABLE" returns only tables
     
    23142513         * @return  array of tables for current database.
    23152514         */
    2316         function MetaTables($ttype=false,$showSchema=false,$mask=false)
    2317         {
    2318         global $ADODB_FETCH_MODE;
    2319 
    2320 
    2321                 $false = false;
     2515        function MetaTables($ttype=false,$showSchema=false,$mask=false) {
     2516                global $ADODB_FETCH_MODE;
     2517
    23222518                if ($mask) {
    2323                         return $false;
     2519                        return false;
    23242520                }
    23252521                if ($this->metaTablesSQL) {
     
    23272523                        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    23282524
    2329                         if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
     2525                        if ($this->fetchMode !== false) {
     2526                                $savem = $this->SetFetchMode(false);
     2527                        }
    23302528
    23312529                        $rs = $this->Execute($this->metaTablesSQL);
    2332                         if (isset($savem)) $this->SetFetchMode($savem);
     2530                        if (isset($savem)) {
     2531                                $this->SetFetchMode($savem);
     2532                        }
    23332533                        $ADODB_FETCH_MODE = $save;
    23342534
    2335                         if ($rs === false) return $false;
     2535                        if ($rs === false) {
     2536                                return false;
     2537                        }
    23362538                        $arr = $rs->GetArray();
    23372539                        $arr2 = array();
     
    23442546                                if ($hast) {
    23452547                                        if ($showt == 0) {
    2346                                                 if (strncmp($arr[$i][1],'T',1) == 0) $arr2[] = trim($arr[$i][0]);
     2548                                                if (strncmp($arr[$i][1],'T',1) == 0) {
     2549                                                        $arr2[] = trim($arr[$i][0]);
     2550                                                }
    23472551                                        } else {
    2348                                                 if (strncmp($arr[$i][1],'V',1) == 0) $arr2[] = trim($arr[$i][0]);
     2552                                                if (strncmp($arr[$i][1],'V',1) == 0) {
     2553                                                        $arr2[] = trim($arr[$i][0]);
     2554                                                }
    23492555                                        }
    23502556                                } else
     
    23542560                        return $arr2;
    23552561                }
    2356                 return $false;
    2357         }
    2358 
    2359 
    2360         function _findschema(&$table,&$schema)
    2361         {
     2562                return false;
     2563        }
     2564
     2565
     2566        function _findschema(&$table,&$schema) {
    23622567                if (!$schema && ($at = strpos($table,'.')) !== false) {
    23632568                        $schema = substr($table,0,$at);
     
    23762581         * @return  array of ADOFieldObjects for current table.
    23772582         */
    2378         function MetaColumns($table,$normalize=true)
    2379         {
    2380         global $ADODB_FETCH_MODE;
    2381 
    2382                 $false = false;
     2583        function MetaColumns($table,$normalize=true) {
     2584                global $ADODB_FETCH_MODE;
    23832585
    23842586                if (!empty($this->metaColumnsSQL)) {
    2385 
    23862587                        $schema = false;
    23872588                        $this->_findschema($table,$schema);
     
    23892590                        $save = $ADODB_FETCH_MODE;
    23902591                        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    2391                         if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
     2592                        if ($this->fetchMode !== false) {
     2593                                $savem = $this->SetFetchMode(false);
     2594                        }
    23922595                        $rs = $this->Execute(sprintf($this->metaColumnsSQL,($normalize)?strtoupper($table):$table));
    2393                         if (isset($savem)) $this->SetFetchMode($savem);
     2596                        if (isset($savem)) {
     2597                                $this->SetFetchMode($savem);
     2598                        }
    23942599                        $ADODB_FETCH_MODE = $save;
    2395                         if ($rs === false || $rs->EOF) return $false;
     2600                        if ($rs === false || $rs->EOF) {
     2601                                return false;
     2602                        }
    23962603
    23972604                        $retarr = array();
     
    24012608                                $fld->type = $rs->fields[1];
    24022609                                if (isset($rs->fields[3]) && $rs->fields[3]) {
    2403                                         if ($rs->fields[3]>0) $fld->max_length = $rs->fields[3];
     2610                                        if ($rs->fields[3]>0) {
     2611                                                $fld->max_length = $rs->fields[3];
     2612                                        }
    24042613                                        $fld->scale = $rs->fields[4];
    2405                                         if ($fld->scale>0) $fld->max_length += 1;
    2406                                 } else
     2614                                        if ($fld->scale>0) {
     2615                                                $fld->max_length += 1;
     2616                                        }
     2617                                } else {
    24072618                                        $fld->max_length = $rs->fields[2];
    2408 
    2409                                 if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
    2410                                 else $retarr[strtoupper($fld->name)] = $fld;
     2619                                }
     2620
     2621                                if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) {
     2622                                        $retarr[] = $fld;
     2623                                } else {
     2624                                        $retarr[strtoupper($fld->name)] = $fld;
     2625                                }
    24112626                                $rs->MoveNext();
    24122627                        }
     
    24142629                        return $retarr;
    24152630                }
    2416                 return $false;
     2631                return false;
    24172632        }
    24182633
     
    24342649         * )
    24352650         */
    2436         function MetaIndexes($table, $primary = false, $owner = false)
    2437         {
    2438                 $false = false;
    2439                 return $false;
     2651        function MetaIndexes($table, $primary = false, $owner = false) {
     2652                return false;
    24402653        }
    24412654
     
    24462659         * @return  array of column names for current table.
    24472660         */
    2448         function MetaColumnNames($table, $numIndexes=false,$useattnum=false /* only for postgres */)
    2449         {
     2661        function MetaColumnNames($table, $numIndexes=false,$useattnum=false /* only for postgres */) {
    24502662                $objarr = $this->MetaColumns($table);
    24512663                if (!is_array($objarr)) {
    2452                         $false = false;
    2453                         return $false;
     2664                        return false;
    24542665                }
    24552666                $arr = array();
     
    24782689         * @return concatenated string
    24792690         */
    2480         function Concat()
    2481         {
     2691        function Concat() {
    24822692                $arr = func_get_args();
    24832693                return implode($this->concat_operator, $arr);
     
    24922702         * @return  date string in database date format
    24932703         */
    2494         function DBDate($d, $isfld=false)
    2495         {
    2496                 if (empty($d) && $d !== 0) return 'null';
    2497                 if ($isfld) return $d;
    2498 
    2499                 if (is_object($d)) return $d->format($this->fmtDate);
    2500 
     2704        function DBDate($d, $isfld=false) {
     2705                if (empty($d) && $d !== 0) {
     2706                        return 'null';
     2707                }
     2708                if ($isfld) {
     2709                        return $d;
     2710                }
     2711                if (is_object($d)) {
     2712                        return $d->format($this->fmtDate);
     2713                }
    25012714
    25022715                if (is_string($d) && !is_numeric($d)) {
    2503                         if ($d === 'null') return $d;
     2716                        if ($d === 'null') {
     2717                                return $d;
     2718                        }
    25042719                        if (strncmp($d,"'",1) === 0) {
    25052720                                $d = _adodb_safedateq($d);
    25062721                                return $d;
    25072722                        }
    2508                         if ($this->isoDates) return "'$d'";
     2723                        if ($this->isoDates) {
     2724                                return "'$d'";
     2725                        }
    25092726                        $d = ADOConnection::UnixDate($d);
    25102727                }
     
    25132730        }
    25142731
    2515         function BindDate($d)
    2516         {
     2732        function BindDate($d) {
    25172733                $d = $this->DBDate($d);
    2518                 if (strncmp($d,"'",1)) return $d;
     2734                if (strncmp($d,"'",1)) {
     2735                        return $d;
     2736                }
    25192737
    25202738                return substr($d,1,strlen($d)-2);
    25212739        }
    25222740
    2523         function BindTimeStamp($d)
    2524         {
     2741        function BindTimeStamp($d) {
    25252742                $d = $this->DBTimeStamp($d);
    2526                 if (strncmp($d,"'",1)) return $d;
     2743                if (strncmp($d,"'",1)) {
     2744                        return $d;
     2745                }
    25272746
    25282747                return substr($d,1,strlen($d)-2);
     
    25372756         * @return  timestamp string in database timestamp format
    25382757         */
    2539         function DBTimeStamp($ts,$isfld=false)
    2540         {
    2541                 if (empty($ts) && $ts !== 0) return 'null';
    2542                 if ($isfld) return $ts;
    2543                 if (is_object($ts)) return $ts->format($this->fmtTimeStamp);
     2758        function DBTimeStamp($ts,$isfld=false) {
     2759                if (empty($ts) && $ts !== 0) {
     2760                        return 'null';
     2761                }
     2762                if ($isfld) {
     2763                        return $ts;
     2764                }
     2765                if (is_object($ts)) {
     2766                        return $ts->format($this->fmtTimeStamp);
     2767                }
    25442768
    25452769                # strlen(14) allows YYYYMMDDHHMMSS format
    2546                 if (!is_string($ts) || (is_numeric($ts) && strlen($ts)<14))
     2770                if (!is_string($ts) || (is_numeric($ts) && strlen($ts)<14)) {
    25472771                        return adodb_date($this->fmtTimeStamp,$ts);
    2548 
    2549                 if ($ts === 'null') return $ts;
     2772                }
     2773
     2774                if ($ts === 'null') {
     2775                        return $ts;
     2776                }
    25502777                if ($this->isoDates && strlen($ts) !== 14) {
    25512778                        $ts = _adodb_safedate($ts);
     
    25622789         * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format
    25632790         */
    2564         static function UnixDate($v)
    2565         {
     2791        static function UnixDate($v) {
    25662792                if (is_object($v)) {
    25672793                // odbtp support
     
    25702796                }
    25712797
    2572                 if (is_numeric($v) && strlen($v) !== 8) return $v;
    2573                 if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|",
    2574                         ($v), $rr)) return false;
    2575 
    2576                 if ($rr[1] <= TIMESTAMP_FIRST_YEAR) return 0;
     2798                if (is_numeric($v) && strlen($v) !== 8) {
     2799                        return $v;
     2800                }
     2801                if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|", $v, $rr)) {
     2802                        return false;
     2803                }
     2804
     2805                if ($rr[1] <= TIMESTAMP_FIRST_YEAR) {
     2806                        return 0;
     2807                }
     2808
    25772809                // h-m-s-MM-DD-YY
    25782810                return @adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]);
     
    25862818         * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format
    25872819         */
    2588         static function UnixTimeStamp($v)
    2589         {
     2820        static function UnixTimeStamp($v) {
    25902821                if (is_object($v)) {
    25912822                // odbtp support
     
    25982829                        ($v), $rr)) return false;
    25992830
    2600                 if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1) return 0;
     2831                if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1) {
     2832                        return 0;
     2833                }
    26012834
    26022835                // h-m-s-MM-DD-YY
    2603                 if (!isset($rr[5])) return  adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]);
    2604                 return  @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]);
     2836                if (!isset($rr[5])) {
     2837                        return  adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]);
     2838                }
     2839                return @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]);
    26052840        }
    26062841
     
    26102845         * Format database date based on user defined format.
    26112846         *
    2612          * @param v     is the character date in YYYY-MM-DD format, returned by database
    2613          * @param fmt   is the format to apply to it, using date()
     2847         * @param v             is the character date in YYYY-MM-DD format, returned by database
     2848         * @param fmt   is the format to apply to it, using date()
    26142849         *
    26152850         * @return a date formated as user desires
    26162851         */
    2617 
    2618         function UserDate($v,$fmt='Y-m-d',$gmt=false)
    2619         {
     2852        function UserDate($v,$fmt='Y-m-d',$gmt=false) {
    26202853                $tt = $this->UnixDate($v);
    26212854
    26222855                // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
    2623                 if (($tt === false || $tt == -1) && $v != false) return $v;
    2624                 else if ($tt == 0) return $this->emptyDate;
    2625                 else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR
     2856                if (($tt === false || $tt == -1) && $v != false) {
     2857                        return $v;
     2858                } else if ($tt == 0) {
     2859                        return $this->emptyDate;
     2860                } else if ($tt == -1) {
     2861                        // pre-TIMESTAMP_FIRST_YEAR
    26262862                }
    26272863
     
    26302866        }
    26312867
    2632                 /**
    2633          *
    2634          * @param v     is the character timestamp in YYYY-MM-DD hh:mm:ss format
    2635          * @param fmt   is the format to apply to it, using date()
     2868        /**
     2869         *
     2870         * @param v             is the character timestamp in YYYY-MM-DD hh:mm:ss format
     2871         * @param fmt   is the format to apply to it, using date()
    26362872         *
    26372873         * @return a timestamp formated as user desires
    26382874         */
    2639         function UserTimeStamp($v,$fmt='Y-m-d H:i:s',$gmt=false)
    2640         {
    2641                 if (!isset($v)) return $this->emptyTimeStamp;
     2875        function UserTimeStamp($v,$fmt='Y-m-d H:i:s',$gmt=false) {
     2876                if (!isset($v)) {
     2877                        return $this->emptyTimeStamp;
     2878                }
    26422879                # strlen(14) allows YYYYMMDDHHMMSS format
    2643                 if (is_numeric($v) && strlen($v)<14) return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v);
     2880                if (is_numeric($v) && strlen($v)<14) {
     2881                        return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v);
     2882                }
    26442883                $tt = $this->UnixTimeStamp($v);
    26452884                // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
    2646                 if (($tt === false || $tt == -1) && $v != false) return $v;
    2647                 if ($tt == 0) return $this->emptyTimeStamp;
     2885                if (($tt === false || $tt == -1) && $v != false) {
     2886                        return $v;
     2887                }
     2888                if ($tt == 0) {
     2889                        return $this->emptyTimeStamp;
     2890                }
    26482891                return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt);
    26492892        }
    26502893
    2651         function escape($s,$magic_quotes=false)
    2652         {
     2894        function escape($s,$magic_quotes=false) {
    26532895                return $this->addq($s,$magic_quotes);
    26542896        }
     
    26572899        * Quotes a string, without prefixing nor appending quotes.
    26582900        */
    2659         function addq($s,$magic_quotes=false)
    2660         {
     2901        function addq($s,$magic_quotes=false) {
    26612902                if (!$magic_quotes) {
    2662 
     2903                        if ($this->replaceQuote[0] == '\\') {
     2904                                // only since php 4.0.5
     2905                                $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s);
     2906                                //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s));
     2907                        }
     2908                        return  str_replace("'",$this->replaceQuote,$s);
     2909                }
     2910
     2911                // undo magic quotes for "
     2912                $s = str_replace('\\"','"',$s);
     2913
     2914                if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) {
     2915                        // ' already quoted, no need to change anything
     2916                        return $s;
     2917                } else {
     2918                        // change \' to '' for sybase/mssql
     2919                        $s = str_replace('\\\\','\\',$s);
     2920                        return str_replace("\\'",$this->replaceQuote,$s);
     2921                }
     2922        }
     2923
     2924        /**
     2925         * Correctly quotes a string so that all strings are escaped. We prefix and append
     2926         * to the string single-quotes.
     2927         * An example is  $db->qstr("Don't bother",magic_quotes_runtime());
     2928         *
     2929         * @param s                     the string to quote
     2930         * @param [magic_quotes]        if $s is GET/POST var, set to get_magic_quotes_gpc().
     2931         *                              This undoes the stupidity of magic quotes for GPC.
     2932         *
     2933         * @return  quoted string to be sent back to database
     2934         */
     2935        function qstr($s,$magic_quotes=false) {
     2936                if (!$magic_quotes) {
    26632937                        if ($this->replaceQuote[0] == '\\'){
    26642938                                // only since php 4.0.5
     
    26662940                                //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s));
    26672941                        }
    2668                         return  str_replace("'",$this->replaceQuote,$s);
     2942                        return  "'".str_replace("'",$this->replaceQuote,$s)."'";
    26692943                }
    26702944
     
    26722946                $s = str_replace('\\"','"',$s);
    26732947
    2674                 if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase'))  // ' already quoted, no need to change anything
    2675                         return $s;
    2676                 else {// change \' to '' for sybase/mssql
    2677                         $s = str_replace('\\\\','\\',$s);
    2678                         return str_replace("\\'",$this->replaceQuote,$s);
    2679                 }
    2680         }
    2681 
    2682         /**
    2683          * Correctly quotes a string so that all strings are escaped. We prefix and append
    2684          * to the string single-quotes.
    2685          * An example is  $db->qstr("Don't bother",magic_quotes_runtime());
    2686          *
    2687          * @param s                     the string to quote
    2688          * @param [magic_quotes]        if $s is GET/POST var, set to get_magic_quotes_gpc().
    2689          *                              This undoes the stupidity of magic quotes for GPC.
    2690          *
    2691          * @return  quoted string to be sent back to database
    2692          */
    2693         function qstr($s,$magic_quotes=false)
    2694         {
    2695                 if (!$magic_quotes) {
    2696 
    2697                         if ($this->replaceQuote[0] == '\\'){
    2698                                 // only since php 4.0.5
    2699                                 $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s);
    2700                                 //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s));
    2701                         }
    2702                         return  "'".str_replace("'",$this->replaceQuote,$s)."'";
    2703                 }
    2704 
    2705                 // undo magic quotes for "
    2706                 $s = str_replace('\\"','"',$s);
    2707 
    2708                 if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase'))  // ' already quoted, no need to change anything
     2948                if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) {
     2949                        // ' already quoted, no need to change anything
    27092950                        return "'$s'";
    2710                 else {// change \' to '' for sybase/mssql
     2951                } else {
     2952                        // change \' to '' for sybase/mssql
    27112953                        $s = str_replace('\\\\','\\',$s);
    27122954                        return "'".str_replace("\\'",$this->replaceQuote,$s)."'";
     
    27322974        *
    27332975        */
    2734         function PageExecute($sql, $nrows, $page, $inputarr=false, $secs2cache=0)
    2735         {
     2976        function PageExecute($sql, $nrows, $page, $inputarr=false, $secs2cache=0) {
    27362977                global $ADODB_INCLUDED_LIB;
    2737                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
    2738                 if ($this->pageExecuteCountRows) $rs = _adodb_pageexecute_all_rows($this, $sql, $nrows, $page, $inputarr, $secs2cache);
    2739                 else $rs = _adodb_pageexecute_no_last_page($this, $sql, $nrows, $page, $inputarr, $secs2cache);
     2978                if (empty($ADODB_INCLUDED_LIB)) {
     2979                        include(ADODB_DIR.'/adodb-lib.inc.php');
     2980                }
     2981                if ($this->pageExecuteCountRows) {
     2982                        $rs = _adodb_pageexecute_all_rows($this, $sql, $nrows, $page, $inputarr, $secs2cache);
     2983                } else {
     2984                        $rs = _adodb_pageexecute_no_last_page($this, $sql, $nrows, $page, $inputarr, $secs2cache);
     2985                }
    27402986                return $rs;
    27412987        }
     
    27543000        * @return               the recordset ($rs->databaseType == 'array')
    27553001        */
    2756         function CachePageExecute($secs2cache, $sql, $nrows, $page,$inputarr=false)
    2757         {
     3002        function CachePageExecute($secs2cache, $sql, $nrows, $page,$inputarr=false) {
    27583003                /*switch($this->dataProvider) {
    27593004                case 'postgres':
     
    27863031        class ADODB_Iterator_empty implements Iterator {
    27873032
    2788             private $rs;
    2789 
    2790             function __construct($rs)
    2791                 {
    2792                 $this->rs = $rs;
    2793             }
    2794             function rewind()
    2795                 {
    2796             }
    2797 
    2798                 function valid()
    2799                 {
    2800                 return !$this->rs->EOF;
    2801             }
    2802 
    2803             function key()
    2804                 {
    2805                 return false;
    2806             }
    2807 
    2808             function current()
    2809                 {
    2810                 return false;
    2811             }
    2812 
    2813             function next()
    2814                 {
    2815             }
    2816 
    2817                 function __call($func, $params)
    2818                 {
     3033                private $rs;
     3034
     3035                function __construct($rs) {
     3036                        $this->rs = $rs;
     3037                }
     3038
     3039                function rewind() {}
     3040
     3041                function valid() {
     3042                        return !$this->rs->EOF;
     3043                }
     3044
     3045                function key() {
     3046                        return false;
     3047                }
     3048
     3049                function current() {
     3050                        return false;
     3051                }
     3052
     3053                function next() {}
     3054
     3055                function __call($func, $params) {
    28193056                        return call_user_func_array(array($this->rs, $func), $params);
    28203057                }
    28213058
    2822                 function hasMore()
    2823                 {
     3059                function hasMore() {
    28243060                        return false;
    28253061                }
     
    28393075                var $fields = false;
    28403076                var $connection = false;
    2841                 function RowCount() {return 0;}
    2842                 function RecordCount() {return 0;}
    2843                 function PO_RecordCount(){return 0;}
    2844                 function Close(){return true;}
    2845                 function FetchRow() {return false;}
    2846                 function FieldCount(){ return 0;}
     3077
     3078                function RowCount() {
     3079                        return 0;
     3080                }
     3081
     3082                function RecordCount() {
     3083                        return 0;
     3084                }
     3085
     3086                function PO_RecordCount() {
     3087                        return 0;
     3088                }
     3089
     3090                function Close() {
     3091                        return true;
     3092                }
     3093
     3094                function FetchRow() {
     3095                        return false;
     3096                }
     3097
     3098                function FieldCount() {
     3099                        return 0;
     3100                }
     3101
    28473102                function Init() {}
    2848                 function getIterator() {return new ADODB_Iterator_empty($this);}
    2849                 function GetAssoc() {return array();}
     3103
     3104                function getIterator() {
     3105                        return new ADODB_Iterator_empty($this);
     3106                }
     3107
     3108                function GetAssoc() {
     3109                        return array();
     3110                }
     3111
     3112                function GetArray() {
     3113                        return array();
     3114                }
     3115
     3116                function GetAll() {
     3117                        return array();
     3118                }
     3119
     3120                function GetArrayLimit() {
     3121                        return array();
     3122                }
     3123
     3124                function GetRows() {
     3125                        return array();
     3126                }
     3127
     3128                function GetRowAssoc() {
     3129                        return array();
     3130                }
     3131
     3132                function MaxRecordCount() {
     3133                        return 0;
     3134                }
     3135
     3136                function NumRows() {
     3137                        return 0;
     3138                }
     3139
     3140                function NumCols() {
     3141                        return 0;
     3142                }
    28503143        }
    28513144
     
    28533146        // DATE AND TIME FUNCTIONS
    28543147        //==============================================================================================
    2855         if (!defined('ADODB_DATE_VERSION')) include(ADODB_DIR.'/adodb-time.inc.php');
     3148        if (!defined('ADODB_DATE_VERSION')) {
     3149                include(ADODB_DIR.'/adodb-time.inc.php');
     3150        }
    28563151
    28573152        //==============================================================================================
     
    28613156        class ADODB_Iterator implements Iterator {
    28623157
    2863             private $rs;
    2864 
    2865             function __construct($rs)
    2866                 {
    2867                 $this->rs = $rs;
    2868             }
    2869             function rewind()
    2870                 {
    2871                 $this->rs->MoveFirst();
    2872             }
    2873 
    2874                 function valid()
    2875                 {
    2876                 return !$this->rs->EOF;
    2877             }
    2878 
    2879             function key()
    2880                 {
    2881                 return $this->rs->_currentRow;
    2882             }
    2883 
    2884             function current()
    2885                 {
    2886                 return $this->rs->fields;
    2887             }
    2888 
    2889             function next()
    2890                 {
    2891                 $this->rs->MoveNext();
    2892             }
    2893 
    2894                 function __call($func, $params)
    2895                 {
     3158                private $rs;
     3159
     3160                function __construct($rs) {
     3161                        $this->rs = $rs;
     3162                }
     3163
     3164                function rewind() {
     3165                        $this->rs->MoveFirst();
     3166                }
     3167
     3168                function valid() {
     3169                        return !$this->rs->EOF;
     3170                }
     3171
     3172                function key() {
     3173                        return $this->rs->_currentRow;
     3174                }
     3175
     3176                function current() {
     3177                        return $this->rs->fields;
     3178                }
     3179
     3180                function next() {
     3181                        $this->rs->MoveNext();
     3182                }
     3183
     3184                function __call($func, $params) {
    28963185                        return call_user_func_array(array($this->rs, $func), $params);
    28973186                }
    28983187
    2899 
    2900                 function hasMore()
    2901                 {
     3188                function hasMore() {
    29023189                        return !$this->rs->EOF;
    29033190                }
    29043191
    29053192        }
    2906 
    29073193
    29083194
     
    29143200         */
    29153201        class ADORecordSet implements IteratorAggregate {
    2916         /*
     3202
     3203        /**
    29173204         * public variables
    29183205         */
    29193206        var $dataProvider = "native";
    2920         var $fields = false;    /// holds the current row data
    2921         var $blobSize = 100;    /// any varchar/char field this size or greater is treated as a blob
     3207        var $fields = false;    /// holds the current row data
     3208        var $blobSize = 100;    /// any varchar/char field this size or greater is treated as a blob
    29223209                                                        /// in other words, we use a text area for editing.
    2923         var $canSeek = false;   /// indicates that seek is supported
    2924         var $sql;                               /// sql text
     3210        var $canSeek = false;   /// indicates that seek is supported
     3211        var $sql;                               /// sql text
    29253212        var $EOF = false;               /// Indicates that the current record position is after the last record in a Recordset object.
    29263213
     
    29283215        var $emptyDate = '&nbsp;'; /// what to display when $time==0
    29293216        var $debug = false;
    2930         var $timeCreated=0;     /// datetime in Unix format rs created -- for cached recordsets
    2931 
    2932         var $bind = false;              /// used by Fields() to hold array - should be private?
     3217        var $timeCreated=0;             /// datetime in Unix format rs created -- for cached recordsets
     3218
     3219        var $bind = false;              /// used by Fields() to hold array - should be private?
    29333220        var $fetchMode;                 /// default fetch mode
    29343221        var $connection = false; /// the parent connection
    2935         /*
     3222
     3223        /**
    29363224         *      private variables
    29373225         */
     
    29403228        var $_queryID = -1;             /** This variable keeps the result link identifier.     */
    29413229        var $_currentRow = -1;  /** This variable keeps the current row in the Recordset.       */
    2942         var $_closed = false;   /** has recordset been closed */
    2943         var $_inited = false;   /** Init() should only be called once */
    2944         var $_obj;                              /** Used by FetchObj */
     3230        var $_closed = false;   /** has recordset been closed */
     3231        var $_inited = false;   /** Init() should only be called once */
     3232        var $_obj;                              /** Used by FetchObj */
    29453233        var $_names;                    /** Used by FetchObj */
    29463234
     
    29553243         * Constructor
    29563244         *
    2957          * @param queryID       this is the queryID returned by ADOConnection->_query()
    2958          *
    2959          */
    2960         function ADORecordSet($queryID)
    2961         {
     3245         * @param queryID       this is the queryID returned by ADOConnection->_query()
     3246         *
     3247         */
     3248        function __construct($queryID) {
    29623249                $this->_queryID = $queryID;
    29633250        }
    29643251
    2965         function getIterator()
    2966         {
     3252        function __destruct() {
     3253                @$this->Close();
     3254        }
     3255
     3256        function getIterator() {
    29673257                return new ADODB_Iterator($this);
    29683258        }
    29693259
    29703260        /* this is experimental - i don't really know what to return... */
    2971         function __toString()
    2972         {
     3261        function __toString() {
    29733262                include_once(ADODB_DIR.'/toexport.inc.php');
    29743263                return _adodb_export($this,',',',',false,true);
    29753264        }
    29763265
    2977 
    2978         function Init()
    2979         {
    2980                 if ($this->_inited) return;
     3266        function Init() {
     3267                if ($this->_inited) {
     3268                        return;
     3269                }
    29813270                $this->_inited = true;
    2982                 if ($this->_queryID) @$this->_initrs();
    2983                 else {
     3271                if ($this->_queryID) {
     3272                        @$this->_initrs();
     3273                } else {
    29843274                        $this->_numOfRows = 0;
    29853275                        $this->_numOfFields = 0;
    29863276                }
    29873277                if ($this->_numOfRows != 0 && $this->_numOfFields && $this->_currentRow == -1) {
    2988 
    29893278                        $this->_currentRow = 0;
    29903279                        if ($this->EOF = ($this->_fetch() === false)) {
     
    30033292         * strings are compared with the FIRST column.
    30043293         *
    3005          * @param name                  name of SELECT tag
     3294         * @param name                  name of SELECT tag
    30063295         * @param [defstr]              the value to hilite. Use an array for multiple hilites for listbox.
    30073296         * @param [blank1stItem]        true to leave the 1st item in list empty
     
    30213310        {
    30223311                global $ADODB_INCLUDED_LIB;
    3023                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     3312                if (empty($ADODB_INCLUDED_LIB)) {
     3313                        include(ADODB_DIR.'/adodb-lib.inc.php');
     3314                }
    30243315                return _adodb_getmenu($this, $name,$defstr,$blank1stItem,$multiple,
    30253316                        $size, $selectAttr,$compareFields0);
     
    30353326         *
    30363327         */
    3037         function GetMenu2($name,$defstr='',$blank1stItem=true,$multiple=false,$size=0, $selectAttr='')
    3038         {
     3328        function GetMenu2($name,$defstr='',$blank1stItem=true,$multiple=false,$size=0, $selectAttr='') {
    30393329                return $this->GetMenu($name,$defstr,$blank1stItem,$multiple,
    30403330                        $size, $selectAttr,false);
     
    30483338        {
    30493339                global $ADODB_INCLUDED_LIB;
    3050                 if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     3340                if (empty($ADODB_INCLUDED_LIB)) {
     3341                        include(ADODB_DIR.'/adodb-lib.inc.php');
     3342                }
    30513343                return _adodb_getmenu_gp($this, $name,$defstr,$blank1stItem,$multiple,
    30523344                        $size, $selectAttr,false);
     
    30603352         * @return an array indexed by the rows (0-based) from the recordset
    30613353         */
    3062         function GetArray($nRows = -1)
    3063         {
    3064         global $ADODB_EXTENSION; if ($ADODB_EXTENSION) {
     3354        function GetArray($nRows = -1) {
     3355                global $ADODB_EXTENSION; if ($ADODB_EXTENSION) {
    30653356                $results = adodb_getall($this,$nRows);
    30663357                return $results;
     
    30763367        }
    30773368
    3078         function GetAll($nRows = -1)
    3079         {
     3369        function GetAll($nRows = -1) {
    30803370                $arr = $this->GetArray($nRows);
    30813371                return $arr;
     
    30863376        * will return true if there is a next recordset, or false if no more.
    30873377        */
    3088         function NextRecordSet()
    3089         {
     3378        function NextRecordSet() {
    30903379                return false;
    30913380        }
     
    31003389         * @return an array indexed by the rows (0-based) from the recordset
    31013390         */
    3102         function GetArrayLimit($nrows,$offset=-1)
    3103         {
     3391        function GetArrayLimit($nrows,$offset=-1) {
    31043392                if ($offset <= 0) {
    31053393                        $arr = $this->GetArray($nrows);
     
    31273415         * @return an array indexed by the rows (0-based) from the recordset
    31283416         */
    3129         function GetRows($nRows = -1)
    3130         {
     3417        function GetRows($nRows = -1) {
    31313418                $arr = $this->GetArray($nRows);
    31323419                return $arr;
     
    31403427         *
    31413428         * @param [force_array] has only meaning if we have 2 data columns. If false, a 1 dimensional
    3142          *      array is returned, otherwise a 2 dimensional array is returned. If this sounds confusing,
    3143          *      read the source.
     3429         * array is returned, otherwise a 2 dimensional array is returned. If this sounds confusing,
     3430         * read the source.
    31443431         *
    31453432         * @param [first2cols] means if there are more than 2 cols, ignore the remaining cols and
     
    31473434         *
    31483435         * @return an associative array indexed by the first column of the array,
    3149          *      or false if the  data has less than 2 cols.
    3150          */
    3151         function GetAssoc($force_array = false, $first2cols = false)
    3152         {
    3153         global $ADODB_EXTENSION;
     3436         * or false if the  data has less than 2 cols.
     3437         */
     3438        function GetAssoc($force_array = false, $first2cols = false) {
     3439                global $ADODB_EXTENSION;
    31543440
    31553441                $cols = $this->_numOfFields;
    31563442                if ($cols < 2) {
    3157                         $false = false;
    3158                         return $false;
    3159                 }
    3160                 $numIndex = is_array($this->fields) && array_key_exists(0, $this->fields);
     3443                        return false;
     3444                }
     3445
     3446                // Empty recordset
     3447                if (!$this->fields) {
     3448                        return array();
     3449                }
     3450
     3451                // Determine whether the array is associative or 0-based numeric
     3452                $numIndex = array_keys($this->fields) == range(0, count($this->fields) - 1);
     3453
    31613454                $results = array();
    31623455
     
    32473540        /**
    32483541         *
    3249          * @param v     is the character timestamp in YYYY-MM-DD hh:mm:ss format
    3250          * @param fmt   is the format to apply to it, using date()
     3542         * @param v             is the character timestamp in YYYY-MM-DD hh:mm:ss format
     3543         * @param fmt   is the format to apply to it, using date()
    32513544         *
    32523545         * @return a timestamp formated as user desires
    32533546         */
    3254         function UserTimeStamp($v,$fmt='Y-m-d H:i:s')
    3255         {
    3256                 if (is_numeric($v) && strlen($v)<14) return adodb_date($fmt,$v);
     3547        function UserTimeStamp($v,$fmt='Y-m-d H:i:s') {
     3548                if (is_numeric($v) && strlen($v)<14) {
     3549                        return adodb_date($fmt,$v);
     3550                }
    32573551                $tt = $this->UnixTimeStamp($v);
    32583552                // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
    3259                 if (($tt === false || $tt == -1) && $v != false) return $v;
    3260                 if ($tt === 0) return $this->emptyTimeStamp;
     3553                if (($tt === false || $tt == -1) && $v != false) {
     3554                        return $v;
     3555                }
     3556                if ($tt === 0) {
     3557                        return $this->emptyTimeStamp;
     3558                }
    32613559                return adodb_date($fmt,$tt);
    32623560        }
     
    32643562
    32653563        /**
    3266          * @param v     is the character date in YYYY-MM-DD format, returned by database
    3267          * @param fmt   is the format to apply to it, using date()
     3564         * @param v             is the character date in YYYY-MM-DD format, returned by database
     3565         * @param fmt   is the format to apply to it, using date()
    32683566         *
    32693567         * @return a date formated as user desires
    32703568         */
    3271         function UserDate($v,$fmt='Y-m-d')
    3272         {
     3569        function UserDate($v,$fmt='Y-m-d') {
    32733570                $tt = $this->UnixDate($v);
    32743571                // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
    3275                 if (($tt === false || $tt == -1) && $v != false) return $v;
    3276                 else if ($tt == 0) return $this->emptyDate;
    3277                 else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR
     3572                if (($tt === false || $tt == -1) && $v != false) {
     3573                        return $v;
     3574                } else if ($tt == 0) {
     3575                        return $this->emptyDate;
     3576                } else if ($tt == -1) {
     3577                        // pre-TIMESTAMP_FIRST_YEAR
    32783578                }
    32793579                return adodb_date($fmt,$tt);
     
    32863586         * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format
    32873587         */
    3288         static function UnixDate($v)
    3289         {
     3588        static function UnixDate($v) {
    32903589                return ADOConnection::UnixDate($v);
    32913590        }
     
    32973596         * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format
    32983597         */
    3299         static function UnixTimeStamp($v)
    3300         {
     3598        static function UnixTimeStamp($v) {
    33013599                return ADOConnection::UnixTimeStamp($v);
    33023600        }
     
    33063604        * PEAR DB Compat - do not use internally
    33073605        */
    3308         function Free()
    3309         {
     3606        function Free() {
    33103607                return $this->Close();
    33113608        }
     
    33153612        * PEAR DB compat, number of rows
    33163613        */
    3317         function NumRows()
    3318         {
     3614        function NumRows() {
    33193615                return $this->_numOfRows;
    33203616        }
     
    33243620        * PEAR DB compat, number of cols
    33253621        */
    3326         function NumCols()
    3327         {
     3622        function NumCols() {
    33283623                return $this->_numOfFields;
    33293624        }
     
    33353630        * @return false or array containing the current record
    33363631        */
    3337         function FetchRow()
    3338         {
     3632        function FetchRow() {
    33393633                if ($this->EOF) {
    3340                         $false = false;
    3341                         return $false;
     3634                        return false;
    33423635                }
    33433636                $arr = $this->fields;
    33443637                $this->_currentRow++;
    3345                 if (!$this->_fetch()) $this->EOF = true;
     3638                if (!$this->_fetch()) {
     3639                        $this->EOF = true;
     3640                }
    33463641                return $arr;
    33473642        }
     
    33543649        * @return DB_OK or error object
    33553650        */
    3356         function FetchInto(&$arr)
    3357         {
    3358                 if ($this->EOF) return (defined('PEAR_ERROR_RETURN')) ? new PEAR_Error('EOF',-1): false;
     3651        function FetchInto(&$arr) {
     3652                if ($this->EOF) {
     3653                        return (defined('PEAR_ERROR_RETURN')) ? new PEAR_Error('EOF',-1): false;
     3654                }
    33593655                $arr = $this->fields;
    33603656                $this->MoveNext();
     
    33683664         * @return true or false
    33693665         */
    3370         function MoveFirst()
    3371         {
    3372                 if ($this->_currentRow == 0) return true;
     3666        function MoveFirst() {
     3667                if ($this->_currentRow == 0) {
     3668                        return true;
     3669                }
    33733670                return $this->Move(0);
    33743671        }
     
    33803677         * @return true or false
    33813678         */
    3382         function MoveLast()
    3383         {
    3384                 if ($this->_numOfRows >= 0) return $this->Move($this->_numOfRows-1);
    3385                 if ($this->EOF) return false;
     3679        function MoveLast() {
     3680                if ($this->_numOfRows >= 0) {
     3681                        return $this->Move($this->_numOfRows-1);
     3682                }
     3683                if ($this->EOF) {
     3684                        return false;
     3685                }
    33863686                while (!$this->EOF) {
    33873687                        $f = $this->fields;
     
    33993699         * @return true if there still rows available, or false if there are no more rows (EOF).
    34003700         */
    3401         function MoveNext()
    3402         {
     3701        function MoveNext() {
    34033702                if (!$this->EOF) {
    34043703                        $this->_currentRow++;
    3405                         if ($this->_fetch()) return true;
     3704                        if ($this->_fetch()) {
     3705                                return true;
     3706                        }
    34063707                }
    34073708                $this->EOF = true;
     
    34253726         * @return true if there still rows available, or false if there are no more rows (EOF).
    34263727         */
    3427         function Move($rowNumber = 0)
    3428         {
     3728        function Move($rowNumber = 0) {
    34293729                $this->EOF = false;
    3430                 if ($rowNumber == $this->_currentRow) return true;
    3431                 if ($rowNumber >= $this->_numOfRows)
    3432                         if ($this->_numOfRows != -1) $rowNumber = $this->_numOfRows-2;
     3730                if ($rowNumber == $this->_currentRow) {
     3731                        return true;
     3732                }
     3733                if ($rowNumber >= $this->_numOfRows) {
     3734                        if ($this->_numOfRows != -1) {
     3735                                $rowNumber = $this->_numOfRows-2;
     3736                        }
     3737                }
     3738
     3739                if ($rowNumber < 0) {
     3740                        $this->EOF = true;
     3741                        return false;
     3742                }
    34333743
    34343744                if ($this->canSeek) {
    3435 
    34363745                        if ($this->_seek($rowNumber)) {
    34373746                                $this->_currentRow = $rowNumber;
     
    34443753                        }
    34453754                } else {
    3446                         if ($rowNumber < $this->_currentRow) return false;
     3755                        if ($rowNumber < $this->_currentRow) {
     3756                                return false;
     3757                        }
    34473758                        global $ADODB_EXTENSION;
    34483759                        if ($ADODB_EXTENSION) {
     
    34513762                                }
    34523763                        } else {
    3453 
    34543764                                while (! $this->EOF && $this->_currentRow < $rowNumber) {
    34553765                                        $this->_currentRow++;
    34563766
    3457                                         if (!$this->_fetch()) $this->EOF = true;
     3767                                        if (!$this->_fetch()) {
     3768                                                $this->EOF = true;
     3769                                        }
    34583770                                }
    34593771                        }
     
    34753787         * @return the value of $colname column
    34763788         */
    3477         function Fields($colname)
    3478         {
     3789        function Fields($colname) {
    34793790                return $this->fields[$colname];
     3791        }
     3792
     3793        /**
     3794         * Defines the function to use for table fields case conversion
     3795         * depending on ADODB_ASSOC_CASE
     3796         * @return string strtolower/strtoupper or false if no conversion needed
     3797         */
     3798        protected function AssocCaseConvertFunction($case = ADODB_ASSOC_CASE) {
     3799                switch($case) {
     3800                        case ADODB_ASSOC_CASE_UPPER:
     3801                                return 'strtoupper';
     3802                        case ADODB_ASSOC_CASE_LOWER:
     3803                                return 'strtolower';
     3804                        case ADODB_ASSOC_CASE_NATIVE:
     3805                        default:
     3806                                return false;
     3807                }
    34803808        }
    34813809
     
    34863814         *                   (see ADODB_ASSOC_CASE_xxx constants)
    34873815         */
    3488         function GetAssocKeys($upper=ADODB_ASSOC_CASE_UPPER)
    3489         {
     3816        function GetAssocKeys($upper = ADODB_ASSOC_CASE) {
     3817                if ($this->bind) {
     3818                        return;
     3819                }
    34903820                $this->bind = array();
     3821
     3822                // Define case conversion function for ASSOC fetch mode
     3823                $fn_change_case = $this->AssocCaseConvertFunction($upper);
     3824
     3825                // Build the bind array
    34913826                for ($i=0; $i < $this->_numOfFields; $i++) {
    34923827                        $o = $this->FetchField($i);
    3493                         switch($upper) {
    3494                                 case ADODB_ASSOC_CASE_LOWER:
    3495                                         $key = strtolower($o->name);
    3496                                         break;
    3497                                 case ADODB_ASSOC_CASE_UPPER:
    3498                                         $key = strtoupper($o->name);
    3499                                         break;
    3500                                 case ADODB_ASSOC_CASE_NATIVE:
    3501                                 default:
    3502                                         $key = $o->name;
    3503                                         break;
    3504                         }
    3505                         $val = $this->fetchMode == ADODB_FETCH_ASSOC ? $o->name : $i;
    3506                         $this->bind[$key] = $val;
     3828
     3829                        // Set the array's key
     3830                        if(is_numeric($o->name)) {
     3831                                // Just use the field ID
     3832                                $key = $i;
     3833                        }
     3834                        elseif( $fn_change_case ) {
     3835                                // Convert the key's case
     3836                                $key = $fn_change_case($o->name);
     3837                        }
     3838                        else {
     3839                                $key = $o->name;
     3840                        }
     3841
     3842                        $this->bind[$key] = $i;
    35073843                }
    35083844        }
     
    35153851         *                   (see ADODB_ASSOC_CASE_xxx constants)
    35163852         */
    3517         function GetRowAssoc($upper=ADODB_ASSOC_CASE_UPPER)
    3518         {
     3853        function GetRowAssoc($upper = ADODB_ASSOC_CASE) {
    35193854                $record = array();
    3520                 if (!$this->bind) {
    3521                         $this->GetAssocKeys($upper);
    3522                 }
     3855                $this->GetAssocKeys($upper);
     3856
    35233857                foreach($this->bind as $k => $v) {
    35243858                        if( array_key_exists( $v, $this->fields ) ) {
     
    35393873         * @return true or false
    35403874         */
    3541         function Close()
    3542         {
     3875        function Close() {
    35433876                // free connection object - this seems to globally free the object
    35443877                // and not merely the reference, so don't do this...
     
    35563889         * @return the number of rows or -1 if this is not supported
    35573890         */
    3558         function RecordCount() {return $this->_numOfRows;}
     3891        function RecordCount() {
     3892                return $this->_numOfRows;
     3893        }
    35593894
    35603895
     
    35633898        * that can be returned when paging a recordset.
    35643899        */
    3565         function MaxRecordCount()
    3566         {
     3900        function MaxRecordCount() {
    35673901                return ($this->_maxRecordCount) ? $this->_maxRecordCount : $this->RecordCount();
    35683902        }
     
    35733907         * @return the number of rows or -1 if this is not supported
    35743908         */
    3575         function RowCount() {return $this->_numOfRows;}
     3909        function RowCount() {
     3910                return $this->_numOfRows;
     3911        }
    35763912
    35773913
     
    35903926                if ($lnumrows == -1 && $this->connection) {
    35913927                        IF ($table) {
    3592                                 if ($condition) $condition = " WHERE " . $condition;
     3928                                if ($condition) {
     3929                                        $condition = " WHERE " . $condition;
     3930                                }
    35933931                                $resultrows = $this->connection->Execute("SELECT COUNT(*) FROM $table $condition");
    3594                                 if ($resultrows) $lnumrows = reset($resultrows->fields);
     3932                                if ($resultrows) {
     3933                                        $lnumrows = reset($resultrows->fields);
     3934                                }
    35953935                        }
    35963936                }
     
    36023942         * @return the current row in the recordset. If at EOF, will return the last row. 0-based.
    36033943         */
    3604         function CurrentRow() {return $this->_currentRow;}
     3944        function CurrentRow() {
     3945                return $this->_currentRow;
     3946        }
    36053947
    36063948        /**
     
    36093951         * @return the current row in the recordset. If at EOF, will return the last row. 0-based.
    36103952         */
    3611         function AbsolutePosition() {return $this->_currentRow;}
     3953        function AbsolutePosition() {
     3954                return $this->_currentRow;
     3955        }
    36123956
    36133957        /**
     
    36153959         * if no records are returned, others will return the number of columns in the query.
    36163960         */
    3617         function FieldCount() {return $this->_numOfFields;}
     3961        function FieldCount() {
     3962                return $this->_numOfFields;
     3963        }
    36183964
    36193965
     
    36253971         * @return the ADOFieldObject for that column, or false.
    36263972         */
    3627         function FetchField($fieldoffset = -1)
    3628         {
     3973        function FetchField($fieldoffset = -1) {
    36293974                // must be defined by child class
    36303975
    3631                 $false = false;
    3632                 return $false;
     3976                return false;
    36333977        }
    36343978
     
    36373981         *
    36383982         */
    3639         function FieldTypesArray()
    3640         {
     3983        function FieldTypesArray() {
    36413984                $arr = array();
    36423985                for ($i=0, $max=$this->_numOfFields; $i < $max; $i++)
     
    36513994        * @return the object with the properties set to the fields of the current row
    36523995        */
    3653         function FetchObj()
    3654         {
     3996        function FetchObj() {
    36553997                $o = $this->FetchObject(false);
    36563998                return $o;
     
    36654007        * @return the object with the properties set to the fields of the current row
    36664008        */
    3667         function FetchObject($isupper=true)
    3668         {
     4009        function FetchObject($isupper=true) {
    36694010                if (empty($this->_obj)) {
    36704011                        $this->_obj = new ADOFetchObj();
     
    36764017                }
    36774018                $i = 0;
    3678                 if (PHP_VERSION >= 5) $o = clone($this->_obj);
    3679                 else $o = $this->_obj;
     4019                if (PHP_VERSION >= 5) {
     4020                        $o = clone($this->_obj);
     4021                } else {
     4022                        $o = $this->_obj;
     4023                }
    36804024
    36814025                for ($i=0; $i <$this->_numOfFields; $i++) {
    36824026                        $name = $this->_names[$i];
    3683                         if ($isupper) $n = strtoupper($name);
    3684                         else $n = $name;
     4027                        if ($isupper) {
     4028                                $n = strtoupper($name);
     4029                        } else {
     4030                                $n = $name;
     4031                        }
    36854032
    36864033                        $o->$n = $this->Fields($name);
     
    36944041        *
    36954042        * @return the object with the properties set to the fields of the current row,
    3696         *       or false if EOF
     4043        *       or false if EOF
    36974044        *
    36984045        * Fixed bug reported by tim@orotech.net
    36994046        */
    3700         function FetchNextObj()
    3701         {
     4047        function FetchNextObj() {
    37024048                $o = $this->FetchNextObject(false);
    37034049                return $o;
     
    37124058        *
    37134059        * @return the object with the properties set to the fields of the current row,
    3714         *       or false if EOF
     4060        *       or false if EOF
    37154061        *
    37164062        * Fixed bug reported by tim@orotech.net
    37174063        */
    3718         function FetchNextObject($isupper=true)
    3719         {
     4064        function FetchNextObject($isupper=true) {
    37204065                $o = false;
    37214066                if ($this->_numOfRows != 0 && !$this->EOF) {
    37224067                        $o = $this->FetchObject($isupper);
    37234068                        $this->_currentRow++;
    3724                         if ($this->_fetch()) return $o;
     4069                        if ($this->_fetch()) {
     4070                                return $o;
     4071                        }
    37254072                }
    37264073                $this->EOF = true;
     
    37354082         * @param t  is the type passed in. Normally is ADOFieldObject->type.
    37364083         * @param len is the maximum length of that field. This is because we treat character
    3737          *      fields bigger than a certain size as a 'B' (blob).
     4084         *      fields bigger than a certain size as a 'B' (blob).
    37384085         * @param fieldobj is the field object returned by the database driver. Can hold
    37394086         *      additional info (eg. primary_key for mysql).
     
    37434090         *      X for teXt (>= 250 chars)
    37444091         *      B for Binary
    3745          *      N for numeric or floating point
     4092         *      N for numeric or floating point
    37464093         *      D for date
    37474094         *      T for timestamp
    3748          *      L for logical/Boolean
     4095         *      L for logical/Boolean
    37494096         *      I for integer
    37504097         *      R for autoincrement counter/integer
     
    37524099         *
    37534100        */
    3754         function MetaType($t,$len=-1,$fieldobj=false)
    3755         {
     4101        function MetaType($t,$len=-1,$fieldobj=false) {
    37564102                if (is_object($t)) {
    37574103                        $fieldobj = $t;
     
    37594105                        $len = $fieldobj->max_length;
    37604106                }
    3761         // changed in 2.32 to hashing instead of switch stmt for speed...
    3762         static $typeMap = array(
    3763                 'VARCHAR' => 'C',
    3764                 'VARCHAR2' => 'C',
    3765                 'CHAR' => 'C',
    3766                 'C' => 'C',
    3767                 'STRING' => 'C',
    3768                 'NCHAR' => 'C',
    3769                 'NVARCHAR' => 'C',
    3770                 'VARYING' => 'C',
    3771                 'BPCHAR' => 'C',
    3772                 'CHARACTER' => 'C',
    3773                 'INTERVAL' => 'C',  # Postgres
    3774                 'MACADDR' => 'C', # postgres
    3775                 'VAR_STRING' => 'C', # mysql
    3776                 ##
    3777                 'LONGCHAR' => 'X',
    3778                 'TEXT' => 'X',
    3779                 'NTEXT' => 'X',
    3780                 'M' => 'X',
    3781                 'X' => 'X',
    3782                 'CLOB' => 'X',
    3783                 'NCLOB' => 'X',
    3784                 'LVARCHAR' => 'X',
    3785                 ##
    3786                 'BLOB' => 'B',
    3787                 'IMAGE' => 'B',
    3788                 'BINARY' => 'B',
    3789                 'VARBINARY' => 'B',
    3790                 'LONGBINARY' => 'B',
    3791                 'B' => 'B',
    3792                 ##
    3793                 'YEAR' => 'D', // mysql
    3794                 'DATE' => 'D',
    3795                 'D' => 'D',
    3796                 ##
    3797                 'UNIQUEIDENTIFIER' => 'C', # MS SQL Server
    3798                 ##
    3799                 'SMALLDATETIME' => 'T',
    3800                 'TIME' => 'T',
    3801                 'TIMESTAMP' => 'T',
    3802                 'DATETIME' => 'T',
    3803                 'TIMESTAMPTZ' => 'T',
    3804                 'T' => 'T',
    3805                 'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql
    3806                 ##
    3807                 'BOOL' => 'L',
    3808                 'BOOLEAN' => 'L',
    3809                 'BIT' => 'L',
    3810                 'L' => 'L',
    3811                 ##
    3812                 'COUNTER' => 'R',
    3813                 'R' => 'R',
    3814                 'SERIAL' => 'R', // ifx
    3815                 'INT IDENTITY' => 'R',
    3816                 ##
    3817                 'INT' => 'I',
    3818                 'INT2' => 'I',
    3819                 'INT4' => 'I',
    3820                 'INT8' => 'I',
    3821                 'INTEGER' => 'I',
    3822                 'INTEGER UNSIGNED' => 'I',
    3823                 'SHORT' => 'I',
    3824                 'TINYINT' => 'I',
    3825                 'SMALLINT' => 'I',
    3826                 'I' => 'I',
    3827                 ##
    3828                 'LONG' => 'N', // interbase is numeric, oci8 is blob
    3829                 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers
    3830                 'DECIMAL' => 'N',
    3831                 'DEC' => 'N',
    3832                 'REAL' => 'N',
    3833                 'DOUBLE' => 'N',
    3834                 'DOUBLE PRECISION' => 'N',
    3835                 'SMALLFLOAT' => 'N',
    3836                 'FLOAT' => 'N',
    3837                 'NUMBER' => 'N',
    3838                 'NUM' => 'N',
    3839                 'NUMERIC' => 'N',
    3840                 'MONEY' => 'N',
    3841 
    3842                 ## informix 9.2
    3843                 'SQLINT' => 'I',
    3844                 'SQLSERIAL' => 'I',
    3845                 'SQLSMINT' => 'I',
    3846                 'SQLSMFLOAT' => 'N',
    3847                 'SQLFLOAT' => 'N',
    3848                 'SQLMONEY' => 'N',
    3849                 'SQLDECIMAL' => 'N',
    3850                 'SQLDATE' => 'D',
    3851                 'SQLVCHAR' => 'C',
    3852                 'SQLCHAR' => 'C',
    3853                 'SQLDTIME' => 'T',
    3854                 'SQLINTERVAL' => 'N',
    3855                 'SQLBYTES' => 'B',
    3856                 'SQLTEXT' => 'X',
    3857                  ## informix 10
    3858                 "SQLINT8" => 'I8',
    3859                 "SQLSERIAL8" => 'I8',
    3860                 "SQLNCHAR" => 'C',
    3861                 "SQLNVCHAR" => 'C',
    3862                 "SQLLVARCHAR" => 'X',
    3863                 "SQLBOOL" => 'L'
     4107
     4108                // changed in 2.32 to hashing instead of switch stmt for speed...
     4109                static $typeMap = array(
     4110                        'VARCHAR' => 'C',
     4111                        'VARCHAR2' => 'C',
     4112                        'CHAR' => 'C',
     4113                        'C' => 'C',
     4114                        'STRING' => 'C',
     4115                        'NCHAR' => 'C',
     4116                        'NVARCHAR' => 'C',
     4117                        'VARYING' => 'C',
     4118                        'BPCHAR' => 'C',
     4119                        'CHARACTER' => 'C',
     4120                        'INTERVAL' => 'C',  # Postgres
     4121                        'MACADDR' => 'C', # postgres
     4122                        'VAR_STRING' => 'C', # mysql
     4123                        ##
     4124                        'LONGCHAR' => 'X',
     4125                        'TEXT' => 'X',
     4126                        'NTEXT' => 'X',
     4127                        'M' => 'X',
     4128                        'X' => 'X',
     4129                        'CLOB' => 'X',
     4130                        'NCLOB' => 'X',
     4131                        'LVARCHAR' => 'X',
     4132                        ##
     4133                        'BLOB' => 'B',
     4134                        'IMAGE' => 'B',
     4135                        'BINARY' => 'B',
     4136                        'VARBINARY' => 'B',
     4137                        'LONGBINARY' => 'B',
     4138                        'B' => 'B',
     4139                        ##
     4140                        'YEAR' => 'D', // mysql
     4141                        'DATE' => 'D',
     4142                        'D' => 'D',
     4143                        ##
     4144                        'UNIQUEIDENTIFIER' => 'C', # MS SQL Server
     4145                        ##
     4146                        'SMALLDATETIME' => 'T',
     4147                        'TIME' => 'T',
     4148                        'TIMESTAMP' => 'T',
     4149                        'DATETIME' => 'T',
     4150                        'DATETIME2' => 'T',
     4151                        'TIMESTAMPTZ' => 'T',
     4152                        'T' => 'T',
     4153                        'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql
     4154                        ##
     4155                        'BOOL' => 'L',
     4156                        'BOOLEAN' => 'L',
     4157                        'BIT' => 'L',
     4158                        'L' => 'L',
     4159                        ##
     4160                        'COUNTER' => 'R',
     4161                        'R' => 'R',
     4162                        'SERIAL' => 'R', // ifx
     4163                        'INT IDENTITY' => 'R',
     4164                        ##
     4165                        'INT' => 'I',
     4166                        'INT2' => 'I',
     4167                        'INT4' => 'I',
     4168                        'INT8' => 'I',
     4169                        'INTEGER' => 'I',
     4170                        'INTEGER UNSIGNED' => 'I',
     4171                        'SHORT' => 'I',
     4172                        'TINYINT' => 'I',
     4173                        'SMALLINT' => 'I',
     4174                        'I' => 'I',
     4175                        ##
     4176                        'LONG' => 'N', // interbase is numeric, oci8 is blob
     4177                        'BIGINT' => 'N', // this is bigger than PHP 32-bit integers
     4178                        'DECIMAL' => 'N',
     4179                        'DEC' => 'N',
     4180                        'REAL' => 'N',
     4181                        'DOUBLE' => 'N',
     4182                        'DOUBLE PRECISION' => 'N',
     4183                        'SMALLFLOAT' => 'N',
     4184                        'FLOAT' => 'N',
     4185                        'NUMBER' => 'N',
     4186                        'NUM' => 'N',
     4187                        'NUMERIC' => 'N',
     4188                        'MONEY' => 'N',
     4189
     4190                        ## informix 9.2
     4191                        'SQLINT' => 'I',
     4192                        'SQLSERIAL' => 'I',
     4193                        'SQLSMINT' => 'I',
     4194                        'SQLSMFLOAT' => 'N',
     4195                        'SQLFLOAT' => 'N',
     4196                        'SQLMONEY' => 'N',
     4197                        'SQLDECIMAL' => 'N',
     4198                        'SQLDATE' => 'D',
     4199                        'SQLVCHAR' => 'C',
     4200                        'SQLCHAR' => 'C',
     4201                        'SQLDTIME' => 'T',
     4202                        'SQLINTERVAL' => 'N',
     4203                        'SQLBYTES' => 'B',
     4204                        'SQLTEXT' => 'X',
     4205                        ## informix 10
     4206                        "SQLINT8" => 'I8',
     4207                        "SQLSERIAL8" => 'I8',
     4208                        "SQLNCHAR" => 'C',
     4209                        "SQLNVCHAR" => 'C',
     4210                        "SQLLVARCHAR" => 'X',
     4211                        "SQLBOOL" => 'L'
    38644212                );
    38654213
     
    38684216                $tmap = (isset($typeMap[$t])) ? $typeMap[$t] : 'N';
    38694217                switch ($tmap) {
    3870                 case 'C':
    3871 
    3872                         // is the char field is too long, return as text field...
    3873                         if ($this->blobSize >= 0) {
    3874                                 if ($len > $this->blobSize) return 'X';
    3875                         } else if ($len > 250) {
    3876                                 return 'X';
    3877                         }
    3878                         return 'C';
    3879 
    3880                 case 'I':
    3881                         if (!empty($fieldobj->primary_key)) return 'R';
    3882                         return 'I';
    3883 
    3884                 case false:
    3885                         return 'N';
    3886 
    3887                 case 'B':
    3888                          if (isset($fieldobj->binary))
    3889                                  return ($fieldobj->binary) ? 'B' : 'X';
    3890                         return 'B';
    3891 
    3892                 case 'D':
    3893                         if (!empty($this->connection) && !empty($this->connection->datetime)) return 'T';
    3894                         return 'D';
    3895 
    3896                 default:
    3897                         if ($t == 'LONG' && $this->dataProvider == 'oci8') return 'B';
    3898                         return $tmap;
    3899                 }
    3900         }
    3901 
     4218                        case 'C':
     4219                                // is the char field is too long, return as text field...
     4220                                if ($this->blobSize >= 0) {
     4221                                        if ($len > $this->blobSize) {
     4222                                                return 'X';
     4223                                        }
     4224                                } else if ($len > 250) {
     4225                                        return 'X';
     4226                                }
     4227                                return 'C';
     4228
     4229                        case 'I':
     4230                                if (!empty($fieldobj->primary_key)) {
     4231                                        return 'R';
     4232                                }
     4233                                return 'I';
     4234
     4235                        case false:
     4236                                return 'N';
     4237
     4238                        case 'B':
     4239                                if (isset($fieldobj->binary)) {
     4240                                        return ($fieldobj->binary) ? 'B' : 'X';
     4241                                }
     4242                                return 'B';
     4243
     4244                        case 'D':
     4245                                if (!empty($this->connection) && !empty($this->connection->datetime)) {
     4246                                        return 'T';
     4247                                }
     4248                                return 'D';
     4249
     4250                        default:
     4251                                if ($t == 'LONG' && $this->dataProvider == 'oci8') {
     4252                                        return 'B';
     4253                                }
     4254                                return $tmap;
     4255                }
     4256        }
     4257
     4258        /**
     4259         * Convert case of field names associative array, if needed
     4260         * @return void
     4261         */
     4262        protected function _updatefields()
     4263        {
     4264                if( empty($this->fields)) {
     4265                        return;
     4266                }
     4267
     4268                // Determine case conversion function
     4269                $fn_change_case = $this->AssocCaseConvertFunction();
     4270                if(!$fn_change_case) {
     4271                        // No conversion needed
     4272                        return;
     4273                }
     4274
     4275                $arr = array();
     4276
     4277                // Change the case
     4278                foreach($this->fields as $k => $v) {
     4279                        if (!is_integer($k)) {
     4280                                $k = $fn_change_case($k);
     4281                        }
     4282                        $arr[$k] = $v;
     4283                }
     4284                $this->fields = $arr;
     4285        }
    39024286
    39034287        function _close() {}
     
    39064290         * set/returns the current recordset page when paginating
    39074291         */
    3908         function AbsolutePage($page=-1)
    3909         {
    3910                 if ($page != -1) $this->_currentPage = $page;
     4292        function AbsolutePage($page=-1) {
     4293                if ($page != -1) {
     4294                        $this->_currentPage = $page;
     4295                }
    39114296                return $this->_currentPage;
    39124297        }
     
    39154300         * set/returns the status of the atFirstPage flag when paginating
    39164301         */
    3917         function AtFirstPage($status=false)
    3918         {
    3919                 if ($status != false) $this->_atFirstPage = $status;
     4302        function AtFirstPage($status=false) {
     4303                if ($status != false) {
     4304                        $this->_atFirstPage = $status;
     4305                }
    39204306                return $this->_atFirstPage;
    39214307        }
    39224308
    3923         function LastPageNo($page = false)
    3924         {
    3925                 if ($page != false) $this->_lastPageNo = $page;
     4309        function LastPageNo($page = false) {
     4310                if ($page != false) {
     4311                        $this->_lastPageNo = $page;
     4312                }
    39264313                return $this->_lastPageNo;
    39274314        }
     
    39304317         * set/returns the status of the atLastPage flag when paginating
    39314318         */
    3932         function AtLastPage($status=false)
    3933         {
    3934                 if ($status != false) $this->_atLastPage = $status;
     4319        function AtLastPage($status=false) {
     4320                if ($status != false) {
     4321                        $this->_atLastPage = $status;
     4322                }
    39354323                return $this->_atLastPage;
    39364324        }
     
    39484336         * Note that the constructor is different from the standard ADORecordSet
    39494337         */
    3950 
    39514338        class ADORecordSet_array extends ADORecordSet
    39524339        {
    39534340                var $databaseType = 'array';
    39544341
    3955                 var $_array;    // holds the 2-dimensional data array
     4342                var $_array;    // holds the 2-dimensional data array
    39564343                var $_types;    // the array of types of each column (C B I L M)
    39574344                var $_colnames; // names of each column in array
     
    39634350                var $sql = '';
    39644351                var $compat = false;
     4352
    39654353                /**
    39664354                 * Constructor
    3967                  *
    39684355                 */
    3969                 function ADORecordSet_array($fakeid=1)
    3970                 {
    3971                 global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH;
     4356                function __construct($fakeid=1) {
     4357                        global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH;
    39724358
    39734359                        // fetch() on EOF does not delete $this->fields
    39744360                        $this->compat = !empty($ADODB_COMPAT_FETCH);
    3975                         $this->ADORecordSet($fakeid); // fake queryID
     4361                        parent::__construct($fakeid); // fake queryID
    39764362                        $this->fetchMode = $ADODB_FETCH_MODE;
    39774363                }
    39784364
    3979                 function _transpose($addfieldnames=true)
    3980                 {
    3981                 global $ADODB_INCLUDED_LIB;
    3982 
    3983                         if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');
     4365                function _transpose($addfieldnames=true) {
     4366                        global $ADODB_INCLUDED_LIB;
     4367
     4368                        if (empty($ADODB_INCLUDED_LIB)) {
     4369                                include(ADODB_DIR.'/adodb-lib.inc.php');
     4370                        }
    39844371                        $hdr = true;
    39854372
     
    40204407                 *                      $array should not hold the column names.
    40214408                 */
    4022                 function InitArray($array,$typearr,$colnames=false)
    4023                 {
     4409                function InitArray($array,$typearr,$colnames=false) {
    40244410                        $this->_array = $array;
    40254411                        $this->_types = $typearr;
     
    40274413                                $this->_skiprow1 = false;
    40284414                                $this->_colnames = $colnames;
    4029                         } else  {
     4415                        } else {
    40304416                                $this->_skiprow1 = true;
    40314417                                $this->_colnames = $array[0];
     
    40414427                 * @param fieldarr      holds an array of ADOFieldObject's.
    40424428                 */
    4043                 function InitArrayFields(&$array,&$fieldarr)
    4044                 {
     4429                function InitArrayFields(&$array,&$fieldarr) {
    40454430                        $this->_array = $array;
    40464431                        $this->_skiprow1= false;
     
    40514436                }
    40524437
    4053                 function GetArray($nRows=-1)
    4054                 {
     4438                function GetArray($nRows=-1) {
    40554439                        if ($nRows == -1 && $this->_currentRow <= 0 && !$this->_skiprow1) {
    40564440                                return $this->_array;
     
    40614445                }
    40624446
    4063                 function _initrs()
    4064                 {
     4447                function _initrs() {
    40654448                        $this->_numOfRows =  sizeof($this->_array);
    4066                         if ($this->_skiprow1) $this->_numOfRows -= 1;
    4067 
    4068                         $this->_numOfFields =(isset($this->_fieldobjects)) ?
    4069                                  sizeof($this->_fieldobjects):sizeof($this->_types);
     4449                        if ($this->_skiprow1) {
     4450                                $this->_numOfRows -= 1;
     4451                        }
     4452
     4453                        $this->_numOfFields = (isset($this->_fieldobjects))
     4454                                ? sizeof($this->_fieldobjects)
     4455                                : sizeof($this->_types);
    40704456                }
    40714457
    40724458                /* Use associative array to get fields array */
    4073                 function Fields($colname)
    4074                 {
     4459                function Fields($colname) {
    40754460                        $mode = isset($this->adodbFetchMode) ? $this->adodbFetchMode : $this->fetchMode;
    40764461
    40774462                        if ($mode & ADODB_FETCH_ASSOC) {
    4078                                 if (!isset($this->fields[$colname]) && !is_null($this->fields[$colname])) $colname = strtolower($colname);
     4463                                if (!isset($this->fields[$colname]) && !is_null($this->fields[$colname])) {
     4464                                        $colname = strtolower($colname);
     4465                                }
    40794466                                return $this->fields[$colname];
    40804467                        }
     
    40894476                }
    40904477
    4091                 function FetchField($fieldOffset = -1)
    4092                 {
     4478                function FetchField($fieldOffset = -1) {
    40934479                        if (isset($this->_fieldobjects)) {
    40944480                                return $this->_fieldobjects[$fieldOffset];
     
    41024488                }
    41034489
    4104                 function _seek($row)
    4105                 {
     4490                function _seek($row) {
    41064491                        if (sizeof($this->_array) && 0 <= $row && $row < $this->_numOfRows) {
    41074492                                $this->_currentRow = $row;
    4108                                 if ($this->_skiprow1) $row += 1;
     4493                                if ($this->_skiprow1) {
     4494                                        $row += 1;
     4495                                }
    41094496                                $this->fields = $this->_array[$row];
    41104497                                return true;
     
    41134500                }
    41144501
    4115                 function MoveNext()
    4116                 {
     4502                function MoveNext() {
    41174503                        if (!$this->EOF) {
    41184504                                $this->_currentRow++;
     
    41214507
    41224508                                if ($this->_numOfRows <= $pos) {
    4123                                         if (!$this->compat) $this->fields = false;
     4509                                        if (!$this->compat) {
     4510                                                $this->fields = false;
     4511                                        }
    41244512                                } else {
    4125                                         if ($this->_skiprow1) $pos += 1;
     4513                                        if ($this->_skiprow1) {
     4514                                                $pos += 1;
     4515                                        }
    41264516                                        $this->fields = $this->_array[$pos];
    41274517                                        return true;
     
    41334523                }
    41344524
    4135                 function _fetch()
    4136                 {
     4525                function _fetch() {
    41374526                        $pos = $this->_currentRow;
    41384527
    41394528                        if ($this->_numOfRows <= $pos) {
    4140                                 if (!$this->compat) $this->fields = false;
     4529                                if (!$this->compat) {
     4530                                        $this->fields = false;
     4531                                }
    41414532                                return false;
    41424533                        }
    4143                         if ($this->_skiprow1) $pos += 1;
     4534                        if ($this->_skiprow1) {
     4535                                $pos += 1;
     4536                        }
    41444537                        $this->fields = $this->_array[$pos];
    41454538                        return true;
    41464539                }
    41474540
    4148                 function _close()
    4149                 {
     4541                function _close() {
    41504542                        return true;
    41514543                }
     
    41624554         * @deprecated
    41634555         */
    4164         function ADOLoadDB($dbType)
    4165         {
     4556        function ADOLoadDB($dbType) {
    41664557                return ADOLoadCode($dbType);
    41674558        }
     
    41704561         * Load the code for a specific database driver. Private function. Do not use.
    41714562         */
    4172         function ADOLoadCode($dbType)
    4173         {
    4174         global $ADODB_LASTDB;
    4175 
    4176                 if (!$dbType) return false;
     4563        function ADOLoadCode($dbType) {
     4564                global $ADODB_LASTDB;
     4565
     4566                if (!$dbType) {
     4567                        return false;
     4568                }
    41774569                $db = strtolower($dbType);
    41784570                switch ($db) {
    41794571                        case 'ado':
    4180                                 if (PHP_VERSION >= 5) $db = 'ado5';
     4572                                if (PHP_VERSION >= 5) {
     4573                                        $db = 'ado5';
     4574                                }
    41814575                                $class = 'ado';
    41824576                                break;
     
    41994593                @include_once($file);
    42004594                $ADODB_LASTDB = $class;
    4201                 if (class_exists("ADODB_" . $class)) return $class;
     4595                if (class_exists("ADODB_" . $class)) {
     4596                        return $class;
     4597                }
    42024598
    42034599                //ADOConnection::outp(adodb_pr(get_declared_classes(),true));
    4204                 if (!file_exists($file)) ADOConnection::outp("Missing file: $file");
    4205                 else ADOConnection::outp("Syntax error in file: $file");
     4600                if (!file_exists($file)) {
     4601                        ADOConnection::outp("Missing file: $file");
     4602                } else {
     4603                        ADOConnection::outp("Syntax error in file: $file");
     4604                }
    42064605                return false;
    42074606        }
     
    42104609         * synonym for ADONewConnection for people like me who cannot remember the correct name
    42114610         */
    4212         function NewADOConnection($db='')
    4213         {
     4611        function NewADOConnection($db='') {
    42144612                $tmp = ADONewConnection($db);
    42154613                return $tmp;
     
    42204618         *
    42214619         * @param [db]  is the database Connection object to create. If undefined,
    4222          *      use the last database driver that was loaded by ADOLoadCode().
     4620         *      use the last database driver that was loaded by ADOLoadCode().
    42234621         *
    42244622         * @return the freshly created instance of the Connection class.
    42254623         */
    4226         function ADONewConnection($db='')
    4227         {
    4228         GLOBAL $ADODB_NEWCONNECTION, $ADODB_LASTDB;
    4229 
    4230                 if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2);
     4624        function ADONewConnection($db='') {
     4625                global $ADODB_NEWCONNECTION, $ADODB_LASTDB;
     4626
     4627                if (!defined('ADODB_ASSOC_CASE')) {
     4628                        define('ADODB_ASSOC_CASE', ADODB_ASSOC_CASE_NATIVE);
     4629                }
    42314630                $errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false;
    4232                 $false = false;
    42334631                if (($at = strpos($db,'://')) !== FALSE) {
    42344632                        $origdsn = $db;
     
    42554653
    42564654                        if (!$dsna) {
    4257                                 return $false;
     4655                                return false;
    42584656                        }
    42594657                        $dsna['scheme'] = substr($origdsn,0,$at);
     
    42654663                                $sch = explode('_',$dsna['scheme']);
    42664664                                if (sizeof($sch)>1) {
    4267 
    42684665                                        $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : '';
    4269                                         if ($sch[1] == 'sqlite')
     4666                                        if ($sch[1] == 'sqlite') {
    42704667                                                $dsna['host'] = rawurlencode($sch[1].':'.rawurldecode($dsna['host']));
    4271                                         else
     4668                                        } else {
    42724669                                                $dsna['host'] = rawurlencode($sch[1].':host='.rawurldecode($dsna['host']));
     4670                                        }
    42734671                                        $dsna['scheme'] = 'pdo';
    42744672                                }
     
    42764674
    42774675                        $db = @$dsna['scheme'];
    4278                         if (!$db) return $false;
     4676                        if (!$db) {
     4677                                return false;
     4678                        }
    42794679                        $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : '';
    42804680                        $dsna['user'] = isset($dsna['user']) ? rawurldecode($dsna['user']) : '';
     
    42884688                                        $opt[$arr[0]] = isset($arr[1]) ? rawurldecode($arr[1]) : 1;
    42894689                                }
    4290                         } else $opt = array();
     4690                        } else {
     4691                                $opt = array();
     4692                        }
    42914693                }
    42924694        /*
     
    43064708                if(empty($obj)) {
    43074709
    4308                         if (!isset($ADODB_LASTDB)) $ADODB_LASTDB = '';
    4309                         if (empty($db)) $db = $ADODB_LASTDB;
    4310 
    4311                         if ($db != $ADODB_LASTDB) $db = ADOLoadCode($db);
     4710                        if (!isset($ADODB_LASTDB)) {
     4711                                $ADODB_LASTDB = '';
     4712                        }
     4713                        if (empty($db)) {
     4714                                $db = $ADODB_LASTDB;
     4715                        }
     4716                        if ($db != $ADODB_LASTDB) {
     4717                                $db = ADOLoadCode($db);
     4718                        }
    43124719
    43134720                        if (!$db) {
    4314                                 if (isset($origdsn)) $db = $origdsn;
     4721                                if (isset($origdsn)) {
     4722                                        $db = $origdsn;
     4723                                }
    43154724                                if ($errorfn) {
    43164725                                        // raise an error
    43174726                                        $ignore = false;
    43184727                                        $errorfn('ADONewConnection', 'ADONewConnection', -998,
    4319                                                          "could not load the database driver for '$db'",
    4320                                                          $db,false,$ignore);
    4321                                 } else
    4322                                          ADOConnection::outp( "<p>ADONewConnection: Unable to load database driver '$db'</p>",false);
    4323 
    4324                                 return $false;
     4728                                                        "could not load the database driver for '$db'",
     4729                                                        $db,false,$ignore);
     4730                                } else {
     4731                                        ADOConnection::outp( "<p>ADONewConnection: Unable to load database driver '$db'</p>",false);
     4732                                }
     4733                                return false;
    43254734                        }
    43264735
     
    43284737                        if (!class_exists($cls)) {
    43294738                                adodb_backtrace();
    4330                                 return $false;
     4739                                return false;
    43314740                        }
    43324741
     
    43364745                # constructor should not fail
    43374746                if ($obj) {
    4338                         if ($errorfn)  $obj->raiseErrorFn = $errorfn;
     4747                        if ($errorfn) {
     4748                                $obj->raiseErrorFn = $errorfn;
     4749                        }
    43394750                        if (isset($dsna)) {
    4340                                 if (isset($dsna['port'])) $obj->port = $dsna['port'];
     4751                                if (isset($dsna['port'])) {
     4752                                        $obj->port = $dsna['port'];
     4753                                }
    43414754                                foreach($opt as $k => $v) {
    43424755                                        switch(strtolower($k)) {
     
    43444757                                                                                $nconnect = true; $persist = true; break;
    43454758                                        case 'persist':
    4346                                         case 'persistent':      $persist = $v; break;
     4759                                        case 'persistent':      $persist = $v; break;
    43474760                                        case 'debug':           $obj->debug = (integer) $v; break;
    43484761                                        #ibase
    43494762                                        case 'role':            $obj->role = $v; break;
    4350                                         case 'dialect':         $obj->dialect = (integer) $v; break;
     4763                                        case 'dialect': $obj->dialect = (integer) $v; break;
    43514764                                        case 'charset':         $obj->charset = $v; $obj->charSet=$v; break;
    43524765                                        case 'buffers':         $obj->buffers = $v; break;
     
    43664779                                                $varr = explode(':',$v);
    43674780                                                $vlen = sizeof($varr);
    4368                                                 if ($vlen == 0) break;
     4781                                                if ($vlen == 0) {
     4782                                                        break;
     4783                                                }
    43694784                                                $obj->memCache = true;
    43704785                                                $obj->memCacheHost = explode(',',$varr[0]);
    4371                                                 if ($vlen == 1) break;
     4786                                                if ($vlen == 1) {
     4787                                                        break;
     4788                                                }
    43724789                                                $obj->memCachePort = $varr[1];
    4373                                                 if ($vlen == 2) break;
     4790                                                if ($vlen == 2) {
     4791                                                        break;
     4792                                                }
    43744793                                                $obj->memCacheCompress = $varr[2] ?  true : false;
    43754794                                                break;
    43764795                                        }
    43774796                                }
    4378                                 if (empty($persist))
     4797                                if (empty($persist)) {
    43794798                                        $ok = $obj->Connect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']);
    4380                                 else if (empty($nconnect))
     4799                                } else if (empty($nconnect)) {
    43814800                                        $ok = $obj->PConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']);
    4382                                 else
     4801                                } else {
    43834802                                        $ok = $obj->NConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']);
    4384 
    4385                                 if (!$ok) return $false;
     4803                                }
     4804
     4805                                if (!$ok) {
     4806                                        return false;
     4807                                }
    43864808                        }
    43874809                }
     
    43924814
    43934815        // $perf == true means called by NewPerfMonitor(), otherwise for data dictionary
    4394         function _adodb_getdriver($provider,$drivername,$perf=false)
    4395         {
     4816        function _adodb_getdriver($provider,$drivername,$perf=false) {
    43964817                switch ($provider) {
    4397                 case 'odbtp':   if (strncmp('odbtp_',$drivername,6)==0) return substr($drivername,6);
    4398                 case 'odbc' :   if (strncmp('odbc_',$drivername,5)==0) return substr($drivername,5);
    4399                 case 'ado'  :   if (strncmp('ado_',$drivername,4)==0) return substr($drivername,4);
    4400                 case 'native':  break;
    4401                 default:
    4402                         return $provider;
     4818                        case 'odbtp':
     4819                                if (strncmp('odbtp_',$drivername,6)==0) {
     4820                                        return substr($drivername,6);
     4821                                }
     4822                        case 'odbc' :
     4823                                if (strncmp('odbc_',$drivername,5)==0) {
     4824                                        return substr($drivername,5);
     4825                                }
     4826                        case 'ado'  :
     4827                                if (strncmp('ado_',$drivername,4)==0) {
     4828                                        return substr($drivername,4);
     4829                                }
     4830                        case 'native':
     4831                                break;
     4832                        default:
     4833                                return $provider;
    44034834                }
    44044835
    44054836                switch($drivername) {
    4406                 case 'mysqlt':
    4407                 case 'mysqli':
     4837                        case 'mysqlt':
     4838                        case 'mysqli':
    44084839                                $drivername='mysql';
    44094840                                break;
    4410                 case 'postgres7':
    4411                 case 'postgres8':
     4841                        case 'postgres7':
     4842                        case 'postgres8':
    44124843                                $drivername = 'postgres';
    44134844                                break;
    4414                 case 'firebird15': $drivername = 'firebird'; break;
    4415                 case 'oracle': $drivername = 'oci8'; break;
    4416                 case 'access': if ($perf) $drivername = ''; break;
    4417                 case 'db2'   : break;
    4418