From f7035bb964736945e54aba27b2dc3d48eb4cd346 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Wed, 5 Oct 2016 10:57:42 +0800 Subject: [PATCH] MDL-55999 lib: Update ADOdb to version 5.20.7 --- lib/adodb/adodb-active-record.inc.php | 2 +- lib/adodb/adodb-active-recordx.inc.php | 2 +- lib/adodb/adodb-csvlib.inc.php | 2 +- lib/adodb/adodb-datadict.inc.php | 2 +- lib/adodb/adodb-error.inc.php | 2 +- lib/adodb/adodb-errorhandler.inc.php | 2 +- lib/adodb/adodb-errorpear.inc.php | 2 +- lib/adodb/adodb-exceptions.inc.php | 8 +-- lib/adodb/adodb-iterator.inc.php | 2 +- lib/adodb/adodb-lib.inc.php | 4 +- lib/adodb/adodb-memcache.lib.inc.php | 2 +- lib/adodb/adodb-pager.inc.php | 2 +- lib/adodb/adodb-pear.inc.php | 2 +- lib/adodb/adodb-perf.inc.php | 2 +- lib/adodb/adodb-php4.inc.php | 2 +- lib/adodb/adodb-time.inc.php | 2 +- lib/adodb/adodb-xmlschema.inc.php | 8 +-- lib/adodb/adodb-xmlschema03.inc.php | 8 +-- lib/adodb/adodb.inc.php | 52 ++++++++++++++---- lib/adodb/datadict/datadict-access.inc.php | 2 +- lib/adodb/datadict/datadict-db2.inc.php | 2 +- lib/adodb/datadict/datadict-firebird.inc.php | 2 +- lib/adodb/datadict/datadict-generic.inc.php | 2 +- lib/adodb/datadict/datadict-ibase.inc.php | 2 +- lib/adodb/datadict/datadict-informix.inc.php | 2 +- lib/adodb/datadict/datadict-mssql.inc.php | 2 +- .../datadict/datadict-mssqlnative.inc.php | 2 +- lib/adodb/datadict/datadict-mysql.inc.php | 2 +- lib/adodb/datadict/datadict-oci8.inc.php | 2 +- lib/adodb/datadict/datadict-postgres.inc.php | 2 +- lib/adodb/datadict/datadict-sapdb.inc.php | 2 +- lib/adodb/datadict/datadict-sqlite.inc.php | 2 +- lib/adodb/datadict/datadict-sybase.inc.php | 2 +- lib/adodb/drivers/adodb-access.inc.php | 2 +- lib/adodb/drivers/adodb-ado.inc.php | 2 +- lib/adodb/drivers/adodb-ado5.inc.php | 2 +- lib/adodb/drivers/adodb-ado_access.inc.php | 2 +- lib/adodb/drivers/adodb-ado_mssql.inc.php | 2 +- lib/adodb/drivers/adodb-borland_ibase.inc.php | 2 +- lib/adodb/drivers/adodb-csv.inc.php | 2 +- lib/adodb/drivers/adodb-db2.inc.php | 2 +- lib/adodb/drivers/adodb-db2oci.inc.php | 2 +- lib/adodb/drivers/adodb-db2ora.inc.php | 2 +- lib/adodb/drivers/adodb-fbsql.inc.php | 2 +- lib/adodb/drivers/adodb-firebird.inc.php | 2 +- lib/adodb/drivers/adodb-ibase.inc.php | 2 +- lib/adodb/drivers/adodb-informix.inc.php | 2 +- lib/adodb/drivers/adodb-informix72.inc.php | 2 +- lib/adodb/drivers/adodb-ldap.inc.php | 2 +- lib/adodb/drivers/adodb-mssql.inc.php | 2 +- lib/adodb/drivers/adodb-mssqlnative.inc.php | 4 +- lib/adodb/drivers/adodb-mssqlpo.inc.php | 2 +- lib/adodb/drivers/adodb-mysql.inc.php | 2 +- lib/adodb/drivers/adodb-mysqli.inc.php | 9 +-- lib/adodb/drivers/adodb-mysqlpo.inc.php | 2 +- lib/adodb/drivers/adodb-mysqlt.inc.php | 2 +- lib/adodb/drivers/adodb-netezza.inc.php | 2 +- lib/adodb/drivers/adodb-oci8.inc.php | 2 +- lib/adodb/drivers/adodb-oci805.inc.php | 2 +- lib/adodb/drivers/adodb-oci8po.inc.php | 2 +- lib/adodb/drivers/adodb-oci8quercus.inc.php | 2 +- lib/adodb/drivers/adodb-odbc.inc.php | 2 +- lib/adodb/drivers/adodb-odbc_db2.inc.php | 2 +- lib/adodb/drivers/adodb-odbc_mssql.inc.php | 2 +- .../drivers/adodb-odbc_mssql2012.inc.php | 28 ++++++++++ lib/adodb/drivers/adodb-odbc_oracle.inc.php | 2 +- lib/adodb/drivers/adodb-odbtp.inc.php | 2 +- lib/adodb/drivers/adodb-odbtp_unicode.inc.php | 2 +- lib/adodb/drivers/adodb-oracle.inc.php | 2 +- lib/adodb/drivers/adodb-pdo.inc.php | 55 +++++++++++++++++-- lib/adodb/drivers/adodb-pdo_mssql.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_mysql.inc.php | 6 +- lib/adodb/drivers/adodb-pdo_oci.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_pgsql.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_sqlite.inc.php | 2 +- lib/adodb/drivers/adodb-postgres.inc.php | 2 +- lib/adodb/drivers/adodb-postgres64.inc.php | 2 +- lib/adodb/drivers/adodb-postgres7.inc.php | 2 +- lib/adodb/drivers/adodb-postgres8.inc.php | 2 +- lib/adodb/drivers/adodb-postgres9.inc.php | 2 +- lib/adodb/drivers/adodb-proxy.inc.php | 2 +- lib/adodb/drivers/adodb-sapdb.inc.php | 2 +- lib/adodb/drivers/adodb-sqlanywhere.inc.php | 2 +- lib/adodb/drivers/adodb-sqlite.inc.php | 2 +- lib/adodb/drivers/adodb-sqlite3.inc.php | 2 +- lib/adodb/drivers/adodb-sqlitepo.inc.php | 2 +- lib/adodb/drivers/adodb-sybase.inc.php | 2 +- lib/adodb/drivers/adodb-sybase_ase.inc.php | 2 +- lib/adodb/drivers/adodb-vfp.inc.php | 2 +- lib/adodb/perf/perf-db2.inc.php | 2 +- lib/adodb/perf/perf-informix.inc.php | 2 +- lib/adodb/perf/perf-mssql.inc.php | 2 +- lib/adodb/perf/perf-mssqlnative.inc.php | 2 +- lib/adodb/perf/perf-mysql.inc.php | 2 +- lib/adodb/perf/perf-oci8.inc.php | 2 +- lib/adodb/perf/perf-postgres.inc.php | 2 +- lib/adodb/pivottable.inc.php | 2 +- lib/adodb/rsfilter.inc.php | 2 +- lib/adodb/toexport.inc.php | 2 +- lib/adodb/tohtml.inc.php | 2 +- 100 files changed, 234 insertions(+), 128 deletions(-) create mode 100644 lib/adodb/drivers/adodb-odbc_mssql2012.inc.php diff --git a/lib/adodb/adodb-active-record.inc.php b/lib/adodb/adodb-active-record.inc.php index 2c4b87800c3..ae58564ab24 100644 --- a/lib/adodb/adodb-active-record.inc.php +++ b/lib/adodb/adodb-active-record.inc.php @@ -1,7 +1,7 @@ sql = is_array($p1) ? $p1[0] : $p1; $this->params = $p2; - $s = "$dbms error: [$errno: $errmsg] in $fn(\"$this->sql\")\n"; + $s = "$dbms error: [$errno: $errmsg] in $fn(\"$this->sql\")"; break; case 'PCONNECT': case 'CONNECT': $user = $thisConnection->user; - $s = "$dbms error: [$errno: $errmsg] in $fn($p1, '$user', '****', $p2)\n"; + $s = "$dbms error: [$errno: $errmsg] in $fn($p1, '$user', '****', $p2)"; break; default: - $s = "$dbms error: [$errno: $errmsg] in $fn($p1, $p2)\n"; + $s = "$dbms error: [$errno: $errmsg] in $fn($p1, $p2)"; break; } diff --git a/lib/adodb/adodb-iterator.inc.php b/lib/adodb/adodb-iterator.inc.php index 6b753882c34..4c8dffc1da4 100644 --- a/lib/adodb/adodb-iterator.inc.php +++ b/lib/adodb/adodb-iterator.inc.php @@ -1,7 +1,7 @@ currentElement ) { case 'INDEX': if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { - xml_set_object( $parser, $this->addIndex( $attributes ) ); + $index = $this->addIndex( $attributes ); + xml_set_object( $parser, $index ); } break; case 'DATA': if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { - xml_set_object( $parser, $this->addData( $attributes ) ); + $data = $this->addData( $attributes ); + xml_set_object( $parser, $data ); } break; case 'DROP': @@ -2196,7 +2197,6 @@ class adoSchema { function Destroy() { ini_set("magic_quotes_runtime", $this->mgq ); #set_magic_quotes_runtime( $this->mgq ); - unset( $this ); } } diff --git a/lib/adodb/adodb-xmlschema03.inc.php b/lib/adodb/adodb-xmlschema03.inc.php index 45a59bbf6e9..c1ecb885d16 100644 --- a/lib/adodb/adodb-xmlschema03.inc.php +++ b/lib/adodb/adodb-xmlschema03.inc.php @@ -175,7 +175,6 @@ class dbObject { * Destroys the object */ function destroy() { - unset( $this ); } /** @@ -290,12 +289,14 @@ class dbTable extends dbObject { switch( $this->currentElement ) { case 'INDEX': if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { - xml_set_object( $parser, $this->addIndex( $attributes ) ); + $index = $this->addIndex( $attributes ); + xml_set_object( $parser, $index ); } break; case 'DATA': if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) { - xml_set_object( $parser, $this->addData( $attributes ) ); + $data = $this->addData( $attributes ); + xml_set_object( $parser, $data ); } break; case 'DROP': @@ -2378,7 +2379,6 @@ class adoSchema { function Destroy() { ini_set("magic_quotes_runtime", $this->mgq ); #set_magic_quotes_runtime( $this->mgq ); - unset( $this ); } } diff --git a/lib/adodb/adodb.inc.php b/lib/adodb/adodb.inc.php index b6496e649d4..4967f6ae67a 100644 --- a/lib/adodb/adodb.inc.php +++ b/lib/adodb/adodb.inc.php @@ -14,7 +14,7 @@ /** \mainpage - @version v5.20.3 01-Jan-2016 + @version v5.20.7 20-Sep-2016 @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved. @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community @@ -37,6 +37,21 @@ if (!defined('_ADODB_LAYER')) { define('_ADODB_LAYER',1); + // The ADOdb extension is no longer maintained and effectively unsupported + // since v5.04. The library will not function properly if it is present. + if(defined('ADODB_EXTENSION')) { + $msg = "Unsupported ADOdb Extension (v" . ADODB_EXTENSION . ") detected! " + . "Disable it to use ADOdb"; + + $errorfn = defined('ADODB_ERROR_HANDLER') ? ADODB_ERROR_HANDLER : false; + if ($errorfn) { + $conn = false; + $errorfn('ADOdb', basename(__FILE__), -9999, $msg, null, null, $conn); + } else { + die($msg . PHP_EOL); + } + } + //============================================================================================== // CONSTANT DEFINITIONS //============================================================================================== @@ -218,7 +233,7 @@ if (!defined('_ADODB_LAYER')) { /** * ADODB version as a string. */ - $ADODB_vers = 'v5.20.3 01-Jan-2016'; + $ADODB_vers = 'v5.20.7 20-Sep-2016'; /** * Determines whether recordset->RecordCount() is used. @@ -659,23 +674,23 @@ if (!defined('_ADODB_LAYER')) { } if (isset($rez)) { $err = $this->ErrorMsg(); + $errno = $this->ErrorNo(); if (empty($err)) { $err = "Connection error to server '$argHostname' with user '$argUsername'"; } - $ret = false; } else { $err = "Missing extension for ".$this->dataProvider; - $ret = 0; + $errno = 0; } if ($fn = $this->raiseErrorFn) { - $fn($this->databaseType,'CONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); + $fn($this->databaseType, 'CONNECT', $errno, $err, $this->host, $this->database, $this); } $this->_connectionID = false; if ($this->debug) { ADOConnection::outp( $this->host.': '.$err); } - return $ret; + return false; } function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) { @@ -1117,20 +1132,35 @@ if (!defined('_ADODB_LAYER')) { $sqlarr = explode('?',$sql); $nparams = sizeof($sqlarr)-1; + if (!$array_2d) { + // When not Bind Bulk - convert to array of arguments list + $inputarr = array($inputarr); + } else { + // Bulk bind - Make sure all list of params have the same number of elements + $countElements = array_map('count', $inputarr); + if (1 != count(array_unique($countElements))) { + $this->outp_throw( + "[bulk execute] Input array has different number of params [" . print_r($countElements, true) . "].", + 'Execute' + ); + return false; + } + unset($countElements); + } // Make sure the number of parameters provided in the input // array matches what the query expects - if ($nparams != count($inputarr)) { + $element0 = reset($inputarr); + if ($nparams != count($element0)) { $this->outp_throw( - "Input array has " . count($inputarr) . + "Input array has " . count($element0) . " params, does not match query: '" . htmlspecialchars($sql) . "'", 'Execute' ); return false; } - if (!$array_2d) { - $inputarr = array($inputarr); - } + // clean memory + unset($element0); foreach($inputarr as $arr) { $sql = ''; $i = 0; diff --git a/lib/adodb/datadict/datadict-access.inc.php b/lib/adodb/datadict/datadict-access.inc.php index 0d2f36b2c78..25a72a8d10f 100644 --- a/lib/adodb/datadict/datadict-access.inc.php +++ b/lib/adodb/datadict/datadict-access.inc.php @@ -1,7 +1,7 @@ _queryID) { + if(is_object($this->_queryID)) { $rez = sqlsrv_free_stmt($this->_queryID); $this->_queryID = false; return $rez; diff --git a/lib/adodb/drivers/adodb-mssqlpo.inc.php b/lib/adodb/drivers/adodb-mssqlpo.inc.php index d73324446f2..e99f31e3a45 100644 --- a/lib/adodb/drivers/adodb-mssqlpo.inc.php +++ b/lib/adodb/drivers/adodb-mssqlpo.inc.php @@ -1,6 +1,6 @@ port, + # PHP7 compat: port must be int. Use default port if cast yields zero + (int)$this->port != 0 ? (int)$this->port : 3306, $this->socket, $this->clientFlags); @@ -1053,13 +1054,13 @@ class ADORecordSet_mysqli extends ADORecordSet{ //if results are attached to this pointer from Stored Proceedure calls, the next standard query will die 2014 //only a problem with persistant connections - if($this->connection->_connectionID) { + if(isset($this->connection->_connectionID) && $this->connection->_connectionID) { while(mysqli_more_results($this->connection->_connectionID)){ mysqli_next_result($this->connection->_connectionID); } } - if($this->_queryID) { + if($this->_queryID instanceof mysqli_result) { mysqli_free_result($this->_queryID); } $this->_queryID = false; diff --git a/lib/adodb/drivers/adodb-mysqlpo.inc.php b/lib/adodb/drivers/adodb-mysqlpo.inc.php index fe7ef11e54a..fe0213be298 100644 --- a/lib/adodb/drivers/adodb-mysqlpo.inc.php +++ b/lib/adodb/drivers/adodb-mysqlpo.inc.php @@ -1,7 +1,7 @@ _driver->_connectionID = $this->_connectionID; $this->_UpdatePDO(); + $this->_driver->database = $this->database; return true; } $this->_driver = new ADODB_pdo_base(); @@ -266,6 +267,16 @@ class ADODB_pdo extends ADOConnection { return $this->_driver->OffsetDate($dayFraction,$date); } + function SelectDB($dbName) + { + return $this->_driver->SelectDB($dbName); + } + + function SQLDate($fmt, $col=false) + { + return $this->_driver->SQLDate($fmt, $col); + } + function ErrorMsg() { if ($this->_errormsg !== false) { @@ -507,6 +518,30 @@ class ADODB_pdo extends ADOConnection { { return ($this->_connectionID) ? $this->_connectionID->lastInsertId() : 0; } + + /** + * Quotes a string to be sent to the database. + * If we have an active connection, delegates quoting to the underlying + * PDO object. Otherwise, replace "'" by the value of $replaceQuote (same + * behavior as mysqli driver) + * @param string $s The string to quote + * @param boolean $magic_quotes If false, use PDO::quote(). + * @return string Quoted string + */ + function qstr($s, $magic_quotes = false) + { + if (!$magic_quotes) { + if ($this->_connectionID) { + return $this->_connectionID->quote($s); + } + return "'" . str_replace("'", $this->replaceQuote, $s) . "'"; + } + + // undo magic quotes for " + $s = str_replace('\\"', '"', $s); + return "'$s'"; + } + } class ADODB_pdo_base extends ADODB_pdo { @@ -699,12 +734,22 @@ class ADORecordSet_pdo extends ADORecordSet { } //adodb_pr($arr); $o->name = $arr['name']; - if (isset($arr['native_type']) && $arr['native_type'] <> "null") { - $o->type = $arr['native_type']; + if (isset($arr['sqlsrv:decl_type']) && $arr['sqlsrv:decl_type'] <> "null") + { + /* + * If the database is SQL server, use the native built-ins + */ + $o->type = $arr['sqlsrv:decl_type']; } - else { - $o->type = adodb_pdo_type($arr['pdo_type']); + elseif (isset($arr['native_type']) && $arr['native_type'] <> "null") + { + $o->type = $arr['native_type']; } + else + { + $o->type = adodb_pdo_type($arr['pdo_type']); + } + $o->max_length = $arr['len']; $o->precision = $arr['precision']; diff --git a/lib/adodb/drivers/adodb-pdo_mssql.inc.php b/lib/adodb/drivers/adodb-pdo_mssql.inc.php index 94b6850cfcd..2c468421cd1 100644 --- a/lib/adodb/drivers/adodb-pdo_mssql.inc.php +++ b/lib/adodb/drivers/adodb-pdo_mssql.inc.php @@ -2,7 +2,7 @@ /* -@version v5.20.3 01-Jan-2016 +@version v5.20.7 20-Sep-2016 @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved. @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community Released under both BSD license and Lesser GPL library license. diff --git a/lib/adodb/drivers/adodb-pdo_mysql.inc.php b/lib/adodb/drivers/adodb-pdo_mysql.inc.php index fb35357f331..746161dccb6 100644 --- a/lib/adodb/drivers/adodb-pdo_mysql.inc.php +++ b/lib/adodb/drivers/adodb-pdo_mysql.inc.php @@ -1,6 +1,6 @@ metaTablesSQL; if ($showSchema && is_string($showSchema)) { - $this->metaTablesSQL .= " from $showSchema"; + $this->metaTablesSQL .= $this->qstr($showSchema); + } else { + $this->metaTablesSQL .= 'schema()'; } if ($mask) { diff --git a/lib/adodb/drivers/adodb-pdo_oci.inc.php b/lib/adodb/drivers/adodb-pdo_oci.inc.php index 394c5fd6c2a..d9006272e7e 100644 --- a/lib/adodb/drivers/adodb-pdo_oci.inc.php +++ b/lib/adodb/drivers/adodb-pdo_oci.inc.php @@ -2,7 +2,7 @@ /* -@version v5.20.3 01-Jan-2016 +@version v5.20.7 20-Sep-2016 @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved. @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community Released under both BSD license and Lesser GPL library license. diff --git a/lib/adodb/drivers/adodb-pdo_pgsql.inc.php b/lib/adodb/drivers/adodb-pdo_pgsql.inc.php index e2b75a727a6..059f4953d26 100644 --- a/lib/adodb/drivers/adodb-pdo_pgsql.inc.php +++ b/lib/adodb/drivers/adodb-pdo_pgsql.inc.php @@ -1,7 +1,7 @@