From ce236b14a119e05102e62d55ae5d7daf0952b58e Mon Sep 17 00:00:00 2001 From: Damien Regad Date: Sun, 16 Apr 2023 18:24:54 +0200 Subject: [PATCH] Set $fetchMode property in ADORecordSet constructor This reduces code duplication as the logic to initialize $fetchMode from $ADODB_FETCH_MODE global was repeated in most drivers. $adodbFetchMode is systematically initialized as well now; previously it was only set in those drivers having specific fetch modes. Fixes #958 --- adodb.inc.php | 21 +++++++++++++------ drivers/adodb-ado.inc.php | 10 --------- drivers/adodb-ado5.inc.php | 10 --------- drivers/adodb-ads.inc.php | 11 ++-------- drivers/adodb-db2.inc.php | 11 ---------- drivers/adodb-fbsql.inc.php | 24 +++++++++++---------- drivers/adodb-firebird.inc.php | 8 ------- drivers/adodb-ibase.inc.php | 7 ------- drivers/adodb-informix72.inc.php | 11 ---------- drivers/adodb-ldap.inc.php | 35 +++++++++++++------------------ drivers/adodb-mssql.inc.php | 12 +++-------- drivers/adodb-mssqlnative.inc.php | 14 ------------- drivers/adodb-mysqli.inc.php | 7 +------ drivers/adodb-oci8.inc.php | 10 +++------ drivers/adodb-odbc.inc.php | 11 ++-------- drivers/adodb-odbtp.inc.php | 9 -------- drivers/adodb-oracle.inc.php | 11 ++-------- drivers/adodb-pdo.inc.php | 28 ++++++++++++------------- drivers/adodb-postgres64.inc.php | 11 ++-------- drivers/adodb-sqlite.inc.php | 13 +++--------- drivers/adodb-sqlite3.inc.php | 11 ++-------- drivers/adodb-sybase.inc.php | 14 ++++++------- 22 files changed, 83 insertions(+), 216 deletions(-) diff --git a/adodb.inc.php b/adodb.inc.php index a09904cf9..b93c76adf 100644 --- a/adodb.inc.php +++ b/adodb.inc.php @@ -4014,7 +4014,7 @@ class ADORecordSet implements IteratorAggregate { var $timeCreated=0; /// datetime in Unix format rs created -- for cached recordsets var $bind = false; /// used by Fields() to hold array - should be private? - var $fetchMode; /// default fetch mode + /** @var ADOConnection The parent connection */ var $connection = false; /** @@ -4063,6 +4063,11 @@ class ADORecordSet implements IteratorAggregate { */ protected $fieldObjectsIndex = array(); + /** + * @var bool|int Driver-specific fetch mode + */ + var $fetchMode; + /** * @var int Defines the Fetch Mode for a recordset * See the ADODB_FETCH_* constants @@ -4075,7 +4080,13 @@ class ADORecordSet implements IteratorAggregate { * @param resource|int $queryID Query ID returned by ADOConnection->_query() * @param int|bool $mode The ADODB_FETCH_MODE value */ - function __construct($queryID,$mode=false) { + function __construct($queryID, $mode=false) { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + $this->adodbFetchMode = $this->fetchMode = $mode; + $this->_queryID = $queryID; } @@ -5295,15 +5306,13 @@ class ADORecordSet_array extends ADORecordSet * @param int|bool $mode The ADODB_FETCH_MODE value */ function __construct($queryID, $mode=false) { - global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH; + parent::__construct(self::DUMMY_QUERY_ID); // fetch() on EOF does not delete $this->fields + global $ADODB_COMPAT_FETCH; $this->compat = !empty($ADODB_COMPAT_FETCH); - parent::__construct($queryID); // fake queryID - $this->fetchMode = $ADODB_FETCH_MODE; } - /** * Setup the array. * diff --git a/drivers/adodb-ado.inc.php b/drivers/adodb-ado.inc.php index fc000cecb..4037c1e66 100644 --- a/drivers/adodb-ado.inc.php +++ b/drivers/adodb-ado.inc.php @@ -349,16 +349,6 @@ class ADORecordSet_ado extends ADORecordSet { var $canSeek = true; var $hideErrors = true; - function __construct($id,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - parent::__construct($id); - } - // returns the field object function FetchField($fieldOffset = -1) { diff --git a/drivers/adodb-ado5.inc.php b/drivers/adodb-ado5.inc.php index 36f9c3b8d..6241425dd 100644 --- a/drivers/adodb-ado5.inc.php +++ b/drivers/adodb-ado5.inc.php @@ -383,16 +383,6 @@ class ADORecordSet_ado extends ADORecordSet { var $canSeek = true; var $hideErrors = true; - function __construct($id,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - parent::__construct($id); - } - // returns the field object function FetchField($fieldOffset = -1) { diff --git a/drivers/adodb-ads.inc.php b/drivers/adodb-ads.inc.php index 8b877b6df..abdffb1b6 100644 --- a/drivers/adodb-ads.inc.php +++ b/drivers/adodb-ads.inc.php @@ -685,20 +685,13 @@ class ADORecordSet_ads extends ADORecordSet var $dataProvider = "ads"; var $useFetchArray; - function __construct($id, $mode = false) + function __construct($queryID, $mode = false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - - $this->_queryID = $id; + parent::__construct($queryID, $mode); // the following is required for mysql odbc driver in 4.3.1 -- why? $this->EOF = false; $this->_currentRow = -1; - //parent::__construct($id); } diff --git a/drivers/adodb-db2.inc.php b/drivers/adodb-db2.inc.php index e214d2d7e..9a3a90c57 100644 --- a/drivers/adodb-db2.inc.php +++ b/drivers/adodb-db2.inc.php @@ -1832,17 +1832,6 @@ class ADORecordSet_db2 extends ADORecordSet { var $dataProvider = "db2"; var $useFetchArray; - function __construct($id,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - - $this->_queryID = $id; - } - // returns the field object function fetchField($offset = 0) diff --git a/drivers/adodb-fbsql.inc.php b/drivers/adodb-fbsql.inc.php index a4255eb97..ddc06c58c 100644 --- a/drivers/adodb-fbsql.inc.php +++ b/drivers/adodb-fbsql.inc.php @@ -170,20 +170,22 @@ class ADORecordSet_fbsql extends ADORecordSet{ var $databaseType = "fbsql"; var $canSeek = true; - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { - if (!$mode) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } + parent::__construct($queryID, $mode); + switch ($mode) { - case ADODB_FETCH_NUM: $this->fetchMode = FBSQL_NUM; break; - case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break; - case ADODB_FETCH_BOTH: - default: - $this->fetchMode = FBSQL_BOTH; break; + case ADODB_FETCH_NUM: + $this->fetchMode = FBSQL_NUM; + break; + case ADODB_FETCH_ASSOC: + $this->fetchMode = FBSQL_ASSOC; + break; + case ADODB_FETCH_BOTH: + default: + $this->fetchMode = FBSQL_BOTH; + break; } - parent::__construct($queryID); } function _initrs() diff --git a/drivers/adodb-firebird.inc.php b/drivers/adodb-firebird.inc.php index 69bbe1aff..37d3e8ebb 100644 --- a/drivers/adodb-firebird.inc.php +++ b/drivers/adodb-firebird.inc.php @@ -1024,14 +1024,6 @@ class ADORecordset_firebird extends ADORecordSet */ private $fieldObjectsHaveBlob = false; - function __construct($id, $mode = false) - { - global $ADODB_FETCH_MODE; - - $this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode; - parent::__construct($id); - } - /** * Returns: an object containing field information. diff --git a/drivers/adodb-ibase.inc.php b/drivers/adodb-ibase.inc.php index 25a9c3e86..b4ce0530b 100644 --- a/drivers/adodb-ibase.inc.php +++ b/drivers/adodb-ibase.inc.php @@ -741,13 +741,6 @@ class ADORecordset_ibase extends ADORecordSet var $bind=false; var $_cacheType; - function __construct($id,$mode=false) - { - global $ADODB_FETCH_MODE; - - $this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode; - parent::__construct($id); - } /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about diff --git a/drivers/adodb-informix72.inc.php b/drivers/adodb-informix72.inc.php index 759bd5c8f..991c6b067 100644 --- a/drivers/adodb-informix72.inc.php +++ b/drivers/adodb-informix72.inc.php @@ -400,17 +400,6 @@ class ADORecordset_informix72 extends ADORecordSet { var $canSeek = true; var $_fieldprops = false; - function __construct($id,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - parent::__construct($id); - } - - /* Returns: an object containing field information. Get column information in the Recordset object. fetchField() can be used in order to obtain information about diff --git a/drivers/adodb-ldap.inc.php b/drivers/adodb-ldap.inc.php index 323b35856..0392ea60f 100644 --- a/drivers/adodb-ldap.inc.php +++ b/drivers/adodb-ldap.inc.php @@ -296,28 +296,23 @@ class ADORecordSet_ldap extends ADORecordSet{ var $canSeek = false; var $_entryID; /* keeps track of the entry resource identifier */ - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - switch ($mode) - { - case ADODB_FETCH_NUM: - $this->fetchMode = LDAP_NUM; - break; - case ADODB_FETCH_ASSOC: - $this->fetchMode = LDAP_ASSOC; - break; - case ADODB_FETCH_DEFAULT: - case ADODB_FETCH_BOTH: - default: - $this->fetchMode = LDAP_BOTH; - break; - } + parent::__construct($queryID, $mode); - parent::__construct($queryID); + switch ($mode) { + case ADODB_FETCH_NUM: + $this->fetchMode = LDAP_NUM; + break; + case ADODB_FETCH_ASSOC: + $this->fetchMode = LDAP_ASSOC; + break; + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: + $this->fetchMode = LDAP_BOTH; + break; + } } function _initrs() diff --git a/drivers/adodb-mssql.inc.php b/drivers/adodb-mssql.inc.php index 269dd7ed3..c2b3ec83f 100644 --- a/drivers/adodb-mssql.inc.php +++ b/drivers/adodb-mssql.inc.php @@ -858,18 +858,12 @@ class ADORecordset_mssql extends ADORecordSet { var $hasFetchAssoc; // see PHPLens Issue No: 6083 // _mths works only in non-localised system - function __construct($id,$mode=false) + function __construct($queryID, $mode=false) { + parent::__construct($queryID, $mode); + // freedts check... $this->hasFetchAssoc = function_exists('mssql_fetch_assoc'); - - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - - } - $this->fetchMode = $mode; - return parent::__construct($id); } diff --git a/drivers/adodb-mssqlnative.inc.php b/drivers/adodb-mssqlnative.inc.php index ccc92872d..a76406257 100644 --- a/drivers/adodb-mssqlnative.inc.php +++ b/drivers/adodb-mssqlnative.inc.php @@ -1084,20 +1084,6 @@ class ADORecordset_mssqlnative extends ADORecordSet { ); - - - function __construct($id,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - - } - $this->fetchMode = $mode; - parent::__construct($id); - } - - function _initrs() { $this->_numOfRows = -1;//not supported diff --git a/drivers/adodb-mysqli.inc.php b/drivers/adodb-mysqli.inc.php index 90d349bdf..b3d215cf8 100644 --- a/drivers/adodb-mysqli.inc.php +++ b/drivers/adodb-mysqli.inc.php @@ -1406,10 +1406,7 @@ class ADORecordSet_mysqli extends ADORecordSet{ function __construct($queryID, $mode = false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } + parent::__construct($queryID, $mode); switch ($mode) { case ADODB_FETCH_NUM: @@ -1424,8 +1421,6 @@ function __construct($queryID, $mode = false) $this->fetchMode = MYSQLI_BOTH; break; } - $this->adodbFetchMode = $mode; - parent::__construct($queryID); } function _initrs() diff --git a/drivers/adodb-oci8.inc.php b/drivers/adodb-oci8.inc.php index a4db8adec..85b2df768 100644 --- a/drivers/adodb-oci8.inc.php +++ b/drivers/adodb-oci8.inc.php @@ -1625,12 +1625,10 @@ class ADORecordset_oci8 extends ADORecordSet { /** @var resource Cursor reference */ var $_refcursor; - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } + parent::__construct($queryID, $mode); + switch ($mode) { case ADODB_FETCH_ASSOC: $this->fetchMode = OCI_ASSOC; @@ -1645,8 +1643,6 @@ function __construct($queryID,$mode=false) break; } $this->fetchMode += OCI_RETURN_NULLS + OCI_RETURN_LOBS; - $this->adodbFetchMode = $mode; - $this->_queryID = $queryID; } /** diff --git a/drivers/adodb-odbc.inc.php b/drivers/adodb-odbc.inc.php index 508711a30..bae68903b 100644 --- a/drivers/adodb-odbc.inc.php +++ b/drivers/adodb-odbc.inc.php @@ -614,20 +614,13 @@ class ADORecordSet_odbc extends ADORecordSet { var $dataProvider = "odbc"; var $useFetchArray; - function __construct($id,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - - $this->_queryID = $id; + parent::__construct($queryID, $mode); // the following is required for mysql odbc driver in 4.3.1 -- why? $this->EOF = false; $this->_currentRow = -1; - //parent::__construct($id); } diff --git a/drivers/adodb-odbtp.inc.php b/drivers/adodb-odbtp.inc.php index e3f814810..b4e126010 100644 --- a/drivers/adodb-odbtp.inc.php +++ b/drivers/adodb-odbtp.inc.php @@ -684,15 +684,6 @@ class ADORecordSet_odbtp extends ADORecordSet { var $databaseType = 'odbtp'; var $canSeek = true; - function __construct($queryID,$mode=false) - { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - parent::__construct($queryID); - } function _initrs() { diff --git a/drivers/adodb-oracle.inc.php b/drivers/adodb-oracle.inc.php index 1a2735b14..33522155e 100644 --- a/drivers/adodb-oracle.inc.php +++ b/drivers/adodb-oracle.inc.php @@ -224,16 +224,9 @@ class ADORecordset_oracle extends ADORecordSet { var $databaseType = "oracle"; var $bind = false; - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { - - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->fetchMode = $mode; - - $this->_queryID = $queryID; + parent::__construct($queryID, $mode); $this->_inited = true; $this->fields = array(); diff --git a/drivers/adodb-pdo.inc.php b/drivers/adodb-pdo.inc.php index 60b5fd07f..120166543 100644 --- a/drivers/adodb-pdo.inc.php +++ b/drivers/adodb-pdo.inc.php @@ -854,27 +854,25 @@ class ADORecordSet_pdo extends ADORecordSet { /** @var PDOStatement */ var $_queryID; - function __construct($id,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - $this->adodbFetchMode = $mode; - switch($mode) { - case ADODB_FETCH_NUM: $mode = PDO::FETCH_NUM; break; - case ADODB_FETCH_ASSOC: $mode = PDO::FETCH_ASSOC; break; + parent::__construct($queryID, $mode); - case ADODB_FETCH_BOTH: - default: $mode = PDO::FETCH_BOTH; break; + switch($mode) { + case ADODB_FETCH_NUM: + $mode = PDO::FETCH_NUM; + break; + case ADODB_FETCH_ASSOC: + $mode = PDO::FETCH_ASSOC; + break; + case ADODB_FETCH_BOTH: + default: + $mode = PDO::FETCH_BOTH; + break; } $this->fetchMode = $mode; - - $this->_queryID = $id; - parent::__construct($id); } - function Init() { if ($this->_inited) { diff --git a/drivers/adodb-postgres64.inc.php b/drivers/adodb-postgres64.inc.php index a198423dc..33f8ae666 100644 --- a/drivers/adodb-postgres64.inc.php +++ b/drivers/adodb-postgres64.inc.php @@ -951,10 +951,8 @@ class ADORecordSet_postgres64 extends ADORecordSet{ function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } + parent::__construct($queryID, $mode); + switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; @@ -962,17 +960,12 @@ function __construct($queryID, $mode=false) case ADODB_FETCH_ASSOC: $this->fetchMode = PGSQL_ASSOC; break; - case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH: default: $this->fetchMode = PGSQL_BOTH; break; } - $this->adodbFetchMode = $mode; - - // Parent's constructor - parent::__construct($queryID); } function GetRowAssoc($upper = ADODB_ASSOC_CASE) diff --git a/drivers/adodb-sqlite.inc.php b/drivers/adodb-sqlite.inc.php index 0711f1dde..663c7b5ad 100644 --- a/drivers/adodb-sqlite.inc.php +++ b/drivers/adodb-sqlite.inc.php @@ -426,14 +426,11 @@ class ADORecordset_sqlite extends ADORecordSet { var $databaseType = "sqlite"; var $bind = false; - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { + parent::__construct($queryID, $mode); - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } - switch($mode) { + switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = SQLITE_NUM; break; @@ -444,9 +441,6 @@ function __construct($queryID,$mode=false) $this->fetchMode = SQLITE_BOTH; break; } - $this->adodbFetchMode = $mode; - - $this->_queryID = $queryID; $this->_inited = true; $this->fields = array(); @@ -463,7 +457,6 @@ function __construct($queryID,$mode=false) return $this->_queryID; } - function FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; diff --git a/drivers/adodb-sqlite3.inc.php b/drivers/adodb-sqlite3.inc.php index 318171a8c..375350543 100644 --- a/drivers/adodb-sqlite3.inc.php +++ b/drivers/adodb-sqlite3.inc.php @@ -720,12 +720,9 @@ class ADORecordset_sqlite3 extends ADORecordSet { var $_queryID; /** @noinspection PhpMissingParentConstructorInspection */ - function __construct($queryID,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; - } + parent::__construct($queryID, $mode); switch($mode) { case ADODB_FETCH_NUM: $this->fetchMode = SQLITE3_NUM; @@ -737,9 +734,6 @@ function __construct($queryID,$mode=false) $this->fetchMode = SQLITE3_BOTH; break; } - $this->adodbFetchMode = $mode; - - $this->_queryID = $queryID; $this->_inited = true; $this->fields = array(); @@ -756,7 +750,6 @@ function __construct($queryID,$mode=false) return $this->_queryID; } - function FetchField($fieldOffset = -1) { $fld = new ADOFieldObject; diff --git a/drivers/adodb-sybase.inc.php b/drivers/adodb-sybase.inc.php index 5eb217a84..a8662aa47 100644 --- a/drivers/adodb-sybase.inc.php +++ b/drivers/adodb-sybase.inc.php @@ -316,15 +316,15 @@ class ADORecordset_sybase extends ADORecordSet { // _mths works only in non-localised system var $_mths = array('JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6,'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12); - function __construct($id,$mode=false) + function __construct($queryID, $mode=false) { - if ($mode === false) { - global $ADODB_FETCH_MODE; - $mode = $ADODB_FETCH_MODE; + parent::__construct($queryID, $mode); + + if (!$mode) { + $this->fetchMode = ADODB_FETCH_ASSOC; + } else { + $this->fetchMode = $mode; } - if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC; - else $this->fetchMode = $mode; - parent::__construct($id); } /* Returns: an object containing field information.