- // get next resultset - requires PHP 4.0.5 or later
- function NextRecordSet()
- {
- if (!mssql_next_result($this->_queryID)) return false;
- $this->_inited = false;
- $this->bind = false;
- $this->_currentRow = -1;
- $this->Init();
- return true;
- }
-
- /* Use associative array to get fields array */
- function Fields($colname)
- {
- if ($this->fetchMode != ADODB_FETCH_NUM) return $this->fields[$colname];
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- /* Returns: an object containing field information.
- Get column information in the Recordset object. fetchField() can be used in order to obtain information about
- fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by
- fetchField() is retrieved. */
-
- function FetchField($fieldOffset = -1)
- {
- if ($fieldOffset != -1) {
- $f = @mssql_fetch_field($this->_queryID, $fieldOffset);
- }
- else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */
- $f = @mssql_fetch_field($this->_queryID);
- }
- $false = false;
- if (empty($f)) return $false;
- return $f;
- }
-
- function _seek($row)
- {
- return @mssql_data_seek($this->_queryID, $row);
- }
-
- // speedup
- function MoveNext()
- {
- if ($this->EOF) return false;
-
- $this->_currentRow++;
-
- if ($this->fetchMode & ADODB_FETCH_ASSOC) {
- if ($this->fetchMode & ADODB_FETCH_NUM) {
- //ADODB_FETCH_BOTH mode
- $this->fields = @mssql_fetch_array($this->_queryID);
- }
- else {
- if ($this->hasFetchAssoc) {// only for PHP 4.2.0 or later
- $this->fields = @mssql_fetch_assoc($this->_queryID);
- } else {
- $flds = @mssql_fetch_array($this->_queryID);
- if (is_array($flds)) {
- $fassoc = array();
- foreach($flds as $k => $v) {
- if (is_numeric($k)) continue;
- $fassoc[$k] = $v;
- }
- $this->fields = $fassoc;
- } else
- $this->fields = false;
- }
- }
-
- if (is_array($this->fields)) {
- if (ADODB_ASSOC_CASE == 0) {
- foreach($this->fields as $k=>$v) {
- $kn = strtolower($k);
- if ($kn <> $k) {
- unset($this->fields[$k]);
- $this->fields[$kn] = $v;
- }
- }
- } else if (ADODB_ASSOC_CASE == 1) {
- foreach($this->fields as $k=>$v) {
- $kn = strtoupper($k);
- if ($kn <> $k) {
- unset($this->fields[$k]);
- $this->fields[$kn] = $v;
- }
- }
- }
- }
- } else {
- $this->fields = @mssql_fetch_row($this->_queryID);
- }
- if ($this->fields) return true;
- $this->EOF = true;
-
- return false;
- }
-
-
- // INSERT UPDATE DELETE returns false even if no error occurs in 4.0.4
- // also the date format has been changed from YYYY-mm-dd to dd MMM YYYY in 4.0.4. Idiot!
- function _fetch($ignore_fields=false)
- {
- if ($this->fetchMode & ADODB_FETCH_ASSOC) {
- if ($this->fetchMode & ADODB_FETCH_NUM) {
- //ADODB_FETCH_BOTH mode
- $this->fields = @mssql_fetch_array($this->_queryID);
- } else {
- if ($this->hasFetchAssoc) // only for PHP 4.2.0 or later
- $this->fields = @mssql_fetch_assoc($this->_queryID);
- else {
- $this->fields = @mssql_fetch_array($this->_queryID);
- if (@is_array($this->fields)) {
- $fassoc = array();
- foreach($this->fields as $k => $v) {
- if (is_integer($k)) continue;
- $fassoc[$k] = $v;
- }
- $this->fields = $fassoc;
- }
- }
- }
-
- if (!$this->fields) {
- } else if (ADODB_ASSOC_CASE == 0) {
- foreach($this->fields as $k=>$v) {
- $kn = strtolower($k);
- if ($kn <> $k) {
- unset($this->fields[$k]);
- $this->fields[$kn] = $v;
- }
- }
- } else if (ADODB_ASSOC_CASE == 1) {
- foreach($this->fields as $k=>$v) {
- $kn = strtoupper($k);
- if ($kn <> $k) {
- unset($this->fields[$k]);
- $this->fields[$kn] = $v;
- }
- }
- }
- } else {
- $this->fields = @mssql_fetch_row($this->_queryID);
- }
- return $this->fields;
- }
-
- /* close() only needs to be called if you are worried about using too much memory while your script
- is running. All associated result memory for the specified result identifier will automatically be freed. */
-
- function _close()
- {
- if($this->_queryID) {
- $rez = mssql_free_result($this->_queryID);
- $this->_queryID = false;
- return $rez;
- }
- return true;
- }
-
- /**
- * Returns the maximum size of a MetaType C field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function charMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Returns the maximum size of a MetaType X field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function textMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
-}
-
-
-class ADORecordSet_array_mssql extends ADORecordSet_array {}
-
-/*
-Code Example 1:
-
-select object_name(constid) as constraint_name,
- object_name(fkeyid) as table_name,
- col_name(fkeyid, fkey) as column_name,
- object_name(rkeyid) as referenced_table_name,
- col_name(rkeyid, rkey) as referenced_column_name
-from sysforeignkeys
-where object_name(fkeyid) = x
-order by constraint_name, table_name, referenced_table_name, keyno
-
-Code Example 2:
-select constraint_name,
- column_name,
- ordinal_position
-from information_schema.key_column_usage
-where constraint_catalog = db_name()
-and table_name = x
-order by constraint_name, ordinal_position
-
-http://www.databasejournal.com/scripts/article.php/1440551
-*/
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-mssql_n.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-mssql_n.inc.php
deleted file mode 100644
index 236c1546a..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-mssql_n.inc.php
+++ /dev/null
@@ -1,226 +0,0 @@
-_appendN($sql);
- return ADODB_mssql::_query($sql,$inputarr);
- }
-
- /**
- * This function will intercept all the literals used in the SQL, prepending the "N" char to them
- * in order to allow mssql to store properly data sent in the correct UCS-2 encoding (by freeTDS
- * and ODBTP) keeping SQL compatibility at ADOdb level (instead of hacking every project to add
- * the "N" notation when working against MSSQL.
- *
- * The original note indicated that this hack should only be used if ALL the char-based columns
- * in your DB are of type nchar, nvarchar and ntext, but testing seems to indicate that SQL server
- * doesn't seem to care if the statement is used against char etc fields.
- *
- * @todo This function should raise an ADOdb error if one of the transformations fail
- *
- * @param mixed $inboundData Either a string containing an SQL statement
- * or an array with resources from prepared statements
- *
- * @return mixed
- */
- function _appendN($inboundData) {
-
- $inboundIsArray = false;
-
- if (is_array($inboundData))
- {
- $inboundIsArray = true;
- $inboundArray = $inboundData;
- } else
- $inboundArray = (array)$inboundData;
-
- /*
- * All changes will be placed here
- */
- $outboundArray = $inboundArray;
-
- foreach($inboundArray as $inboundKey=>$inboundValue)
- {
-
- if (is_resource($inboundValue))
- {
- /*
- * Prepared statement resource
- */
- if ($this->debug)
- ADOConnection::outp("{$this->databaseType} index $inboundKey value is resource, continue");
-
- continue;
- }
-
- if (strpos($inboundValue, SINGLEQUOTE) === false)
- {
- /*
- * Check we have something to manipulate
- */
- if ($this->debug)
- ADOConnection::outp("{$this->databaseType} index $inboundKey value $inboundValue has no single quotes, continue");
- continue;
- }
-
- /*
- * Check we haven't an odd number of single quotes (this can cause problems below
- * and should be considered one wrong SQL). Exit with debug info.
- */
- if ((substr_count($inboundValue, SINGLEQUOTE) & 1))
- {
- if ($this->debug)
- ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Wrong number of quotes (odd)");
-
- break;
- }
-
- /*
- * Check we haven't any backslash + single quote combination. It should mean wrong
- * backslashes use (bad magic_quotes_sybase?). Exit with debug info.
- */
- $regexp = '/(\\\\' . SINGLEQUOTE . '[^' . SINGLEQUOTE . '])/';
- if (preg_match($regexp, $inboundValue))
- {
- if ($this->debug)
- ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Found bad use of backslash + single quote");
-
- break;
- }
-
- /*
- * Remove pairs of single-quotes
- */
- $pairs = array();
- $regexp = '/(' . SINGLEQUOTE . SINGLEQUOTE . ')/';
- preg_match_all($regexp, $inboundValue, $list_of_pairs);
-
- if ($list_of_pairs)
- {
- foreach (array_unique($list_of_pairs[0]) as $key=>$value)
- $pairs['<@#@#@PAIR-'.$key.'@#@#@>'] = $value;
-
-
- if (!empty($pairs))
- $inboundValue = str_replace($pairs, array_keys($pairs), $inboundValue);
-
- }
-
- /*
- * Remove the rest of literals present in the query
- */
- $literals = array();
- $regexp = '/(N?' . SINGLEQUOTE . '.*?' . SINGLEQUOTE . ')/is';
- preg_match_all($regexp, $inboundValue, $list_of_literals);
-
- if ($list_of_literals)
- {
- foreach (array_unique($list_of_literals[0]) as $key=>$value)
- $literals['<#@#@#LITERAL-'.$key.'#@#@#>'] = $value;
-
-
- if (!empty($literals))
- $inboundValue = str_replace($literals, array_keys($literals), $inboundValue);
- }
-
- /*
- * Analyse literals to prepend the N char to them if their contents aren't numeric
- */
- if (!empty($literals))
- {
- foreach ($literals as $key=>$value) {
- if (!is_numeric(trim($value, SINGLEQUOTE)))
- /*
- * Non numeric string, prepend our dear N, whilst
- * Trimming potentially existing previous "N"
- */
- $literals[$key] = 'N' . trim($value, 'N');
-
- }
- }
-
- /*
- * Re-apply literals to the text
- */
- if (!empty($literals))
- $inboundValue = str_replace(array_keys($literals), $literals, $inboundValue);
-
-
- /*
- * Any pairs followed by N' must be switched to N' followed by those pairs
- * (or strings beginning with single quotes will fail)
- */
- $inboundValue = preg_replace("/((<@#@#@PAIR-(\d+)@#@#@>)+)N'/", "N'$1", $inboundValue);
-
- /*
- * Re-apply pairs of single-quotes to the text
- */
- if (!empty($pairs))
- $inboundValue = str_replace(array_keys($pairs), $pairs, $inboundValue);
-
-
- /*
- * Print transformation if debug = on
- */
- if (strcmp($inboundValue,$inboundArray[$inboundKey]) <> 0 && $this->debug)
- ADOConnection::outp("{$this->databaseType} internal transformation: {$inboundArray[$inboundKey]} to {$inboundValue}");
-
- if (strcmp($inboundValue,$inboundArray[$inboundKey]) <> 0)
- /*
- * Place the transformed value into the outbound array
- */
- $outboundArray[$inboundKey] = $inboundValue;
- }
-
- /*
- * Any transformations are in the $outboundArray
- */
- if ($inboundIsArray)
- return $outboundArray;
-
- /*
- * We passed a string in originally
- */
- return $outboundArray[0];
-
- }
-
-}
-
-class ADORecordset_mssql_n extends ADORecordset_mssql {
- var $databaseType = "mssql_n";
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-mssqlnative.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-mssqlnative.inc.php
deleted file mode 100644
index dba647cb5..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-mssqlnative.inc.php
+++ /dev/null
@@ -1,1341 +0,0 @@
- 'master'";
- var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))";
- var $metaColumnsSQL =
- "select c.name,
- t.name as type,
- c.length,
- c.xprec as precision,
- c.xscale as scale,
- c.isnullable as nullable,
- c.cdefault as default_value,
- c.xtype,
- t.length as type_length,
- sc.is_identity
- from syscolumns c
- join systypes t on t.xusertype=c.xusertype
- join sysobjects o on o.id=c.id
- join sys.tables st on st.name=o.name
- join sys.columns sc on sc.object_id = st.object_id and sc.name=c.name
- where o.name='%s'";
- var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE
- var $hasGenID = true;
- var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';
- var $sysTimeStamp = 'GetDate()';
- var $maxParameterLen = 4000;
- var $arrayClass = 'ADORecordSet_array_mssqlnative';
- var $uniqueSort = true;
- var $leftOuter = '*=';
- var $rightOuter = '=*';
- var $ansiOuter = true; // for mssql7 or later
- var $identitySQL = 'select SCOPE_IDENTITY()'; // 'select SCOPE_IDENTITY'; # for mssql 2000
- var $uniqueOrderBy = true;
- var $_bindInputArray = true;
- var $_dropSeqSQL = "drop table %s";
-
- var $connectionInfo = array('ReturnDatesAsStrings'=>true);
- var $cachedSchemaFlush = false;
-
- var $sequences = false;
- var $mssql_version = '';
-
- function __construct()
- {
- if ($this->debug) {
- ADOConnection::outp("");
- sqlsrv_set_error_handling( SQLSRV_ERRORS_LOG_ALL );
- sqlsrv_log_set_severity( SQLSRV_LOG_SEVERITY_ALL );
- sqlsrv_log_set_subsystems(SQLSRV_LOG_SYSTEM_ALL);
- sqlsrv_configure('WarningsReturnAsErrors', 0);
- } else {
- sqlsrv_set_error_handling(0);
- sqlsrv_log_set_severity(0);
- sqlsrv_log_set_subsystems(SQLSRV_LOG_SYSTEM_ALL);
- sqlsrv_configure('WarningsReturnAsErrors', 0);
- }
- }
-
- /**
- * Initializes the SQL Server version.
- * Dies if connected to a non-supported version (2000 and older)
- */
- function ServerVersion() {
- $data = $this->ServerInfo();
- preg_match('/^\d{2}/', $data['version'], $matches);
- $version = (int)reset($matches);
-
- // We only support SQL Server 2005 and up
- if($version < 9) {
- die("SQL SERVER VERSION {$data['version']} NOT SUPPORTED IN mssqlnative DRIVER");
- }
-
- $this->mssql_version = $version;
- }
-
- function ServerInfo() {
- global $ADODB_FETCH_MODE;
- static $arr = false;
- if (is_array($arr))
- return $arr;
- if ($this->fetchMode === false) {
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- } elseif ($this->fetchMode >=0 && $this->fetchMode <=2) {
- $savem = $this->fetchMode;
- } else
- $savem = $this->SetFetchMode(ADODB_FETCH_NUM);
-
- $arrServerInfo = sqlsrv_server_info($this->_connectionID);
- $ADODB_FETCH_MODE = $savem;
- $arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];
- $arr['version'] = $arrServerInfo['SQLServerVersion'];//ADOConnection::_findvers($arr['description']);
- return $arr;
- }
-
- function IfNull( $field, $ifNull )
- {
- return " ISNULL($field, $ifNull) "; // if MS SQL Server
- }
-
- public function enableLastInsertID($enable = true) {
- $this->hasInsertID = $enable;
- $this->lastInsID = false;
- }
-
- /**
- * Get the last value inserted into an IDENTITY column.
- *
- * The value will actually be set in {@see _query()} when executing an
- * INSERT statement, but only if the connection's $hasInsertId property
- * is true; this can be set with {@see enableLastInsertId()}.
- *
- * @inheritDoc
- */
- protected function _insertID($table = '', $column = '')
- {
- return $this->lastInsID;
- }
-
- function _affectedrows()
- {
- if ($this->_queryID)
- return sqlsrv_rows_affected($this->_queryID);
- }
-
- function GenID($seq='adodbseq',$start=1) {
- switch($this->mssql_version){
- case 9:
- case 10:
- return $this->GenID2008($seq, $start);
- break;
- default:
- return $this->GenID2012($seq, $start);
- break;
- }
- }
-
- function CreateSequence($seq='adodbseq',$start=1)
- {
- switch($this->mssql_version){
- case 9:
- case 10:
- return $this->CreateSequence2008($seq, $start);
- break;
- default:
- return $this->CreateSequence2012($seq, $start);
- break;
- }
- }
-
- /**
- * For Server 2005,2008, duplicate a sequence with an identity table
- */
- function CreateSequence2008($seq='adodbseq',$start=1)
- {
- if($this->debug) ADOConnection::outp("
CreateSequence($seq,$start)");
- sqlsrv_begin_transaction($this->_connectionID);
- $start -= 1;
- $this->Execute("create table $seq (id int)");//was float(53)
- $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");
- if (!$ok) {
- if($this->debug) ADOConnection::outp("
Error: ROLLBACK");
- sqlsrv_rollback($this->_connectionID);
- return false;
- }
- sqlsrv_commit($this->_connectionID);
- return true;
- }
-
- /**
- * Proper Sequences Only available to Server 2012 and up
- */
- function CreateSequence2012($seq='adodbseq',$start=1){
- if (!$this->sequences){
- $sql = "SELECT name FROM sys.sequences";
- $this->sequences = $this->GetCol($sql);
- }
- $ok = $this->Execute("CREATE SEQUENCE $seq START WITH $start INCREMENT BY 1");
- if (!$ok)
- die("CANNOT CREATE SEQUENCE" . print_r(sqlsrv_errors(),true));
- $this->sequences[] = $seq;
- }
-
- /**
- * For Server 2005,2008, duplicate a sequence with an identity table
- */
- function GenID2008($seq='adodbseq',$start=1)
- {
- if($this->debug) ADOConnection::outp("
CreateSequence($seq,$start)");
- sqlsrv_begin_transaction($this->_connectionID);
- $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1");
- if (!$ok) {
- $start -= 1;
- $this->Execute("create table $seq (id int)");//was float(53)
- $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");
- if (!$ok) {
- if($this->debug) ADOConnection::outp("
Error: ROLLBACK");
- sqlsrv_rollback($this->_connectionID);
- return false;
- }
- }
- $num = $this->GetOne("select id from $seq");
- sqlsrv_commit($this->_connectionID);
- return $num;
- }
- /**
- * Only available to Server 2012 and up
- * Cannot do this the normal adodb way by trapping an error if the
- * sequence does not exist because sql server will auto create a
- * sequence with the starting number of -9223372036854775808
- */
- function GenID2012($seq='adodbseq',$start=1)
- {
-
- /*
- * First time in create an array of sequence names that we
- * can use in later requests to see if the sequence exists
- * the overhead is creating a list of sequences every time
- * we need access to at least 1. If we really care about
- * performance, we could maybe flag a 'nocheck' class variable
- */
- if (!$this->sequences){
- $sql = "SELECT name FROM sys.sequences";
- $this->sequences = $this->GetCol($sql);
- }
- if (!is_array($this->sequences)
- || is_array($this->sequences) && !in_array($seq,$this->sequences)){
- $this->CreateSequence2012($seq, $start);
-
- }
- $num = $this->GetOne("SELECT NEXT VALUE FOR $seq");
- return $num;
- }
-
- // Format date column in sql string given an input format that understands Y M D
- function SQLDate($fmt, $col=false)
- {
- if (!$col) {
- $col = $this->sysTimeStamp;
- }
- $s = '';
-
- $ConvertableFmt=array(
- "m/d/Y"=>101, "m/d/y"=>101 // US
- ,"Y.m.d"=>102, "y.m.d"=>102 // ANSI
- ,"d/m/Y"=>103, "d/m/y"=>103 // French /english
- ,"d.m.Y"=>104, "d.m.y"=>104 // German
- ,"d-m-Y"=>105, "d-m-y"=>105 // Italian
- ,"m-d-Y"=>110, "m-d-y"=>110 // US Dash
- ,"Y/m/d"=>111, "y/m/d"=>111 // Japan
- ,"Ymd"=>112, "ymd"=>112 // ISO
- ,"H:i:s"=>108 // Time
- );
- if (key_exists($fmt,$ConvertableFmt)) {
- return "convert (varchar ,$col," . $ConvertableFmt[$fmt] . ")";
- }
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- if ($s) $s .= '+';
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= "datename(yyyy,$col)";
- break;
- case 'M':
- $s .= "convert(char(3),$col,0)";
- break;
- case 'm':
- $s .= "replace(str(month($col),2),' ','0')";
- break;
- case 'Q':
- case 'q':
- $s .= "datename(quarter,$col)";
- break;
- case 'D':
- case 'd':
- $s .= "replace(str(day($col),2),' ','0')";
- break;
- case 'h':
- $s .= "substring(convert(char(14),$col,0),13,2)";
- break;
-
- case 'H':
- $s .= "replace(str(datepart(hh,$col),2),' ','0')";
- break;
-
- case 'i':
- $s .= "replace(str(datepart(mi,$col),2),' ','0')";
- break;
- case 's':
- $s .= "replace(str(datepart(ss,$col),2),' ','0')";
- break;
- case 'a':
- case 'A':
- $s .= "substring(convert(char(19),$col,0),18,2)";
- break;
- case 'l':
- $s .= "datename(dw,$col)";
- break;
- default:
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- $s .= $this->qstr($ch);
- break;
- }
- }
- return $s;
- }
-
-
- function BeginTrans()
- {
- if ($this->transOff) return true;
- $this->transCnt += 1;
- if ($this->debug) ADOConnection::outp('
begin transaction');
- sqlsrv_begin_transaction($this->_connectionID);
- return true;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) return true;
- if ($this->debug) ADOConnection::outp('
commit transaction');
- if (!$ok) return $this->RollbackTrans();
- if ($this->transCnt) $this->transCnt -= 1;
- sqlsrv_commit($this->_connectionID);
- return true;
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- if ($this->debug) ADOConnection::outp('
rollback transaction');
- if ($this->transCnt) $this->transCnt -= 1;
- sqlsrv_rollback($this->_connectionID);
- return true;
- }
-
- function SetTransactionMode( $transaction_mode )
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->Execute("SET TRANSACTION ".$transaction_mode);
- }
-
- /*
- Usage:
-
- $this->BeginTrans();
- $this->RowLock('table1,table2','table1.id=33 and table2.id=table1.id'); # lock row 33 for both tables
-
- # some operation on both tables table1 and table2
-
- $this->CommitTrans();
-
- See http://www.swynk.com/friends/achigrik/SQL70Locks.asp
- */
- function RowLock($tables,$where,$col='1 as adodbignore')
- {
- if ($col == '1 as adodbignore') $col = 'top 1 null as ignore';
- if (!$this->transCnt) $this->BeginTrans();
- return $this->GetOne("select $col from $tables with (ROWLOCK,HOLDLOCK) where $where");
- }
-
- function SelectDB($dbName)
- {
- $this->database = $dbName;
- $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
- if ($this->_connectionID) {
- $rs = $this->Execute('USE '.$dbName);
- if($rs) {
- return true;
- } else return false;
- }
- else return false;
- }
-
- function ErrorMsg()
- {
- $retErrors = sqlsrv_errors(SQLSRV_ERR_ALL);
- if($retErrors != null) {
- foreach($retErrors as $arrError) {
- $this->_errorMsg .= "SQLState: ".$arrError[ 'SQLSTATE']."\n";
- $this->_errorMsg .= "Error Code: ".$arrError[ 'code']."\n";
- $this->_errorMsg .= "Message: ".$arrError[ 'message']."\n";
- }
- }
- return $this->_errorMsg;
- }
-
- function ErrorNo()
- {
- $err = sqlsrv_errors(SQLSRV_ERR_ALL);
- if ($err && $err[0])
- return $err[0]['code'];
- else
- return 0;
- }
-
- // returns true or false
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('sqlsrv_connect'))
- {
- if ($this->debug)
- ADOConnection::outp('Microsoft SQL Server native driver (mssqlnative) not installed');
- return null;
- }
-
- if (!empty($this->port))
- /*
- * Port uses a comma
- */
- $argHostname .= ",".$this->port;
-
- $connectionInfo = $this->connectionInfo;
- $connectionInfo["Database"] = $argDatabasename;
- if ((string)$argUsername != '' || (string)$argPassword != '')
- {
- /*
- * If they pass either a userid or password, we assume
- * SQL Server authentication
- */
- $connectionInfo["UID"] = $argUsername;
- $connectionInfo["PWD"] = $argPassword;
-
- if ($this->debug)
- ADOConnection::outp('userid or password supplied, attempting connection with SQL Server Authentication');
-
- }
- else
- {
- /*
- * If they don't pass either value, we won't add them to the
- * connection parameters. This will then force an attempt
- * to use windows authentication
- */
- if ($this->debug)
-
- ADOConnection::outp('No userid or password supplied, attempting connection with Windows Authentication');
- }
-
-
- /*
- * Now merge in the passed connection parameters setting
- */
- foreach ($this->connectionParameters as $options)
- {
- foreach($options as $parameter=>$value)
- $connectionInfo[$parameter] = $value;
- }
-
- if ($this->debug) ADOConnection::outp("connecting to host: $argHostname params: ".var_export($connectionInfo,true));
- if(!($this->_connectionID = @sqlsrv_connect($argHostname,$connectionInfo)))
- {
- if ($this->debug)
- ADOConnection::outp( 'Connection Failed: '.print_r( sqlsrv_errors(), true));
- return false;
- }
-
- $this->ServerVersion();
-
- return true;
- }
-
- // returns true or false
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- //return null;//not implemented. NOTE: Persistent connections have no effect if PHP is used as a CGI program. (FastCGI!)
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
- }
-
-
- function Prepare($sql)
- {
- return $sql; // prepare does not work properly with bind parameters as bind parameters are managed by sqlsrv_prepare!
- }
-
- // returns concatenated string
- // MSSQL requires integers to be cast as strings
- // automatically cast every datatype to VARCHAR(255)
- // @author David Rogers (introspectshun)
- function Concat()
- {
- $s = "";
- $arr = func_get_args();
-
- // Split single record on commas, if possible
- if (sizeof($arr) == 1) {
- foreach ($arr as $arg) {
- $args = explode(',', $arg);
- }
- $arr = $args;
- }
-
- array_walk(
- $arr,
- function(&$value, $key) {
- $value = "CAST(" . $value . " AS VARCHAR(255))";
- }
- );
- $s = implode('+',$arr);
- if (sizeof($arr) > 0) return "$s";
-
- return '';
- }
-
- /*
- Unfortunately, it appears that mssql cannot handle varbinary > 255 chars
- So all your blobs must be of type "image".
-
- Remember to set in php.ini the following...
-
- ; Valid range 0 - 2147483647. Default = 4096.
- mssql.textlimit = 0 ; zero to pass through
-
- ; Valid range 0 - 2147483647. Default = 4096.
- mssql.textsize = 0 ; zero to pass through
- */
- function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
- {
-
- if (strtoupper($blobtype) == 'CLOB') {
- $sql = "UPDATE $table SET $column='" . $val . "' WHERE $where";
- return $this->Execute($sql) != false;
- }
- $sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where";
- return $this->Execute($sql) != false;
- }
-
- /**
- * Execute a query.
- *
- * If executing an INSERT statement and $hasInsertId is true, will set
- * $lastInsId.
- *
- * @param string $sql
- * @param array $inputarr
- * @return resource|false Query Id if successful, otherwise false
- */
- function _query($sql, $inputarr = false)
- {
- $this->_errorMsg = false;
-
- if (is_array($sql)) {
- $sql = $sql[1];
- }
-
- // Handle native driver flaw for retrieving the last insert ID
- if ($this->hasInsertID) {
- // Check if it's an INSERT statement
- $retrieveLastInsertID = preg_match(
- '/^\W*insert[\s\w()[\]",.]+values\s*\((?:[^;\']|\'\'|(?:(?:\'\')*\'[^\']+\'(?:\'\')*))*;?$/i',
- $sql
- );
- if ($retrieveLastInsertID) {
- // Append the identity SQL, so it is executed in the same
- // scope as the insert query.
- $sql .= '; ' . $this->identitySQL;
- }
- } else {
- $retrieveLastInsertID = false;
- }
-
- if ($inputarr) {
- // Ensure that the input array is indexed numerically, as required
- // by sqlsrv_query(). If param() was used to create portable binds
- // then the array might be associative.
- $inputarr = array_values($inputarr);
- $rez = sqlsrv_query($this->_connectionID, $sql, $inputarr);
- } else {
- $rez = sqlsrv_query($this->_connectionID, $sql);
- }
-
- if ($this->debug) {
- ADOConnection::outp("
running query: " . var_export($sql, true)
- . "
input array: " . var_export($inputarr, true)
- . "
result: " . var_export($rez, true)
- );
- }
-
- $this->lastInsID = false;
- if (!$rez) {
- $rez = false;
- } elseif ($retrieveLastInsertID) {
- // Get the inserted id from the last result
- // Note: loop is required as server may return more than one row,
- // e.g. if triggers are involved (see #41)
- while (sqlsrv_next_result($rez)) {
- sqlsrv_fetch($rez);
- $this->lastInsID = sqlsrv_get_field($rez, 0, SQLSRV_PHPTYPE_INT);
- }
- }
- return $rez;
- }
-
- // returns true or false
- function _close()
- {
- if ($this->transCnt) {
- $this->RollbackTrans();
- }
- if($this->_connectionID) {
- $rez = sqlsrv_close($this->_connectionID);
- }
- $this->_connectionID = false;
- return $rez;
- }
-
-
- function MetaIndexes($table,$primary=false, $owner = false)
- {
- $table = $this->qstr($table);
-
- $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno,
- CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK,
- CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique
- FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id
- INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid
- INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid
- WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table
- ORDER BY O.name, I.Name, K.keyno";
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $rs = $this->Execute($sql);
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return FALSE;
- }
-
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- if (!$primary && $row[5]) continue;
-
- $indexes[$row[0]]['unique'] = $row[6];
- $indexes[$row[0]]['columns'][] = $row[1];
- }
- return $indexes;
- }
-
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $table = $this->qstr(strtoupper($table));
-
- $sql =
- "select object_name(constid) as constraint_name,
- col_name(fkeyid, fkey) as column_name,
- object_name(rkeyid) as referenced_table_name,
- col_name(rkeyid, rkey) as referenced_column_name
- from sysforeignkeys
- where upper(object_name(fkeyid)) = $table
- order by constraint_name, referenced_table_name, keyno";
-
- $constraints = $this->GetArray($sql);
-
- $ADODB_FETCH_MODE = $save;
-
- $arr = false;
- foreach($constraints as $constr) {
- //print_r($constr);
- $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3];
- }
- if (!$arr) return false;
-
- $arr2 = false;
-
- foreach($arr as $k => $v) {
- foreach($v as $a => $b) {
- if ($upper) $a = strtoupper($a);
- if (is_array($arr2[$a])) { // a previous foreign key was define for this reference table, we merge the new one
- $arr2[$a] = array_merge($arr2[$a], $b);
- } else {
- $arr2[$a] = $b;
- }
- }
- }
- return $arr2;
- }
-
- //From: Fernando Moreira
- function MetaDatabases()
- {
- $this->SelectDB("master");
- $rs = $this->Execute($this->metaDatabasesSQL);
- $rows = $rs->GetRows();
- $ret = array();
- for($i=0;$iSelectDB($this->database);
- if($ret)
- return $ret;
- else
- return false;
- }
-
- // "Stein-Aksel Basma"
- // tested with MSSQL 2000
- function MetaPrimaryKeys($table, $owner=false)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = '';
- $this->_findschema($table,$schema);
- if (!$schema) $schema = $this->database;
- if ($schema) $schema = "and k.table_catalog like '$schema%'";
-
- $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k,
- information_schema.table_constraints tc
- where tc.constraint_name = k.constraint_name and tc.constraint_type =
- 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position ";
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $a = $this->GetCol($sql);
- $ADODB_FETCH_MODE = $savem;
-
- if ($a && sizeof($a)>0) return $a;
- $false = false;
- return $false;
- }
-
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(($mask));
- $this->metaTablesSQL .= " AND name like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
- function MetaColumns($table, $upper=true, $schema=false){
-
- /*
- * A simple caching mechanism, to be replaced in ADOdb V6
- */
- static $cached_columns = array();
- if ($this->cachedSchemaFlush)
- $cached_columns = array();
-
- if (array_key_exists($table,$cached_columns)){
- return $cached_columns[$table];
- }
-
-
- $this->_findschema($table,$schema);
- if ($schema) {
- $dbName = $this->database;
- $this->SelectDB($schema);
- }
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
-
- if ($schema) {
- $this->SelectDB($dbName);
- }
-
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- if (!is_object($rs)) {
- $false = false;
- return $false;
- }
-
- $retarr = array();
- while (!$rs->EOF){
-
- $fld = new ADOFieldObject();
- if (array_key_exists(0,$rs->fields)) {
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
- $fld->precision = $rs->fields[3];
- $fld->scale = $rs->fields[4];
- $fld->not_null =!$rs->fields[5];
- $fld->has_default = $rs->fields[6];
- $fld->xtype = $rs->fields[7];
- $fld->type_length = $rs->fields[8];
- $fld->auto_increment= $rs->fields[9];
- } else {
- $fld->name = $rs->fields['name'];
- $fld->type = $rs->fields['type'];
- $fld->max_length = $rs->fields['length'];
- $fld->precision = $rs->fields['precision'];
- $fld->scale = $rs->fields['scale'];
- $fld->not_null =!$rs->fields['nullable'];
- $fld->has_default = $rs->fields['default_value'];
- $fld->xtype = $rs->fields['xtype'];
- $fld->type_length = $rs->fields['type_length'];
- $fld->auto_increment= $rs->fields['is_identity'];
- }
-
- if ($save == ADODB_FETCH_NUM)
- $retarr[] = $fld;
- else
- $retarr[strtoupper($fld->name)] = $fld;
-
- $rs->MoveNext();
-
- }
- $rs->Close();
- $cached_columns[$table] = $retarr;
-
- return $retarr;
- }
-
- /**
- * Returns a substring of a varchar type field
- *
- * The SQL server version varies because the length is mandatory, so
- * we append a reasonable string length
- *
- * @param string $fld The field to sub-string
- * @param int $start The start point
- * @param int $length An optional length
- *
- * @return The SQL text
- */
- function substr($fld,$start,$length=0)
- {
- if ($length == 0)
- /*
- * The length available to varchar is 2GB, but that makes no
- * sense in a substring, so I'm going to arbitrarily limit
- * the length to 1K, but you could change it if you want
- */
- $length = 1024;
-
- $text = "SUBSTRING($fld,$start,$length)";
- return $text;
- }
-
- /**
- * Returns the maximum size of a MetaType C field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function charMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Returns the maximum size of a MetaType X field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function textMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
- /**
- * Lists procedures, functions and methods in an array.
- *
- * @param string $procedureNamePattern (optional)
- * @param string $catalog (optional)
- * @param string $schemaPattern (optional)
-
- * @return array of stored objects in current database.
- *
- */
- public function metaProcedures($procedureNamePattern = null, $catalog = null, $schemaPattern = null)
- {
- $metaProcedures = array();
- $procedureSQL = '';
- $catalogSQL = '';
- $schemaSQL = '';
-
- if ($procedureNamePattern)
- $procedureSQL = "AND ROUTINE_NAME LIKE " . strtoupper($this->qstr($procedureNamePattern));
-
- if ($catalog)
- $catalogSQL = "AND SPECIFIC_SCHEMA=" . strtoupper($this->qstr($catalog));
-
- if ($schemaPattern)
- $schemaSQL = "AND ROUTINE_SCHEMA LIKE {$this->qstr($schemaPattern)}";
-
- $fields = " ROUTINE_NAME,ROUTINE_TYPE,ROUTINE_SCHEMA,ROUTINE_CATALOG";
-
- $SQL = "SELECT $fields
- FROM {$this->database}.information_schema.routines
- WHERE 1=1
- $procedureSQL
- $catalogSQL
- $schemaSQL
- ORDER BY ROUTINE_NAME
- ";
-
- $result = $this->execute($SQL);
-
- if (!$result)
- return false;
- while ($r = $result->fetchRow()){
- if (!isset($r[0]))
- /*
- * Convert to numeric
- */
- $r = array_values($r);
-
- $procedureName = $r[0];
- $schemaName = $r[2];
- $routineCatalog= $r[3];
- $metaProcedures[$procedureName] = array('type'=> $r[1],
- 'catalog' => $routineCatalog,
- 'schema' => $schemaName,
- 'remarks' => '',
- );
- }
-
- return $metaProcedures;
- }
-
- /**
- * An SQL Statement that adds a specific number of
- * days or part to local datetime
- *
- * @param float $dayFraction
- * @param string $date
- *
- * @return string
- */
- public function offsetDate($dayFraction, $date = false)
- {
- if (!$date)
- /*
- * Use GETDATE() via systTimestamp;
- */
- $date = $this->sysTimeStamp;
-
- /*
- * seconds, number of seconds, date base
- */
- $dateFormat = "DATEADD(s, %s, %s)";
-
- /*
- * Adjust the offset back to seconds
- */
- $fraction = $dayFraction * 24 * 3600;
-
- return sprintf($dateFormat,$fraction,$date);
-
- }
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_mssqlnative extends ADORecordSet {
-
- var $databaseType = "mssqlnative";
- var $canSeek = false;
- var $fieldOffset = 0;
- // _mths works only in non-localised system
-
- /**
- * @var bool True if we have retrieved the fields metadata
- */
- private $fieldObjectsRetrieved = false;
-
- /*
- * Cross-reference the objects by name for easy access
- */
- private $fieldObjectsIndex = array();
-
- /*
- * Cross references the dateTime objects for faster decoding
- */
- private $dateTimeObjects = array();
-
- /*
- * flags that we have dateTimeObjects to handle
- */
- private $hasDateTimeObjects = false;
-
- /*
- * This is cross reference between how the types are stored
- * in SQL Server and their english-language description
- * -154 is a time field, see #432
- */
- private $_typeConversion = array(
- -155 => 'datetimeoffset',
- -154 => 'char',
- -152 => 'xml',
- -151 => 'udt',
- -11 => 'uniqueidentifier',
- -10 => 'ntext',
- -9 => 'nvarchar',
- -8 => 'nchar',
- -7 => 'bit',
- -6 => 'tinyint',
- -5 => 'bigint',
- -4 => 'image',
- -3 => 'varbinary',
- -2 => 'timestamp',
- -1 => 'text',
- 1 => 'char',
- 2 => 'numeric',
- 3 => 'decimal',
- 4 => 'int',
- 5 => 'smallint',
- 6 => 'float',
- 7 => 'real',
- 12 => 'varchar',
- 91 => 'date',
- 93 => 'datetime'
- );
-
-
-
-
- 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
- // Cache the metadata right now
- $this->_fetchField();
-
- }
-
-
- //Contributed by "Sven Axelsson"
- // get next resultset - requires PHP 4.0.5 or later
- function NextRecordSet()
- {
- if (!sqlsrv_next_result($this->_queryID)) return false;
- $this->_inited = false;
- $this->bind = false;
- $this->_currentRow = -1;
- $this->Init();
- return true;
- }
-
- /* Use associative array to get fields array */
- function Fields($colname)
- {
- if (!is_array($this->fields))
- /*
- * Too early
- */
- return;
- if ($this->fetchMode != ADODB_FETCH_NUM)
- return $this->fields[$colname];
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- /**
- * Returns: an object containing field information.
- *
- * Get column information in the Recordset object. fetchField()
- * can be used in order to obtain information about fields in a
- * certain query result. If the field offset isn't specified,
- * the next field that wasn't yet retrieved by fetchField()
- * is retrieved.
- *
- * @param int $fieldOffset (optional default=-1 for all
- * @return mixed an ADOFieldObject, or array of objects
- */
- private function _fetchField($fieldOffset = -1)
- {
- if ($this->fieldObjectsRetrieved) {
- if ($this->fieldObjectsCache) {
- // Already got the information
- if ($fieldOffset == -1) {
- return $this->fieldObjectsCache;
- } else {
- return $this->fieldObjectsCache[$fieldOffset];
- }
- } else {
- // No metadata available
- return false;
- }
- }
-
- $this->fieldObjectsRetrieved = true;
- /*
- * Retrieve all metadata in one go. This is always returned as a
- * numeric array.
- */
- $fieldMetaData = sqlsrv_field_metadata($this->_queryID);
-
- if (!$fieldMetaData) {
- // Not a statement that gives us metaData
- return false;
- }
-
- $this->_numOfFields = count($fieldMetaData);
- foreach ($fieldMetaData as $key=>$value) {
- $fld = new ADOFieldObject;
- // Caution - keys are case-sensitive, must respect casing of values
- $fld->name = $value['Name'];
- $fld->max_length = $value['Size'];
- $fld->column_source = $value['Name'];
- $fld->type = $this->_typeConversion[$value['Type']];
-
- $this->fieldObjectsCache[$key] = $fld;
- $this->fieldObjectsIndex[$fld->name] = $key;
- }
- if ($fieldOffset == -1) {
- return $this->fieldObjectsCache;
- }
-
- return $this->fieldObjectsCache[$fieldOffset];
- }
-
- /*
- * Fetchfield copies the oracle method, it loads the field information
- * into the _fieldobjs array once, to save multiple calls to the
- * sqlsrv_field_metadata function
- *
- * @param int $fieldOffset (optional)
- *
- * @return adoFieldObject
- *
- * @author KM Newnham
- * @date 02/20/2013
- */
- function fetchField($fieldOffset = -1)
- {
- return $this->fieldObjectsCache[$fieldOffset];
- }
-
- function _seek($row)
- {
- return false;//There is no support for cursors in the driver at this time. All data is returned via forward-only streams.
- }
-
- // speedup
- function MoveNext()
- {
- if ($this->EOF)
- return false;
-
- $this->_currentRow++;
-
- if ($this->_fetch())
- return true;
- $this->EOF = true;
-
- return false;
- }
-
- function _fetch($ignore_fields=false)
- {
- if ($this->fetchMode & ADODB_FETCH_ASSOC) {
- if ($this->fetchMode & ADODB_FETCH_NUM)
- $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_BOTH);
- else
- $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_ASSOC);
-
- if (is_array($this->fields))
- {
-
- if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER)
- $this->fields = array_change_key_case($this->fields,CASE_LOWER);
- else if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_UPPER)
- $this->fields = array_change_key_case($this->fields,CASE_UPPER);
-
- }
- }
- else
- $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_NUMERIC);
-
- if (!$this->fields)
- return false;
-
- return $this->fields;
- }
-
- /**
- * close() only needs to be called if you are worried about using too much
- * memory while your script is running. All associated result memory for
- * the specified result identifier will automatically be freed.
- *
- * @return bool tru if we succeeded in closing down
- */
- function _close()
- {
- /*
- * If we are closing down a failed query, collect any
- * error messages. This is a hack fix to the "close too early"
- * problem so this might go away later
- */
- $this->connection->errorMsg();
- if(is_resource($this->_queryID)) {
- $rez = sqlsrv_free_stmt($this->_queryID);
- $this->_queryID = false;
- return $rez;
- }
-
- return true;
- }
-
-}
-
-
-class ADORecordSet_array_mssqlnative extends ADORecordSet_array {}
-
-/*
-Code Example 1:
-
-select object_name(constid) as constraint_name,
- object_name(fkeyid) as table_name,
- col_name(fkeyid, fkey) as column_name,
- object_name(rkeyid) as referenced_table_name,
- col_name(rkeyid, rkey) as referenced_column_name
-from sysforeignkeys
-where object_name(fkeyid) = x
-order by constraint_name, table_name, referenced_table_name, keyno
-
-Code Example 2:
-select constraint_name,
- column_name,
- ordinal_position
-from information_schema.key_column_usage
-where constraint_catalog = db_name()
-and table_name = x
-order by constraint_name, ordinal_position
-
-http://www.databasejournal.com/scripts/article.php/1440551
-*/
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-mssqlpo.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-mssqlpo.inc.php
deleted file mode 100644
index f2d2f6fbd..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-mssqlpo.inc.php
+++ /dev/null
@@ -1,48 +0,0 @@
-_connectionID);
- if (!$stmt) return $sql;
- return array($sql,$stmt);
- }
-
- function _query($sql,$inputarr=false)
- {
- if (is_string($sql)) $sql = str_replace('||','+',$sql);
- return ADODB_mssql::_query($sql,$inputarr);
- }
-}
-
-class ADORecordset_mssqlpo extends ADORecordset_mssql {
- var $databaseType = "mssqlpo";
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-mysqli.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-mysqli.inc.php
deleted file mode 100644
index 10f58ec67..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-mysqli.inc.php
+++ /dev/null
@@ -1,1979 +0,0 @@
-_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->execute('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->execute("SET SESSION TRANSACTION ".$transaction_mode);
- }
-
- /**
- * Adds a parameter to the connection string.
- *
- * Parameter must be one of the constants listed in mysqli_options().
- * @see https://www.php.net/manual/en/mysqli.options.php
- *
- * @param int $parameter The parameter to set
- * @param string $value The value of the parameter
- *
- * @return bool
- */
- public function setConnectionParameter($parameter, $value) {
- if(!is_numeric($parameter)) {
- $this->outp_throw("Invalid connection parameter '$parameter'", __METHOD__);
- return false;
- }
- return parent::setConnectionParameter($parameter, $value);
- }
-
- /**
- * Connect to a database.
- *
- * @todo add: parameter int $port, parameter string $socket
- *
- * @param string|null $argHostname (Optional) The host to connect to.
- * @param string|null $argUsername (Optional) The username to connect as.
- * @param string|null $argPassword (Optional) The password to connect with.
- * @param string|null $argDatabasename (Optional) The name of the database to start in when connected.
- * @param bool $persist (Optional) Whether or not to use a persistent connection.
- *
- * @return bool|null True if connected successfully, false if connection failed, or null if the mysqli extension
- * isn't currently loaded.
- */
- function _connect($argHostname = null,
- $argUsername = null,
- $argPassword = null,
- $argDatabasename = null,
- $persist = false)
- {
- if(!extension_loaded("mysqli")) {
- return null;
- }
- $this->_connectionID = @mysqli_init();
-
- if (is_null($this->_connectionID)) {
- // mysqli_init only fails if insufficient memory
- if ($this->debug) {
- ADOConnection::outp("mysqli_init() failed : " . $this->errorMsg());
- }
- return false;
- }
- /*
- I suggest a simple fix which would enable adodb and mysqli driver to
- read connection options from the standard mysql configuration file
- /etc/my.cnf - "Bastien Duclaux"
- */
- $this->optionFlags = array();
- foreach($this->optionFlags as $arr) {
- mysqli_options($this->_connectionID,$arr[0],$arr[1]);
- }
-
- // Now merge in the standard connection parameters setting
- foreach ($this->connectionParameters as $options) {
- foreach ($options as $parameter => $value) {
- // Make sure parameter is numeric before calling mysqli_options()
- // to avoid Warning (or TypeError exception on PHP 8).
- if (!is_numeric($parameter)
- || !mysqli_options($this->_connectionID, $parameter, $value)
- ) {
- $this->outp_throw("Invalid connection parameter '$parameter'", __METHOD__);
- }
- }
- }
-
- //https://php.net/manual/en/mysqli.persistconns.php
- if ($persist && strncmp($argHostname,'p:',2) != 0) {
- $argHostname = 'p:' . $argHostname;
- }
-
- // SSL Connections for MySQLI
- if ($this->ssl_key || $this->ssl_cert || $this->ssl_ca || $this->ssl_capath || $this->ssl_cipher) {
- mysqli_ssl_set($this->_connectionID, $this->ssl_key, $this->ssl_cert, $this->ssl_ca, $this->ssl_capath, $this->ssl_cipher);
- $this->socket = MYSQLI_CLIENT_SSL;
- $this->clientFlags = MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
- }
-
- #if (!empty($this->port)) $argHostname .= ":".$this->port;
- /** @noinspection PhpCastIsUnnecessaryInspection */
- $ok = @mysqli_real_connect($this->_connectionID,
- $argHostname,
- $argUsername,
- $argPassword,
- $argDatabasename,
- # 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);
-
- if ($ok) {
- if ($argDatabasename) return $this->selectDB($argDatabasename);
- return true;
- } else {
- if ($this->debug) {
- ADOConnection::outp("Could not connect : " . $this->errorMsg());
- }
- $this->_connectionID = null;
- return false;
- }
- }
-
- /**
- * Connect to a database with a persistent connection.
- *
- * @param string|null $argHostname The host to connect to.
- * @param string|null $argUsername The username to connect as.
- * @param string|null $argPassword The password to connect with.
- * @param string|null $argDatabasename The name of the database to start in when connected.
- *
- * @return bool|null True if connected successfully, false if connection failed, or null if the mysqli extension
- * isn't currently loaded.
- */
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, true);
- }
-
- /**
- * Connect to a database, whilst setting $this->forceNewConnect to true.
- *
- * When is this used? Close old connection first?
- * In _connect(), check $this->forceNewConnect?
- *
- * @param string|null $argHostname The host to connect to.
- * @param string|null $argUsername The username to connect as.
- * @param string|null $argPassword The password to connect with.
- * @param string|null $argDatabaseName The name of the database to start in when connected.
- *
- * @return bool|null True if connected successfully, false if connection failed, or null if the mysqli extension
- * isn't currently loaded.
- */
- function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName)
- {
- $this->forceNewConnect = true;
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName);
- }
-
- /**
- * Replaces a null value with a specified replacement.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:ifnull
- *
- * @param mixed $field The field in the table to check.
- * @param mixed $ifNull The value to replace the null value with if it is found.
- *
- * @return string
- */
- function IfNull($field, $ifNull)
- {
- return " IFNULL($field, $ifNull) ";
- }
-
- /**
- * Retrieves the first column of the first matching row of an executed SQL statement.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:getone
- *
- * @param string $sql The SQL to execute.
- * @param bool|array $inputarr (Optional) An array containing any required SQL parameters, or false if none needed.
- *
- * @return bool|array|null
- */
- function GetOne($sql, $inputarr = false)
- {
- global $ADODB_GETONE_EOF;
-
- $ret = false;
- $rs = $this->execute($sql,$inputarr);
- if ($rs) {
- if ($rs->EOF) $ret = $ADODB_GETONE_EOF;
- else $ret = reset($rs->fields);
- $rs->close();
- }
- return $ret;
- }
-
- /**
- * Get information about the current MySQL server.
- *
- * @return array
- */
- function ServerInfo()
- {
- $arr['description'] = $this->getOne("select version()");
- $arr['version'] = ADOConnection::_findvers($arr['description']);
- return $arr;
- }
-
- /**
- * Begins a granular transaction.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:begintrans
- *
- * @return bool Always returns true.
- */
- function BeginTrans()
- {
- if ($this->transOff) return true;
- $this->transCnt += 1;
-
- //$this->execute('SET AUTOCOMMIT=0');
- mysqli_autocommit($this->_connectionID, false);
- $this->execute('BEGIN');
- return true;
- }
-
- /**
- * Commits a granular transaction.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:committrans
- *
- * @param bool $ok (Optional) If false, will rollback the transaction instead.
- *
- * @return bool Always returns true.
- */
- function CommitTrans($ok = true)
- {
- if ($this->transOff) return true;
- if (!$ok) return $this->rollbackTrans();
-
- if ($this->transCnt) $this->transCnt -= 1;
- $this->execute('COMMIT');
-
- //$this->execute('SET AUTOCOMMIT=1');
- mysqli_autocommit($this->_connectionID, true);
- return true;
- }
-
- /**
- * Rollback a smart transaction.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:rollbacktrans
- *
- * @return bool Always returns true.
- */
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- if ($this->transCnt) $this->transCnt -= 1;
- $this->execute('ROLLBACK');
- //$this->execute('SET AUTOCOMMIT=1');
- mysqli_autocommit($this->_connectionID, true);
- return true;
- }
-
- /**
- * Lock a table row for a duration of a transaction.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:rowlock
- *
- * @param string $table The table(s) to lock rows for.
- * @param string $where (Optional) The WHERE clause to use to determine which rows to lock.
- * @param string $col (Optional) The columns to select.
- *
- * @return bool True if the locking SQL statement executed successfully, otherwise false.
- */
- function RowLock($table, $where = '', $col = '1 as adodbignore')
- {
- if ($this->transCnt==0) $this->beginTrans();
- if ($where) $where = ' where '.$where;
- $rs = $this->execute("select $col from $table $where for update");
- return !empty($rs);
- }
-
- /**
- * Appropriately quotes strings with ' characters for insertion into the database.
- *
- * Relies on mysqli_real_escape_string()
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:qstr
- *
- * @param string $s The string to quote
- * @param bool $magic_quotes This param is not used since 5.21.0.
- * It remains for backwards compatibility.
- *
- * @return string Quoted string
- */
- function qStr($s, $magic_quotes=false)
- {
- if (is_null($s)) {
- return 'NULL';
- }
-
- // mysqli_real_escape_string() throws a warning when the given
- // connection is invalid
- if ($this->_connectionID) {
- return "'" . mysqli_real_escape_string($this->_connectionID, $s) . "'";
- }
-
- if ($this->replaceQuote[0] == '\\') {
- $s = str_replace(array('\\', "\0"), array('\\\\', "\\\0") ,$s);
- }
- return "'" . str_replace("'", $this->replaceQuote, $s) . "'";
- }
-
- /**
- * Return the AUTO_INCREMENT id of the last row that has been inserted or updated in a table.
- *
- * @inheritDoc
- */
- protected function _insertID($table = '', $column = '')
- {
- // mysqli_insert_id does not return the last_insert_id if called after
- // execution of a stored procedure so we execute this instead.
- if ($this->useLastInsertStatement)
- $result = ADOConnection::getOne('SELECT LAST_INSERT_ID()');
- else
- $result = @mysqli_insert_id($this->_connectionID);
-
- if ($result == -1) {
- if ($this->debug)
- ADOConnection::outp("mysqli_insert_id() failed : " . $this->errorMsg());
- }
- // reset prepared statement flags
- $this->usePreparedStatement = false;
- $this->useLastInsertStatement = false;
- return $result;
- }
-
- /**
- * Returns how many rows were effected by the most recently executed SQL statement.
- * Only works for INSERT, UPDATE and DELETE queries.
- *
- * @return int The number of rows affected.
- */
- function _affectedrows()
- {
- if ($this->isSelectStatement) {
- // Affected rows works fine against selects, returning
- // the rowcount, but ADOdb does not do that.
- return false;
- }
- else if ($this->statementAffectedRows >= 0)
- {
- $result = $this->statementAffectedRows;
- $this->statementAffectedRows = -1;
- }
- else
- {
- $result = @mysqli_affected_rows($this->_connectionID);
- if ($result == -1) {
- if ($this->debug) ADOConnection::outp("mysqli_affected_rows() failed : " . $this->errorMsg());
- }
- }
- return $result;
- }
-
- // Reference on Last_Insert_ID on the recommended way to simulate sequences
- var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);";
- var $_genSeqSQL = "create table if not exists %s (id int not null)";
- var $_genSeqCountSQL = "select count(*) from %s";
- var $_genSeq2SQL = "insert into %s values (%s)";
- var $_dropSeqSQL = "drop table if exists %s";
-
- /**
- * Creates a sequence in the database.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:createsequence
- *
- * @param string $seqname The sequence name.
- * @param int $startID The start id.
- *
- * @return ADORecordSet|bool A record set if executed successfully, otherwise false.
- */
- function CreateSequence($seqname = 'adodbseq', $startID = 1)
- {
- if (empty($this->_genSeqSQL)) return false;
-
- $ok = $this->execute(sprintf($this->_genSeqSQL,$seqname));
- if (!$ok) return false;
- return $this->execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
- }
-
- /**
- * A portable method of creating sequence numbers.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:genid
- *
- * @param string $seqname (Optional) The name of the sequence to use.
- * @param int $startID (Optional) The point to start at in the sequence.
- *
- * @return bool|int|string
- */
- function GenID($seqname = 'adodbseq', $startID = 1)
- {
- // post-nuke sets hasGenID to false
- if (!$this->hasGenID) return false;
-
- $getnext = sprintf($this->_genIDSQL,$seqname);
- $holdtransOK = $this->_transOK; // save the current status
- $rs = @$this->execute($getnext);
- if (!$rs) {
- if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset
- $this->execute(sprintf($this->_genSeqSQL,$seqname));
- $cnt = $this->getOne(sprintf($this->_genSeqCountSQL,$seqname));
- if (!$cnt) $this->execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
- $rs = $this->execute($getnext);
- }
-
- if ($rs) {
- $this->genID = mysqli_insert_id($this->_connectionID);
- if ($this->genID == 0) {
- $getnext = "select LAST_INSERT_ID() from " . $seqname;
- $rs = $this->execute($getnext);
- $this->genID = (int)$rs->fields[0];
- }
- $rs->close();
- } else
- $this->genID = 0;
-
- return $this->genID;
- }
-
- /**
- * Return a list of all visible databases except the 'mysql' database.
- *
- * @return array|false An array of database names, or false if the query failed.
- */
- function MetaDatabases()
- {
- $query = "SHOW DATABASES";
- $ret = $this->execute($query);
- if ($ret && is_object($ret)){
- $arr = array();
- while (!$ret->EOF){
- $db = $ret->fields('Database');
- if ($db != 'mysql') $arr[] = $db;
- $ret->moveNext();
- }
- return $arr;
- }
- return $ret;
- }
-
- /**
- * Get a list of indexes on the specified table.
- *
- * @param string $table The name of the table to get indexes for.
- * @param bool $primary (Optional) Whether or not to include the primary key.
- * @param bool $owner (Optional) Unused.
- *
- * @return array|bool An array of the indexes, or false if the query to get the indexes failed.
- */
- function MetaIndexes($table, $primary = false, $owner = false)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->setFetchMode(FALSE);
- }
-
- // get index details
- $rs = $this->Execute(sprintf('SHOW INDEXES FROM `%s`',$table));
-
- // restore fetchmode
- if (isset($savem)) {
- $this->setFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return false;
- }
-
- $indexes = array ();
-
- // parse index data into array
- while ($row = $rs->fetchRow()) {
- if ($primary == FALSE AND $row[2] == 'PRIMARY') {
- continue;
- }
-
- if (!isset($indexes[$row[2]])) {
- $indexes[$row[2]] = array(
- 'unique' => ($row[1] == 0),
- 'columns' => array()
- );
- }
-
- $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4];
- }
-
- // sort columns by order in the index
- foreach ( array_keys ($indexes) as $index )
- {
- ksort ($indexes[$index]['columns']);
- }
-
- return $indexes;
- }
-
- /**
- * Returns a portably-formatted date string from a timestamp database column.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:sqldate
- *
- * @param string $fmt The date format to use.
- * @param string|bool $col (Optional) The table column to date format, or if false, use NOW().
- *
- * @return string The SQL DATE_FORMAT() string, or false if the provided date format was empty.
- */
- function SQLDate($fmt, $col = false)
- {
- if (!$col) $col = $this->sysTimeStamp;
- $s = 'DATE_FORMAT('.$col.",'";
- $concat = false;
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= '%Y';
- break;
- case 'Q':
- case 'q':
- $s .= "'),Quarter($col)";
-
- if ($len > $i+1) $s .= ",DATE_FORMAT($col,'";
- else $s .= ",('";
- $concat = true;
- break;
- case 'M':
- $s .= '%b';
- break;
-
- case 'm':
- $s .= '%m';
- break;
- case 'D':
- case 'd':
- $s .= '%d';
- break;
-
- case 'H':
- $s .= '%H';
- break;
-
- case 'h':
- $s .= '%I';
- break;
-
- case 'i':
- $s .= '%i';
- break;
-
- case 's':
- $s .= '%s';
- break;
-
- case 'a':
- case 'A':
- $s .= '%p';
- break;
-
- case 'w':
- $s .= '%w';
- break;
-
- case 'l':
- $s .= '%W';
- break;
-
- default:
-
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- $s .= $ch;
- break;
- }
- }
- $s.="')";
- if ($concat) $s = "CONCAT($s)";
- return $s;
- }
-
- /**
- * Returns a database-specific concatenation of strings.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:concat
- *
- * @return string
- */
- function Concat()
- {
- $arr = func_get_args();
-
- // suggestion by andrew005@mnogo.ru
- $s = implode(',',$arr);
- if (strlen($s) > 0) return "CONCAT($s)";
- else return '';
- }
-
- /**
- * Creates a portable date offset field, for use in SQL statements.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:offsetdate
- *
- * @param float $dayFraction A day in floating point
- * @param string|bool $date (Optional) The date to offset. If false, uses CURDATE()
- *
- * @return string
- */
- function OffsetDate($dayFraction, $date = false)
- {
- if (!$date) $date = $this->sysDate;
-
- $fraction = $dayFraction * 24 * 3600;
- return $date . ' + INTERVAL ' . $fraction.' SECOND';
-
-// return "from_unixtime(unix_timestamp($date)+$fraction)";
- }
-
- /**
- * Returns information about stored procedures and stored functions.
- *
- * @param string|bool $procedureNamePattern (Optional) Only look for procedures/functions with a name matching this pattern.
- * @param null $catalog (Optional) Unused.
- * @param null $schemaPattern (Optional) Unused.
- *
- * @return array
- */
- function MetaProcedures($procedureNamePattern = false, $catalog = null, $schemaPattern = null)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== FALSE) {
- $savem = $this->setFetchMode(FALSE);
- }
-
- $procedures = array ();
-
- // get index details
-
- $likepattern = '';
- if ($procedureNamePattern) {
- $likepattern = " LIKE '".$procedureNamePattern."'";
- }
- $rs = $this->execute('SHOW PROCEDURE STATUS'.$likepattern);
- if (is_object($rs)) {
-
- // parse index data into array
- while ($row = $rs->fetchRow()) {
- $procedures[$row[1]] = array(
- 'type' => 'PROCEDURE',
- 'catalog' => '',
- 'schema' => '',
- 'remarks' => $row[7],
- );
- }
- }
-
- $rs = $this->execute('SHOW FUNCTION STATUS'.$likepattern);
- if (is_object($rs)) {
- // parse index data into array
- while ($row = $rs->fetchRow()) {
- $procedures[$row[1]] = array(
- 'type' => 'FUNCTION',
- 'catalog' => '',
- 'schema' => '',
- 'remarks' => $row[7]
- );
- }
- }
-
- // restore fetchmode
- if (isset($savem)) {
- $this->setFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- return $procedures;
- }
-
- /**
- * Retrieves a list of tables based on given criteria
- *
- * @param string|bool $ttype (Optional) Table type = 'TABLE', 'VIEW' or false=both (default)
- * @param string|bool $showSchema (Optional) schema name, false = current schema (default)
- * @param string|bool $mask (Optional) filters the table by name
- *
- * @return array list of tables
- */
- function MetaTables($ttype = false, $showSchema = false, $mask = false)
- {
- $save = $this->metaTablesSQL;
- if ($showSchema && is_string($showSchema)) {
- $this->metaTablesSQL .= $this->qstr($showSchema);
- } else {
- $this->metaTablesSQL .= "schema()";
- }
-
- if ($mask) {
- $mask = $this->qstr($mask);
- $this->metaTablesSQL .= " AND table_name LIKE $mask";
- }
- $ret = ADOConnection::metaTables($ttype,$showSchema);
-
- $this->metaTablesSQL = $save;
- return $ret;
- }
-
- /**
- * Return information about a table's foreign keys.
- *
- * @param string $table The name of the table to get the foreign keys for.
- * @param string|bool $owner (Optional) The database the table belongs to, or false to assume the current db.
- * @param string|bool $upper (Optional) Force uppercase table name on returned array keys.
- * @param bool $associative (Optional) Whether to return an associate or numeric array.
- *
- * @return array|bool An array of foreign keys, or false no foreign keys could be found.
- */
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_ASSOC
- || $this->fetchMode == ADODB_FETCH_ASSOC)
- $associative = true;
-
- $savem = $ADODB_FETCH_MODE;
- $this->setFetchMode(ADODB_FETCH_ASSOC);
-
- if ( !empty($owner) ) {
- $table = "$owner.$table";
- }
-
- $a_create_table = $this->getRow(sprintf('SHOW CREATE TABLE `%s`', $table));
-
- $this->setFetchMode($savem);
-
- $create_sql = isset($a_create_table["Create Table"]) ? $a_create_table["Create Table"] : $a_create_table["Create View"];
-
- $matches = array();
-
- if (!preg_match_all("/FOREIGN KEY \(`(.*?)`\) REFERENCES `(.*?)` \(`(.*?)`\)/", $create_sql, $matches)) return false;
- $foreign_keys = array();
- $num_keys = count($matches[0]);
- for ( $i = 0; $i < $num_keys; $i ++ ) {
- $my_field = explode('`, `', $matches[1][$i]);
- $ref_table = $matches[2][$i];
- $ref_field = explode('`, `', $matches[3][$i]);
-
- if ( $upper ) {
- $ref_table = strtoupper($ref_table);
- }
-
- // see https://sourceforge.net/p/adodb/bugs/100/
- if (!isset($foreign_keys[$ref_table])) {
- $foreign_keys[$ref_table] = array();
- }
- $num_fields = count($my_field);
- for ( $j = 0; $j < $num_fields; $j ++ ) {
- if ( $associative ) {
- $foreign_keys[$ref_table][$ref_field[$j]] = $my_field[$j];
- } else {
- $foreign_keys[$ref_table][] = "{$my_field[$j]}={$ref_field[$j]}";
- }
- }
- }
-
- return $foreign_keys;
- }
-
- /**
- * Return an array of information about a table's columns.
- *
- * @param string $table The name of the table to get the column info for.
- * @param bool $normalize (Optional) Unused.
- *
- * @return ADOFieldObject[]|bool An array of info for each column, or false if it could not determine the info.
- */
- function MetaColumns($table, $normalize = true)
- {
- $false = false;
- if (!$this->metaColumnsSQL)
- return $false;
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false)
- $savem = $this->SetFetchMode(false);
- /*
- * Return assoc array where key is column name, value is column type
- * [1] => int unsigned
- */
-
- $SQL = "SELECT column_name, column_type
- FROM information_schema.columns
- WHERE table_schema='{$this->databaseName}'
- AND table_name='$table'";
-
- $schemaArray = $this->getAssoc($SQL);
- $schemaArray = array_change_key_case($schemaArray,CASE_LOWER);
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- if (!is_object($rs))
- return $false;
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
-
- /*
- * Type from information_schema returns
- * the same format in V8 mysql as V5
- */
- $type = $schemaArray[strtolower($fld->name)];
-
- // split type into type(length):
- $fld->scale = null;
- if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
- $fld->type = $query_array[1];
- $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
- $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
- } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {
- $fld->type = $query_array[1];
- $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
- } elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) {
- $fld->type = $query_array[1];
- $arr = explode(",",$query_array[2]);
- $fld->enums = $arr;
- $zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6
- $fld->max_length = ($zlen > 0) ? $zlen : 1;
- } else {
- $fld->type = $type;
- $fld->max_length = -1;
- }
-
- $fld->not_null = ($rs->fields[2] != 'YES');
- $fld->primary_key = ($rs->fields[3] == 'PRI');
- $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
- $fld->binary = (strpos($type,'blob') !== false);
- $fld->unsigned = (strpos($type,'unsigned') !== false);
- $fld->zerofill = (strpos($type,'zerofill') !== false);
-
- if (!$fld->binary) {
- $d = $rs->fields[4];
- if ($d != '' && $d != 'NULL') {
- $fld->has_default = true;
- $fld->default_value = $d;
- } else {
- $fld->has_default = false;
- }
- }
-
- if ($save == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- } else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
- $rs->moveNext();
- }
-
- $rs->close();
- return $retarr;
- }
-
- /**
- * Select which database to connect to.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:selectdb
- *
- * @param string $dbName The name of the database to select.
- *
- * @return bool True if the database was selected successfully, otherwise false.
- */
- function SelectDB($dbName)
- {
-// $this->_connectionID = $this->mysqli_resolve_link($this->_connectionID);
- $this->database = $dbName;
- $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
-
- if ($this->_connectionID) {
- $result = @mysqli_select_db($this->_connectionID, $dbName);
- if (!$result) {
- ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->errorMsg());
- }
- return $result;
- }
- return false;
- }
-
- /**
- * Executes a provided SQL statement and returns a handle to the result, with the ability to supply a starting
- * offset and record count.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:selectlimit
- *
- * @param string $sql The SQL to execute.
- * @param int $nrows (Optional) The limit for the number of records you want returned. By default, all results.
- * @param int $offset (Optional) The offset to use when selecting the results. By default, no offset.
- * @param array|bool $inputarr (Optional) Any parameter values required by the SQL statement, or false if none.
- * @param int $secs2cache (Optional) If greater than 0, perform a cached execute. By default, normal execution.
- *
- * @return ADORecordSet|false The query results, or false if the query failed to execute.
- */
- function SelectLimit($sql,
- $nrows = -1,
- $offset = -1,
- $inputarr = false,
- $secs2cache = 0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr = ($offset >= 0) ? "$offset," : '';
- if ($nrows < 0) $nrows = '18446744073709551615';
-
- if ($secs2cache)
- $rs = $this->cacheExecute($secs2cache, $sql . " LIMIT $offsetStr$nrows" , $inputarr );
- else
- $rs = $this->execute($sql . " LIMIT $offsetStr$nrows" , $inputarr );
-
- return $rs;
- }
-
- /**
- * Prepares an SQL statement and returns a handle to use.
- * This is not used by bound parameters anymore
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:prepare
- * @todo update this function to handle prepared statements correctly
- *
- * @param string $sql The SQL to prepare.
- *
- * @return string The original SQL that was provided.
- */
- function Prepare($sql)
- {
- /*
- * Flag the insert_id method to use the correct retrieval method
- */
- $this->usePreparedStatement = true;
-
- /*
- * Prepared statements are not yet handled correctly
- */
- return $sql;
- $stmt = $this->_connectionID->prepare($sql);
- if (!$stmt) {
- echo $this->errorMsg();
- return $sql;
- }
- return array($sql,$stmt);
- }
-
- /**
- * Execute SQL
- *
- * @param string $sql SQL statement to execute, or possibly an array
- * holding prepared statement ($sql[0] will hold sql text)
- * @param array|bool $inputarr holds the input data to bind to.
- * Null elements will be set to null.
- *
- * @return ADORecordSet|bool
- */
- public function execute($sql, $inputarr = false)
- {
- if ($this->fnExecute) {
- $fn = $this->fnExecute;
- $ret = $fn($this, $sql, $inputarr);
- if (isset($ret)) {
- return $ret;
- }
- }
-
- if ($inputarr === false) {
- return $this->_execute($sql);
- }
-
- if (!is_array($inputarr)) {
- $inputarr = array($inputarr);
- }
-
- if (!is_array($sql)) {
- // Check if we are bulkbinding. If so, $inputarr is a 2d array,
- // and we make a gross assumption that all rows have the same number
- // of columns of the same type, and use the elements of the first row
- // to determine the MySQL bind param types.
- if (is_array($inputarr[0])) {
- if (!$this->bulkBind) {
- $this->outp_throw(
- "2D Array of values sent to execute and 'ADOdb_mysqli::bulkBind' not set",
- 'Execute'
- );
- return false;
- }
-
- $bulkTypeArray = [];
- foreach ($inputarr as $v) {
- if (is_string($this->bulkBind)) {
- $typeArray = array_merge((array)$this->bulkBind, $v);
- } else {
- $typeArray = $this->getBindParamWithType($v);
- }
- $bulkTypeArray[] = $typeArray;
- }
- $this->bulkBind = false;
- $ret = $this->_execute($sql, $bulkTypeArray);
- } else {
- $typeArray = $this->getBindParamWithType($inputarr);
- $ret = $this->_execute($sql, $typeArray);
- }
- } else {
- $ret = $this->_execute($sql, $inputarr);
- }
- return $ret;
- }
-
- /**
- * Inserts the bind param type string at the front of the parameter array.
- *
- * @see https://www.php.net/manual/en/mysqli-stmt.bind-param.php
- *
- * @param array $inputArr
- * @return array
- */
- private function getBindParamWithType($inputArr): array
- {
- $typeString = '';
- foreach ($inputArr as $v) {
- if (is_integer($v) || is_bool($v)) {
- $typeString .= 'i';
- } elseif (is_float($v)) {
- $typeString .= 'd';
- } elseif (is_object($v)) {
- // Assume a blob
- $typeString .= 'b';
- } else {
- $typeString .= 's';
- }
- }
-
- // Place the field type list at the front of the parameter array.
- // This is the mysql specific format
- array_unshift($inputArr, $typeString);
- return $inputArr;
- }
-
- /**
- * Return the query id.
- *
- * @param string|array $sql
- * @param array $inputarr
- *
- * @return bool|mysqli_result
- */
- function _query($sql, $inputarr)
- {
- global $ADODB_COUNTRECS;
- // Move to the next recordset, or return false if there is none. In a stored proc
- // call, mysqli_next_result returns true for the last "recordset", but mysqli_store_result
- // returns false. I think this is because the last "recordset" is actually just the
- // return value of the stored proc (ie the number of rows affected).
- // Commented out for reasons of performance. You should retrieve every recordset yourself.
- // if (!mysqli_next_result($this->connection->_connectionID)) return false;
-
- if (is_array($sql)) {
-
- // Prepare() not supported because mysqli_stmt_execute does not return a recordset, but
- // returns as bound variables.
-
- $stmt = $sql[1];
- $a = '';
- foreach($inputarr as $v) {
- if (is_string($v)) $a .= 's';
- else if (is_integer($v)) $a .= 'i';
- else $a .= 'd';
- }
-
- /*
- * set prepared statement flags
- */
- if ($this->usePreparedStatement)
- $this->useLastInsertStatement = true;
-
- $fnarr = array_merge( array($stmt,$a) , $inputarr);
- call_user_func_array('mysqli_stmt_bind_param',$fnarr);
- return mysqli_stmt_execute($stmt);
- }
- else if (is_string($sql) && is_array($inputarr))
- {
-
- /*
- * This is support for true prepared queries
- * with bound parameters
- *
- * set prepared statement flags
- */
- $this->usePreparedStatement = true;
- $this->usingBoundVariables = true;
-
- $bulkBindArray = array();
- if (is_array($inputarr[0]))
- {
- $bulkBindArray = $inputarr;
- $inputArrayCount = count($inputarr[0]) - 1;
- }
- else
- {
- $bulkBindArray[] = $inputarr;
- $inputArrayCount = count($inputarr) - 1;
- }
-
-
- /*
- * Prepare the statement with the placeholders,
- * prepare will fail if the statement is invalid
- * so we trap and error if necessary. Note that we
- * are calling MySQL prepare here, not ADOdb
- */
- $stmt = $this->_connectionID->prepare($sql);
- if ($stmt === false)
- {
- $this->outp_throw(
- "SQL Statement failed on preparation: " . htmlspecialchars($sql) . "'",
- 'Execute'
- );
- return false;
- }
- /*
- * Make sure the number of parameters provided in the input
- * array matches what the query expects. We must discount
- * the first parameter which contains the data types in
- * our inbound parameters
- */
- $nparams = $stmt->param_count;
-
- if ($nparams != $inputArrayCount)
- {
-
- $this->outp_throw(
- "Input array has " . $inputArrayCount .
- " params, does not match query: '" . htmlspecialchars($sql) . "'",
- 'Execute'
- );
- return false;
- }
-
- foreach ($bulkBindArray as $inputarr)
- {
- /*
- * Must pass references into call_user_func_array
- */
- $paramsByReference = array();
- foreach($inputarr as $key => $value) {
- /** @noinspection PhpArrayAccessCanBeReplacedWithForeachValueInspection */
- $paramsByReference[$key] = &$inputarr[$key];
- }
-
- /*
- * Bind the params
- */
- call_user_func_array(array($stmt, 'bind_param'), $paramsByReference);
-
- /*
- * Execute
- */
-
- $ret = mysqli_stmt_execute($stmt);
-
- /*
- * Did we throw an error?
- */
- if ($ret == false)
- return false;
- }
-
- /*
- * Is the statement a non-select
- */
- if ($stmt->affected_rows > -1)
- {
- $this->statementAffectedRows = $stmt->affected_rows;
- return true;
- }
-
- // Tells affected_rows to be compliant
- $this->isSelectStatement = true;
-
- // Turn the statement into a result set and return it
- return $stmt->get_result();
- }
- else
- {
- /*
- * reset prepared statement flags, in case we set them
- * previously and didn't use them
- */
- $this->usePreparedStatement = false;
- $this->useLastInsertStatement = false;
- }
-
- /*
- if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) {
- if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->errorMsg());
- return false;
- }
-
- return $mysql_res;
- */
-
- if ($this->multiQuery) {
- $rs = mysqli_multi_query($this->_connectionID, $sql.';');
- if ($rs) {
- $rs = ($ADODB_COUNTRECS) ? @mysqli_store_result( $this->_connectionID ) : @mysqli_use_result( $this->_connectionID );
- return $rs ?: true; // mysqli_more_results( $this->_connectionID )
- }
- } else {
- $rs = mysqli_query($this->_connectionID, $sql, $ADODB_COUNTRECS ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
- if ($rs) {
- $this->isSelectStatement = is_object($rs);
- return $rs;
- }
- }
-
- if($this->debug)
- ADOConnection::outp("Query: " . $sql . " failed. " . $this->errorMsg());
-
- return false;
-
- }
-
- /**
- * Returns a database specific error message.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:errormsg
- *
- * @return string The last error message.
- */
- function ErrorMsg()
- {
- if (empty($this->_connectionID))
- $this->_errorMsg = @mysqli_connect_error();
- else
- $this->_errorMsg = @mysqli_error($this->_connectionID);
- return $this->_errorMsg;
- }
-
- /**
- * Returns the last error number from previous database operation.
- *
- * @return int The last error number.
- */
- function ErrorNo()
- {
- if (empty($this->_connectionID))
- return @mysqli_connect_errno();
- else
- return @mysqli_errno($this->_connectionID);
- }
-
- /**
- * Close the database connection.
- *
- * @return void
- */
- function _close()
- {
- if($this->_connectionID) {
- mysqli_close($this->_connectionID);
- }
- $this->_connectionID = false;
- }
-
- /**
- * Returns the largest length of data that can be inserted into a character field.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:charmax
- *
- * @return int
- */
- function CharMax()
- {
- return 255;
- }
-
- /**
- * Returns the largest length of data that can be inserted into a text field.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:textmax
- *
- * @return int
- */
- function TextMax()
- {
- return 4294967295;
- }
-
- function getCharSet()
- {
- if (!$this->_connectionID || !method_exists($this->_connectionID,'character_set_name')) {
- return false;
- }
-
- $this->charSet = $this->_connectionID->character_set_name();
- return $this->charSet ?: false;
- }
-
- function setCharSet($charset)
- {
- if (!$this->_connectionID || !method_exists($this->_connectionID,'set_charset')) {
- return false;
- }
-
- if ($this->charSet !== $charset) {
- if (!$this->_connectionID->set_charset($charset)) {
- return false;
- }
- $this->getCharSet();
- }
- return true;
- }
-
-}
-
-/**
- * Class ADORecordSet_mysqli
- */
-class ADORecordSet_mysqli extends ADORecordSet{
-
- var $databaseType = "mysqli";
- var $canSeek = true;
-
- /** @var ADODB_mysqli The parent connection */
- var $connection = false;
-
- /** @var mysqli_result result link identifier */
- var $_queryID;
-
- function __construct($queryID, $mode = false)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
-
- switch ($mode) {
- case ADODB_FETCH_NUM:
- $this->fetchMode = MYSQLI_NUM;
- break;
- case ADODB_FETCH_ASSOC:
- $this->fetchMode = MYSQLI_ASSOC;
- break;
- case ADODB_FETCH_DEFAULT:
- case ADODB_FETCH_BOTH:
- default:
- $this->fetchMode = MYSQLI_BOTH;
- break;
- }
- $this->adodbFetchMode = $mode;
- parent::__construct($queryID);
- }
-
- function _initrs()
- {
- global $ADODB_COUNTRECS;
-
- $this->_numOfRows = $ADODB_COUNTRECS ? @mysqli_num_rows($this->_queryID) : -1;
- $this->_numOfFields = @mysqli_num_fields($this->_queryID);
- }
-
-/*
-1 = MYSQLI_NOT_NULL_FLAG
-2 = MYSQLI_PRI_KEY_FLAG
-4 = MYSQLI_UNIQUE_KEY_FLAG
-8 = MYSQLI_MULTIPLE_KEY_FLAG
-16 = MYSQLI_BLOB_FLAG
-32 = MYSQLI_UNSIGNED_FLAG
-64 = MYSQLI_ZEROFILL_FLAG
-128 = MYSQLI_BINARY_FLAG
-256 = MYSQLI_ENUM_FLAG
-512 = MYSQLI_AUTO_INCREMENT_FLAG
-1024 = MYSQLI_TIMESTAMP_FLAG
-2048 = MYSQLI_SET_FLAG
-32768 = MYSQLI_NUM_FLAG
-16384 = MYSQLI_PART_KEY_FLAG
-32768 = MYSQLI_GROUP_FLAG
-65536 = MYSQLI_UNIQUE_FLAG
-131072 = MYSQLI_BINCMP_FLAG
-*/
-
- /**
- * Returns raw, database specific information about a field.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:recordset:fetchfield
- *
- * @param int $fieldOffset (Optional) The field number to get information for.
- *
- * @return ADOFieldObject|bool
- */
- function FetchField($fieldOffset = -1)
- {
- $fieldnr = $fieldOffset;
- if ($fieldOffset != -1) {
- $fieldOffset = @mysqli_field_seek($this->_queryID, $fieldnr);
- }
- $o = @mysqli_fetch_field($this->_queryID);
- if (!$o) return false;
-
- //Fix for HHVM
- if ( !isset($o->flags) ) {
- $o->flags = 0;
- }
- /* Properties of an ADOFieldObject as set by MetaColumns */
- $o->primary_key = $o->flags & MYSQLI_PRI_KEY_FLAG;
- $o->not_null = $o->flags & MYSQLI_NOT_NULL_FLAG;
- $o->auto_increment = $o->flags & MYSQLI_AUTO_INCREMENT_FLAG;
- $o->binary = $o->flags & MYSQLI_BINARY_FLAG;
- // $o->blob = $o->flags & MYSQLI_BLOB_FLAG; /* not returned by MetaColumns */
- $o->unsigned = $o->flags & MYSQLI_UNSIGNED_FLAG;
-
- /*
- * Trivial method to cast class to ADOfieldObject
- */
- $a = new ADOFieldObject;
- foreach (get_object_vars($o) as $key => $name)
- $a->$key = $name;
- return $a;
- }
-
- /**
- * Reads a row in associative mode if the recordset fetch mode is numeric.
- * Using this function when the fetch mode is set to ADODB_FETCH_ASSOC may produce unpredictable results.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:getrowassoc
- *
- * @param int $upper Indicates whether the keys of the recordset should be upper case or lower case.
- *
- * @return array|bool
- */
- function GetRowAssoc($upper = ADODB_ASSOC_CASE)
- {
- if ($this->fetchMode == MYSQLI_ASSOC && $upper == ADODB_ASSOC_CASE_LOWER) {
- return $this->fields;
- }
- return ADORecordSet::getRowAssoc($upper);
- }
-
- /**
- * Returns a single field in a single row of the current recordset.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:recordset:fields
- *
- * @param string $colname The name of the field to retrieve.
- *
- * @return mixed
- */
- function Fields($colname)
- {
- if ($this->fetchMode != MYSQLI_NUM) {
- return @$this->fields[$colname];
- }
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i = 0; $i < $this->_numOfFields; $i++) {
- $o = $this->fetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- /**
- * Adjusts the result pointer to an arbitrary row in the result.
- *
- * @param int $row The row to seek to.
- *
- * @return bool False if the recordset contains no rows, otherwise true.
- */
- function _seek($row)
- {
- if ($this->_numOfRows == 0 || $row < 0) {
- return false;
- }
-
- mysqli_data_seek($this->_queryID, $row);
- $this->EOF = false;
- return true;
- }
-
- /**
- * In databases that allow accessing of recordsets, retrieves the next set.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:recordset:nextrecordset
- *
- * @return bool
- */
- function NextRecordSet()
- {
- global $ADODB_COUNTRECS;
-
- mysqli_free_result($this->_queryID);
- $this->_queryID = -1;
- // Move to the next recordset, or return false if there is none. In a stored proc
- // call, mysqli_next_result returns true for the last "recordset", but mysqli_store_result
- // returns false. I think this is because the last "recordset" is actually just the
- // return value of the stored proc (ie the number of rows affected).
- if (!mysqli_next_result($this->connection->_connectionID)) {
- return false;
- }
-
- // CD: There is no $this->_connectionID variable, at least in the ADO version I'm using
- $this->_queryID = ($ADODB_COUNTRECS) ? @mysqli_store_result($this->connection->_connectionID)
- : @mysqli_use_result($this->connection->_connectionID);
-
- if (!$this->_queryID) {
- return false;
- }
-
- $this->_inited = false;
- $this->bind = false;
- $this->_currentRow = -1;
- $this->init();
- return true;
- }
-
- /**
- * Moves the cursor to the next record of the recordset from the current position.
- *
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:movenext
- *
- * @return bool False if there are no more records to move on to, otherwise true.
- */
- function MoveNext()
- {
- if ($this->EOF) return false;
- $this->_currentRow++;
- $this->fields = @mysqli_fetch_array($this->_queryID,$this->fetchMode);
-
- if (is_array($this->fields)) {
- $this->_updatefields();
- return true;
- }
- $this->EOF = true;
- return false;
- }
-
- /**
- * Attempt to fetch a result row using the current fetch mode and return whether or not this was successful.
- *
- * @return bool True if row was fetched successfully, otherwise false.
- */
- function _fetch()
- {
- $this->fields = mysqli_fetch_array($this->_queryID,$this->fetchMode);
- $this->_updatefields();
- return is_array($this->fields);
- }
-
- /**
- * Frees the memory associated with a result.
- *
- * @return void
- */
- function _close()
- {
- //if results are attached to this pointer from Stored Procedure calls, the next standard query will die 2014
- //only a problem with persistent connections
-
- if (isset($this->connection->_connectionID) && $this->connection->_connectionID) {
- while (mysqli_more_results($this->connection->_connectionID)) {
- mysqli_next_result($this->connection->_connectionID);
- }
- }
-
- if ($this->_queryID instanceof mysqli_result) {
- mysqli_free_result($this->_queryID);
- }
- $this->_queryID = false;
- }
-
-/*
-
-0 = MYSQLI_TYPE_DECIMAL
-1 = MYSQLI_TYPE_CHAR
-1 = MYSQLI_TYPE_TINY
-2 = MYSQLI_TYPE_SHORT
-3 = MYSQLI_TYPE_LONG
-4 = MYSQLI_TYPE_FLOAT
-5 = MYSQLI_TYPE_DOUBLE
-6 = MYSQLI_TYPE_NULL
-7 = MYSQLI_TYPE_TIMESTAMP
-8 = MYSQLI_TYPE_LONGLONG
-9 = MYSQLI_TYPE_INT24
-10 = MYSQLI_TYPE_DATE
-11 = MYSQLI_TYPE_TIME
-12 = MYSQLI_TYPE_DATETIME
-13 = MYSQLI_TYPE_YEAR
-14 = MYSQLI_TYPE_NEWDATE
-245 = MYSQLI_TYPE_JSON
-247 = MYSQLI_TYPE_ENUM
-248 = MYSQLI_TYPE_SET
-249 = MYSQLI_TYPE_TINY_BLOB
-250 = MYSQLI_TYPE_MEDIUM_BLOB
-251 = MYSQLI_TYPE_LONG_BLOB
-252 = MYSQLI_TYPE_BLOB
-253 = MYSQLI_TYPE_VAR_STRING
-254 = MYSQLI_TYPE_STRING
-255 = MYSQLI_TYPE_GEOMETRY
-*/
-
- /**
- * Get the MetaType character for a given field type.
- *
- * @param string|object $t The type to get the MetaType character for.
- * @param int $len (Optional) Redundant. Will always be set to -1.
- * @param bool|object $fieldobj (Optional)
- *
- * @return string The MetaType
- */
- function metaType($t, $len = -1, $fieldobj = false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- $t = strtoupper($t);
- /*
- * Add support for custom actual types. We do this
- * first, that allows us to override existing types
- */
- if (array_key_exists($t,$this->connection->customActualTypes))
- return $this->connection->customActualTypes[$t];
-
- $len = -1; // mysql max_length is not accurate
- switch ($t) {
- case 'STRING':
- case 'CHAR':
- case 'VARCHAR':
- case 'TINYBLOB':
- case 'TINYTEXT':
- case 'ENUM':
- case 'SET':
-
- case MYSQLI_TYPE_TINY_BLOB :
-// case MYSQLI_TYPE_CHAR :
- case MYSQLI_TYPE_STRING :
- case MYSQLI_TYPE_ENUM :
- case MYSQLI_TYPE_SET :
- case 253 :
- if ($len <= $this->blobSize) {
- return 'C';
- }
-
- case 'TEXT':
- case 'LONGTEXT':
- case 'MEDIUMTEXT':
- return 'X';
-
- // php_mysql extension always returns 'blob' even if 'text'
- // so we have to check whether binary...
- case 'IMAGE':
- case 'LONGBLOB':
- case 'BLOB':
- case 'MEDIUMBLOB':
-
- case MYSQLI_TYPE_BLOB :
- case MYSQLI_TYPE_LONG_BLOB :
- case MYSQLI_TYPE_MEDIUM_BLOB :
- return !empty($fieldobj->binary) ? 'B' : 'X';
-
- case 'YEAR':
- case 'DATE':
- case MYSQLI_TYPE_DATE :
- case MYSQLI_TYPE_YEAR :
- return 'D';
-
- case 'TIME':
- case 'DATETIME':
- case 'TIMESTAMP':
-
- case MYSQLI_TYPE_DATETIME :
- case MYSQLI_TYPE_NEWDATE :
- case MYSQLI_TYPE_TIME :
- case MYSQLI_TYPE_TIMESTAMP :
- return 'T';
-
- case 'INT':
- case 'INTEGER':
- case 'BIGINT':
- case 'TINYINT':
- case 'MEDIUMINT':
- case 'SMALLINT':
-
- case MYSQLI_TYPE_INT24 :
- case MYSQLI_TYPE_LONG :
- case MYSQLI_TYPE_LONGLONG :
- case MYSQLI_TYPE_SHORT :
- case MYSQLI_TYPE_TINY :
- if (!empty($fieldobj->primary_key)) {
- return 'R';
- }
- return 'I';
-
- // Added floating-point types
- // Maybe not necessary.
- case 'FLOAT':
- case 'DOUBLE':
-// case 'DOUBLE PRECISION':
- case 'DECIMAL':
- case 'DEC':
- case 'FIXED':
- default:
-
-
- //if (!is_numeric($t)) echo "--- Error in type matching $t -----
";
- return 'N';
- }
- }
-
-
-} // rs class
-
-/**
- * Class ADORecordSet_array_mysqli
- */
-class ADORecordSet_array_mysqli extends ADORecordSet_array
-{
- /**
- * Get the MetaType character for a given field type.
- *
- * @param string|object $t The type to get the MetaType character for.
- * @param int $len (Optional) Redundant. Will always be set to -1.
- * @param bool|object $fieldobj (Optional)
- *
- * @return string The MetaType
- */
- function MetaType($t, $len = -1, $fieldobj = false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- $t = strtoupper($t);
-
- if (array_key_exists($t,$this->connection->customActualTypes))
- return $this->connection->customActualTypes[$t];
-
- $len = -1; // mysql max_length is not accurate
-
- switch ($t) {
- case 'STRING':
- case 'CHAR':
- case 'VARCHAR':
- case 'TINYBLOB':
- case 'TINYTEXT':
- case 'ENUM':
- case 'SET':
-
- case MYSQLI_TYPE_TINY_BLOB :
-// case MYSQLI_TYPE_CHAR :
- case MYSQLI_TYPE_STRING :
- case MYSQLI_TYPE_ENUM :
- case MYSQLI_TYPE_SET :
- case 253 :
- if ($len <= $this->blobSize) {
- return 'C';
- }
-
- case 'TEXT':
- case 'LONGTEXT':
- case 'MEDIUMTEXT':
- return 'X';
-
- // php_mysql extension always returns 'blob' even if 'text'
- // so we have to check whether binary...
- case 'IMAGE':
- case 'LONGBLOB':
- case 'BLOB':
- case 'MEDIUMBLOB':
-
- case MYSQLI_TYPE_BLOB :
- case MYSQLI_TYPE_LONG_BLOB :
- case MYSQLI_TYPE_MEDIUM_BLOB :
- return !empty($fieldobj->binary) ? 'B' : 'X';
-
- case 'YEAR':
- case 'DATE':
- case MYSQLI_TYPE_DATE :
- case MYSQLI_TYPE_YEAR :
- return 'D';
-
- case 'TIME':
- case 'DATETIME':
- case 'TIMESTAMP':
-
- case MYSQLI_TYPE_DATETIME :
- case MYSQLI_TYPE_NEWDATE :
- case MYSQLI_TYPE_TIME :
- case MYSQLI_TYPE_TIMESTAMP :
- return 'T';
-
- case 'INT':
- case 'INTEGER':
- case 'BIGINT':
- case 'TINYINT':
- case 'MEDIUMINT':
- case 'SMALLINT':
-
- case MYSQLI_TYPE_INT24 :
- case MYSQLI_TYPE_LONG :
- case MYSQLI_TYPE_LONGLONG :
- case MYSQLI_TYPE_SHORT :
- case MYSQLI_TYPE_TINY :
- if (!empty($fieldobj->primary_key)) {
- return 'R';
- }
- return 'I';
-
- // Added floating-point types
- // Maybe not necessary.
- case 'FLOAT':
- case 'DOUBLE':
-// case 'DOUBLE PRECISION':
- case 'DECIMAL':
- case 'DEC':
- case 'FIXED':
- default:
- //if (!is_numeric($t)) echo "--- Error in type matching $t -----
";
- return 'N';
- }
- }
-}
-
-} // if defined _ADODB_MYSQLI_LAYER
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-netezza.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-netezza.inc.php
deleted file mode 100644
index dc7c58e42..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-netezza.inc.php
+++ /dev/null
@@ -1,161 +0,0 @@
-
- */
-
-// security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-include_once(ADODB_DIR.'/drivers/adodb-postgres64.inc.php');
-
-class ADODB_netezza extends ADODB_postgres64 {
- var $databaseType = 'netezza';
- var $dataProvider = 'netezza';
- var $hasInsertID = false;
- var $_resultid = false;
- var $concat_operator='||';
- var $random = 'random';
- var $metaDatabasesSQL = "select objname from _v_object_data where objtype='database' order by 1";
- var $metaTablesSQL = "select objname from _v_object_data where objtype='table' order by 1";
- var $isoDates = true; // accepts dates in ISO format
- var $sysDate = "CURRENT_DATE";
- var $sysTimeStamp = "CURRENT_TIMESTAMP";
- var $blobEncodeType = 'C';
- var $metaColumnsSQL = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
- var $metaColumnsSQL1 = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
- // netezza doesn't have keys. it does have distributions, so maybe this is
- // something that can be pulled from the system tables
- var $metaKeySQL = "";
- var $hasAffectedRows = true;
- var $hasLimit = true;
- var $true = 't'; // string that represents TRUE for a database
- var $false = 'f'; // string that represents FALSE for a database
- var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database
- var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt.
- var $ansiOuter = true;
- var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4
- // http://bugs.php.net/bug.php?id=25404
-
-
- function MetaColumns($table,$upper=true)
- {
-
- // Changed this function to support Netezza which has no concept of keys
- // could posisbly work on other things from the system table later.
-
- global $ADODB_FETCH_MODE;
-
- $table = strtolower($table);
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if ($rs === false) return false;
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
-
- // since we're returning type and length as one string,
- // split them out here.
-
- if ($first = strstr($rs->fields[1], "(")) {
- $fld->max_length = trim($first, "()");
- } else {
- $fld->max_length = -1;
- }
-
- if ($first = strpos($rs->fields[1], "(")) {
- $fld->type = substr($rs->fields[1], 0, $first);
- } else {
- $fld->type = $rs->fields[1];
- }
-
- switch ($fld->type) {
- case "byteint":
- case "boolean":
- $fld->max_length = 1;
- break;
- case "smallint":
- $fld->max_length = 2;
- break;
- case "integer":
- case "numeric":
- case "date":
- $fld->max_length = 4;
- break;
- case "bigint":
- case "time":
- case "timestamp":
- $fld->max_length = 8;
- break;
- case "timetz":
- case "time with time zone":
- $fld->max_length = 12;
- break;
- }
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
- else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld;
-
- $rs->MoveNext();
- }
- $rs->Close();
- return $retarr;
-
- }
-
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordSet_netezza extends ADORecordSet_postgres64
-{
- var $databaseType = "netezza";
- var $canSeek = true;
-
- // _initrs modified to disable blob handling
- function _initrs()
- {
- global $ADODB_COUNTRECS;
- $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_num_rows($this->_queryID):-1;
- $this->_numOfFields = @pg_num_fields($this->_queryID);
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-oci8.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-oci8.inc.php
deleted file mode 100644
index c1f4e5020..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-oci8.inc.php
+++ /dev/null
@@ -1,1890 +0,0 @@
-
- */
-
-// security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-/*
-NLS_Date_Format
-Allows you to use a date format other than the Oracle Lite default. When a literal
-character string appears where a date value is expected, the Oracle Lite database
-tests the string to see if it matches the formats of Oracle, SQL-92, or the value
-specified for this parameter in the POLITE.INI file. Setting this parameter also
-defines the default format used in the TO_CHAR or TO_DATE functions when no
-other format string is supplied.
-
-For Oracle the default is dd-mon-yy or dd-mon-yyyy, and for SQL-92 the default is
-yy-mm-dd or yyyy-mm-dd.
-
-Using 'RR' in the format forces two-digit years less than or equal to 49 to be
-interpreted as years in the 21st century (2000-2049), and years over 50 as years in
-the 20th century (1950-1999). Setting the RR format as the default for all two-digit
-year entries allows you to become year-2000 compliant. For example:
-NLS_DATE_FORMAT='RR-MM-DD'
-
-You can also modify the date format using the ALTER SESSION command.
-*/
-
-# define the LOB descriptor type for the given type
-# returns false if no LOB descriptor
-function oci_lob_desc($type) {
- switch ($type) {
- case OCI_B_BFILE: return OCI_D_FILE;
- case OCI_B_CFILEE: return OCI_D_FILE;
- case OCI_B_CLOB: return OCI_D_LOB;
- case OCI_B_BLOB: return OCI_D_LOB;
- case OCI_B_ROWID: return OCI_D_ROWID;
- }
- return false;
-}
-
-class ADODB_oci8 extends ADOConnection {
- var $databaseType = 'oci8';
- var $dataProvider = 'oci8';
- var $replaceQuote = "''"; // string to use to replace quotes
- var $concat_operator='||';
- var $sysDate = "TRUNC(SYSDATE)";
- var $sysTimeStamp = 'SYSDATE'; // requires oracle 9 or later, otherwise use SYSDATE
- var $metaDatabasesSQL = "SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN') ORDER BY 1";
- var $_stmt;
- var $_commit = OCI_COMMIT_ON_SUCCESS;
- var $_initdate = true; // init date to YYYY-MM-DD
- var $metaTablesSQL = "select table_name,table_type from cat where table_type in ('TABLE','VIEW') and table_name not like 'BIN\$%'"; // bin$ tables are recycle bin tables
- var $metaColumnsSQL = "select cname,coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net
- var $metaColumnsSQL2 = "select column_name,data_type,data_length, data_scale, data_precision,
- case when nullable = 'Y' then 'NULL'
- else 'NOT NULL' end as nulls,
- data_default from all_tab_cols
- where owner='%s' and table_name='%s' order by column_id"; // when there is a schema
- var $_bindInputArray = true;
- var $hasGenID = true;
- var $_genIDSQL = "SELECT (%s.nextval) FROM DUAL";
- var $_genSeqSQL = "
-DECLARE
- PRAGMA AUTONOMOUS_TRANSACTION;
-BEGIN
- execute immediate 'CREATE SEQUENCE %s START WITH %s';
-END;
-";
-
- var $_dropSeqSQL = "DROP SEQUENCE %s";
- var $hasAffectedRows = true;
- var $random = "abs(mod(DBMS_RANDOM.RANDOM,10000001)/10000000)";
- var $noNullStrings = false;
- var $connectSID = false;
- var $_bind = false;
- var $_nestedSQL = true;
- var $_getarray = false; // currently not working
- var $leftOuter = ''; // oracle wierdness, $col = $value (+) for LEFT OUTER, $col (+)= $value for RIGHT OUTER
- var $session_sharing_force_blob = false; // alter session on updateblob if set to true
- var $firstrows = true; // enable first rows optimization on SelectLimit()
- var $selectOffsetAlg1 = 1000; // when to use 1st algorithm of selectlimit.
- var $NLS_DATE_FORMAT = 'YYYY-MM-DD'; // To include time, use 'RRRR-MM-DD HH24:MI:SS'
- var $dateformat = 'YYYY-MM-DD'; // DBDate format
- var $useDBDateFormatForTextInput=false;
- var $datetime = false; // MetaType('DATE') returns 'D' (datetime==false) or 'T' (datetime == true)
- var $_refLOBs = array();
-
- // var $ansiOuter = true; // if oracle9
-
- /*
- * Legacy compatibility for sequence names for emulated auto-increments
- */
- public $useCompactAutoIncrements = false;
-
- /*
- * Defines the schema name for emulated auto-increment columns
- */
- public $schema = false;
-
- /*
- * Defines the prefix for emulated auto-increment columns
- */
- public $seqPrefix = 'SEQ_';
-
- /* function MetaColumns($table, $normalize=true) added by smondino@users.sourceforge.net*/
- function MetaColumns($table, $normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = '';
- $this->_findschema($table, $schema);
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) {
- $savem = $this->SetFetchMode(false);
- }
-
- if ($schema){
- $rs = $this->Execute(sprintf($this->metaColumnsSQL2, strtoupper($schema), strtoupper($table)));
- }
- else {
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table)));
- }
-
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- if (!$rs) {
- return false;
- }
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
- $fld->scale = $rs->fields[3];
- if ($rs->fields[1] == 'NUMBER') {
- if ($rs->fields[3] == 0) {
- $fld->type = 'INT';
- }
- $fld->max_length = $rs->fields[4];
- }
- $fld->not_null = (strncmp($rs->fields[5], 'NOT',3) === 0);
- $fld->binary = (strpos($fld->type,'BLOB') !== false);
- $fld->default_value = $rs->fields[6];
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- }
- else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
- $rs->MoveNext();
- }
- $rs->Close();
- if (empty($retarr)) {
- return false;
- }
- return $retarr;
- }
-
- function Time()
- {
- $rs = $this->Execute("select TO_CHAR($this->sysTimeStamp,'YYYY-MM-DD HH24:MI:SS') from dual");
- if ($rs && !$rs->EOF) {
- return $this->UnixTimeStamp(reset($rs->fields));
- }
-
- return false;
- }
-
- /**
- * Multiple modes of connection are supported:
- *
- * a. Local Database
- * $conn->Connect(false,'scott','tiger');
- *
- * b. From tnsnames.ora
- * $conn->Connect($tnsname,'scott','tiger');
- * $conn->Connect(false,'scott','tiger',$tnsname);
- *
- * c. Server + service name
- * $conn->Connect($serveraddress,'scott,'tiger',$service_name);
- *
- * d. Server + SID
- * $conn->connectSID = true;
- * $conn->Connect($serveraddress,'scott,'tiger',$SID);
- *
- * @param string|false $argHostname DB server hostname or TNS name
- * @param string $argUsername
- * @param string $argPassword
- * @param string $argDatabasename Service name, SID (defaults to null)
- * @param int $mode Connection mode, defaults to 0
- * (0 = non-persistent, 1 = persistent, 2 = force new connection)
- *
- * @return bool
- */
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename=null, $mode=0)
- {
- if (!function_exists('oci_pconnect')) {
- return null;
- }
- #adodb_backtrace();
-
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- if($argHostname) { // added by Jorma Tuomainen
- if (empty($argDatabasename)) {
- $argDatabasename = $argHostname;
- }
- else {
- if(strpos($argHostname,":")) {
- $argHostinfo=explode(":",$argHostname);
- $argHostname=$argHostinfo[0];
- $argHostport=$argHostinfo[1];
- } else {
- $argHostport = empty($this->port)? "1521" : $this->port;
- }
-
- if (strncasecmp($argDatabasename,'SID=',4) == 0) {
- $argDatabasename = substr($argDatabasename,4);
- $this->connectSID = true;
- }
-
- if ($this->connectSID) {
- $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname
- .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))";
- } else
- $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname
- .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))";
- }
- }
-
- //if ($argHostname) print "Connect: 1st argument should be left blank for $this->databaseType
";
- if ($mode==1) {
- $this->_connectionID = ($this->charSet)
- ? oci_pconnect($argUsername,$argPassword, $argDatabasename,$this->charSet)
- : oci_pconnect($argUsername,$argPassword, $argDatabasename);
- if ($this->_connectionID && $this->autoRollback) {
- oci_rollback($this->_connectionID);
- }
- } else if ($mode==2) {
- $this->_connectionID = ($this->charSet)
- ? oci_new_connect($argUsername,$argPassword, $argDatabasename,$this->charSet)
- : oci_new_connect($argUsername,$argPassword, $argDatabasename);
- } else {
- $this->_connectionID = ($this->charSet)
- ? oci_connect($argUsername,$argPassword, $argDatabasename,$this->charSet)
- : oci_connect($argUsername,$argPassword, $argDatabasename);
- }
- if (!$this->_connectionID) {
- return false;
- }
-
- if ($this->_initdate) {
- $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='".$this->NLS_DATE_FORMAT."'");
- }
-
- // looks like:
- // Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production
- // $vers = oci_server_version($this->_connectionID);
- // if (strpos($vers,'8i') !== false) $this->ansiOuter = true;
- return true;
- }
-
- function ServerInfo()
- {
- $arr['compat'] = $this->GetOne('select value from sys.database_compatible_level');
- $arr['description'] = @oci_server_version($this->_connectionID);
- $arr['version'] = ADOConnection::_findvers($arr['description']);
- return $arr;
- }
- // returns true or false
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,1);
- }
-
- // returns true or false
- function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,2);
- }
-
- function _affectedrows()
- {
- if (is_resource($this->_stmt)) {
- return @oci_num_rows($this->_stmt);
- }
- return 0;
- }
-
- function IfNull( $field, $ifNull )
- {
- return " NVL($field, $ifNull) "; // if Oracle
- }
-
- protected function _insertID($table = '', $column = '')
- {
-
- if (!$this->seqField)
- return false;
-
- if ($this->schema)
- {
- $t = strpos($table,'.');
- if ($t !== false)
- $tab = substr($table,$t+1);
- else
- $tab = $table;
-
- if ($this->useCompactAutoIncrements)
- $tab = sprintf('%u',crc32(strtolower($tab)));
-
- $seqname = $this->schema.'.'.$this->seqPrefix.$tab;
- }
- else
- {
- if ($this->useCompactAutoIncrements)
- $table = sprintf('%u',crc32(strtolower($table)));
-
- $seqname = $this->seqPrefix.$table;
- }
-
- if (strlen($seqname) > 30)
- /*
- * We cannot successfully identify the sequence
- */
- return false;
-
- return $this->getOne("SELECT $seqname.currval FROM dual");
- }
-
- // format and return date string in database date format
- function DBDate($d,$isfld=false)
- {
- if (empty($d) && $d !== 0) {
- return 'null';
- }
-
- if ($isfld) {
- $d = _adodb_safedate($d);
- return 'TO_DATE('.$d.",'".$this->dateformat."')";
- }
-
- if (is_string($d)) {
- $d = ADORecordSet::UnixDate($d);
- }
-
- if (is_object($d)) {
- $ds = $d->format($this->fmtDate);
- }
- else {
- $ds = adodb_date($this->fmtDate,$d);
- }
-
- return "TO_DATE(".$ds.",'".$this->dateformat."')";
- }
-
- function BindDate($d)
- {
- $d = ADOConnection::DBDate($d);
- if (strncmp($d, "'", 1)) {
- return $d;
- }
-
- return substr($d, 1, strlen($d)-2);
- }
-
- function BindTimeStamp($ts)
- {
- if (empty($ts) && $ts !== 0) {
- return 'null';
- }
- if (is_string($ts)) {
- $ts = ADORecordSet::UnixTimeStamp($ts);
- }
-
- if (is_object($ts)) {
- $tss = $ts->format("'Y-m-d H:i:s'");
- }
- else {
- $tss = adodb_date("'Y-m-d H:i:s'",$ts);
- }
-
- return $tss;
- }
-
- // format and return date string in database timestamp format
- function DBTimeStamp($ts,$isfld=false)
- {
- if (empty($ts) && $ts !== 0) {
- return 'null';
- }
- if ($isfld) {
- return 'TO_DATE(substr('.$ts.",1,19),'RRRR-MM-DD, HH24:MI:SS')";
- }
- if (is_string($ts)) {
- $ts = ADORecordSet::UnixTimeStamp($ts);
- }
-
- if (is_object($ts)) {
- $tss = $ts->format("'Y-m-d H:i:s'");
- }
- else {
- $tss = date("'Y-m-d H:i:s'",$ts);
- }
-
- return 'TO_DATE('.$tss.",'RRRR-MM-DD, HH24:MI:SS')";
- }
-
- function RowLock($tables,$where,$col='1 as adodbignore')
- {
- if ($this->autoCommit) {
- $this->BeginTrans();
- }
- return $this->GetOne("select $col from $tables where $where for update");
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(strtoupper($mask));
- $this->metaTablesSQL .= " AND upper(table_name) like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- // Mark Newnham
- function MetaIndexes ($table, $primary = FALSE, $owner=false)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- // get index details
- $table = strtoupper($table);
-
- // get Primary index
- $primary_key = '';
-
- $rs = $this->Execute(sprintf("SELECT * FROM ALL_CONSTRAINTS WHERE UPPER(TABLE_NAME)='%s' AND CONSTRAINT_TYPE='P'",$table));
- if (!is_object($rs)) {
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return false;
- }
-
- if ($row = $rs->FetchRow()) {
- $primary_key = $row[1]; //constraint_name
- }
-
- if ($primary==TRUE && $primary_key=='') {
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return false; //There is no primary key
- }
-
- $rs = $this->Execute(sprintf("SELECT ALL_INDEXES.INDEX_NAME, ALL_INDEXES.UNIQUENESS, ALL_IND_COLUMNS.COLUMN_POSITION, ALL_IND_COLUMNS.COLUMN_NAME FROM ALL_INDEXES,ALL_IND_COLUMNS WHERE UPPER(ALL_INDEXES.TABLE_NAME)='%s' AND ALL_IND_COLUMNS.INDEX_NAME=ALL_INDEXES.INDEX_NAME",$table));
-
-
- if (!is_object($rs)) {
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return false;
- }
-
- $indexes = array ();
- // parse index data into array
-
- while ($row = $rs->FetchRow()) {
- if ($primary && $row[0] != $primary_key) {
- continue;
- }
- if (!isset($indexes[$row[0]])) {
- $indexes[$row[0]] = array(
- 'unique' => ($row[1] == 'UNIQUE'),
- 'columns' => array()
- );
- }
- $indexes[$row[0]]['columns'][$row[2] - 1] = $row[3];
- }
-
- // sort columns by order in the index
- foreach ( array_keys ($indexes) as $index ) {
- ksort ($indexes[$index]['columns']);
- }
-
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- }
- return $indexes;
- }
-
- function BeginTrans()
- {
- if ($this->transOff) {
- return true;
- }
- $this->transCnt += 1;
- $this->autoCommit = false;
- $this->_commit = OCI_DEFAULT;
-
- if ($this->_transmode) {
- $ok = $this->Execute("SET TRANSACTION ".$this->_transmode);
- }
- else {
- $ok = true;
- }
-
- return $ok ? true : false;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) {
- return true;
- }
- if (!$ok) {
- return $this->RollbackTrans();
- }
-
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $ret = oci_commit($this->_connectionID);
- $this->_commit = OCI_COMMIT_ON_SUCCESS;
- $this->autoCommit = true;
- return $ret;
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) {
- return true;
- }
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $ret = oci_rollback($this->_connectionID);
- $this->_commit = OCI_COMMIT_ON_SUCCESS;
- $this->autoCommit = true;
- return $ret;
- }
-
-
- function SelectDB($dbName)
- {
- return false;
- }
-
- function ErrorMsg()
- {
- if ($this->_errorMsg !== false) {
- return $this->_errorMsg;
- }
-
- if (is_resource($this->_stmt)) {
- $arr = @oci_error($this->_stmt);
- }
- if (empty($arr)) {
- if (is_resource($this->_connectionID)) {
- $arr = @oci_error($this->_connectionID);
- }
- else {
- $arr = @oci_error();
- }
- if ($arr === false) {
- return '';
- }
- }
- $this->_errorMsg = $arr['message'];
- $this->_errorCode = $arr['code'];
- return $this->_errorMsg;
- }
-
- function ErrorNo()
- {
- if ($this->_errorCode !== false) {
- return $this->_errorCode;
- }
-
- if (is_resource($this->_stmt)) {
- $arr = @oci_error($this->_stmt);
- }
- if (empty($arr)) {
- $arr = @oci_error($this->_connectionID);
- if ($arr == false) {
- $arr = @oci_error();
- }
- if ($arr == false) {
- return '';
- }
- }
-
- $this->_errorMsg = $arr['message'];
- $this->_errorCode = $arr['code'];
-
- return $arr['code'];
- }
-
- /**
- * Format date column in sql string given an input format that understands Y M D
- */
- function SQLDate($fmt, $col=false)
- {
- if (!$col) {
- $col = $this->sysTimeStamp;
- }
- $s = 'TO_CHAR('.$col.",'";
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= 'YYYY';
- break;
- case 'Q':
- case 'q':
- $s .= 'Q';
- break;
-
- case 'M':
- $s .= 'Mon';
- break;
-
- case 'm':
- $s .= 'MM';
- break;
- case 'D':
- case 'd':
- $s .= 'DD';
- break;
-
- case 'H':
- $s.= 'HH24';
- break;
-
- case 'h':
- $s .= 'HH';
- break;
-
- case 'i':
- $s .= 'MI';
- break;
-
- case 's':
- $s .= 'SS';
- break;
-
- case 'a':
- case 'A':
- $s .= 'AM';
- break;
-
- case 'w':
- $s .= 'D';
- break;
-
- case 'l':
- $s .= 'DAY';
- break;
-
- case 'W':
- $s .= 'WW';
- break;
-
- default:
- // handle escape characters...
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- if (strpos('-/.:;, ',$ch) !== false) {
- $s .= $ch;
- }
- else {
- $s .= '"'.$ch.'"';
- }
-
- }
- }
- return $s. "')";
- }
-
- function GetRandRow($sql, $arr = false)
- {
- $sql = "SELECT * FROM ($sql ORDER BY dbms_random.value) WHERE rownum = 1";
-
- return $this->GetRow($sql,$arr);
- }
-
- /**
- * This algorithm makes use of
- *
- * a. FIRST_ROWS hint
- * The FIRST_ROWS hint explicitly chooses the approach to optimize response
- * time, that is, minimum resource usage to return the first row. Results
- * will be returned as soon as they are identified.
- *
- * b. Uses rownum tricks to obtain only the required rows from a given offset.
- * As this uses complicated sql statements, we only use this if $offset >= 100.
- * This idea by Tomas V V Cox.
- *
- * This implementation does not appear to work with oracle 8.0.5 or earlier.
- * Comment out this function then, and the slower SelectLimit() in the base
- * class will be used.
- *
- * Note: FIRST_ROWS hinting is only used if $sql is a string; when
- * processing a prepared statement's handle, no hinting is performed.
- */
- function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- // Since the methods used to limit the number of returned rows rely
- // on modifying the provided SQL query, we can't work with prepared
- // statements so we just extract the SQL string.
- if(is_array($sql)) {
- $sql = $sql[0];
- }
-
- // seems that oracle only supports 1 hint comment in 8i
- if ($this->firstrows) {
- if ($nrows > 500 && $nrows < 1000) {
- $hint = "FIRST_ROWS($nrows)";
- }
- else {
- $hint = 'FIRST_ROWS';
- }
-
- if (strpos($sql,'/*+') !== false) {
- $sql = str_replace('/*+ ',"/*+$hint ",$sql);
- }
- else {
- $sql = preg_replace('/^[ \t\n]*select/i',"SELECT /*+$hint*/",$sql);
- }
- $hint = "/*+ $hint */";
- } else {
- $hint = '';
- }
-
- if ($offset == -1 || ($offset < $this->selectOffsetAlg1 && 0 < $nrows && $nrows < 1000)) {
- if ($nrows > 0) {
- if ($offset > 0) {
- $nrows += $offset;
- }
- $sql = "select * from (".$sql.") where rownum <= :adodb_offset";
-
- // If non-bound statement, $inputarr is false
- if (!$inputarr) {
- $inputarr = array();
- }
- $inputarr['adodb_offset'] = $nrows;
- $nrows = -1;
- }
- // note that $nrows = 0 still has to work ==> no rows returned
-
- return ADOConnection::SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache);
- } else {
- // Algorithm by Tomas V V Cox, from PEAR DB oci8.php
-
- // Let Oracle return the name of the columns
- $q_fields = "SELECT * FROM (".$sql.") WHERE NULL = NULL";
-
- if (! $stmt_arr = $this->Prepare($q_fields)) {
- return false;
- }
- $stmt = $stmt_arr[1];
-
- if (is_array($inputarr)) {
- foreach($inputarr as $k => $v) {
- $i=0;
- if ($this->databaseType == 'oci8po') {
- $bv_name = ":".$i++;
- } else {
- $bv_name = ":".$k;
- }
- if (is_array($v)) {
- // suggested by g.giunta@libero.
- if (sizeof($v) == 2) {
- oci_bind_by_name($stmt,$bv_name,$inputarr[$k][0],$v[1]);
- }
- else {
- oci_bind_by_name($stmt,$bv_name,$inputarr[$k][0],$v[1],$v[2]);
- }
- } else {
- $len = -1;
- if ($v === ' ') {
- $len = 1;
- }
- if (isset($bindarr)) { // is prepared sql, so no need to oci_bind_by_name again
- $bindarr[$k] = $v;
- } else { // dynamic sql, so rebind every time
- oci_bind_by_name($stmt,$bv_name,$inputarr[$k],$len);
- }
- }
- }
- }
-
- if (!oci_execute($stmt, OCI_DEFAULT)) {
- oci_free_statement($stmt);
- return false;
- }
-
- $ncols = oci_num_fields($stmt);
- for ( $i = 1; $i <= $ncols; $i++ ) {
- $cols[] = '"'.oci_field_name($stmt, $i).'"';
- }
- $result = false;
-
- oci_free_statement($stmt);
- $fields = implode(',', $cols);
- if ($nrows <= 0) {
- $nrows = 999999999999;
- }
- else {
- $nrows += $offset;
- }
- $offset += 1; // in Oracle rownum starts at 1
-
- $sql = "SELECT $hint $fields FROM".
- "(SELECT rownum as adodb_rownum, $fields FROM".
- " ($sql) WHERE rownum <= :adodb_nrows".
- ") WHERE adodb_rownum >= :adodb_offset";
- $inputarr['adodb_nrows'] = $nrows;
- $inputarr['adodb_offset'] = $offset;
-
- if ($secs2cache > 0) {
- $rs = $this->CacheExecute($secs2cache, $sql,$inputarr);
- }
- else {
- $rs = $this->Execute($sql, $inputarr);
- }
- return $rs;
- }
- }
-
- /**
- * Usage:
- * Store BLOBs and CLOBs
- *
- * Example: to store $var in a blob
- * $conn->Execute('insert into TABLE (id,ablob) values(12,empty_blob())');
- * $conn->UpdateBlob('TABLE', 'ablob', $varHoldingBlob, 'ID=12', 'BLOB');
- *
- * $blobtype supports 'BLOB' and 'CLOB', but you need to change to 'empty_clob()'.
- *
- * to get length of LOB:
- * select DBMS_LOB.GETLENGTH(ablob) from TABLE
- *
- * If you are using CURSOR_SHARING = force, it appears this will case a segfault
- * under oracle 8.1.7.0. Run:
- * $db->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
- * before UpdateBlob() then...
- */
- function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
- {
-
- //if (strlen($val) < 4000) return $this->Execute("UPDATE $table SET $column=:blob WHERE $where",array('blob'=>$val)) != false;
-
- switch(strtoupper($blobtype)) {
- default: ADOConnection::outp("UpdateBlob: Unknown blobtype=$blobtype"); return false;
- case 'BLOB': $type = OCI_B_BLOB; break;
- case 'CLOB': $type = OCI_B_CLOB; break;
- }
-
- if ($this->databaseType == 'oci8po')
- $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?";
- else
- $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob";
-
- $desc = oci_new_descriptor($this->_connectionID, OCI_D_LOB);
- $arr['blob'] = array($desc,-1,$type);
- if ($this->session_sharing_force_blob) {
- $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
- }
- $commit = $this->autoCommit;
- if ($commit) {
- $this->BeginTrans();
- }
- $rs = $this->_Execute($sql,$arr);
- if ($rez = !empty($rs)) {
- $desc->save($val);
- }
- $desc->free();
- if ($commit) {
- $this->CommitTrans();
- }
- if ($this->session_sharing_force_blob) {
- $this->Execute('ALTER SESSION SET CURSOR_SHARING=FORCE');
- }
-
- if ($rez) {
- $rs->Close();
- }
- return $rez;
- }
-
- /**
- * Usage: store file pointed to by $val in a blob
- */
- function UpdateBlobFile($table,$column,$val,$where,$blobtype='BLOB')
- {
- switch(strtoupper($blobtype)) {
- default: ADOConnection::outp( "UpdateBlob: Unknown blobtype=$blobtype"); return false;
- case 'BLOB': $type = OCI_B_BLOB; break;
- case 'CLOB': $type = OCI_B_CLOB; break;
- }
-
- if ($this->databaseType == 'oci8po')
- $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO ?";
- else
- $sql = "UPDATE $table set $column=EMPTY_{$blobtype}() WHERE $where RETURNING $column INTO :blob";
-
- $desc = oci_new_descriptor($this->_connectionID, OCI_D_LOB);
- $arr['blob'] = array($desc,-1,$type);
-
- $this->BeginTrans();
- $rs = ADODB_oci8::Execute($sql,$arr);
- if ($rez = !empty($rs)) {
- $desc->savefile($val);
- }
- $desc->free();
- $this->CommitTrans();
-
- if ($rez) {
- $rs->Close();
- }
- return $rez;
- }
-
- /**
- * Execute SQL
- *
- * @param string|array $sql SQL statement to execute, or possibly an array holding
- * prepared statement ($sql[0] will hold sql text).
- * @param array|false $inputarr holds the input data to bind to.
- * Null elements will be set to null.
- *
- * @return ADORecordSet|false
- */
- function Execute($sql,$inputarr=false)
- {
- if ($this->fnExecute) {
- $fn = $this->fnExecute;
- $ret = $fn($this,$sql,$inputarr);
- if (isset($ret)) {
- return $ret;
- }
- }
- if ($inputarr !== false) {
- if (!is_array($inputarr)) {
- $inputarr = array($inputarr);
- }
-
- $element0 = reset($inputarr);
- $array2d = $this->bulkBind && is_array($element0) && !is_object(reset($element0));
-
- # see PHPLens Issue No: 18786
- if ($array2d || !$this->_bindInputArray) {
-
- # is_object check because oci8 descriptors can be passed in
- if ($array2d && $this->_bindInputArray) {
- if (is_string($sql)) {
- $stmt = $this->Prepare($sql);
- } else {
- $stmt = $sql;
- }
-
- foreach($inputarr as $arr) {
- $ret = $this->_Execute($stmt,$arr);
- if (!$ret) {
- return $ret;
- }
- }
- return $ret;
- } else {
- $sqlarr = explode(':', $sql);
- $sql = '';
- $lastnomatch = -2;
- #var_dump($sqlarr);echo "
";var_dump($inputarr);echo"
";
- foreach($sqlarr as $k => $str) {
- if ($k == 0) {
- $sql = $str;
- continue;
- }
- // we need $lastnomatch because of the following datetime,
- // eg. '10:10:01', which causes code to think that there is bind param :10 and :1
- $ok = preg_match('/^([0-9]*)/', $str, $arr);
-
- if (!$ok) {
- $sql .= $str;
- } else {
- $at = $arr[1];
- if (isset($inputarr[$at]) || is_null($inputarr[$at])) {
- if ((strlen($at) == strlen($str) && $k < sizeof($arr)-1)) {
- $sql .= ':'.$str;
- $lastnomatch = $k;
- } else if ($lastnomatch == $k-1) {
- $sql .= ':'.$str;
- } else {
- if (is_null($inputarr[$at])) {
- $sql .= 'null';
- }
- else {
- $sql .= $this->qstr($inputarr[$at]);
- }
- $sql .= substr($str, strlen($at));
- }
- } else {
- $sql .= ':'.$str;
- }
- }
- }
- $inputarr = false;
- }
- }
- $ret = $this->_Execute($sql,$inputarr);
-
- } else {
- $ret = $this->_Execute($sql,false);
- }
-
- return $ret;
- }
-
- /*
- * Example of usage:
- * $stmt = $this->Prepare('insert into emp (empno, ename) values (:empno, :ename)');
- */
- function Prepare($sql,$cursor=false)
- {
- static $BINDNUM = 0;
-
- $stmt = oci_parse($this->_connectionID,$sql);
-
- if (!$stmt) {
- $this->_errorMsg = false;
- $this->_errorCode = false;
- $arr = @oci_error($this->_connectionID);
- if ($arr === false) {
- return false;
- }
-
- $this->_errorMsg = $arr['message'];
- $this->_errorCode = $arr['code'];
- return false;
- }
-
- $BINDNUM += 1;
-
- $sttype = @oci_statement_type($stmt);
- if ($sttype == 'BEGIN' || $sttype == 'DECLARE') {
- return array($sql,$stmt,0,$BINDNUM, ($cursor) ? oci_new_cursor($this->_connectionID) : false);
- }
- return array($sql,$stmt,0,$BINDNUM);
- }
-
- function releaseStatement(&$stmt)
- {
- if (is_array($stmt)
- && isset($stmt[1])
- && is_resource($stmt[1])
- && oci_free_statement($stmt[1])
- ) {
- // Clearing the resource to avoid it being of type Unknown
- $stmt[1] = null;
- return true;
- }
-
- // Not a valid prepared statement
- return false;
- }
-
- /*
- Call an oracle stored procedure and returns a cursor variable as a recordset.
- Concept by Robert Tuttle robert@ud.com
-
- Example:
- Note: we return a cursor variable in :RS2
- $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS2); END;",'RS2');
-
- $rs = $db->ExecuteCursor(
- "BEGIN :RS2 = adodb.getdata(:VAR1); END;",
- 'RS2',
- array('VAR1' => 'Mr Bean'));
-
- */
- function ExecuteCursor($sql,$cursorName='rs',$params=false)
- {
- if (is_array($sql)) {
- $stmt = $sql;
- }
- else $stmt = ADODB_oci8::Prepare($sql,true); # true to allocate oci_new_cursor
-
- if (is_array($stmt) && sizeof($stmt) >= 5) {
- $hasref = true;
- $ignoreCur = false;
- $this->Parameter($stmt, $ignoreCur, $cursorName, false, -1, OCI_B_CURSOR);
- if ($params) {
- foreach($params as $k => $v) {
- $this->Parameter($stmt,$params[$k], $k);
- }
- }
- } else
- $hasref = false;
-
- $rs = $this->Execute($stmt);
- if ($rs) {
- if ($rs->databaseType == 'array') {
- oci_free_cursor($stmt[4]);
- }
- elseif ($hasref) {
- $rs->_refcursor = $stmt[4];
- }
- }
- return $rs;
- }
-
- /**
- * Bind a variable -- very, very fast for executing repeated statements in oracle.
- *
- * Better than using
- * for ($i = 0; $i < $max; $i++) {
- * $p1 = ?; $p2 = ?; $p3 = ?;
- * $this->Execute("insert into table (col0, col1, col2) values (:0, :1, :2)", array($p1,$p2,$p3));
- * }
- *
- * Usage:
- * $stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)");
- * $DB->Bind($stmt, $p1);
- * $DB->Bind($stmt, $p2);
- * $DB->Bind($stmt, $p3);
- * for ($i = 0; $i < $max; $i++) {
- * $p1 = ?; $p2 = ?; $p3 = ?;
- * $DB->Execute($stmt);
- * }
- *
- * Some timings to insert 1000 records, test table has 3 cols, and 1 index.
- * - Time 0.6081s (1644.60 inserts/sec) with direct oci_parse/oci_execute
- * - Time 0.6341s (1577.16 inserts/sec) with ADOdb Prepare/Bind/Execute
- * - Time 1.5533s ( 643.77 inserts/sec) with pure SQL using Execute
- *
- * Now if PHP only had batch/bulk updating like Java or PL/SQL...
- *
- * Note that the order of parameters differs from oci_bind_by_name,
- * because we default the names to :0, :1, :2
- */
- function Bind(&$stmt,&$var,$size=4000,$type=false,$name=false,$isOutput=false)
- {
-
- if (!is_array($stmt)) {
- return false;
- }
-
- if (($type == OCI_B_CURSOR) && sizeof($stmt) >= 5) {
- return oci_bind_by_name($stmt[1],":".$name,$stmt[4],$size,$type);
- }
-
- if ($name == false) {
- if ($type !== false) {
- $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size,$type);
- }
- else {
- $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size); // +1 byte for null terminator
- }
- $stmt[2] += 1;
- } else if (oci_lob_desc($type)) {
- if ($this->debug) {
- ADOConnection::outp("Bind: name = $name");
- }
- //we have to create a new Descriptor here
- $numlob = count($this->_refLOBs);
- $this->_refLOBs[$numlob]['LOB'] = oci_new_descriptor($this->_connectionID, oci_lob_desc($type));
- $this->_refLOBs[$numlob]['TYPE'] = $isOutput;
-
- $tmp = $this->_refLOBs[$numlob]['LOB'];
- $rez = oci_bind_by_name($stmt[1], ":".$name, $tmp, -1, $type);
- if ($this->debug) {
- ADOConnection::outp("Bind: descriptor has been allocated, var (".$name.") binded");
- }
-
- // if type is input then write data to lob now
- if ($isOutput == false) {
- $var = $this->BlobEncode($var);
- $tmp->WriteTemporary($var);
- $this->_refLOBs[$numlob]['VAR'] = &$var;
- if ($this->debug) {
- ADOConnection::outp("Bind: LOB has been written to temp");
- }
- } else {
- $this->_refLOBs[$numlob]['VAR'] = &$var;
- }
- $rez = $tmp;
- } else {
- if ($this->debug)
- ADOConnection::outp("Bind: name = $name");
-
- if ($type !== false) {
- $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size,$type);
- }
- else {
- $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size); // +1 byte for null terminator
- }
- }
-
- return $rez;
- }
-
- function Param($name,$type='C')
- {
- return ':'.$name;
- }
-
- /**
- * Usage:
- * $stmt = $db->Prepare('select * from table where id =:myid and group=:group');
- * $db->Parameter($stmt,$id,'myid');
- * $db->Parameter($stmt,$group,'group');
- * $db->Execute($stmt);
- *
- * @param $stmt Statement returned by {@see Prepare()} or {@see PrepareSP()}.
- * @param $var PHP variable to bind to
- * @param $name Name of stored procedure variable name to bind to.
- * @param bool $isOutput Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8.
- * @param int $maxLen Holds an maximum length of the variable.
- * @param mixed $type The data type of $var. Legal values depend on driver.
- *
- * @link http://php.net/oci_bind_by_name
- */
- function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false)
- {
- if ($this->debug) {
- $prefix = ($isOutput) ? 'Out' : 'In';
- $ztype = (empty($type)) ? 'false' : $type;
- ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);");
- }
- return $this->Bind($stmt,$var,$maxLen,$type,$name,$isOutput);
- }
-
- /**
- * returns query ID if successful, otherwise false
- * this version supports:
- *
- * 1. $db->execute('select * from table');
- *
- * 2. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)');
- * $db->execute($prepared_statement, array(1,2,3));
- *
- * 3. $db->execute('insert into table (a,b,c) values (:a,:b,:c)',array('a'=>1,'b'=>2,'c'=>3));
- *
- * 4. $db->prepare('insert into table (a,b,c) values (:0,:1,:2)');
- * $db->bind($stmt,1); $db->bind($stmt,2); $db->bind($stmt,3);
- * $db->execute($stmt);
- */
- function _query($sql,$inputarr=false)
- {
- if (is_array($sql)) { // is prepared sql
- $stmt = $sql[1];
-
- // we try to bind to permanent array, so that oci_bind_by_name is persistent
- // and carried out once only - note that max array element size is 4000 chars
- if (is_array($inputarr)) {
- $bindpos = $sql[3];
- if (isset($this->_bind[$bindpos])) {
- // all tied up already
- $bindarr = $this->_bind[$bindpos];
- } else {
- // one statement to bind them all
- $bindarr = array();
- foreach($inputarr as $k => $v) {
- $bindarr[$k] = $v;
- oci_bind_by_name($stmt,":$k",$bindarr[$k],is_string($v) && strlen($v)>4000 ? -1 : 4000);
- }
- $this->_bind[$bindpos] = $bindarr;
- }
- }
- } else {
- $stmt=oci_parse($this->_connectionID,$sql);
- }
-
- $this->_stmt = $stmt;
- if (!$stmt) {
- return false;
- }
-
- if (defined('ADODB_PREFETCH_ROWS')) {
- @oci_set_prefetch($stmt,ADODB_PREFETCH_ROWS);
- }
-
- if (is_array($inputarr)) {
- foreach($inputarr as $k => $v) {
- if (is_array($v)) {
- // suggested by g.giunta@libero.
- if (sizeof($v) == 2) {
- oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]);
- }
- else {
- oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]);
- }
-
- if ($this->debug==99) {
- if (is_object($v[0])) {
- echo "name=:$k",' len='.$v[1],' type='.$v[2],'
';
- }
- else {
- echo "name=:$k",' var='.$inputarr[$k][0],' len='.$v[1],' type='.$v[2],'
';
- }
-
- }
- } else {
- $len = -1;
- if ($v === ' ') {
- $len = 1;
- }
- if (isset($bindarr)) { // is prepared sql, so no need to oci_bind_by_name again
- $bindarr[$k] = $v;
- } else { // dynamic sql, so rebind every time
- oci_bind_by_name($stmt,":$k",$inputarr[$k],$len);
- }
- }
- }
- }
-
- $this->_errorMsg = false;
- $this->_errorCode = false;
- if (oci_execute($stmt,$this->_commit)) {
-
- if (count($this -> _refLOBs) > 0) {
-
- foreach ($this -> _refLOBs as $key => $value) {
- if ($this -> _refLOBs[$key]['TYPE'] == true) {
- $tmp = $this -> _refLOBs[$key]['LOB'] -> load();
- if ($this -> debug) {
- ADOConnection::outp("OUT LOB: LOB has been loaded.
");
- }
- //$_GLOBALS[$this -> _refLOBs[$key]['VAR']] = $tmp;
- $this -> _refLOBs[$key]['VAR'] = $tmp;
- } else {
- $this->_refLOBs[$key]['LOB']->save($this->_refLOBs[$key]['VAR']);
- $this -> _refLOBs[$key]['LOB']->free();
- unset($this -> _refLOBs[$key]);
- if ($this->debug) {
- ADOConnection::outp("IN LOB: LOB has been saved.
");
- }
- }
- }
- }
-
- switch (@oci_statement_type($stmt)) {
- case "SELECT":
- return $stmt;
-
- case 'DECLARE':
- case "BEGIN":
- if (is_array($sql) && !empty($sql[4])) {
- $cursor = $sql[4];
- if (is_resource($cursor)) {
- $ok = oci_execute($cursor);
- return $cursor;
- }
- return $stmt;
- } else {
- if (is_resource($stmt)) {
- oci_free_statement($stmt);
- return true;
- }
- return $stmt;
- }
- break;
- default :
-
- return true;
- }
- }
- return false;
- }
-
- // From Oracle Whitepaper: PHP Scalability and High Availability
- function IsConnectionError($err)
- {
- switch($err) {
- case 378: /* buffer pool param incorrect */
- case 602: /* core dump */
- case 603: /* fatal error */
- case 609: /* attach failed */
- case 1012: /* not logged in */
- case 1033: /* init or shutdown in progress */
- case 1043: /* Oracle not available */
- case 1089: /* immediate shutdown in progress */
- case 1090: /* shutdown in progress */
- case 1092: /* instance terminated */
- case 3113: /* disconnect */
- case 3114: /* not connected */
- case 3122: /* closing window */
- case 3135: /* lost contact */
- case 12153: /* TNS: not connected */
- case 27146: /* fatal or instance terminated */
- case 28511: /* Lost RPC */
- return true;
- }
- return false;
- }
-
- // returns true or false
- function _close()
- {
- if (!$this->_connectionID) {
- return;
- }
-
-
- if (!$this->autoCommit) {
- oci_rollback($this->_connectionID);
- }
- if (count($this->_refLOBs) > 0) {
- foreach ($this ->_refLOBs as $key => $value) {
- $this->_refLOBs[$key]['LOB']->free();
- unset($this->_refLOBs[$key]);
- }
- }
- oci_close($this->_connectionID);
-
- $this->_stmt = false;
- $this->_connectionID = false;
- }
-
- function MetaPrimaryKeys($table, $owner=false,$internalKey=false)
- {
- if ($internalKey) {
- return array('ROWID');
- }
-
- // tested with oracle 8.1.7
- $table = strtoupper($table);
- if ($owner) {
- $owner_clause = "AND ((a.OWNER = b.OWNER) AND (a.OWNER = UPPER('$owner')))";
- $ptab = 'ALL_';
- } else {
- $owner_clause = '';
- $ptab = 'USER_';
- }
- $sql = "
-SELECT /*+ RULE */ distinct b.column_name
- FROM {$ptab}CONSTRAINTS a
- , {$ptab}CONS_COLUMNS b
- WHERE ( UPPER(b.table_name) = ('$table'))
- AND (UPPER(a.table_name) = ('$table') and a.constraint_type = 'P')
- $owner_clause
- AND (a.constraint_name = b.constraint_name)";
-
- $rs = $this->Execute($sql);
- if ($rs && !$rs->EOF) {
- $arr = $rs->GetArray();
- $a = array();
- foreach($arr as $v) {
- $a[] = reset($v);
- }
- return $a;
- }
- else return false;
- }
-
- /**
- * Returns a list of Foreign Keys associated with a specific table.
- *
- * @param string $table
- * @param string $owner
- * @param bool $upper discarded
- * @param bool $associative discarded
- *
- * @return string[]|false An array where keys are tables, and values are foreign keys;
- * false if no foreign keys could be found.
- */
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $table = $this->qstr(strtoupper($table));
- if (!$owner) {
- $owner = $this->user;
- $tabp = 'user_';
- } else
- $tabp = 'all_';
-
- $owner = ' and owner='.$this->qstr(strtoupper($owner));
-
- $sql =
-"select constraint_name,r_owner,r_constraint_name
- from {$tabp}constraints
- where constraint_type = 'R' and table_name = $table $owner";
-
- $constraints = $this->GetArray($sql);
- $arr = false;
- foreach($constraints as $constr) {
- $cons = $this->qstr($constr[0]);
- $rowner = $this->qstr($constr[1]);
- $rcons = $this->qstr($constr[2]);
- $cols = $this->GetArray("select column_name from {$tabp}cons_columns where constraint_name=$cons $owner order by position");
- $tabcol = $this->GetArray("select table_name,column_name from {$tabp}cons_columns where owner=$rowner and constraint_name=$rcons order by position");
-
- if ($cols && $tabcol)
- for ($i=0, $max=sizeof($cols); $i < $max; $i++) {
- $arr[$tabcol[$i][0]] = $cols[$i][0].'='.$tabcol[$i][1];
- }
- }
- $ADODB_FETCH_MODE = $save;
-
- return $arr;
- }
-
-
- function CharMax()
- {
- return 4000;
- }
-
- function TextMax()
- {
- return 4000;
- }
-
- /**
- * Correctly quotes a string so that all strings are escaped.
- * We prefix and append to the string single-quotes.
- * An example is $db->qstr("Don't bother");
- *
- * @param string $s The string to quote
- * @param bool $magic_quotes This param is not used since 5.21.0.
- * It remains for backwards compatibility.
- *
- * @return string Quoted string to be sent back to database
- *
- * @noinspection PhpUnusedParameterInspection
- */
- function qStr($s, $magic_quotes=false)
- {
- if ($this->noNullStrings && strlen($s) == 0) {
- $s = ' ';
- }
- if ($this->replaceQuote[0] == '\\'){
- $s = str_replace('\\','\\\\',$s);
- }
- return "'" . str_replace("'", $this->replaceQuote, $s) . "'";
- }
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_oci8 extends ADORecordSet {
-
- var $databaseType = 'oci8';
- var $bind=false;
- var $_fieldobjs;
-
- function __construct($queryID,$mode=false)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- switch ($mode) {
- case ADODB_FETCH_ASSOC:
- $this->fetchMode = OCI_ASSOC;
- break;
- case ADODB_FETCH_DEFAULT:
- case ADODB_FETCH_BOTH:
- $this->fetchMode = OCI_NUM + OCI_ASSOC;
- break;
- case ADODB_FETCH_NUM:
- default:
- $this->fetchMode = OCI_NUM;
- break;
- }
- $this->fetchMode += OCI_RETURN_NULLS + OCI_RETURN_LOBS;
- $this->adodbFetchMode = $mode;
- $this->_queryID = $queryID;
- }
-
- /**
- * Overrides the core destructor method as that causes problems here
- *
- * @return void
- */
- function __destruct() {}
-
- function Init()
- {
- if ($this->_inited) {
- return;
- }
-
- $this->_inited = true;
- if ($this->_queryID) {
-
- $this->_currentRow = 0;
- @$this->_initrs();
- if ($this->_numOfFields) {
- $this->EOF = !$this->_fetch();
- }
- else $this->EOF = true;
-
- /*
- // based on idea by Gaetano Giunta to detect unusual oracle errors
- // see PHPLens Issue No: 6771
- $err = oci_error($this->_queryID);
- if ($err && $this->connection->debug) {
- ADOConnection::outp($err);
- }
- */
-
- if (!is_array($this->fields)) {
- $this->_numOfRows = 0;
- $this->fields = array();
- }
- } else {
- $this->fields = array();
- $this->_numOfRows = 0;
- $this->_numOfFields = 0;
- $this->EOF = true;
- }
- }
-
- function _initrs()
- {
- $this->_numOfRows = -1;
- $this->_numOfFields = oci_num_fields($this->_queryID);
- if ($this->_numOfFields>0) {
- $this->_fieldobjs = array();
- $max = $this->_numOfFields;
- for ($i=0;$i<$max; $i++) $this->_fieldobjs[] = $this->_FetchField($i);
- }
- }
-
- /**
- * Get column information in the Recordset object.
- * fetchField() can be used in order to obtain information about fields
- * in a certain query result. If the field offset isn't specified, the next
- * field that wasn't yet retrieved by fetchField() is retrieved
- *
- * @return object containing field information
- */
- function _FetchField($fieldOffset = -1)
- {
- $fld = new ADOFieldObject;
- $fieldOffset += 1;
- $fld->name =oci_field_name($this->_queryID, $fieldOffset);
- if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER) {
- $fld->name = strtolower($fld->name);
- }
- $fld->type = oci_field_type($this->_queryID, $fieldOffset);
- $fld->max_length = oci_field_size($this->_queryID, $fieldOffset);
-
- switch($fld->type) {
- case 'NUMBER':
- $p = oci_field_precision($this->_queryID, $fieldOffset);
- $sc = oci_field_scale($this->_queryID, $fieldOffset);
- if ($p != 0 && $sc == 0) {
- $fld->type = 'INT';
- }
- $fld->scale = $p;
- break;
-
- case 'CLOB':
- case 'NCLOB':
- case 'BLOB':
- $fld->max_length = -1;
- break;
- }
- return $fld;
- }
-
- /* For some reason, oci_field_name fails when called after _initrs() so we cache it */
- function FetchField($fieldOffset = -1)
- {
- return $this->_fieldobjs[$fieldOffset];
- }
-
-
- function MoveNext()
- {
- if ($this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) {
- $this->_currentRow += 1;
- $this->_updatefields();
- return true;
- }
- if (!$this->EOF) {
- $this->_currentRow += 1;
- $this->EOF = true;
- }
- return false;
- }
-
- // Optimize SelectLimit() by using oci_fetch()
- function GetArrayLimit($nrows,$offset=-1)
- {
- if ($offset <= 0) {
- $arr = $this->GetArray($nrows);
- return $arr;
- }
- $arr = array();
- for ($i=1; $i < $offset; $i++) {
- if (!@oci_fetch($this->_queryID)) {
- return $arr;
- }
- }
-
- if (!$this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) {
- return $arr;
- }
- $this->_updatefields();
- $results = array();
- $cnt = 0;
- while (!$this->EOF && $nrows != $cnt) {
- $results[$cnt++] = $this->fields;
- $this->MoveNext();
- }
-
- return $results;
- }
-
-
- // Use associative array to get fields array
- function Fields($colname)
- {
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
-
- function _seek($row)
- {
- return false;
- }
-
- function _fetch()
- {
- $this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode);
- $this->_updatefields();
-
- return $this->fields;
- }
-
- /**
- * close() only needs to be called if you are worried about using too much
- * memory while your script is running. All associated result memory for the
- * specified result identifier will automatically be freed.
- */
- function _close()
- {
- if ($this->connection->_stmt === $this->_queryID) {
- $this->connection->_stmt = false;
- }
- if (!empty($this->_refcursor)) {
- oci_free_cursor($this->_refcursor);
- $this->_refcursor = false;
- }
- if (is_resource($this->_queryID))
- @oci_free_statement($this->_queryID);
- $this->_queryID = false;
- }
-
- /**
- * not the fastest implementation - quick and dirty - jlim
- * for best performance, use the actual $rs->MetaType().
- *
- * @param mixed $t
- * @param int $len [optional] Length of blobsize
- * @param bool $fieldobj [optional][discarded]
- * @return str The metatype of the field
- */
- function MetaType($t, $len=-1, $fieldobj=false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- $t = strtoupper($t);
-
- if (array_key_exists($t,$this->connection->customActualTypes))
- return $this->connection->customActualTypes[$t];
-
- switch ($t) {
- case 'VARCHAR':
- case 'VARCHAR2':
- case 'CHAR':
- case 'VARBINARY':
- case 'BINARY':
- case 'NCHAR':
- case 'NVARCHAR':
- case 'NVARCHAR2':
- if ($len <= $this->blobSize) {
- return 'C';
- }
-
- case 'NCLOB':
- case 'LONG':
- case 'LONG VARCHAR':
- case 'CLOB':
- return 'X';
-
- case 'LONG RAW':
- case 'LONG VARBINARY':
- case 'BLOB':
- return 'B';
-
- case 'DATE':
- return ($this->connection->datetime) ? 'T' : 'D';
-
-
- case 'TIMESTAMP': return 'T';
-
- case 'INT':
- case 'SMALLINT':
- case 'INTEGER':
- return 'I';
-
- default:
- return ADODB_DEFAULT_METATYPE;
- }
- }
-}
-
-class ADORecordSet_ext_oci8 extends ADORecordSet_oci8 {
-
- function MoveNext()
- {
- return adodb_movenext($this);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-oci805.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-oci805.inc.php
deleted file mode 100644
index 01958282c..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-oci805.inc.php
+++ /dev/null
@@ -1,60 +0,0 @@
- 0) {
- if ($offset > 0) $nrows += $offset;
- $sql = "select * from ($sql) where rownum <= $nrows";
- $nrows = -1;
- }
- */
-
- return ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- }
-}
-
-class ADORecordset_oci805 extends ADORecordset_oci8 {
- var $databaseType = "oci805";
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-oci8po.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-oci8po.inc.php
deleted file mode 100644
index 50630cad6..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-oci8po.inc.php
+++ /dev/null
@@ -1,281 +0,0 @@
-
- *
- * @package ADOdb
- * @link https://adodb.org Project's web site and documentation
- * @link https://github.com/ADOdb/ADOdb Source code and issue tracker
- *
- * The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
- * and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
- * any later version. This means you can use it in proprietary products.
- * See the LICENSE.md file distributed with this source code for details.
- * @license BSD-3-Clause
- * @license LGPL-2.1-or-later
- *
- * @copyright 2000-2013 John Lim
- * @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
- */
-
-// security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-include_once(ADODB_DIR.'/drivers/adodb-oci8.inc.php');
-
-class ADODB_oci8po extends ADODB_oci8 {
- var $databaseType = 'oci8po';
- var $dataProvider = 'oci8';
- var $metaColumnsSQL = "select lower(cname),coltype,width, SCALE, PRECISION, NULLS, DEFAULTVAL from col where tname='%s' order by colno"; //changed by smondino@users.sourceforge. net
- var $metaTablesSQL = "select lower(table_name),table_type from cat where table_type in ('TABLE','VIEW')";
-
- function Param($name,$type='C')
- {
- return '?';
- }
-
- function Prepare($sql,$cursor=false)
- {
- $sqlarr = explode('?',$sql);
- $sql = $sqlarr[0];
- for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) {
- $sql .= ':'.($i-1) . $sqlarr[$i];
- }
- return ADODB_oci8::Prepare($sql,$cursor);
- }
-
- function Execute($sql,$inputarr=false)
- {
- return ADOConnection::Execute($sql,$inputarr);
- }
-
- /**
- * The optimizations performed by ADODB_oci8::SelectLimit() are not
- * compatible with the oci8po driver, so we rely on the slower method
- * from the base class.
- * We can't properly handle prepared statements either due to preprocessing
- * of query parameters, so we treat them as regular SQL statements.
- */
- function SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0)
- {
- if(is_array($sql)) {
-// $sql = $sql[0];
- }
- return ADOConnection::SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache);
- }
-
- // emulate handling of parameters ? ?, replacing with :bind0 :bind1
- function _query($sql,$inputarr=false)
- {
- if (is_array($inputarr)) {
- $i = 0;
- if (is_array($sql)) {
- foreach($inputarr as $v) {
- $arr['bind'.$i++] = $v;
- }
- } else {
- $sql = $this->extractBinds($sql,$inputarr);
- }
- }
- return ADODB_oci8::_query($sql,$inputarr);
- }
-
- /**
- * Replaces compatibility bind markers with oracle ones and returns a
- * valid sql statement
- *
- * This replaces a regexp based section of code that has been subject
- * to numerous tweaks, as more extreme test cases have appeared. This
- * is now done this like this to help maintainability and avoid the
- * need to rely on regexp experienced maintainers
- *
- * @param string $sql The sql statement
- * @param string[] $inputarr The bind array
- *
- * @return string The modified statement
- */
- private function extractBinds($sql,$inputarr)
- {
- $inString = false;
- $escaped = 0;
- $sqlLength = strlen($sql) - 1;
- $newSql = '';
- $bindCount = 0;
-
- /*
- * inputarr is the passed in bind list, which is associative, but
- * we only want the keys here
- */
- $inputKeys = array_keys($inputarr);
-
-
- for ($i=0;$i<=$sqlLength;$i++)
- {
- /*
- * find the next character of the string
- */
- $c = $sql[$i];
-
- if ($c == "'" && !$inString && $escaped==0)
- /*
- * Found the start of a string inside the statement
- */
- $inString = true;
- elseif ($c == "\\" && $escaped==0)
- /*
- * The next character will be escaped
- */
- $escaped = 1;
- elseif ($c == "'" && $inString && $escaped==0)
- /*
- * We found the end of the string
- */
- $inString = false;
-
- if ($escaped == 2)
- $escaped = 0;
-
- if ($escaped==0 && !$inString && $c == '?')
- /*
- * We found a bind symbol, replace it with the oracle equivalent
- */
- $newSql .= ':' . $inputKeys[$bindCount++];
- else
- /*
- * Add the current character the pile
- */
- $newSql .= $c;
-
- if ($escaped == 1)
- /*
- * We have just found an escape character, make sure we ignore the
- * next one that comes along, it might be a ' character
- */
- $escaped = 2;
- }
-
- return $newSql;
-
- }
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_oci8po extends ADORecordset_oci8 {
-
- var $databaseType = 'oci8po';
-
- function Fields($colname)
- {
- if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname];
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- // lowercase field names...
- function _FetchField($fieldOffset = -1)
- {
- $fld = new ADOFieldObject;
- $fieldOffset += 1;
- $fld->name = OCIcolumnname($this->_queryID, $fieldOffset);
- if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER) {
- $fld->name = strtolower($fld->name);
- }
- $fld->type = OCIcolumntype($this->_queryID, $fieldOffset);
- $fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset);
- if ($fld->type == 'NUMBER') {
- $sc = OCIColumnScale($this->_queryID, $fieldOffset);
- if ($sc == 0) {
- $fld->type = 'INT';
- }
- }
- return $fld;
- }
-
- // 10% speedup to move MoveNext to child class
- function MoveNext()
- {
- $ret = @oci_fetch_array($this->_queryID,$this->fetchMode);
- if($ret !== false) {
- global $ADODB_ANSI_PADDING_OFF;
- $this->fields = $ret;
- $this->_currentRow++;
- $this->_updatefields();
-
- if (!empty($ADODB_ANSI_PADDING_OFF)) {
- foreach($this->fields as $k => $v) {
- if (is_string($v)) $this->fields[$k] = rtrim($v);
- }
- }
- return true;
- }
- if (!$this->EOF) {
- $this->EOF = true;
- $this->_currentRow++;
- }
- return false;
- }
-
- /* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */
- function GetArrayLimit($nrows,$offset=-1)
- {
- if ($offset <= 0) {
- $arr = $this->GetArray($nrows);
- return $arr;
- }
- for ($i=1; $i < $offset; $i++)
- if (!@OCIFetch($this->_queryID)) {
- $arr = array();
- return $arr;
- }
- $ret = @oci_fetch_array($this->_queryID,$this->fetchMode);
- if ($ret === false) {
- $arr = array();
- return $arr;
- }
- $this->fields = $ret;
- $this->_updatefields();
- $results = array();
- $cnt = 0;
- while (!$this->EOF && $nrows != $cnt) {
- $results[$cnt++] = $this->fields;
- $this->MoveNext();
- }
-
- return $results;
- }
-
- function _fetch()
- {
- global $ADODB_ANSI_PADDING_OFF;
-
- $ret = @oci_fetch_array($this->_queryID,$this->fetchMode);
- if ($ret) {
- $this->fields = $ret;
- $this->_updatefields();
-
- if (!empty($ADODB_ANSI_PADDING_OFF)) {
- foreach($this->fields as $k => $v) {
- if (is_string($v)) $this->fields[$k] = rtrim($v);
- }
- }
- }
- return $ret !== false;
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-oci8quercus.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-oci8quercus.inc.php
deleted file mode 100644
index f9312c9d7..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-oci8quercus.inc.php
+++ /dev/null
@@ -1,80 +0,0 @@
-name = oci_field_name($this->_queryID, $fieldOffset);
- $fld->type = oci_field_type($this->_queryID, $fieldOffset);
- $fld->max_length = oci_field_size($this->_queryID, $fieldOffset);
-
- //if ($fld->name == 'VAL6_NUM_12_4') $fld->type = 'NUMBER';
- switch($fld->type) {
- case 'string': $fld->type = 'VARCHAR'; break;
- case 'real': $fld->type = 'NUMBER'; break;
- }
- } else {
- $fieldOffset += 1;
- $fld->name = oci_field_name($this->_queryID, $fieldOffset);
- $fld->type = oci_field_type($this->_queryID, $fieldOffset);
- $fld->max_length = oci_field_size($this->_queryID, $fieldOffset);
- }
- switch($fld->type) {
- case 'NUMBER':
- $p = oci_field_precision($this->_queryID, $fieldOffset);
- $sc = oci_field_scale($this->_queryID, $fieldOffset);
- if ($p != 0 && $sc == 0) $fld->type = 'INT';
- $fld->scale = $p;
- break;
-
- case 'CLOB':
- case 'NCLOB':
- case 'BLOB':
- $fld->max_length = -1;
- break;
- }
-
- return $fld;
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbc.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbc.inc.php
deleted file mode 100644
index a9705e2d8..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbc.inc.php
+++ /dev/null
@@ -1,734 +0,0 @@
-resetLastError();
- if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword);
- else $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,$this->curmode);
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
- if (isset($this->connectStmt)) $this->Execute($this->connectStmt);
-
- return $this->_connectionID != false;
- }
-
- // returns true or false
- function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('odbc_connect')) return null;
-
- $last_php_error = $this->resetLastError();
- $this->_errorMsg = '';
- if ($this->debug && $argDatabasename) {
- ADOConnection::outp("For odbc PConnect(), $argDatabasename is not used. Place dsn in 1st parameter.");
- }
- // print "dsn=$argDSN u=$argUsername p=$argPassword
"; flush();
- if ($this->curmode === false) $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword);
- else $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,$this->curmode);
-
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
- if ($this->_connectionID && $this->autoRollback) @odbc_rollback($this->_connectionID);
- if (isset($this->connectStmt)) $this->Execute($this->connectStmt);
-
- return $this->_connectionID != false;
- }
-
-
- function ServerInfo()
- {
-
- if (!empty($this->host)) {
- $dsn = strtoupper($this->host);
- $first = true;
- $found = false;
-
- if (!function_exists('odbc_data_source')) return false;
-
- while(true) {
-
- $rez = @odbc_data_source($this->_connectionID,
- $first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT);
- $first = false;
- if (!is_array($rez)) break;
- if (strtoupper($rez['server']) == $dsn) {
- $found = true;
- break;
- }
- }
- if (!$found) return ADOConnection::ServerInfo();
- if (!isset($rez['version'])) $rez['version'] = '';
- return $rez;
- } else {
- return ADOConnection::ServerInfo();
- }
- }
-
-
- function CreateSequence($seqname='adodbseq',$start=1)
- {
- if (empty($this->_genSeqSQL)) return false;
- $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
- if (!$ok) return false;
- $start -= 1;
- return $this->Execute("insert into $seqname values($start)");
- }
-
- var $_dropSeqSQL = 'drop table %s';
- function DropSequence($seqname = 'adodbseq')
- {
- if (empty($this->_dropSeqSQL)) return false;
- return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
- }
-
- /*
- This algorithm is not very efficient, but works even if table locking
- is not available.
-
- Will return false if unable to generate an ID after $MAXLOOPS attempts.
- */
- function GenID($seq='adodbseq',$start=1)
- {
- // if you have to modify the parameter below, your database is overloaded,
- // or you need to implement generation of id's yourself!
- $MAXLOOPS = 100;
- //$this->debug=1;
- while (--$MAXLOOPS>=0) {
- $num = $this->GetOne("select id from $seq");
- if ($num === false) {
- $this->Execute(sprintf($this->_genSeqSQL ,$seq));
- $start -= 1;
- $num = '0';
- $ok = $this->Execute("insert into $seq values($start)");
- if (!$ok) return false;
- }
- $this->Execute("update $seq set id=id+1 where id=$num");
-
- if ($this->affected_rows() > 0) {
- $num += 1;
- $this->genID = $num;
- return $num;
- } elseif ($this->affected_rows() == 0) {
- // some drivers do not return a valid value => try with another method
- $value = $this->GetOne("select id from $seq");
- if ($value == $num + 1) {
- return $value;
- }
- }
- }
- if ($fn = $this->raiseErrorFn) {
- $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
- }
- return false;
- }
-
-
- function ErrorMsg()
- {
- if ($this->_errorMsg !== false) return $this->_errorMsg;
- if (empty($this->_connectionID)) return @odbc_errormsg();
- return @odbc_errormsg($this->_connectionID);
- }
-
- function ErrorNo()
- {
- if ($this->_errorCode !== false) {
- // bug in 4.0.6, error number can be corrupted string (should be 6 digits)
- return (strlen($this->_errorCode)<=2) ? 0 : $this->_errorCode;
- }
-
- if (empty($this->_connectionID)) $e = @odbc_error();
- else $e = @odbc_error($this->_connectionID);
-
- // bug in 4.0.6, error number can be corrupted string (should be 6 digits)
- // so we check and patch
- if (strlen($e)<=2) return 0;
- return $e;
- }
-
-
-
- function BeginTrans()
- {
- if (!$this->hasTransactions) return false;
- if ($this->transOff) return true;
- $this->transCnt += 1;
- $this->_autocommit = false;
- return odbc_autocommit($this->_connectionID,false);
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) return true;
- if (!$ok) return $this->RollbackTrans();
- if ($this->transCnt) $this->transCnt -= 1;
- $this->_autocommit = true;
- $ret = odbc_commit($this->_connectionID);
- odbc_autocommit($this->_connectionID,true);
- return $ret;
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- if ($this->transCnt) $this->transCnt -= 1;
- $this->_autocommit = true;
- $ret = odbc_rollback($this->_connectionID);
- odbc_autocommit($this->_connectionID,true);
- return $ret;
- }
-
- function MetaPrimaryKeys($table,$owner=false)
- {
- global $ADODB_FETCH_MODE;
-
- if ($this->uCaseTables) $table = strtoupper($table);
- $schema = '';
- $this->_findschema($table,$schema);
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $qid = @odbc_primarykeys($this->_connectionID,'',$schema,$table);
-
- if (!$qid) {
- $ADODB_FETCH_MODE = $savem;
- return false;
- }
- $rs = new ADORecordSet_odbc($qid);
- $ADODB_FETCH_MODE = $savem;
-
- if (!$rs) return false;
-
- $arr = $rs->GetArray();
- $rs->Close();
- //print_r($arr);
- $arr2 = array();
- for ($i=0; $i < sizeof($arr); $i++) {
- if ($arr[$i][3]) $arr2[] = $arr[$i][3];
- }
- return $arr2;
- }
-
-
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- global $ADODB_FETCH_MODE;
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $qid = odbc_tables($this->_connectionID);
-
- $rs = new ADORecordSet_odbc($qid);
-
- $ADODB_FETCH_MODE = $savem;
- if (!$rs) {
- $false = false;
- return $false;
- }
-
- $arr = $rs->GetArray();
- //print_r($arr);
-
- $rs->Close();
- $arr2 = array();
-
- if ($ttype) {
- $isview = strncmp($ttype,'V',1) === 0;
- }
- for ($i=0; $i < sizeof($arr); $i++) {
- if (!$arr[$i][2]) continue;
- $type = $arr[$i][3];
- if ($ttype) {
- if ($isview) {
- if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2];
- } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2];
- } else if (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2];
- }
- return $arr2;
- }
-
-/*
-See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcdatetime_data_type_changes.asp
-/ SQL data type codes /
-#define SQL_UNKNOWN_TYPE 0
-#define SQL_CHAR 1
-#define SQL_NUMERIC 2
-#define SQL_DECIMAL 3
-#define SQL_INTEGER 4
-#define SQL_SMALLINT 5
-#define SQL_FLOAT 6
-#define SQL_REAL 7
-#define SQL_DOUBLE 8
-#if (ODBCVER >= 0x0300)
-#define SQL_DATETIME 9
-#endif
-#define SQL_VARCHAR 12
-
-
-/ One-parameter shortcuts for date/time data types /
-#if (ODBCVER >= 0x0300)
-#define SQL_TYPE_DATE 91
-#define SQL_TYPE_TIME 92
-#define SQL_TYPE_TIMESTAMP 93
-
-#define SQL_UNICODE (-95)
-#define SQL_UNICODE_VARCHAR (-96)
-#define SQL_UNICODE_LONGVARCHAR (-97)
-*/
- function ODBCTypes($t)
- {
- switch ((integer)$t) {
- case 1:
- case 12:
- case 0:
- case -95:
- case -96:
- return 'C';
- case -97:
- case -1: //text
- return 'X';
- case -4: //image
- return 'B';
-
- case 9:
- case 91:
- return 'D';
-
- case 10:
- case 11:
- case 92:
- case 93:
- return 'T';
-
- case 4:
- case 5:
- case -6:
- return 'I';
-
- case -11: // uniqidentifier
- return 'R';
- case -7: //bit
- return 'L';
-
- default:
- return 'N';
- }
- }
-
- function MetaColumns($table, $normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $false = false;
- if ($this->uCaseTables) $table = strtoupper($table);
- $schema = '';
- $this->_findschema($table,$schema);
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- /*if (false) { // after testing, confirmed that the following does not work because of a bug
- $qid2 = odbc_tables($this->_connectionID);
- $rs = new ADORecordSet_odbc($qid2);
- $ADODB_FETCH_MODE = $savem;
- if (!$rs) return false;
- $rs->_fetch();
-
- while (!$rs->EOF) {
- if ($table == strtoupper($rs->fields[2])) {
- $q = $rs->fields[0];
- $o = $rs->fields[1];
- break;
- }
- $rs->MoveNext();
- }
- $rs->Close();
-
- $qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%');
- } */
-
- switch ($this->databaseType) {
- case 'access':
- case 'vfp':
- $qid = odbc_columns($this->_connectionID);#,'%','',strtoupper($table),'%');
- break;
-
-
- case 'db2':
- $colname = "%";
- $qid = odbc_columns($this->_connectionID, "", $schema, $table, $colname);
- break;
-
- default:
- $qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%');
- if (empty($qid)) $qid = odbc_columns($this->_connectionID);
- break;
- }
- if (empty($qid)) return $false;
-
- $rs = new ADORecordSet_odbc($qid);
- $ADODB_FETCH_MODE = $savem;
-
- if (!$rs) return $false;
- $rs->_fetch();
-
- $retarr = array();
-
- /*
- $rs->fields indices
- 0 TABLE_QUALIFIER
- 1 TABLE_SCHEM
- 2 TABLE_NAME
- 3 COLUMN_NAME
- 4 DATA_TYPE
- 5 TYPE_NAME
- 6 PRECISION
- 7 LENGTH
- 8 SCALE
- 9 RADIX
- 10 NULLABLE
- 11 REMARKS
- */
- while (!$rs->EOF) {
- // adodb_pr($rs->fields);
- if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[3];
- if ($this->metaColumnsReturnType == METACOLUMNS_RETURNS_META)
- /*
- * This is the broken, original value
- */
- $fld->type = $this->ODBCTypes($rs->fields[4]);
- else
- /*
- * This is the correct new value
- */
- $fld->type = $rs->fields[4];
-
- // ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp
- // access uses precision to store length for char/varchar
- if ($fld->type == 'C' or $fld->type == 'X') {
- if ($this->databaseType == 'access')
- $fld->max_length = $rs->fields[6];
- else if ($rs->fields[4] <= -95) // UNICODE
- $fld->max_length = $rs->fields[7]/2;
- else
- $fld->max_length = $rs->fields[7];
- } else
- $fld->max_length = $rs->fields[7];
- $fld->not_null = !empty($rs->fields[10]);
- $fld->scale = $rs->fields[8];
- $retarr[strtoupper($fld->name)] = $fld;
- } else if (sizeof($retarr)>0)
- break;
- $rs->MoveNext();
- }
- $rs->Close(); //-- crashes 4.03pl1 -- why?
-
- if (empty($retarr)) $retarr = false;
- return $retarr;
- }
-
- function Prepare($sql)
- {
- if (! $this->_bindInputArray) return $sql; // no binding
- $stmt = odbc_prepare($this->_connectionID,$sql);
- if (!$stmt) {
- // we don't know whether odbc driver is parsing prepared stmts, so just return sql
- return $sql;
- }
- return array($sql,$stmt,false);
- }
-
- /* returns queryID or false */
- function _query($sql,$inputarr=false)
- {
- $last_php_error = $this->resetLastError();
- $this->_errorMsg = '';
-
- if ($inputarr) {
- if (is_array($sql)) {
- $stmtid = $sql[1];
- } else {
- $stmtid = odbc_prepare($this->_connectionID,$sql);
-
- if ($stmtid == false) {
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
- return false;
- }
- }
-
- if (! odbc_execute($stmtid,$inputarr)) {
- //@odbc_free_result($stmtid);
- $this->_errorMsg = odbc_errormsg();
- $this->_errorCode = odbc_error();
- return false;
- }
-
- } else if (is_array($sql)) {
- $stmtid = $sql[1];
- if (!odbc_execute($stmtid)) {
- //@odbc_free_result($stmtid);
- $this->_errorMsg = odbc_errormsg();
- $this->_errorCode = odbc_error();
- return false;
- }
- } else
- $stmtid = odbc_exec($this->_connectionID,$sql);
-
- $this->_lastAffectedRows = 0;
- if ($stmtid) {
- if (@odbc_num_fields($stmtid) == 0) {
- $this->_lastAffectedRows = odbc_num_rows($stmtid);
- $stmtid = true;
- } else {
- $this->_lastAffectedRows = 0;
- odbc_binmode($stmtid,$this->binmode);
- odbc_longreadlen($stmtid,$this->maxblobsize);
- }
-
- $this->_errorMsg = '';
- $this->_errorCode = 0;
- } else {
- $this->_errorMsg = odbc_errormsg();
- $this->_errorCode = odbc_error();
- }
- return $stmtid;
- }
-
- /*
- Insert a null into the blob field of the table first.
- Then use UpdateBlob to store the blob.
-
- Usage:
-
- $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');
- $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
- */
- function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
- {
- return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false;
- }
-
- // returns true or false
- function _close()
- {
- $ret = @odbc_close($this->_connectionID);
- $this->_connectionID = false;
- return $ret;
- }
-
- function _affectedrows()
- {
- return $this->_lastAffectedRows;
- }
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordSet_odbc extends ADORecordSet {
-
- var $bind = false;
- var $databaseType = "odbc";
- var $dataProvider = "odbc";
- var $useFetchArray;
-
- function __construct($id,$mode=false)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- $this->fetchMode = $mode;
-
- $this->_queryID = $id;
-
- // the following is required for mysql odbc driver in 4.3.1 -- why?
- $this->EOF = false;
- $this->_currentRow = -1;
- //parent::__construct($id);
- }
-
-
- // returns the field object
- function FetchField($fieldOffset = -1)
- {
-
- $off=$fieldOffset+1; // offsets begin at 1
-
- $o= new ADOFieldObject();
- $o->name = @odbc_field_name($this->_queryID,$off);
- $o->type = @odbc_field_type($this->_queryID,$off);
- $o->max_length = @odbc_field_len($this->_queryID,$off);
- if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name);
- else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name);
- return $o;
- }
-
- /* Use associative array to get fields array */
- function Fields($colname)
- {
- if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname];
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
-
- function _initrs()
- {
- global $ADODB_COUNTRECS;
- $this->_numOfRows = ($ADODB_COUNTRECS) ? @odbc_num_rows($this->_queryID) : -1;
- $this->_numOfFields = @odbc_num_fields($this->_queryID);
- // some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0
- if ($this->_numOfRows == 0) $this->_numOfRows = -1;
- //$this->useFetchArray = $this->connection->useFetchArray;
- }
-
- function _seek($row)
- {
- return false;
- }
-
- // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated
- function GetArrayLimit($nrows,$offset=-1)
- {
- if ($offset <= 0) {
- $rs = $this->GetArray($nrows);
- return $rs;
- }
- $savem = $this->fetchMode;
- $this->fetchMode = ADODB_FETCH_NUM;
- $this->Move($offset);
- $this->fetchMode = $savem;
-
- if ($this->fetchMode & ADODB_FETCH_ASSOC) {
- $this->fields = $this->GetRowAssoc();
- }
-
- $results = array();
- $cnt = 0;
- while (!$this->EOF && $nrows != $cnt) {
- $results[$cnt++] = $this->fields;
- $this->MoveNext();
- }
-
- return $results;
- }
-
-
- function MoveNext()
- {
- if ($this->_numOfRows != 0 && !$this->EOF) {
- $this->_currentRow++;
- if( $this->_fetch() ) {
- return true;
- }
- }
- $this->fields = false;
- $this->EOF = true;
- return false;
- }
-
- function _fetch()
- {
- $this->fields = false;
- $rez = @odbc_fetch_into($this->_queryID,$this->fields);
- if ($rez) {
- if ($this->fetchMode & ADODB_FETCH_ASSOC) {
- $this->fields = $this->GetRowAssoc();
- }
- return true;
- }
- return false;
- }
-
- function _close()
- {
- return @odbc_free_result($this->_queryID);
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_db2.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbc_db2.inc.php
deleted file mode 100644
index 8f0e60cb1..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_db2.inc.php
+++ /dev/null
@@ -1,294 +0,0 @@
-curmode = SQL_CUR_USE_ODBC;
- parent::__construct();
- }
-
- function IfNull( $field, $ifNull )
- {
- return " COALESCE($field, $ifNull) "; // if DB2 UDB
- }
-
- function ServerInfo()
- {
- //odbc_setoption($this->_connectionID,1,101 /*SQL_ATTR_ACCESS_MODE*/, 1 /*SQL_MODE_READ_ONLY*/);
- $vers = $this->GetOne('select versionnumber from sysibm.sysversions');
- //odbc_setoption($this->_connectionID,1,101, 0 /*SQL_MODE_READ_WRITE*/);
- return array('description'=>'DB2 ODBC driver', 'version'=>$vers);
- }
-
- protected function _insertID($table = '', $column = '')
- {
- return $this->GetOne($this->identitySQL);
- }
-
- function RowLock($tables,$where,$col='1 as adodbignore')
- {
- if ($this->_autocommit) $this->BeginTrans();
- return $this->GetOne("select $col from $tables where $where for update");
- }
-
- function MetaTables($ttype=false,$showSchema=false, $qtable="%", $qschema="%")
- {
- global $ADODB_FETCH_MODE;
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $qid = odbc_tables($this->_connectionID, "", $qschema, $qtable, "");
-
- $rs = new ADORecordSet_odbc($qid);
-
- $ADODB_FETCH_MODE = $savem;
- if (!$rs) {
- $false = false;
- return $false;
- }
-
- $arr = $rs->GetArray();
- //print_r($arr);
-
- $rs->Close();
- $arr2 = array();
-
- if ($ttype) {
- $isview = strncmp($ttype,'V',1) === 0;
- }
- for ($i=0; $i < sizeof($arr); $i++) {
-
- if (!$arr[$i][2]) continue;
- if (strncmp($arr[$i][1],'SYS',3) === 0) continue;
-
- $type = $arr[$i][3];
-
- if ($showSchema) $arr[$i][2] = $arr[$i][1].'.'.$arr[$i][2];
-
- if ($ttype) {
- if ($isview) {
- if (strncmp($type,'V',1) === 0) $arr2[] = $arr[$i][2];
- } else if (strncmp($type,'T',1) === 0) $arr2[] = $arr[$i][2];
- } else if (strncmp($type,'S',1) !== 0) $arr2[] = $arr[$i][2];
- }
- return $arr2;
- }
-
- function MetaIndexes ($table, $primary = FALSE, $owner=false)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
- $false = false;
- // get index details
- $table = strtoupper($table);
- $SQL="SELECT NAME, UNIQUERULE, COLNAMES FROM SYSIBM.SYSINDEXES WHERE TBNAME='$table'";
- if ($primary)
- $SQL.= " AND UNIQUERULE='P'";
- $rs = $this->Execute($SQL);
- if (!is_object($rs)) {
- if (isset($savem))
- $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
- $indexes = array ();
- // parse index data into array
- while ($row = $rs->FetchRow()) {
- $indexes[$row[0]] = array(
- 'unique' => ($row[1] == 'U' || $row[1] == 'P'),
- 'columns' => array()
- );
- $cols = ltrim($row[2],'+');
- $indexes[$row[0]]['columns'] = explode('+', $cols);
- }
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- }
- return $indexes;
- }
-
- // Format date column in sql string given an input format that understands Y M D
- function SQLDate($fmt, $col=false)
- {
- // use right() and replace() ?
- if (!$col) $col = $this->sysDate;
- $s = '';
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- if ($s) $s .= '||';
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= "char(year($col))";
- break;
- case 'M':
- $s .= "substr(monthname($col),1,3)";
- break;
- case 'm':
- $s .= "right(digits(month($col)),2)";
- break;
- case 'D':
- case 'd':
- $s .= "right(digits(day($col)),2)";
- break;
- case 'H':
- case 'h':
- if ($col != $this->sysDate) $s .= "right(digits(hour($col)),2)";
- else $s .= "''";
- break;
- case 'i':
- case 'I':
- if ($col != $this->sysDate)
- $s .= "right(digits(minute($col)),2)";
- else $s .= "''";
- break;
- case 'S':
- case 's':
- if ($col != $this->sysDate)
- $s .= "right(digits(second($col)),2)";
- else $s .= "''";
- break;
- default:
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- $s .= $this->qstr($ch);
- }
- }
- return $s;
- }
-
-
- function SelectLimit($sql, $nrows = -1, $offset = -1, $inputArr = false, $secs2cache = 0)
- {
- $nrows = (integer) $nrows;
- if ($offset <= 0) {
- // could also use " OPTIMIZE FOR $nrows ROWS "
- if ($nrows >= 0) $sql .= " FETCH FIRST $nrows ROWS ONLY ";
- $rs = $this->Execute($sql,$inputArr);
- } else {
- if ($offset > 0 && $nrows < 0);
- else {
- $nrows += $offset;
- $sql .= " FETCH FIRST $nrows ROWS ONLY ";
- }
- $rs = ADOConnection::SelectLimit($sql,-1,$offset,$inputArr);
- }
-
- return $rs;
- }
-
-};
-
-
-class ADORecordSet_odbc_db2 extends ADORecordSet_odbc {
-
- var $databaseType = "db2";
-
- function MetaType($t,$len=-1,$fieldobj=false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- switch (strtoupper($t)) {
- case 'VARCHAR':
- case 'CHAR':
- case 'CHARACTER':
- case 'C':
- if ($len <= $this->blobSize) return 'C';
-
- case 'LONGCHAR':
- case 'TEXT':
- case 'CLOB':
- case 'DBCLOB': // double-byte
- case 'X':
- return 'X';
-
- case 'BLOB':
- case 'GRAPHIC':
- case 'VARGRAPHIC':
- return 'B';
-
- case 'DATE':
- case 'D':
- return 'D';
-
- case 'TIME':
- case 'TIMESTAMP':
- case 'T':
- return 'T';
-
- //case 'BOOLEAN':
- //case 'BIT':
- // return 'L';
-
- //case 'COUNTER':
- // return 'R';
-
- case 'INT':
- case 'INTEGER':
- case 'BIGINT':
- case 'SMALLINT':
- case 'I':
- return 'I';
-
- default: return ADODB_DEFAULT_METATYPE;
- }
- }
-}
-
-} //define
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql.inc.php
deleted file mode 100644
index 9f53d3d7c..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql.inc.php
+++ /dev/null
@@ -1,438 +0,0 @@
- 'master'";
- var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE'))";
- var $metaColumnsSQL = # xtype==61 is datetime
- "select c.name,t.name,c.length,c.isnullable, c.status,
- (case when c.xusertype=61 then 0 else c.xprec end),
- (case when c.xusertype=61 then 0 else c.xscale end)
- from syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id where o.name='%s'";
- var $hasTop = 'top'; // support mssql/interbase SELECT TOP 10 * FROM TABLE
- var $sysDate = 'GetDate()';
- var $sysTimeStamp = 'GetDate()';
- var $leftOuter = '*=';
- var $rightOuter = '=*';
- var $substr = 'substring';
- var $length = 'len';
- var $ansiOuter = true; // for mssql7 or later
- var $identitySQL = 'select SCOPE_IDENTITY()'; // 'select SCOPE_IDENTITY'; # for mssql 2000
- var $hasInsertID = true;
- var $connectStmt = 'SET CONCAT_NULL_YIELDS_NULL OFF'; # When SET CONCAT_NULL_YIELDS_NULL is ON,
- # concatenating a null value with a string yields a NULL result
-
- // crashes php...
- function ServerInfo()
- {
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $row = $this->GetRow("execute sp_server_info 2");
- $ADODB_FETCH_MODE = $save;
- if (!is_array($row)) return false;
- $arr['description'] = $row[2];
- $arr['version'] = ADOConnection::_findvers($arr['description']);
- return $arr;
- }
-
- function IfNull( $field, $ifNull )
- {
- return " ISNULL($field, $ifNull) "; // if MS SQL Server
- }
-
- protected function _insertID($table = '', $column = '')
- {
- // SCOPE_IDENTITY()
- // Returns the last IDENTITY value inserted into an IDENTITY column in
- // the same scope. A scope is a module -- a stored procedure, trigger,
- // function, or batch. Thus, two statements are in the same scope if
- // they are in the same stored procedure, function, or batch.
- return $this->GetOne($this->identitySQL);
- }
-
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $table = $this->qstr(strtoupper($table));
-
- $sql =
-"select object_name(constid) as constraint_name,
- col_name(fkeyid, fkey) as column_name,
- object_name(rkeyid) as referenced_table_name,
- col_name(rkeyid, rkey) as referenced_column_name
-from sysforeignkeys
-where upper(object_name(fkeyid)) = $table
-order by constraint_name, referenced_table_name, keyno";
-
- $constraints = $this->GetArray($sql);
-
- $ADODB_FETCH_MODE = $save;
-
- $arr = false;
- foreach($constraints as $constr) {
- //print_r($constr);
- $arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3];
- }
- if (!$arr) return false;
-
- $arr2 = false;
-
- foreach($arr as $k => $v) {
- foreach($v as $a => $b) {
- if ($upper) $a = strtoupper($a);
- $arr2[$a] = $b;
- }
- }
- return $arr2;
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- if ($mask) {//$this->debug=1;
- $save = $this->metaTablesSQL;
- $mask = $this->qstr($mask);
- $this->metaTablesSQL .= " AND name like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- function MetaColumns($table, $normalize=true)
- {
-
- $this->_findschema($table,$schema);
- if ($schema) {
- $dbName = $this->database;
- $this->SelectDB($schema);
- }
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
-
- if ($schema) {
- $this->SelectDB($dbName);
- }
-
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- if (!is_object($rs)) {
- $false = false;
- return $false;
- }
-
- $retarr = array();
- while (!$rs->EOF){
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
-
- $fld->not_null = (!$rs->fields[3]);
- $fld->auto_increment = ($rs->fields[4] == 128); // sys.syscolumns status field. 0x80 = 128 ref: http://msdn.microsoft.com/en-us/library/ms186816.aspx
-
-
- if (isset($rs->fields[5]) && $rs->fields[5]) {
- if ($rs->fields[5]>0) $fld->max_length = $rs->fields[5];
- $fld->scale = $rs->fields[6];
- if ($fld->scale>0) $fld->max_length += 1;
- } else
- $fld->max_length = $rs->fields[2];
-
-
- if ($save == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- } else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
- $rs->MoveNext();
- }
-
- $rs->Close();
- return $retarr;
-
- }
-
-
- function MetaIndexes($table,$primary=false, $owner=false)
- {
- $table = $this->qstr($table);
-
- $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno,
- CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK,
- CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique
- FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id
- INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid
- INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid
- WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table
- ORDER BY O.name, I.Name, K.keyno";
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $rs = $this->Execute($sql);
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return FALSE;
- }
-
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- if (!$primary && $row[5]) continue;
-
- $indexes[$row[0]]['unique'] = $row[6];
- $indexes[$row[0]]['columns'][] = $row[1];
- }
- return $indexes;
- }
-
- function _query($sql,$inputarr=false)
- {
- if (is_string($sql)) $sql = str_replace('||','+',$sql);
- return ADODB_odbc::_query($sql,$inputarr);
- }
-
- function SetTransactionMode( $transaction_mode )
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->Execute("SET TRANSACTION ".$transaction_mode);
- }
-
- // "Stein-Aksel Basma"
- // tested with MSSQL 2000
- function MetaPrimaryKeys($table, $owner = false)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = '';
- $this->_findschema($table,$schema);
- //if (!$schema) $schema = $this->database;
- if ($schema) $schema = "and k.table_catalog like '$schema%'";
-
- $sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k,
- information_schema.table_constraints tc
- where tc.constraint_name = k.constraint_name and tc.constraint_type =
- 'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position ";
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- $a = $this->GetCol($sql);
- $ADODB_FETCH_MODE = $savem;
-
- if ($a && sizeof($a)>0) return $a;
- $false = false;
- return $false;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- if ($nrows > 0 && $offset <= 0) {
- $sql = preg_replace(
- '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql);
- $rs = $this->Execute($sql,$inputarr);
- } else
- $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
-
- return $rs;
- }
-
- // Format date column in sql string given an input format that understands Y M D
- function SQLDate($fmt, $col=false)
- {
- if (!$col) $col = $this->sysTimeStamp;
- $s = '';
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- if ($s) $s .= '+';
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= "datename(yyyy,$col)";
- break;
- case 'M':
- $s .= "convert(char(3),$col,0)";
- break;
- case 'm':
- $s .= "replace(str(month($col),2),' ','0')";
- break;
- case 'Q':
- case 'q':
- $s .= "datename(quarter,$col)";
- break;
- case 'D':
- case 'd':
- $s .= "replace(str(day($col),2),' ','0')";
- break;
- case 'h':
- $s .= "substring(convert(char(14),$col,0),13,2)";
- break;
-
- case 'H':
- $s .= "replace(str(datepart(hh,$col),2),' ','0')";
- break;
-
- case 'i':
- $s .= "replace(str(datepart(mi,$col),2),' ','0')";
- break;
- case 's':
- $s .= "replace(str(datepart(ss,$col),2),' ','0')";
- break;
- case 'a':
- case 'A':
- $s .= "substring(convert(char(19),$col,0),18,2)";
- break;
-
- default:
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- $s .= $this->qstr($ch);
- break;
- }
- }
- return $s;
- }
-
- /**
- * Returns a substring of a varchar type field
- *
- * The SQL server version varies because the length is mandatory, so
- * we append a reasonable string length
- *
- * @param string $fld The field to sub-string
- * @param int $start The start point
- * @param int $length An optional length
- *
- * @return The SQL text
- */
- function substr($fld,$start,$length=0)
- {
- if ($length == 0)
- /*
- * The length available to varchar is 2GB, but that makes no
- * sense in a substring, so I'm going to arbitrarily limit
- * the length to 1K, but you could change it if you want
- */
- $length = 1024;
-
- $text = "SUBSTRING($fld,$start,$length)";
- return $text;
- }
-
- /**
- * Returns the maximum size of a MetaType C field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function charMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Returns the maximum size of a MetaType X field. Because of the
- * database design, SQL Server places no limits on the size of data inserted
- * Although the actual limit is 2^31-1 bytes.
- *
- * @return int
- */
- function textMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- // returns concatenated string
- // MSSQL requires integers to be cast as strings
- // automatically cast every datatype to VARCHAR(255)
- // @author David Rogers (introspectshun)
- function Concat()
- {
- $s = "";
- $arr = func_get_args();
-
- // Split single record on commas, if possible
- if (sizeof($arr) == 1) {
- foreach ($arr as $arg) {
- $args = explode(',', $arg);
- }
- $arr = $args;
- }
-
- array_walk(
- $arr,
- function(&$value, $key) {
- $value = "CAST(" . $value . " AS VARCHAR(255))";
- }
- );
- $s = implode('+',$arr);
- if (sizeof($arr) > 0) return "$s";
-
- return '';
- }
-
-}
-
-class ADORecordSet_odbc_mssql extends ADORecordSet_odbc {
-
- var $databaseType = 'odbc_mssql';
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql2012.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql2012.inc.php
deleted file mode 100644
index 79fa32516..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbc_mssql2012.inc.php
+++ /dev/null
@@ -1,37 +0,0 @@
-Execute($this->metaTablesSQL);
- if ($rs === false) return $false;
- $arr = $rs->GetArray();
- $arr2 = array();
- for ($i=0; $i < sizeof($arr); $i++) {
- $arr2[] = $arr[$i][0];
- }
- $rs->Close();
- return $arr2;
- }
-
- function MetaColumns($table, $normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table)));
- if ($rs === false) {
- $false = false;
- return $false;
- }
- $retarr = array();
- while (!$rs->EOF) { //print_r($rs->fields);
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
-
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
- else $retarr[strtoupper($fld->name)] = $fld;
-
- $rs->MoveNext();
- }
- $rs->Close();
- return $retarr;
- }
-
- // returns true or false
- function _connect($argDSN, $argUsername, $argPassword, $argDatabasename)
- {
- $last_php_error = $this->resetLastError();
- $this->_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC );
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
-
- $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
- //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true);
- return $this->_connectionID != false;
- }
- // returns true or false
- function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename)
- {
- $last_php_error = $this->resetLastError();
- $this->_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,SQL_CUR_USE_ODBC );
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
-
- $this->Execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
- //if ($this->_connectionID) odbc_autocommit($this->_connectionID,true);
- return $this->_connectionID != false;
- }
-}
-
-class ADORecordSet_odbc_oracle extends ADORecordSet_odbc {
-
- var $databaseType = 'odbc_oracle';
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbtp.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbtp.inc.php
deleted file mode 100644
index 41bd0873b..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbtp.inc.php
+++ /dev/null
@@ -1,826 +0,0 @@
-
- */
-
-// security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-define("_ADODB_ODBTP_LAYER", 2 );
-
-class ADODB_odbtp extends ADOConnection{
- var $databaseType = "odbtp";
- var $dataProvider = "odbtp";
- var $fmtDate = "'Y-m-d'";
- var $fmtTimeStamp = "'Y-m-d, h:i:sA'";
- var $replaceQuote = "''"; // string to use to replace quotes
- var $odbc_driver = 0;
- var $hasAffectedRows = true;
- var $hasInsertID = false;
- var $hasGenID = true;
- var $hasMoveFirst = true;
-
- var $_genSeqSQL = "create table %s (seq_name char(30) not null unique , seq_value integer not null)";
- var $_dropSeqSQL = "delete from adodb_seq where seq_name = '%s'";
- var $_bindInputArray = false;
- var $_useUnicodeSQL = false;
- var $_canPrepareSP = false;
- var $_dontPoolDBC = true;
-
- function ServerInfo()
- {
- return array('description' => @odbtp_get_attr( ODB_ATTR_DBMSNAME, $this->_connectionID),
- 'version' => @odbtp_get_attr( ODB_ATTR_DBMSVER, $this->_connectionID));
- }
-
- function ErrorMsg()
- {
- if ($this->_errorMsg !== false) return $this->_errorMsg;
- if (empty($this->_connectionID)) return @odbtp_last_error();
- return @odbtp_last_error($this->_connectionID);
- }
-
- function ErrorNo()
- {
- if ($this->_errorCode !== false) return $this->_errorCode;
- if (empty($this->_connectionID)) return @odbtp_last_error_state();
- return @odbtp_last_error_state($this->_connectionID);
- }
-/*
- function DBDate($d,$isfld=false)
- {
- if (empty($d) && $d !== 0) return 'null';
- if ($isfld) return "convert(date, $d, 120)";
-
- if (is_string($d)) $d = ADORecordSet::UnixDate($d);
- $d = adodb_date($this->fmtDate,$d);
- return "convert(date, $d, 120)";
- }
-
- function DBTimeStamp($d,$isfld=false)
- {
- if (empty($d) && $d !== 0) return 'null';
- if ($isfld) return "convert(datetime, $d, 120)";
-
- if (is_string($d)) $d = ADORecordSet::UnixDate($d);
- $d = adodb_date($this->fmtDate,$d);
- return "convert(datetime, $d, 120)";
- }
-*/
-
- protected function _insertID($table = '', $column = '')
- {
- // SCOPE_IDENTITY()
- // Returns the last IDENTITY value inserted into an IDENTITY column in
- // the same scope. A scope is a module -- a stored procedure, trigger,
- // function, or batch. Thus, two statements are in the same scope if
- // they are in the same stored procedure, function, or batch.
- return $this->GetOne($this->identitySQL);
- }
-
- function _affectedrows()
- {
- if ($this->_queryID) {
- return @odbtp_affected_rows ($this->_queryID);
- } else
- return 0;
- }
-
- function CreateSequence($seqname='adodbseq',$start=1)
- {
- //verify existence
- $num = $this->GetOne("select seq_value from adodb_seq");
- $seqtab='adodb_seq';
- if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) {
- $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID );
- //if using vfp dbc file
- if( !strcasecmp(strrchr($path, '.'), '.dbc') )
- $path = substr($path,0,strrpos($path,'\/'));
- $seqtab = $path . '/' . $seqtab;
- }
- if($num == false) {
- if (empty($this->_genSeqSQL)) return false;
- $ok = $this->Execute(sprintf($this->_genSeqSQL ,$seqtab));
- }
- $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seqname'");
- if ($num) {
- return false;
- }
- $start -= 1;
- return $this->Execute("insert into adodb_seq values('$seqname',$start)");
- }
-
- function DropSequence($seqname = 'adodbseq')
- {
- if (empty($this->_dropSeqSQL)) return false;
- return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
- }
-
- function GenID($seq='adodbseq',$start=1)
- {
- $seqtab='adodb_seq';
- if( $this->odbc_driver == ODB_DRIVER_FOXPRO) {
- $path = @odbtp_get_attr( ODB_ATTR_DATABASENAME, $this->_connectionID );
- //if using vfp dbc file
- if( !strcasecmp(strrchr($path, '.'), '.dbc') )
- $path = substr($path,0,strrpos($path,'\/'));
- $seqtab = $path . '/' . $seqtab;
- }
- $MAXLOOPS = 100;
- while (--$MAXLOOPS>=0) {
- $num = $this->GetOne("select seq_value from adodb_seq where seq_name='$seq'");
- if ($num === false) {
- //verify if abodb_seq table exist
- $ok = $this->GetOne("select seq_value from adodb_seq ");
- if(!$ok) {
- //creating the sequence table adodb_seq
- $this->Execute(sprintf($this->_genSeqSQL ,$seqtab));
- }
- $start -= 1;
- $num = '0';
- $ok = $this->Execute("insert into adodb_seq values('$seq',$start)");
- if (!$ok) return false;
- }
- $ok = $this->Execute("update adodb_seq set seq_value=seq_value+1 where seq_name='$seq'");
- if($ok) {
- $num += 1;
- $this->genID = $num;
- return $num;
- }
- }
- if ($fn = $this->raiseErrorFn) {
- $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
- }
- return false;
- }
-
- //example for $UserOrDSN
- //for visual fox : DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBF;SOURCEDB=c:\YourDbfFileDir;EXCLUSIVE=NO;
- //for visual fox dbc: DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=DBC;SOURCEDB=c:\YourDbcFileDir\mydb.dbc;EXCLUSIVE=NO;
- //for access : DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\path_to_access_db\base_test.mdb;UID=root;PWD=;
- //for mssql : DRIVER={SQL Server};SERVER=myserver;UID=myuid;PWD=mypwd;DATABASE=OdbtpTest;
- //if uid & pwd can be separate
- function _connect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='')
- {
- if ($argPassword && stripos($UserOrDSN,'DRIVER=') !== false) {
- $this->_connectionID = odbtp_connect($HostOrInterface,$UserOrDSN.';PWD='.$argPassword);
- } else
- $this->_connectionID = odbtp_connect($HostOrInterface,$UserOrDSN,$argPassword,$argDatabase);
- if ($this->_connectionID === false) {
- $this->_errorMsg = $this->ErrorMsg() ;
- return false;
- }
-
- odbtp_convert_datetime($this->_connectionID,true);
-
- if ($this->_dontPoolDBC) {
- if (function_exists('odbtp_dont_pool_dbc'))
- @odbtp_dont_pool_dbc($this->_connectionID);
- }
- else {
- $this->_dontPoolDBC = true;
- }
- $this->odbc_driver = @odbtp_get_attr(ODB_ATTR_DRIVER, $this->_connectionID);
- $dbms = strtolower(@odbtp_get_attr(ODB_ATTR_DBMSNAME, $this->_connectionID));
- $this->odbc_name = $dbms;
-
- // Account for inconsistent DBMS names
- if( $this->odbc_driver == ODB_DRIVER_ORACLE )
- $dbms = 'oracle';
- else if( $this->odbc_driver == ODB_DRIVER_SYBASE )
- $dbms = 'sybase';
-
- // Set DBMS specific attributes
- switch( $dbms ) {
- case 'microsoft sql server':
- $this->databaseType = 'odbtp_mssql';
- $this->fmtDate = "'Y-m-d'";
- $this->fmtTimeStamp = "'Y-m-d h:i:sA'";
- $this->sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';
- $this->sysTimeStamp = 'GetDate()';
- $this->ansiOuter = true;
- $this->leftOuter = '*=';
- $this->rightOuter = '=*';
- $this->hasTop = 'top';
- $this->hasInsertID = true;
- $this->hasTransactions = true;
- $this->_bindInputArray = true;
- $this->_canSelectDb = true;
- $this->substr = "substring";
- $this->length = 'len';
- $this->identitySQL = 'select SCOPE_IDENTITY()';
- $this->metaDatabasesSQL = "select name from master..sysdatabases where name <> 'master'";
- $this->_canPrepareSP = true;
- break;
- case 'access':
- $this->databaseType = 'odbtp_access';
- $this->fmtDate = "#Y-m-d#";
- $this->fmtTimeStamp = "#Y-m-d h:i:sA#";
- $this->sysDate = "FORMAT(NOW,'yyyy-mm-dd')";
- $this->sysTimeStamp = 'NOW';
- $this->hasTop = 'top';
- $this->hasTransactions = false;
- $this->_canPrepareSP = true; // For MS Access only.
- break;
- case 'visual foxpro':
- $this->databaseType = 'odbtp_vfp';
- $this->fmtDate = "{^Y-m-d}";
- $this->fmtTimeStamp = "{^Y-m-d, h:i:sA}";
- $this->sysDate = 'date()';
- $this->sysTimeStamp = 'datetime()';
- $this->ansiOuter = true;
- $this->hasTop = 'top';
- $this->hasTransactions = false;
- $this->replaceQuote = "'+chr(39)+'";
- $this->true = '.T.';
- $this->false = '.F.';
-
- break;
- case 'oracle':
- $this->databaseType = 'odbtp_oci8';
- $this->fmtDate = "'Y-m-d 00:00:00'";
- $this->fmtTimeStamp = "'Y-m-d h:i:sA'";
- $this->sysDate = 'TRUNC(SYSDATE)';
- $this->sysTimeStamp = 'SYSDATE';
- $this->hasTransactions = true;
- $this->_bindInputArray = true;
- $this->concat_operator = '||';
- break;
- case 'sybase':
- $this->databaseType = 'odbtp_sybase';
- $this->fmtDate = "'Y-m-d'";
- $this->fmtTimeStamp = "'Y-m-d H:i:s'";
- $this->sysDate = 'GetDate()';
- $this->sysTimeStamp = 'GetDate()';
- $this->leftOuter = '*=';
- $this->rightOuter = '=*';
- $this->hasInsertID = true;
- $this->hasTransactions = true;
- $this->identitySQL = 'select SCOPE_IDENTITY()';
- break;
- default:
- $this->databaseType = 'odbtp';
- if( @odbtp_get_attr(ODB_ATTR_TXNCAPABLE, $this->_connectionID) )
- $this->hasTransactions = true;
- else
- $this->hasTransactions = false;
- }
- @odbtp_set_attr(ODB_ATTR_FULLCOLINFO, TRUE, $this->_connectionID );
-
- if ($this->_useUnicodeSQL )
- @odbtp_set_attr(ODB_ATTR_UNICODESQL, TRUE, $this->_connectionID);
-
- return true;
- }
-
- function _pconnect($HostOrInterface, $UserOrDSN='', $argPassword='', $argDatabase='')
- {
- $this->_dontPoolDBC = false;
- return $this->_connect($HostOrInterface, $UserOrDSN, $argPassword, $argDatabase);
- }
-
- function SelectDB($dbName)
- {
- if (!@odbtp_select_db($dbName, $this->_connectionID)) {
- return false;
- }
- $this->database = $dbName;
- $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
- return true;
- }
-
- function MetaTables($ttype='',$showSchema=false,$mask=false)
- {
- global $ADODB_FETCH_MODE;
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false);
-
- $arr = $this->GetArray("||SQLTables||||$ttype");
-
- if (isset($savefm)) $this->SetFetchMode($savefm);
- $ADODB_FETCH_MODE = $savem;
-
- $arr2 = array();
- for ($i=0; $i < sizeof($arr); $i++) {
- if ($arr[$i][3] == 'SYSTEM TABLE' ) continue;
- if ($arr[$i][2])
- $arr2[] = $showSchema && $arr[$i][1]? $arr[$i][1].'.'.$arr[$i][2] : $arr[$i][2];
- }
- return $arr2;
- }
-
- function MetaColumns($table,$upper=true)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = false;
- $this->_findschema($table,$schema);
- if ($upper) $table = strtoupper($table);
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savefm = $this->SetFetchMode(false);
-
- $rs = $this->Execute( "||SQLColumns||$schema|$table" );
-
- if (isset($savefm)) $this->SetFetchMode($savefm);
- $ADODB_FETCH_MODE = $savem;
-
- if (!$rs || $rs->EOF) {
- $false = false;
- return $false;
- }
- $retarr = array();
- while (!$rs->EOF) {
- //print_r($rs->fields);
- if (strtoupper($rs->fields[2]) == $table) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[3];
- $fld->type = $rs->fields[5];
- $fld->max_length = $rs->fields[6];
- $fld->not_null = !empty($rs->fields[9]);
- $fld->scale = $rs->fields[7];
- if (isset($rs->fields[12])) // vfp does not have field 12
- if (!is_null($rs->fields[12])) {
- $fld->has_default = true;
- $fld->default_value = $rs->fields[12];
- }
- $retarr[strtoupper($fld->name)] = $fld;
- } else if (!empty($retarr))
- break;
- $rs->MoveNext();
- }
- $rs->Close();
-
- return $retarr;
- }
-
- function MetaPrimaryKeys($table, $owner='')
- {
- global $ADODB_FETCH_MODE;
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $arr = $this->GetArray("||SQLPrimaryKeys||$owner|$table");
- $ADODB_FETCH_MODE = $savem;
-
- //print_r($arr);
- $arr2 = array();
- for ($i=0; $i < sizeof($arr); $i++) {
- if ($arr[$i][3]) $arr2[] = $arr[$i][3];
- }
- return $arr2;
- }
-
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
-
- $savem = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $constraints = $this->GetArray("||SQLForeignKeys|||||$owner|$table");
- $ADODB_FETCH_MODE = $savem;
-
- $arr = false;
- foreach($constraints as $constr) {
- //print_r($constr);
- $arr[$constr[11]][$constr[2]][] = $constr[7].'='.$constr[3];
- }
- if (!$arr) {
- $false = false;
- return $false;
- }
-
- $arr2 = array();
-
- foreach($arr as $k => $v) {
- foreach($v as $a => $b) {
- if ($upper) $a = strtoupper($a);
- $arr2[$a] = $b;
- }
- }
- return $arr2;
- }
-
- function BeginTrans()
- {
- if (!$this->hasTransactions) return false;
- if ($this->transOff) return true;
- $this->transCnt += 1;
- $this->autoCommit = false;
- if (defined('ODB_TXN_DEFAULT'))
- $txn = ODB_TXN_DEFAULT;
- else
- $txn = ODB_TXN_READUNCOMMITTED;
- $rs = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS,$txn,$this->_connectionID);
- if(!$rs) return false;
- return true;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) return true;
- if (!$ok) return $this->RollbackTrans();
- if ($this->transCnt) $this->transCnt -= 1;
- $this->autoCommit = true;
- if( ($ret = @odbtp_commit($this->_connectionID)) )
- $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off
- return $ret;
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- if ($this->transCnt) $this->transCnt -= 1;
- $this->autoCommit = true;
- if( ($ret = @odbtp_rollback($this->_connectionID)) )
- $ret = @odbtp_set_attr(ODB_ATTR_TRANSACTIONS, ODB_TXN_NONE, $this->_connectionID);//set transaction off
- return $ret;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
- {
- // TOP requires ORDER BY for Visual FoxPro
- if( $this->odbc_driver == ODB_DRIVER_FOXPRO ) {
- if (!preg_match('/ORDER[ \t\r\n]+BY/is',$sql)) $sql .= ' ORDER BY 1';
- }
- $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- return $ret;
- }
-
- function Prepare($sql)
- {
- if (! $this->_bindInputArray) return $sql; // no binding
-
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- $stmt = @odbtp_prepare($sql,$this->_connectionID);
- if (!$stmt) {
- // print "Prepare Error for ($sql) ".$this->ErrorMsg()."
";
- return $sql;
- }
- return array($sql,$stmt,false);
- }
-
- function PrepareSP($sql, $param = true)
- {
- if (!$this->_canPrepareSP) return $sql; // Can't prepare procedures
-
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- $stmt = @odbtp_prepare_proc($sql,$this->_connectionID);
- if (!$stmt) return false;
- return array($sql,$stmt);
- }
-
- /*
- Usage:
- $stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group
-
- # note that the parameter does not have @ in front!
- $db->Parameter($stmt,$id,'myid');
- $db->Parameter($stmt,$group,'group',false,64);
- $db->Parameter($stmt,$group,'photo',false,100000,ODB_BINARY);
- $db->Execute($stmt);
-
- @param $stmt Statement returned by Prepare() or PrepareSP().
- @param $var PHP variable to bind to. Can set to null (for isNull support).
- @param $name Name of stored procedure variable name to bind to.
- @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in odbtp.
- @param [$maxLen] Holds an maximum length of the variable.
- @param [$type] The data type of $var. Legal values depend on driver.
-
- See odbtp_attach_param documentation at http://odbtp.sourceforge.net.
- */
- function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=0, $type=0)
- {
- if ( $this->odbc_driver == ODB_DRIVER_JET ) {
- $name = '['.$name.']';
- if( !$type && $this->_useUnicodeSQL
- && @odbtp_param_bindtype($stmt[1], $name) == ODB_CHAR )
- {
- $type = ODB_WCHAR;
- }
- }
- else {
- $name = '@'.$name;
- }
- return @odbtp_attach_param($stmt[1], $name, $var, $type, $maxLen);
- }
-
- /*
- Insert a null into the blob field of the table first.
- Then use UpdateBlob to store the blob.
-
- Usage:
-
- $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');
- $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
- */
-
- function UpdateBlob($table,$column,$val,$where,$blobtype='image')
- {
- $sql = "UPDATE $table SET $column = ? WHERE $where";
- if( !($stmt = @odbtp_prepare($sql, $this->_connectionID)) )
- return false;
- if( !@odbtp_input( $stmt, 1, ODB_BINARY, 1000000, $blobtype ) )
- return false;
- if( !@odbtp_set( $stmt, 1, $val ) )
- return false;
- return @odbtp_execute( $stmt ) != false;
- }
-
- function MetaIndexes($table,$primary=false, $owner=false)
- {
- switch ( $this->odbc_driver) {
- case ODB_DRIVER_MSSQL:
- return $this->MetaIndexes_mssql($table, $primary);
- default:
- return array();
- }
- }
-
- function MetaIndexes_mssql($table,$primary=false, $owner = false)
- {
- $table = strtolower($this->qstr($table));
-
- $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno,
- CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK,
- CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique
- FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id
- INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid
- INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid
- WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND lower(O.Name) = $table
- ORDER BY O.name, I.Name, K.keyno";
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $rs = $this->Execute($sql);
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return FALSE;
- }
-
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- if ($primary && !$row[5]) continue;
-
- $indexes[$row[0]]['unique'] = $row[6];
- $indexes[$row[0]]['columns'][] = $row[1];
- }
- return $indexes;
- }
-
- function IfNull( $field, $ifNull )
- {
- switch( $this->odbc_driver ) {
- case ODB_DRIVER_MSSQL:
- return " ISNULL($field, $ifNull) ";
- case ODB_DRIVER_JET:
- return " IIF(IsNull($field), $ifNull, $field) ";
- }
- return " CASE WHEN $field is null THEN $ifNull ELSE $field END ";
- }
-
- function _query($sql,$inputarr=false)
- {
- $last_php_error = $this->resetLastError();
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- if ($inputarr) {
- if (is_array($sql)) {
- $stmtid = $sql[1];
- } else {
- $stmtid = @odbtp_prepare($sql,$this->_connectionID);
- if ($stmtid == false) {
- $this->_errorMsg = $this->getChangedErrorMsg($last_php_error);
- return false;
- }
- }
- $num_params = @odbtp_num_params( $stmtid );
- /*
- for( $param = 1; $param <= $num_params; $param++ ) {
- @odbtp_input( $stmtid, $param );
- @odbtp_set( $stmtid, $param, $inputarr[$param-1] );
- }*/
-
- $param = 1;
- foreach($inputarr as $v) {
- @odbtp_input( $stmtid, $param );
- @odbtp_set( $stmtid, $param, $v );
- $param += 1;
- if ($param > $num_params) break;
- }
-
- if (!@odbtp_execute($stmtid) ) {
- return false;
- }
- } else if (is_array($sql)) {
- $stmtid = $sql[1];
- if (!@odbtp_execute($stmtid)) {
- return false;
- }
- } else {
- $stmtid = odbtp_query($sql,$this->_connectionID);
- }
- $this->_lastAffectedRows = 0;
- if ($stmtid) {
- $this->_lastAffectedRows = @odbtp_affected_rows($stmtid);
- }
- return $stmtid;
- }
-
- function _close()
- {
- $ret = @odbtp_close($this->_connectionID);
- $this->_connectionID = false;
- return $ret;
- }
-}
-
-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()
- {
- $this->_numOfFields = @odbtp_num_fields($this->_queryID);
- if (!($this->_numOfRows = @odbtp_num_rows($this->_queryID)))
- $this->_numOfRows = -1;
-
- if (!$this->connection->_useUnicodeSQL) return;
-
- if ($this->connection->odbc_driver == ODB_DRIVER_JET) {
- if (!@odbtp_get_attr(ODB_ATTR_MAPCHARTOWCHAR,
- $this->connection->_connectionID))
- {
- for ($f = 0; $f < $this->_numOfFields; $f++) {
- if (@odbtp_field_bindtype($this->_queryID, $f) == ODB_CHAR)
- @odbtp_bind_field($this->_queryID, $f, ODB_WCHAR);
- }
- }
- }
- }
-
- function FetchField($fieldOffset = 0)
- {
- $off=$fieldOffset; // offsets begin at 0
- $o= new ADOFieldObject();
- $o->name = @odbtp_field_name($this->_queryID,$off);
- $o->type = @odbtp_field_type($this->_queryID,$off);
- $o->max_length = @odbtp_field_length($this->_queryID,$off);
- if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name);
- else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name);
- return $o;
- }
-
- function _seek($row)
- {
- return @odbtp_data_seek($this->_queryID, $row);
- }
-
- function fields($colname)
- {
- if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname];
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $name = @odbtp_field_name( $this->_queryID, $i );
- $this->bind[strtoupper($name)] = $i;
- }
- }
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- function _fetch_odbtp($type=0)
- {
- switch ($this->fetchMode) {
- case ADODB_FETCH_NUM:
- $this->fields = @odbtp_fetch_row($this->_queryID, $type);
- break;
- case ADODB_FETCH_ASSOC:
- $this->fields = @odbtp_fetch_assoc($this->_queryID, $type);
- break;
- default:
- $this->fields = @odbtp_fetch_array($this->_queryID, $type);
- }
- if ($this->databaseType = 'odbtp_vfp') {
- if ($this->fields)
- foreach($this->fields as $k => $v) {
- if (strncmp($v,'1899-12-30',10) == 0) $this->fields[$k] = '';
- }
- }
- return is_array($this->fields);
- }
-
- function _fetch()
- {
- return $this->_fetch_odbtp();
- }
-
- function MoveFirst()
- {
- if (!$this->_fetch_odbtp(ODB_FETCH_FIRST)) return false;
- $this->EOF = false;
- $this->_currentRow = 0;
- return true;
- }
-
- function MoveLast()
- {
- if (!$this->_fetch_odbtp(ODB_FETCH_LAST)) return false;
- $this->EOF = false;
- $this->_currentRow = $this->_numOfRows - 1;
- return true;
- }
-
- function NextRecordSet()
- {
- if (!@odbtp_next_result($this->_queryID)) return false;
- $this->_inited = false;
- $this->bind = false;
- $this->_currentRow = -1;
- $this->Init();
- return true;
- }
-
- function _close()
- {
- return @odbtp_free_query($this->_queryID);
- }
-}
-
-class ADORecordSet_odbtp_mssql extends ADORecordSet_odbtp {
-
- var $databaseType = 'odbtp_mssql';
-
-}
-
-class ADORecordSet_odbtp_access extends ADORecordSet_odbtp {
-
- var $databaseType = 'odbtp_access';
-
-}
-
-class ADORecordSet_odbtp_vfp extends ADORecordSet_odbtp {
-
- var $databaseType = 'odbtp_vfp';
-
-}
-
-class ADORecordSet_odbtp_oci8 extends ADORecordSet_odbtp {
-
- var $databaseType = 'odbtp_oci8';
-
-}
-
-class ADORecordSet_odbtp_sybase extends ADORecordSet_odbtp {
-
- var $databaseType = 'odbtp_sybase';
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-odbtp_unicode.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-odbtp_unicode.inc.php
deleted file mode 100644
index 190c3ab5e..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-odbtp_unicode.inc.php
+++ /dev/null
@@ -1,41 +0,0 @@
-
- * Also, all SQL query strings must be submitted as UTF-8 encoded text.
- *
- * This file is part of ADOdb, a Database Abstraction Layer library for PHP.
- *
- * @package ADOdb
- * @link https://adodb.org Project's web site and documentation
- * @link https://github.com/ADOdb/ADOdb Source code and issue tracker
- *
- * The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
- * and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
- * any later version. This means you can use it in proprietary products.
- * See the LICENSE.md file distributed with this source code for details.
- * @license BSD-3-Clause
- * @license LGPL-2.1-or-later
- *
- * @copyright 2000-2013 John Lim
- * @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
- * @author Robert Twitty
- */
-
-// security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-if (!defined('_ADODB_ODBTP_LAYER')) {
- include_once(ADODB_DIR."/drivers/adodb-odbtp.inc.php");
-}
-
-class ADODB_odbtp_unicode extends ADODB_odbtp {
- var $databaseType = 'odbtp';
- var $_useUnicodeSQL = true;
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-oracle.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-oracle.inc.php
deleted file mode 100644
index 1a2735b14..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-oracle.inc.php
+++ /dev/null
@@ -1,346 +0,0 @@
-format($this->fmtDate);
- else $ds = adodb_date($this->fmtDate,$d);
- return 'TO_DATE('.$ds.",'YYYY-MM-DD')";
- }
-
- // format and return date string in database timestamp format
- function DBTimeStamp($ts, $isfld = false)
- {
-
- if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts);
- if (is_object($ts)) $ds = $ts->format($this->fmtDate);
- else $ds = adodb_date($this->fmtTimeStamp,$ts);
- return 'TO_DATE('.$ds.",'RRRR-MM-DD, HH:MI:SS AM')";
- }
-
-
- function BindDate($d)
- {
- $d = ADOConnection::DBDate($d);
- if (strncmp($d,"'",1)) return $d;
-
- return substr($d,1,strlen($d)-2);
- }
-
- function BindTimeStamp($d)
- {
- $d = ADOConnection::DBTimeStamp($d);
- if (strncmp($d,"'",1)) return $d;
-
- return substr($d,1,strlen($d)-2);
- }
-
-
-
- function BeginTrans()
- {
- $this->autoCommit = false;
- ora_commitoff($this->_connectionID);
- return true;
- }
-
-
- function CommitTrans($ok=true)
- {
- if (!$ok) return $this->RollbackTrans();
- $ret = ora_commit($this->_connectionID);
- ora_commiton($this->_connectionID);
- return $ret;
- }
-
-
- function RollbackTrans()
- {
- $ret = ora_rollback($this->_connectionID);
- ora_commiton($this->_connectionID);
- return $ret;
- }
-
-
- /* there seems to be a bug in the oracle extension -- always returns ORA-00000 - no error */
- function ErrorMsg()
- {
- if ($this->_errorMsg !== false) return $this->_errorMsg;
-
- if (is_resource($this->_curs)) $this->_errorMsg = @ora_error($this->_curs);
- if (empty($this->_errorMsg)) $this->_errorMsg = @ora_error($this->_connectionID);
- return $this->_errorMsg;
- }
-
-
- function ErrorNo()
- {
- if ($this->_errorCode !== false) return $this->_errorCode;
-
- if (is_resource($this->_curs)) $this->_errorCode = @ora_errorcode($this->_curs);
- if (empty($this->_errorCode)) $this->_errorCode = @ora_errorcode($this->_connectionID);
- return $this->_errorCode;
- }
-
-
-
- // returns true or false
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename, $mode=0)
- {
- if (!function_exists('ora_plogon')) return null;
-
- // Reset error messages before connecting
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- // G. Giunta 2003/08/13 - This looks danegrously suspicious: why should we want to set
- // the oracle home to the host name of remote DB?
-// if ($argHostname) putenv("ORACLE_HOME=$argHostname");
-
- if($argHostname) { // code copied from version submitted for oci8 by Jorma Tuomainen
- if (empty($argDatabasename)) $argDatabasename = $argHostname;
- else {
- if(strpos($argHostname,":")) {
- $argHostinfo=explode(":",$argHostname);
- $argHostname=$argHostinfo[0];
- $argHostport=$argHostinfo[1];
- } else {
- $argHostport="1521";
- }
-
-
- if ($this->connectSID) {
- $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname
- .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))";
- } else
- $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname
- .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))";
- }
-
- }
-
- if ($argDatabasename) $argUsername .= "@$argDatabasename";
-
- //if ($argHostname) print "Connect: 1st argument should be left blank for $this->databaseType
";
- if ($mode == 1)
- $this->_connectionID = ora_plogon($argUsername,$argPassword);
- else
- $this->_connectionID = ora_logon($argUsername,$argPassword);
- if ($this->_connectionID === false) return false;
- if ($this->autoCommit) ora_commiton($this->_connectionID);
- if ($this->_initdate) {
- $rs = $this->_query("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'");
- if ($rs) ora_close($rs);
- }
-
- return true;
- }
-
-
- // returns true or false
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, 1);
- }
-
-
- // returns query ID if successful, otherwise false
- function _query($sql,$inputarr=false)
- {
- // Reset error messages before executing
- $this->_errorMsg = false;
- $this->_errorCode = false;
-
- $curs = ora_open($this->_connectionID);
-
- if ($curs === false) return false;
- $this->_curs = $curs;
- if (!ora_parse($curs,$sql)) return false;
- if (ora_exec($curs)) return $curs;
- // before we close the cursor, we have to store the error message
- // that we can obtain ONLY from the cursor (and not from the connection)
- $this->_errorCode = @ora_errorcode($curs);
- $this->_errorMsg = @ora_error($curs);
- //
- @ora_close($curs);
- return false;
- }
-
-
- // returns true or false
- function _close()
- {
- return @ora_logoff($this->_connectionID);
- }
-
-
-
-}
-
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_oracle extends ADORecordSet {
-
- var $databaseType = "oracle";
- var $bind = false;
-
- function __construct($queryID,$mode=false)
- {
-
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- $this->fetchMode = $mode;
-
- $this->_queryID = $queryID;
-
- $this->_inited = true;
- $this->fields = array();
- if ($queryID) {
- $this->_currentRow = 0;
- $this->EOF = !$this->_fetch();
- @$this->_initrs();
- } else {
- $this->_numOfRows = 0;
- $this->_numOfFields = 0;
- $this->EOF = true;
- }
-
- return $this->_queryID;
- }
-
-
-
- /* Returns: an object containing field information.
- Get column information in the Recordset object. fetchField() can be used in order to obtain information about
- fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by
- fetchField() is retrieved. */
-
- function FetchField($fieldOffset = -1)
- {
- $fld = new ADOFieldObject;
- $fld->name = ora_columnname($this->_queryID, $fieldOffset);
- $fld->type = ora_columntype($this->_queryID, $fieldOffset);
- $fld->max_length = ora_columnsize($this->_queryID, $fieldOffset);
- return $fld;
- }
-
- /* Use associative array to get fields array */
- function Fields($colname)
- {
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- function _initrs()
- {
- $this->_numOfRows = -1;
- $this->_numOfFields = @ora_numcols($this->_queryID);
- }
-
-
- function _seek($row)
- {
- return false;
- }
-
- function _fetch($ignore_fields=false) {
-// should remove call by reference, but ora_fetch_into requires it in 4.0.3pl1
- if ($this->fetchMode & ADODB_FETCH_ASSOC)
- return @ora_fetch_into($this->_queryID,$this->fields,ORA_FETCHINTO_NULLS|ORA_FETCHINTO_ASSOC);
- else
- return @ora_fetch_into($this->_queryID,$this->fields,ORA_FETCHINTO_NULLS);
- }
-
- /* close() only needs to be called if you are worried about using too much memory while your script
- is running. All associated result memory for the specified result identifier will automatically be freed. */
-
- function _close()
-{
- return @ora_close($this->_queryID);
- }
-
- function MetaType($t, $len = -1, $fieldobj = false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- switch (strtoupper($t)) {
- case 'VARCHAR':
- case 'VARCHAR2':
- case 'CHAR':
- case 'VARBINARY':
- case 'BINARY':
- if ($len <= $this->blobSize) return 'C';
- case 'LONG':
- case 'LONG VARCHAR':
- case 'CLOB':
- return 'X';
- case 'LONG RAW':
- case 'LONG VARBINARY':
- case 'BLOB':
- return 'B';
-
- case 'DATE': return 'D';
-
- //case 'T': return 'T';
-
- case 'BIT': return 'L';
- case 'INT':
- case 'SMALLINT':
- case 'INTEGER': return 'I';
- default: return 'N';
- }
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo.inc.php
deleted file mode 100644
index e0e6c7297..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo.inc.php
+++ /dev/null
@@ -1,922 +0,0 @@
-pdoOptions = [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION];
- */
- public $pdoParameters = array();
-
- function _UpdatePDO()
- {
- $d = $this->_driver;
- $this->fmtDate = $d->fmtDate;
- $this->fmtTimeStamp = $d->fmtTimeStamp;
- $this->replaceQuote = $d->replaceQuote;
- $this->sysDate = $d->sysDate;
- $this->sysTimeStamp = $d->sysTimeStamp;
- $this->random = $d->random;
- $this->concat_operator = $d->concat_operator;
- $this->nameQuote = $d->nameQuote;
- $this->arrayClass = $d->arrayClass;
-
- $this->hasGenID = $d->hasGenID;
- $this->_genIDSQL = $d->_genIDSQL;
- $this->_genSeqSQL = $d->_genSeqSQL;
- $this->_dropSeqSQL = $d->_dropSeqSQL;
-
- $d->_init($this);
- }
-
- function Time()
- {
- if (!empty($this->_driver->_hasdual)) {
- $sql = "select $this->sysTimeStamp from dual";
- }
- else {
- $sql = "select $this->sysTimeStamp";
- }
-
- $rs = $this->_Execute($sql);
- if ($rs && !$rs->EOF) {
- return $this->UnixTimeStamp(reset($rs->fields));
- }
-
- return false;
- }
-
- // returns true or false
- function _connect($argDSN, $argUsername, $argPassword, $argDatabasename, $persist=false)
- {
- $at = strpos($argDSN,':');
- $this->dsnType = substr($argDSN,0,$at);
-
- if ($argDatabasename) {
- switch($this->dsnType){
- case 'sqlsrv':
- $argDSN .= ';database='.$argDatabasename;
- break;
- case 'mssql':
- case 'mysql':
- case 'oci':
- case 'pgsql':
- case 'sqlite':
- case 'firebird':
- default:
- $argDSN .= ';dbname='.$argDatabasename;
- }
- }
- /*
- * Configure for persistent connection if required,
- * by adding the the pdo parameter into any provided
- * ones
- */
- if ($persist) {
- $this->pdoParameters[\PDO::ATTR_PERSISTENT] = true;
- }
-
- try {
- $this->_connectionID = new \PDO($argDSN, $argUsername, $argPassword, $this->pdoParameters);
- } catch (Exception $e) {
- $this->_connectionID = false;
- $this->_errorno = -1;
- //var_dump($e);
- $this->_errormsg = 'Connection attempt failed: '.$e->getMessage();
- return false;
- }
-
- if ($this->_connectionID) {
- switch(ADODB_ASSOC_CASE){
- case ADODB_ASSOC_CASE_LOWER:
- $m = PDO::CASE_LOWER;
- break;
- case ADODB_ASSOC_CASE_UPPER:
- $m = PDO::CASE_UPPER;
- break;
- default:
- case ADODB_ASSOC_CASE_NATIVE:
- $m = PDO::CASE_NATURAL;
- break;
- }
-
- //$this->_connectionID->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT );
- $this->_connectionID->setAttribute(PDO::ATTR_CASE,$m);
-
- // Now merge in any provided attributes for PDO
- foreach ($this->connectionParameters as $options) {
- foreach($options as $k=>$v) {
- if ($this->debug) {
- ADOconnection::outp('Setting attribute: ' . $k . ' to ' . $v);
- }
- $this->_connectionID->setAttribute($k,$v);
- }
- }
-
- $class = 'ADODB_pdo_'.$this->dsnType;
- //$this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,true);
- switch($this->dsnType) {
- case 'mssql':
- case 'mysql':
- case 'oci':
- case 'pgsql':
- case 'sqlite':
- case 'sqlsrv':
- case 'firebird':
- case 'dblib':
- include_once(ADODB_DIR.'/drivers/adodb-pdo_'.$this->dsnType.'.inc.php');
- break;
- }
- if (class_exists($class)) {
- $this->_driver = new $class();
- }
- else {
- $this->_driver = new ADODB_pdo_base();
- }
-
- $this->_driver->_connectionID = $this->_connectionID;
- $this->_UpdatePDO();
- $this->_driver->database = $this->database;
- return true;
- }
- $this->_driver = new ADODB_pdo_base();
- return false;
- }
-
- function Concat()
- {
- $args = func_get_args();
- if(method_exists($this->_driver, 'Concat')) {
- return call_user_func_array(array($this->_driver, 'Concat'), $args);
- }
-
- return call_user_func_array('parent::Concat', $args);
- }
-
- /**
- * Triggers a driver-specific request for a bind parameter
- *
- * @param string $name
- * @param string $type
- *
- * @return string
- */
- public function param($name,$type='C') {
-
- $args = func_get_args();
- if(method_exists($this->_driver, 'param')) {
- // Return the driver specific entry, that mimics the native driver
- return call_user_func_array(array($this->_driver, 'param'), $args);
- }
-
- // No driver specific method defined, use mysql format '?'
- return call_user_func_array('parent::param', $args);
- }
-
- // returns true or false
- function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename)
- {
- return $this->_connect($argDSN, $argUsername, $argPassword, $argDatabasename, true);
- }
-
- /*------------------------------------------------------------------------------*/
-
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $save = $this->_driver->fetchMode;
- $this->_driver->fetchMode = $this->fetchMode;
- $this->_driver->debug = $this->debug;
- $ret = $this->_driver->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- $this->_driver->fetchMode = $save;
- return $ret;
- }
-
-
- function ServerInfo()
- {
- return $this->_driver->ServerInfo();
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- return $this->_driver->MetaTables($ttype,$showSchema,$mask);
- }
-
- function MetaColumns($table,$normalize=true)
- {
- return $this->_driver->MetaColumns($table,$normalize);
- }
-
- public function metaIndexes($table,$normalize=true,$owner=false)
- {
- if (method_exists($this->_driver,'metaIndexes'))
- return $this->_driver->metaIndexes($table,$normalize,$owner);
- }
-
- /**
- * Return a list of Primary Keys for a specified table.
- *
- * @param string $table
- * @param bool $owner (optional) not used in this driver
- *
- * @return string[] Array of indexes
- */
- public function metaPrimaryKeys($table,$owner=false)
- {
- if (method_exists($this->_driver,'metaPrimaryKeys'))
- return $this->_driver->metaPrimaryKeys($table,$owner);
- }
-
- /**
- * Returns a list of Foreign Keys associated with a specific table.
- *
- * @param string $table
- * @param string $owner (optional) not used in this driver
- * @param bool $upper
- * @param bool $associative
- *
- * @return string[]|false An array where keys are tables, and values are foreign keys;
- * false if no foreign keys could be found.
- */
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false) {
- if (method_exists($this->_driver,'metaForeignKeys'))
- return $this->_driver->metaForeignKeys($table, $owner, $upper, $associative);
- }
-
- /**
- * List procedures or functions in an array.
- *
- * @param $procedureNamePattern A procedure name pattern; must match the procedure name as it is stored in the database.
- * @param $catalog A catalog name; must match the catalog name as it is stored in the database.
- * @param $schemaPattern A schema name pattern.
- *
- * @return false|array false if not supported, or array of procedures on current database with structure below
- * Array(
- * [name_of_procedure] => Array(
- * [type] => PROCEDURE or FUNCTION
- * [catalog] => Catalog_name
- * [schema] => Schema_name
- * [remarks] => explanatory comment on the procedure
- * )
- * )
- */
- public function metaProcedures($procedureNamePattern = null, $catalog = null, $schemaPattern = null) {
- if (method_exists($this->_driver,'metaProcedures'))
- return $this->_driver->metaProcedures($procedureNamePattern,$catalog,$schemaPattern);
- return false;
- }
-
- function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false)
- {
- $obj = $stmt[1];
- if ($type) {
- $obj->bindParam($name, $var, $type, $maxLen);
- }
- else {
- $obj->bindParam($name, $var);
- }
- }
-
- function OffsetDate($dayFraction,$date=false)
- {
- 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) {
- return $this->_errormsg;
- }
- if (!empty($this->_stmt)) {
- $arr = $this->_stmt->errorInfo();
- }
- else if (!empty($this->_connectionID)) {
- $arr = $this->_connectionID->errorInfo();
- }
- else {
- return 'No Connection Established';
- }
-
- if ($arr) {
- if (sizeof($arr)<2) {
- return '';
- }
- if ((integer)$arr[0]) {
- return $arr[2];
- }
- else {
- return '';
- }
- }
- else {
- return '-1';
- }
- }
-
-
- function ErrorNo()
- {
- if ($this->_errorno !== false) {
- return $this->_errorno;
- }
- if (!empty($this->_stmt)) {
- $err = $this->_stmt->errorCode();
- }
- else if (!empty($this->_connectionID)) {
- $arr = $this->_connectionID->errorInfo();
- if (isset($arr[0])) {
- $err = $arr[0];
- }
- else {
- $err = -1;
- }
- } else {
- return 0;
- }
-
- if ($err == '00000') {
- return 0; // allows empty check
- }
- return $err;
- }
-
- /**
- * @param bool $auto_commit
- * @return void
- */
- function SetAutoCommit($auto_commit)
- {
- if(method_exists($this->_driver, 'SetAutoCommit')) {
- $this->_driver->SetAutoCommit($auto_commit);
- }
- }
-
- function SetTransactionMode($transaction_mode)
- {
- if(method_exists($this->_driver, 'SetTransactionMode')) {
- return $this->_driver->SetTransactionMode($transaction_mode);
- }
-
- return parent::SetTransactionMode($transaction_mode);
- }
-
- function beginTrans()
- {
- if(method_exists($this->_driver, 'beginTrans')) {
- return $this->_driver->beginTrans();
- }
-
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- $this->transCnt += 1;
- $this->_autocommit = false;
- $this->SetAutoCommit(false);
-
- return $this->_connectionID->beginTransaction();
- }
-
- function commitTrans($ok=true)
- {
-
- if(method_exists($this->_driver, 'commitTrans')) {
- return $this->_driver->commitTrans($ok);
- }
-
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- if (!$ok) {
- return $this->rollbackTrans();
- }
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $this->_autocommit = true;
-
- $ret = $this->_connectionID->commit();
- $this->SetAutoCommit(true);
- return $ret;
- }
-
- function RollbackTrans()
- {
- if(method_exists($this->_driver, 'RollbackTrans')) {
- return $this->_driver->RollbackTrans();
- }
-
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $this->_autocommit = true;
-
- $ret = $this->_connectionID->rollback();
- $this->SetAutoCommit(true);
- return $ret;
- }
-
- function Prepare($sql)
- {
- $this->_stmt = $this->_connectionID->prepare($sql);
- if ($this->_stmt) {
- return array($sql,$this->_stmt);
- }
-
- return false;
- }
-
- function PrepareStmt($sql)
- {
- $stmt = $this->_connectionID->prepare($sql);
- if (!$stmt) {
- return false;
- }
- $obj = new ADOPDOStatement($stmt,$this);
- return $obj;
- }
-
- public function createSequence($seqname='adodbseq',$startID=1)
- {
- if(method_exists($this->_driver, 'createSequence')) {
- return $this->_driver->createSequence($seqname, $startID);
- }
-
- return parent::CreateSequence($seqname, $startID);
- }
-
- function DropSequence($seqname='adodbseq')
- {
- if(method_exists($this->_driver, 'DropSequence')) {
- return $this->_driver->DropSequence($seqname);
- }
-
- return parent::DropSequence($seqname);
- }
-
- function GenID($seqname='adodbseq',$startID=1)
- {
- if(method_exists($this->_driver, 'GenID')) {
- return $this->_driver->GenID($seqname, $startID);
- }
-
- return parent::GenID($seqname, $startID);
- }
-
-
- /* returns queryID or false */
- function _query($sql,$inputarr=false)
- {
- $ok = false;
- if (is_array($sql)) {
- $stmt = $sql[1];
- } else {
- $stmt = $this->_connectionID->prepare($sql);
- }
-
- if ($stmt) {
- if ($this->_driver instanceof ADODB_pdo) {
- $this->_driver->debug = $this->debug;
- }
- if ($inputarr) {
-
- /*
- * inputarr must be numeric
- */
- $inputarr = array_values($inputarr);
- $ok = $stmt->execute($inputarr);
- }
- else {
- $ok = $stmt->execute();
- }
- }
-
-
- $this->_errormsg = false;
- $this->_errorno = false;
-
- if ($ok) {
- $this->_stmt = $stmt;
- return $stmt;
- }
-
- if ($stmt) {
-
- $arr = $stmt->errorinfo();
- if ((integer)$arr[1]) {
- $this->_errormsg = $arr[2];
- $this->_errorno = $arr[1];
- }
-
- } else {
- $this->_errormsg = false;
- $this->_errorno = false;
- }
- return false;
- }
-
- // returns true or false
- function _close()
- {
- $this->_stmt = false;
- return true;
- }
-
- function _affectedrows()
- {
- return ($this->_stmt) ? $this->_stmt->rowCount() : 0;
- }
-
- protected function _insertID($table = '', $column = '')
- {
- 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 PDO::quote(). Otherwise, replace "'" by the value of
- * $replaceQuote (same behavior as mysqli driver).
- *
- * @param string $s The string to quote
- * @param bool $magic_quotes This param is not used since 5.21.0.
- * It remains for backwards compatibility.
- *
- * @return string Quoted string
- */
- function qStr($s, $magic_quotes = false)
- {
- if ($this->_connectionID) {
- return $this->_connectionID->quote($s);
- }
- return "'" . str_replace("'", $this->replaceQuote, $s) . "'";
- }
-
-}
-
-class ADODB_pdo_base extends ADODB_pdo {
-
- var $sysDate = "'?'";
- var $sysTimeStamp = "'?'";
-
-
- function _init($parentDriver)
- {
- $parentDriver->_bindInputArray = true;
- #$parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
- }
-
- function ServerInfo()
- {
- return ADOConnection::ServerInfo();
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- return $ret;
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- return false;
- }
-
- function MetaColumns($table,$normalize=true)
- {
- return false;
- }
-}
-
-class ADOPDOStatement {
-
- var $databaseType = "pdo";
- var $dataProvider = "pdo";
- var $_stmt;
- var $_connectionID;
-
- function __construct($stmt,$connection)
- {
- $this->_stmt = $stmt;
- $this->_connectionID = $connection;
- }
-
- function Execute($inputArr=false)
- {
- $savestmt = $this->_connectionID->_stmt;
- $rs = $this->_connectionID->Execute(array(false,$this->_stmt),$inputArr);
- $this->_connectionID->_stmt = $savestmt;
- return $rs;
- }
-
- function InParameter(&$var,$name,$maxLen=4000,$type=false)
- {
-
- if ($type) {
- $this->_stmt->bindParam($name,$var,$type,$maxLen);
- }
- else {
- $this->_stmt->bindParam($name, $var);
- }
- }
-
- function Affected_Rows()
- {
- return ($this->_stmt) ? $this->_stmt->rowCount() : 0;
- }
-
- function ErrorMsg()
- {
- if ($this->_stmt) {
- $arr = $this->_stmt->errorInfo();
- }
- else {
- $arr = $this->_connectionID->errorInfo();
- }
-
- if (is_array($arr)) {
- if ((integer) $arr[0] && isset($arr[2])) {
- return $arr[2];
- }
- else {
- return '';
- }
- } else {
- return '-1';
- }
- }
-
- function NumCols()
- {
- return ($this->_stmt) ? $this->_stmt->columnCount() : 0;
- }
-
- function ErrorNo()
- {
- if ($this->_stmt) {
- return $this->_stmt->errorCode();
- }
- else {
- return $this->_connectionID->errorInfo();
- }
- }
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordSet_pdo extends ADORecordSet {
-
- var $bind = false;
- var $databaseType = "pdo";
- var $dataProvider = "pdo";
-
- function __construct($id,$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;
-
- case ADODB_FETCH_BOTH:
- default: $mode = PDO::FETCH_BOTH; break;
- }
- $this->fetchMode = $mode;
-
- $this->_queryID = $id;
- parent::__construct($id);
- }
-
-
- function Init()
- {
- if ($this->_inited) {
- return;
- }
- $this->_inited = true;
- if ($this->_queryID) {
- @$this->_initrs();
- }
- else {
- $this->_numOfRows = 0;
- $this->_numOfFields = 0;
- }
- if ($this->_numOfRows != 0 && $this->_currentRow == -1) {
- $this->_currentRow = 0;
- if ($this->EOF = ($this->_fetch() === false)) {
- $this->_numOfRows = 0; // _numOfRows could be -1
- }
- } else {
- $this->EOF = true;
- }
- }
-
- function _initrs()
- {
- global $ADODB_COUNTRECS;
-
- $this->_numOfRows = ($ADODB_COUNTRECS) ? @$this->_queryID->rowCount() : -1;
- if (!$this->_numOfRows) {
- $this->_numOfRows = -1;
- }
- $this->_numOfFields = $this->_queryID->columnCount();
- }
-
- // returns the field object
- function FetchField($fieldOffset = -1)
- {
- $off=$fieldOffset+1; // offsets begin at 1
-
- $o= new ADOFieldObject();
- $arr = @$this->_queryID->getColumnMeta($fieldOffset);
- if (!$arr) {
- $o->name = 'bad getColumnMeta()';
- $o->max_length = -1;
- $o->type = 'VARCHAR';
- $o->precision = 0;
- # $false = false;
- return $o;
- }
- //adodb_pr($arr);
- $o->name = $arr['name'];
- 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'];
- }
- 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'];
-
- switch(ADODB_ASSOC_CASE) {
- case ADODB_ASSOC_CASE_LOWER:
- $o->name = strtolower($o->name);
- break;
- case ADODB_ASSOC_CASE_UPPER:
- $o->name = strtoupper($o->name);
- break;
- }
- return $o;
- }
-
- function _seek($row)
- {
- return false;
- }
-
- function _fetch()
- {
- if (!$this->_queryID) {
- return false;
- }
-
- $this->fields = $this->_queryID->fetch($this->fetchMode);
- return !empty($this->fields);
- }
-
- function _close()
- {
- $this->_queryID = false;
- }
-
- function Fields($colname)
- {
- if ($this->adodbFetchMode != ADODB_FETCH_NUM) {
- return @$this->fields[$colname];
- }
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
-}
-
-class ADORecordSet_array_pdo extends ADORecordSet_array {}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_dblib.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_dblib.inc.php
deleted file mode 100644
index aae561bf5..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_dblib.inc.php
+++ /dev/null
@@ -1,190 +0,0 @@
- 'master'";
- var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))";
-
- var $metaColumnsSQL = "SELECT c.NAME, OBJECT_NAME(c.id) as tbl_name, c.length, c.isnullable, c.status, ( CASE WHEN c.xusertype=61 THEN 0 ELSE c.xprec END), ( CASE WHEN c.xusertype=61 THEN 0 ELSE c.xscale END), ISNULL(i.is_primary_key, 0) as primary_key FROM syscolumns c INNER JOIN systypes t ON t.xusertype=c.xusertype INNER JOIN sysobjects o ON o.id=c.id LEFT JOIN sys.index_columns ic ON ic.object_id = c.id AND c.colid = ic.column_id LEFT JOIN sys.indexes i ON i.object_id = ic.object_id AND i.index_id = ic.index_id WHERE c.id = OBJECT_ID('%s') ORDER by c.colid";
-
- function _init(ADODB_pdo $parentDriver)
- {
- $parentDriver->hasTransactions = true;
- $parentDriver->_bindInputArray = true;
- $parentDriver->hasInsertID = true;
- $parentDriver->fmtTimeStamp = "'Y-m-d H:i:s'";
- $parentDriver->fmtDate = "'Y-m-d'";
- }
-
- function BeginTrans()
- {
- $returnval = parent::BeginTrans();
- return $returnval;
- }
-
- function MetaColumns($table, $normalize=true)
- {
- $this->_findschema($table,$schema);
- if ($schema) {
- $dbName = $this->database;
- $this->SelectDB($schema);
- }
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
-
- if ($schema) {
- $this->SelectDB($dbName);
- }
-
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- if (!is_object($rs)) {
- $false = false;
- return $false;
- }
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->primary_key = $rs->fields[7];
-
- $fld->not_null = (!$rs->fields[3]);
- $fld->auto_increment = ($rs->fields[4] == 128); // sys.syscolumns status field. 0x80 = 128 ref: http://msdn.microsoft.com/en-us/library/ms186816.aspx
-
- if (isset($rs->fields[5]) && $rs->fields[5]) {
- if ($rs->fields[5]>0) $fld->max_length = $rs->fields[5];
- $fld->scale = $rs->fields[6];
- if ($fld->scale>0) $fld->max_length += 1;
- } else
- $fld->max_length = $rs->fields[2];
-
- if ($save == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- } else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
- $rs->MoveNext();
- }
-
- $rs->Close();
- return $retarr;
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(($mask));
- $this->metaTablesSQL .= " AND name like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
- {
- if ($nrows > 0 && $offset <= 0) {
- $sql = preg_replace(
- '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql);
-
- if ($secs2cache)
- $rs = $this->CacheExecute($secs2cache, $sql, $inputarr);
- else
- $rs = $this->Execute($sql,$inputarr);
- } else
- $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
-
- return $rs;
- }
-
- function _query($sql,$inputarr=false)
- {
- $this->_connectionID->setAttribute(\PDO::ATTR_EMULATE_PREPARES , true);
- if (is_array($sql)) {
- $stmt = $sql[1];
- } else {
- $stmt = $this->_connectionID->prepare($sql);
- }
-
- if ($stmt) {
- $this->_driver->debug = $this->debug;
- if ($inputarr) {
- foreach ($inputarr as $key => $value) {
- if(gettype($key) == 'integer') {
- $key += 1;
- }
- $stmt->bindValue($key, $value, $this->GetPDODataType($value));
- }
- }
- }
-
- $ok = $stmt->execute();
-
- $this->_errormsg = false;
- $this->_errorno = false;
-
- if ($ok) {
- $this->_stmt = $stmt;
- return $stmt;
- }
-
- if ($stmt) {
-
- $arr = $stmt->errorinfo();
- if ((integer)$arr[1]) {
- $this->_errormsg = $arr[2];
- $this->_errorno = $arr[1];
- }
-
- } else {
- $this->_errormsg = false;
- $this->_errorno = false;
- }
- return false;
- }
-
- private function GetPDODataType($var)
- {
- if(gettype($var) == 'integer') {
- return PDO::PARAM_INT ;
- }
- return PDO::PARAM_STR;
- }
-
- function ServerInfo()
- {
- return ADOConnection::ServerInfo();
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_firebird.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_firebird.inc.php
deleted file mode 100644
index 0ee5e02b6..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_firebird.inc.php
+++ /dev/null
@@ -1,452 +0,0 @@
-pdoDriver = $parentDriver;
- //$parentDriver->_bindInputArray = true;
- //$parentDriver->hasTransactions = false; // // should be set to false because of PDO SQLite driver not supporting changing autocommit mode
- //$parentDriver->hasInsertID = true;
- }
-
- /**
- * Gets the version iformation from the server
- *
- * @return string[]
- */
- public function serverInfo()
- {
- $arr['dialect'] = $this->dialect;
- switch ($arr['dialect']) {
- case '':
- case '1':
- $s = 'Firebird Dialect 1';
- break;
- case '2':
- $s = 'Firebird Dialect 2';
- break;
- default:
- case '3':
- $s = 'Firebird Dialect 3';
- break;
- }
- $arr['version'] = ADOConnection::_findvers($s);
- $arr['description'] = $s;
- return $arr;
- }
-
- /**
- * Returns the tables in the database.
- *
- * @param mixed $ttype
- * @param bool $showSchema
- * @param mixed $mask
- *
- * @return string[]
- */
- public function metaTables($ttype = false, $showSchema = false, $mask = false)
- {
- $ret = ADOConnection::MetaTables($ttype, $showSchema);
-
- return $ret;
- }
-
- public function metaColumns($table, $normalize = true)
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL, strtoupper($table)));
-
- $ADODB_FETCH_MODE = $save;
-
- if ($rs === false) {
- return false;
- }
-
- $retarr = array();
- $dialect3 = $this->dialect == 3;
- while (!$rs->EOF) { //print_r($rs->fields);
- $fld = new ADOFieldObject();
- $fld->name = trim($rs->fields[0]);
- $this->_ConvertFieldType($fld, $rs->fields[7], $rs->fields[3], $rs->fields[4], $rs->fields[5],
- $rs->fields[6], $dialect3);
- if (isset($rs->fields[1]) && $rs->fields[1]) {
- $fld->not_null = true;
- }
- if (isset($rs->fields[2])) {
-
- $fld->has_default = true;
- $d = substr($rs->fields[2], strlen('default '));
- switch ($fld->type) {
- case 'smallint':
- case 'integer':
- $fld->default_value = (int)$d;
- break;
- case 'char':
- case 'blob':
- case 'text':
- case 'varchar':
- $fld->default_value = (string)substr($d, 1, strlen($d) - 2);
- break;
- case 'double':
- case 'float':
- $fld->default_value = (float)$d;
- break;
- default:
- $fld->default_value = $d;
- break;
- }
- }
- if ((isset($rs->fields[5])) && ($fld->type == 'blob')) {
- $fld->sub_type = $rs->fields[5];
- } else {
- $fld->sub_type = null;
- }
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- } else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
-
- $rs->MoveNext();
- }
- $rs->Close();
- if (empty($retarr)) {
- return false;
- } else {
- return $retarr;
- }
- }
-
- public function metaIndexes($table, $primary = false, $owner = false)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) {
- $savem = $this->SetFetchMode(false);
- }
- $table = strtoupper($table);
- $sql = "SELECT * FROM RDB\$INDICES WHERE RDB\$RELATION_NAME = '" . $table . "'";
- if (!$primary) {
- $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$%'";
- } else {
- $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$FOREIGN%'";
- }
-
- // get index details
- $rs = $this->Execute($sql);
- if (!is_object($rs)) {
- // restore fetchmode
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return false;
- }
-
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- $index = $row[0];
- if (!isset($indexes[$index])) {
- if (is_null($row[3])) {
- $row[3] = 0;
- }
- $indexes[$index] = array(
- 'unique' => ($row[3] == 1),
- 'columns' => array()
- );
- }
- $sql = "SELECT * FROM RDB\$INDEX_SEGMENTS WHERE RDB\$INDEX_NAME = '" . $index . "' ORDER BY RDB\$FIELD_POSITION ASC";
- $rs1 = $this->Execute($sql);
- while ($row1 = $rs1->FetchRow()) {
- $indexes[$index]['columns'][$row1[2]] = $row1[1];
- }
- }
- // restore fetchmode
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- return $indexes;
- }
-
- public function metaPrimaryKeys($table, $owner_notused = false, $internalKey = false)
- {
- if ($internalKey) {
- return array('RDB$DB_KEY');
- }
-
- $table = strtoupper($table);
-
- $sql = 'SELECT S.RDB$FIELD_NAME AFIELDNAME
- FROM RDB$INDICES I JOIN RDB$INDEX_SEGMENTS S ON I.RDB$INDEX_NAME=S.RDB$INDEX_NAME
- WHERE I.RDB$RELATION_NAME=\'' . $table . '\' and I.RDB$INDEX_NAME like \'RDB$PRIMARY%\'
- ORDER BY I.RDB$INDEX_NAME,S.RDB$FIELD_POSITION';
-
- $a = $this->GetCol($sql, false, true);
- if ($a && sizeof($a) > 0) {
- return $a;
- }
- return false;
- }
-
- public function createSequence($seqname = 'adodbseq', $startID = 1)
- {
- $ok = $this->execute("CREATE SEQUENCE $seqname");
- if (!$ok) {
- return false;
- }
-
- return $this->execute("ALTER SEQUENCE $seqname RESTART WITH " . ($startID - 1));
- }
-
- public function dropSequence($seqname = 'adodbseq')
- {
- $seqname = strtoupper($seqname);
- return $this->Execute("DROP SEQUENCE $seqname");
- }
-
-
- public function _affectedrows()
- {
- return fbird_affected_rows($this->_transactionID ? $this->_transactionID : $this->_connectionID);
- }
-
- public function genId($seqname = 'adodbseq', $startID = 1)
- {
- $getnext = ("SELECT Gen_ID($seqname,1) FROM RDB\$DATABASE");
- $rs = @$this->execute($getnext);
- if (!$rs) {
- $this->execute(("CREATE SEQUENCE $seqname"));
- $this->execute("ALTER SEQUENCE $seqname RESTART WITH " . ($startID - 1) . ';');
- $rs = $this->execute($getnext);
- }
- if ($rs && !$rs->EOF) {
- $this->genID = (integer)reset($rs->fields);
- } else {
- $this->genID = 0; // false
- }
-
- if ($rs) {
- $rs->Close();
- }
-
- return $this->genID;
- }
-
- public function selectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $secs = 0)
- {
- $nrows = (integer)$nrows;
- $offset = (integer)$offset;
- $str = 'SELECT ';
- if ($nrows >= 0) {
- $str .= "FIRST $nrows ";
- }
- $str .= ($offset >= 0) ? "SKIP $offset " : '';
-
- $sql = preg_replace('/^[ \t]*select/i', $str, $sql);
- if ($secs) {
- $rs = $this->cacheExecute($secs, $sql, $inputarr);
- } else {
- $rs = $this->execute($sql, $inputarr);
- }
-
- return $rs;
- }
-
- /**
- * Sets the appropriate type into the $fld variable
- *
- * @param ADOFieldObject $fld By reference
- * @param int $ftype
- * @param int $flen
- * @param int $fscale
- * @param int $fsubtype
- * @param int $fprecision
- * @param bool $dialect3
- */
- private function _convertFieldType(&$fld, $ftype, $flen, $fscale, $fsubtype, $fprecision, $dialect3)
- {
- $fscale = abs($fscale);
- $fld->max_length = $flen;
- $fld->scale = null;
- switch ($ftype) {
- case 7:
- case 8:
- if ($dialect3) {
- switch ($fsubtype) {
- case 0:
- $fld->type = ($ftype == 7 ? 'smallint' : 'integer');
- break;
- case 1:
- $fld->type = 'numeric';
- $fld->max_length = $fprecision;
- $fld->scale = $fscale;
- break;
- case 2:
- $fld->type = 'decimal';
- $fld->max_length = $fprecision;
- $fld->scale = $fscale;
- break;
- } // switch
- } else {
- if ($fscale != 0) {
- $fld->type = 'decimal';
- $fld->scale = $fscale;
- $fld->max_length = ($ftype == 7 ? 4 : 9);
- } else {
- $fld->type = ($ftype == 7 ? 'smallint' : 'integer');
- }
- }
- break;
- case 16:
- if ($dialect3) {
- switch ($fsubtype) {
- case 0:
- $fld->type = 'decimal';
- $fld->max_length = 18;
- $fld->scale = 0;
- break;
- case 1:
- $fld->type = 'numeric';
- $fld->max_length = $fprecision;
- $fld->scale = $fscale;
- break;
- case 2:
- $fld->type = 'decimal';
- $fld->max_length = $fprecision;
- $fld->scale = $fscale;
- break;
- } // switch
- }
- break;
- case 10:
- $fld->type = 'float';
- break;
- case 14:
- $fld->type = 'char';
- break;
- case 27:
- if ($fscale != 0) {
- $fld->type = 'decimal';
- $fld->max_length = 15;
- $fld->scale = 5;
- } else {
- $fld->type = 'double';
- }
- break;
- case 35:
- if ($dialect3) {
- $fld->type = 'timestamp';
- } else {
- $fld->type = 'date';
- }
- break;
- case 12:
- $fld->type = 'date';
- break;
- case 13:
- $fld->type = 'time';
- break;
- case 37:
- $fld->type = 'varchar';
- break;
- case 40:
- $fld->type = 'cstring';
- break;
- case 261:
- $fld->type = 'blob';
- $fld->max_length = -1;
- break;
- } // switch
- }
-}
-
-/**
- * Class ADORecordSet_pdo_firebird
- */
-class ADORecordSet_pdo_firebird extends ADORecordSet_pdo
-{
-
- public $databaseType = "pdo_firebird";
-
- /**
- * returns the field object
- *
- * @param int $fieldOffset Optional field offset
- *
- * @return object The ADOFieldObject describing the field
- */
- public function fetchField($fieldOffset = 0)
- {
- }
-}
-
-/**
- * Class ADORecordSet_array_pdo_firebird
- */
-class ADORecordSet_array_pdo_firebird extends ADORecordSet_array_pdo
-{
- public $databaseType = "pdo_firebird";
- public $canSeek = true;
-
- /**
- * returns the field object
- *
- * @param int $fieldOffset Optional field offset
- *
- * @return object The ADOFieldObject describing the field
- */
- public function fetchField($fieldOffset = 0)
- {
-
- $fld = new ADOFieldObject;
- $fld->name = $fieldOffset;
- $fld->type = 'C';
- $fld->max_length = 0;
-
- // This needs to be populated from the metadata
- $fld->not_null = false;
- $fld->has_default = false;
- $fld->default_value = 'null';
-
- return $fld;
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mssql.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mssql.inc.php
deleted file mode 100644
index ef63b654a..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mssql.inc.php
+++ /dev/null
@@ -1,69 +0,0 @@
-hasTransactions = false; ## <<< BUG IN PDO mssql driver
- $parentDriver->_bindInputArray = false;
- $parentDriver->hasInsertID = true;
- }
-
- function ServerInfo()
- {
- return ADOConnection::ServerInfo();
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- return $ret;
- }
-
- function SetTransactionMode( $transaction_mode )
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->Execute("SET TRANSACTION ".$transaction_mode);
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- return false;
- }
-
- function MetaColumns($table,$normalize=true)
- {
- return false;
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mysql.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mysql.inc.php
deleted file mode 100644
index c8812453f..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_mysql.inc.php
+++ /dev/null
@@ -1,423 +0,0 @@
-hasTransactions = false;
- #$parentDriver->_bindInputArray = false;
- $parentDriver->hasInsertID = true;
- $parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
- }
-
- // dayFraction is a day in floating point
- function OffsetDate($dayFraction, $date=false)
- {
- if (!$date) {
- $date = $this->sysDate;
- }
-
- $fraction = $dayFraction * 24 * 3600;
- return $date . ' + INTERVAL ' . $fraction . ' SECOND';
-// return "from_unixtime(unix_timestamp($date)+$fraction)";
- }
-
- /**
- * Get a list of indexes on the specified table.
- *
- * @param string $table The name of the table to get indexes for.
- * @param bool $primary (Optional) Whether or not to include the primary key.
- * @param bool $owner (Optional) Unused.
- *
- * @return array|bool An array of the indexes, or false if the query to get the indexes failed.
- */
- function metaIndexes($table, $primary = false, $owner = false)
- {
- // save old fetch mode
- global $ADODB_FETCH_MODE;
-
- $false = false;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->setFetchMode(FALSE);
- }
-
- // get index details
- $rs = $this->execute(sprintf('SHOW INDEXES FROM %s',$table));
-
- // restore fetchmode
- if (isset($savem)) {
- $this->setFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return $false;
- }
-
- $indexes = array ();
-
- // parse index data into array
- while ($row = $rs->fetchRow()) {
- if ($primary == FALSE AND $row[2] == 'PRIMARY') {
- continue;
- }
-
- if (!isset($indexes[$row[2]])) {
- $indexes[$row[2]] = array(
- 'unique' => ($row[1] == 0),
- 'columns' => array()
- );
- }
-
- $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4];
- }
-
- // sort columns by order in the index
- foreach ( array_keys ($indexes) as $index )
- {
- ksort ($indexes[$index]['columns']);
- }
-
- return $indexes;
- }
-
- function Concat()
- {
- $s = '';
- $arr = func_get_args();
-
- // suggestion by andrew005#mnogo.ru
- $s = implode(',', $arr);
- if (strlen($s) > 0) {
- return "CONCAT($s)";
- }
- return '';
- }
-
- function ServerInfo()
- {
- $arr['description'] = ADOConnection::GetOne('select version()');
- $arr['version'] = ADOConnection::_findvers($arr['description']);
- return $arr;
- }
-
- function MetaTables($ttype=false, $showSchema=false, $mask=false)
- {
- $save = $this->metaTablesSQL;
- if ($showSchema && is_string($showSchema)) {
- $this->metaTablesSQL .= $this->qstr($showSchema);
- } else {
- $this->metaTablesSQL .= 'schema()';
- }
-
- if ($mask) {
- $mask = $this->qstr($mask);
- $this->metaTablesSQL .= " like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype, $showSchema);
-
- $this->metaTablesSQL = $save;
- return $ret;
- }
-
- /**
- * @param bool $auto_commit
- * @return void
- */
- function SetAutoCommit($auto_commit)
- {
- $this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT, $auto_commit);
- }
-
- function SetTransactionMode($transaction_mode)
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->Execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ');
- return;
- }
- if (!stristr($transaction_mode, 'isolation')) {
- $transaction_mode = 'ISOLATION LEVEL ' . $transaction_mode;
- }
- $this->Execute('SET SESSION TRANSACTION ' . $transaction_mode);
- }
-
- function MetaColumns($table, $normalize=true)
- {
- $this->_findschema($table, $schema);
- if ($schema) {
- $dbName = $this->database;
- $this->SelectDB($schema);
- }
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-
- if ($this->fetchMode !== false) {
- $savem = $this->SetFetchMode(false);
- }
- $rs = $this->Execute(sprintf($this->metaColumnsSQL, $table));
-
- if ($schema) {
- $this->SelectDB($dbName);
- }
-
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- if (!is_object($rs)) {
- $false = false;
- return $false;
- }
-
- $retarr = array();
- while (!$rs->EOF){
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $type = $rs->fields[1];
-
- // split type into type(length):
- $fld->scale = null;
- if (preg_match('/^(.+)\((\d+),(\d+)/', $type, $query_array)) {
- $fld->type = $query_array[1];
- $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
- $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
- } elseif (preg_match('/^(.+)\((\d+)/', $type, $query_array)) {
- $fld->type = $query_array[1];
- $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
- } elseif (preg_match('/^(enum)\((.*)\)$/i', $type, $query_array)) {
- $fld->type = $query_array[1];
- $arr = explode(',', $query_array[2]);
- $fld->enums = $arr;
- $zlen = max(array_map('strlen', $arr)) - 2; // PHP >= 4.0.6
- $fld->max_length = ($zlen > 0) ? $zlen : 1;
- } else {
- $fld->type = $type;
- $fld->max_length = -1;
- }
- $fld->not_null = ($rs->fields[2] != 'YES');
- $fld->primary_key = ($rs->fields[3] == 'PRI');
- $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
- $fld->binary = (strpos($type, 'blob') !== false);
- $fld->unsigned = (strpos($type, 'unsigned') !== false);
-
- if (!$fld->binary) {
- $d = $rs->fields[4];
- if ($d != '' && $d != 'NULL') {
- $fld->has_default = true;
- $fld->default_value = $d;
- } else {
- $fld->has_default = false;
- }
- }
-
- if ($save == ADODB_FETCH_NUM) {
- $retarr[] = $fld;
- } else {
- $retarr[strtoupper($fld->name)] = $fld;
- }
- $rs->MoveNext();
- }
-
- $rs->Close();
- return $retarr;
- }
-
- // returns true or false
- function SelectDB($dbName)
- {
- $this->database = $dbName;
- $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
- $try = $this->Execute('use ' . $dbName);
- return ($try !== false);
- }
-
- // parameters use PostgreSQL convention, not MySQL
- function SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr =($offset>=0) ? "$offset," : '';
- // jason judge, see PHPLens Issue No: 9220
- if ($nrows < 0) {
- $nrows = '18446744073709551615';
- }
-
- if ($secs) {
- $rs = $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows", $inputarr);
- } else {
- $rs = $this->Execute($sql . " LIMIT $offsetStr$nrows", $inputarr);
- }
- return $rs;
- }
-
- function SQLDate($fmt, $col=false)
- {
- if (!$col) {
- $col = $this->sysTimeStamp;
- }
- $s = 'DATE_FORMAT(' . $col . ",'";
- $concat = false;
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- $ch = $fmt[$i];
- switch($ch) {
-
- default:
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt, $i, 1);
- }
- // FALL THROUGH
- case '-':
- case '/':
- $s .= $ch;
- break;
-
- case 'Y':
- case 'y':
- $s .= '%Y';
- break;
-
- case 'M':
- $s .= '%b';
- break;
-
- case 'm':
- $s .= '%m';
- break;
-
- case 'D':
- case 'd':
- $s .= '%d';
- break;
-
- case 'Q':
- case 'q':
- $s .= "'),Quarter($col)";
-
- if ($len > $i+1) {
- $s .= ",DATE_FORMAT($col,'";
- } else {
- $s .= ",('";
- }
- $concat = true;
- break;
-
- case 'H':
- $s .= '%H';
- break;
-
- case 'h':
- $s .= '%I';
- break;
-
- case 'i':
- $s .= '%i';
- break;
-
- case 's':
- $s .= '%s';
- break;
-
- case 'a':
- case 'A':
- $s .= '%p';
- break;
-
- case 'w':
- $s .= '%w';
- break;
-
- case 'W':
- $s .= '%U';
- break;
-
- case 'l':
- $s .= '%W';
- break;
- }
- }
- $s .= "')";
- if ($concat) {
- $s = "CONCAT($s)";
- }
- return $s;
- }
-
- function GenID($seqname='adodbseq',$startID=1)
- {
- $getnext = sprintf($this->_genIDSQL,$seqname);
- $holdtransOK = $this->_transOK; // save the current status
- $rs = @$this->Execute($getnext);
- if (!$rs) {
- if ($holdtransOK) $this->_transOK = true; //if the status was ok before reset
- $this->Execute(sprintf($this->_genSeqSQL,$seqname));
- $cnt = $this->GetOne(sprintf($this->_genSeqCountSQL,$seqname));
- if (!$cnt) $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
- $rs = $this->Execute($getnext);
- }
-
- if ($rs) {
- $this->genID = $this->_connectionID->lastInsertId($seqname);
- $rs->Close();
- } else {
- $this->genID = 0;
- }
-
- return $this->genID;
- }
-
-
- function createSequence($seqname='adodbseq',$startID=1)
- {
- if (empty($this->_genSeqSQL)) {
- return false;
- }
- $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID));
- if (!$ok) {
- return false;
- }
-
- return $this->Execute(sprintf($this->_genSeq2SQL,$seqname,$startID-1));
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_oci.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_oci.inc.php
deleted file mode 100644
index 20b47deff..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_oci.inc.php
+++ /dev/null
@@ -1,122 +0,0 @@
-_bindInputArray = true;
- $parentDriver->_nestedSQL = true;
- if ($this->_initdate) {
- $parentDriver->Execute("ALTER SESSION SET NLS_DATE_FORMAT='".$this->NLS_DATE_FORMAT."'");
- }
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(strtoupper($mask));
- $this->metaTablesSQL .= " AND table_name like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- function MetaColumns($table,$normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $false = false;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table)));
-
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- if (!$rs) {
- return $false;
- }
- $retarr = array();
- while (!$rs->EOF) { //print_r($rs->fields);
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
- $fld->scale = $rs->fields[3];
- if ($rs->fields[1] == 'NUMBER' && $rs->fields[3] == 0) {
- $fld->type ='INT';
- $fld->max_length = $rs->fields[4];
- }
- $fld->not_null = (strncmp($rs->fields[5], 'NOT',3) === 0);
- $fld->binary = (strpos($fld->type,'BLOB') !== false);
- $fld->default_value = $rs->fields[6];
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
- else $retarr[strtoupper($fld->name)] = $fld;
- $rs->MoveNext();
- }
- $rs->Close();
- if (empty($retarr))
- return $false;
- else
- return $retarr;
- }
-
- /**
- * @param bool $auto_commit
- * @return void
- */
- function SetAutoCommit($auto_commit)
- {
- $this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT, $auto_commit);
- }
-
- /**
- * Returns a driver-specific format for a bind parameter
- *
- * @param string $name
- * @param string $type (ignored in driver)
- *
- * @return string
- */
- public function param($name,$type='C')
- {
- return sprintf(':%s', $name);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_pgsql.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_pgsql.inc.php
deleted file mode 100644
index 6c06ac103..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_pgsql.inc.php
+++ /dev/null
@@ -1,323 +0,0 @@
- 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
-
- // used when schema defined
- var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum
- FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n
- WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s'))
- and c.relnamespace=n.oid and n.nspname='%s'
- and a.attname not like '....%%' AND a.attnum > 0
- AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
-
- // get primary key etc -- from Freek Dijkstra
- var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key
- FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'";
-
- var $hasAffectedRows = true;
- var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10
- // below suggested by Freek Dijkstra
- var $true = 't'; // string that represents TRUE for a database
- var $false = 'f'; // string that represents FALSE for a database
- var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database
- var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt.
- var $hasMoveFirst = true;
- var $hasGenID = true;
- var $_genIDSQL = "SELECT NEXTVAL('%s')";
- var $_genSeqSQL = "CREATE SEQUENCE %s START %s";
- var $_dropSeqSQL = "DROP SEQUENCE %s";
- var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum";
- var $random = 'random()'; /// random function
- var $concat_operator='||';
-
- function _init($parentDriver)
- {
-
- $parentDriver->hasTransactions = false; ## <<< BUG IN PDO pgsql driver
- $parentDriver->hasInsertID = true;
- $parentDriver->_nestedSQL = true;
- }
-
- function ServerInfo()
- {
- $arr['description'] = ADOConnection::GetOne("select version()");
- $arr['version'] = ADOConnection::_findvers($arr['description']);
- return $arr;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
- $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : '';
- if ($secs2cache)
- $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
- else
- $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr);
-
- return $rs;
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- $info = $this->ServerInfo();
- if ($info['version'] >= 7.3) {
- $this->metaTablesSQL = "
-select tablename,'T' from pg_tables
-where tablename not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema')
-union
-select viewname,'V' from pg_views
-where viewname not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema')";
- }
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(strtolower($mask));
- if ($info['version']>=7.3)
- $this->metaTablesSQL = "
-select tablename,'T' from pg_tables
-where tablename like $mask and schemaname not in ( 'pg_catalog','information_schema')
-union
-select viewname,'V' from pg_views
-where viewname like $mask and schemaname not in ( 'pg_catalog','information_schema')";
- else
- $this->metaTablesSQL = "
-select tablename,'T' from pg_tables where tablename like $mask
-union
-select viewname,'V' from pg_views where viewname like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- function MetaColumns($table,$normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = false;
- $this->_findschema($table,$schema);
-
- if ($normalize) $table = strtolower($table);
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
-
- if ($schema) $rs = $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema));
- else $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if ($rs === false) {
- $false = false;
- return $false;
- }
- if (!empty($this->metaKeySQL)) {
- // If we want the primary keys, we have to issue a separate query
- // Of course, a modified version of the metaColumnsSQL query using a
- // LEFT JOIN would have been much more elegant, but postgres does
- // not support OUTER JOINS. So here is the clumsy way.
-
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
-
- $rskey = $this->Execute(sprintf($this->metaKeySQL,($table)));
- // fetch all result in once for performance.
- $keys = $rskey->GetArray();
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- $rskey->Close();
- unset($rskey);
- }
-
- $rsdefa = array();
- if (!empty($this->metaDefaultsSQL)) {
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- $sql = sprintf($this->metaDefaultsSQL, ($table));
- $rsdef = $this->Execute($sql);
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if ($rsdef) {
- while (!$rsdef->EOF) {
- $num = $rsdef->fields['num'];
- $s = $rsdef->fields['def'];
- if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
- $s = substr($s, 1);
- $s = substr($s, 0, strlen($s) - 1);
- }
-
- $rsdefa[$num] = $s;
- $rsdef->MoveNext();
- }
- } else {
- ADOConnection::outp( "==> SQL => " . $sql);
- }
- unset($rsdef);
- }
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
- if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
- if ($fld->max_length <= 0) $fld->max_length = -1;
- if ($fld->type == 'numeric') {
- $fld->scale = $fld->max_length & 0xFFFF;
- $fld->max_length >>= 16;
- }
- // dannym
- // 5 hasdefault; 6 num-of-column
- $fld->has_default = ($rs->fields[5] == 't');
- if ($fld->has_default) {
- $fld->default_value = $rsdefa[$rs->fields[6]];
- }
-
- //Freek
- if ($rs->fields[4] == $this->true) {
- $fld->not_null = true;
- }
-
- // Freek
- if (is_array($keys)) {
- foreach($keys as $key) {
- if ($fld->name == $key['column_name'] AND $key['primary_key'] == $this->true)
- $fld->primary_key = true;
- if ($fld->name == $key['column_name'] AND $key['unique_key'] == $this->true)
- $fld->unique = true; // What name is more compatible?
- }
- }
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
- else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld;
-
- $rs->MoveNext();
- }
- $rs->Close();
- if (empty($retarr)) {
- $false = false;
- return $false;
- } else return $retarr;
-
- }
-
- function BeginTrans()
- {
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- $this->transCnt += 1;
-
- return $this->_connectionID->beginTransaction();
- }
-
- function CommitTrans($ok = true)
- {
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- if (!$ok) {
- return $this->RollbackTrans();
- }
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $this->_autocommit = true;
-
- $ret = $this->_connectionID->commit();
- return $ret;
- }
-
- function RollbackTrans()
- {
- if (!$this->hasTransactions) {
- return false;
- }
- if ($this->transOff) {
- return true;
- }
- if ($this->transCnt) {
- $this->transCnt -= 1;
- }
- $this->_autocommit = true;
-
- $ret = $this->_connectionID->rollback();
- return $ret;
- }
-
- function SetTransactionMode( $transaction_mode )
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->_connectionID->query('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->_connectionID->query("SET TRANSACTION ".$transaction_mode);
- }
-
- /**
- * Returns a driver-specific format for a bind parameter
- *
- * Unlike the native driver, we use :name parameters
- * instead of offsets
- *
- * @param string $name
- * @param string $type (ignored in driver)
- *
- * @return string
- */
- public function param($name,$type='C') {
- if (!$name) {
- return '';
- }
-
- return sprintf(':%s', $name);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlite.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlite.inc.php
deleted file mode 100644
index dab1de993..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlite.inc.php
+++ /dev/null
@@ -1,233 +0,0 @@
-
- * @author Sid Dunayer
- */
-
-class ADODB_pdo_sqlite extends ADODB_pdo {
- var $metaTablesSQL = "SELECT name FROM sqlite_master WHERE type='table'";
- var $sysDate = 'current_date';
- var $sysTimeStamp = 'current_timestamp';
- var $nameQuote = '`';
- var $replaceQuote = "''";
- var $hasGenID = true;
- var $_genIDSQL = "UPDATE %s SET id=id+1 WHERE id=%s";
- var $_genSeqSQL = "CREATE TABLE %s (id integer)";
- var $_genSeqCountSQL = 'SELECT COUNT(*) FROM %s';
- var $_genSeq2SQL = 'INSERT INTO %s VALUES(%s)';
- var $_dropSeqSQL = 'DROP TABLE %s';
- var $concat_operator = '||';
- var $pdoDriver = false;
- var $random='abs(random())';
-
- function _init($parentDriver)
- {
- $this->pdoDriver = $parentDriver;
- $parentDriver->_bindInputArray = true;
- $parentDriver->hasTransactions = false; // // should be set to false because of PDO SQLite driver not supporting changing autocommit mode
- $parentDriver->hasInsertID = true;
- }
-
- function ServerInfo()
- {
- $parent = $this->pdoDriver;
- @($ver = array_pop($parent->GetCol("SELECT sqlite_version()")));
- @($enc = array_pop($parent->GetCol("PRAGMA encoding")));
-
- $arr['version'] = $ver;
- $arr['description'] = 'SQLite ';
- $arr['encoding'] = $enc;
-
- return $arr;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $parent = $this->pdoDriver;
- $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
- $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : '');
- if ($secs2cache)
- $rs = $parent->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
- else
- $rs = $parent->Execute($sql."$limitStr$offsetStr",$inputarr);
-
- return $rs;
- }
-
- function GenID($seq='adodbseq',$start=1)
- {
- $parent = $this->pdoDriver;
- // if you have to modify the parameter below, your database is overloaded,
- // or you need to implement generation of id's yourself!
- $MAXLOOPS = 100;
- while (--$MAXLOOPS>=0) {
- @($num = array_pop($parent->GetCol("SELECT id FROM {$seq}")));
- if ($num === false || !is_numeric($num)) {
- @$parent->Execute(sprintf($this->_genSeqSQL ,$seq));
- $start -= 1;
- $num = '0';
- $cnt = $parent->GetOne(sprintf($this->_genSeqCountSQL,$seq));
- if (!$cnt) {
- $ok = $parent->Execute(sprintf($this->_genSeq2SQL,$seq,$start));
- }
- if (!$ok) return false;
- }
- $parent->Execute(sprintf($this->_genIDSQL,$seq,$num));
-
- if ($parent->affected_rows() > 0) {
- $num += 1;
- $parent->genID = intval($num);
- return intval($num);
- }
- }
- if ($fn = $parent->raiseErrorFn) {
- $fn($parent->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
- }
- return false;
- }
-
- function CreateSequence($seqname='adodbseq',$start=1)
- {
- $parent = $this->pdoDriver;
- $ok = $parent->Execute(sprintf($this->_genSeqSQL,$seqname));
- if (!$ok) return false;
- $start -= 1;
- return $parent->Execute("insert into $seqname values($start)");
- }
-
- function SetTransactionMode($transaction_mode)
- {
- $parent = $this->pdoDriver;
- $parent->_transmode = strtoupper($transaction_mode);
- }
-
- function BeginTrans()
- {
- $parent = $this->pdoDriver;
- if ($parent->transOff) return true;
- $parent->transCnt += 1;
- $parent->_autocommit = false;
- return $parent->Execute("BEGIN {$parent->_transmode}");
- }
-
- function CommitTrans($ok=true)
- {
- $parent = $this->pdoDriver;
- if ($parent->transOff) return true;
- if (!$ok) return $parent->RollbackTrans();
- if ($parent->transCnt) $parent->transCnt -= 1;
- $parent->_autocommit = true;
-
- $ret = $parent->Execute('COMMIT');
- return $ret;
- }
-
- function RollbackTrans()
- {
- $parent = $this->pdoDriver;
- if ($parent->transOff) return true;
- if ($parent->transCnt) $parent->transCnt -= 1;
- $parent->_autocommit = true;
-
- $ret = $parent->Execute('ROLLBACK');
- return $ret;
- }
-
-
- // mark newnham
- function MetaColumns($tab,$normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $parent = $this->pdoDriver;
- $false = false;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- if ($parent->fetchMode !== false) {
- $savem = $parent->SetFetchMode(false);
- }
- $rs = $parent->Execute("PRAGMA table_info('$tab')");
- if (isset($savem)) {
- $parent->SetFetchMode($savem);
- }
- if (!$rs) {
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
- $arr = array();
- while ($r = $rs->FetchRow()) {
- $type = explode('(', $r['type']);
- $size = '';
- if (sizeof($type) == 2) {
- $size = trim($type[1], ')');
- }
- $fn = strtoupper($r['name']);
- $fld = new ADOFieldObject;
- $fld->name = $r['name'];
- $fld->type = $type[0];
- $fld->max_length = $size;
- $fld->not_null = $r['notnull'];
- $fld->primary_key = $r['pk'];
- $fld->default_value = $r['dflt_value'];
- $fld->scale = 0;
- if ($save == ADODB_FETCH_NUM) {
- $arr[] = $fld;
- } else {
- $arr[strtoupper($fld->name)] = $fld;
- }
- }
- $rs->Close();
- $ADODB_FETCH_MODE = $save;
- return $arr;
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- $parent = $this->pdoDriver;
-
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(strtoupper($mask));
- $this->metaTablesSQL .= " AND name LIKE $mask";
- }
-
- $ret = $parent->GetCol($this->metaTablesSQL);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
- /**
- * Returns a driver-specific format for a bind parameter
- *
- * @param string $name
- * @param string $type (ignored in driver)
- *
- * @return string
- */
- public function param($name,$type='C')
- {
- return sprintf(':%s', $name);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlsrv.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlsrv.inc.php
deleted file mode 100644
index ed73f3a24..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-pdo_sqlsrv.inc.php
+++ /dev/null
@@ -1,181 +0,0 @@
-hasTransactions = true;
- $parentDriver->_bindInputArray = true;
- $parentDriver->hasInsertID = true;
- $parentDriver->fmtTimeStamp = "'Y-m-d H:i:s'";
- $parentDriver->fmtDate = "'Y-m-d'";
- }
-
- function BeginTrans()
- {
- $returnval = parent::BeginTrans();
- return $returnval;
- }
-
- function MetaColumns($table, $normalize = true)
- {
- return false;
- }
-
- function MetaTables($ttype = false, $showSchema = false, $mask = false)
- {
- return false;
- }
-
- function SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $secs2cache = 0)
- {
- $ret = ADOConnection::SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache);
- return $ret;
- }
-
- function ServerInfo()
- {
- return ADOConnection::ServerInfo();
- }
-}
-
-class ADORecordSet_pdo_sqlsrv extends ADORecordSet_pdo
-{
-
- public $databaseType = "pdo_sqlsrv";
-
- /**
- * returns the field object
- *
- * @param int $fieldOffset Optional field offset
- *
- * @return object The ADOFieldObject describing the field
- */
- public function fetchField($fieldOffset = 0)
- {
-
- // Default behavior allows passing in of -1 offset, which crashes the method
- if ($fieldOffset == -1) {
- $fieldOffset++;
- }
-
- $o = new ADOFieldObject();
- $arr = @$this->_queryID->getColumnMeta($fieldOffset);
-
- if (!$arr) {
- $o->name = 'bad getColumnMeta()';
- $o->max_length = -1;
- $o->type = 'VARCHAR';
- $o->precision = 0;
- return $o;
- }
- $o->name = $arr['name'];
- if (isset($arr['sqlsrv:decl_type']) && $arr['sqlsrv:decl_type'] <> "null") {
- // Use the SQL Server driver specific value
- $o->type = $arr['sqlsrv:decl_type'];
- } else {
- $o->type = adodb_pdo_type($arr['pdo_type']);
- }
- $o->max_length = $arr['len'];
- $o->precision = $arr['precision'];
-
- switch (ADODB_ASSOC_CASE) {
- case ADODB_ASSOC_CASE_LOWER:
- $o->name = strtolower($o->name);
- break;
- case ADODB_ASSOC_CASE_UPPER:
- $o->name = strtoupper($o->name);
- break;
- }
-
- return $o;
- }
-}
-
-class ADORecordSet_array_pdo_sqlsrv extends ADORecordSet_array_pdo
-{
-
- /**
- * returns the field object
- *
- * Note that this is a direct copy of the ADORecordSet_pdo_sqlsrv method
- *
- * @param int $fieldOffset Optional field offset
- *
- * @return object The ADOfieldobject describing the field
- */
- public function fetchField($fieldOffset = 0)
- {
- // Default behavior allows passing in of -1 offset, which crashes the method
- if ($fieldOffset == -1) {
- $fieldOffset++;
- }
-
- $o = new ADOFieldObject();
- $arr = @$this->_queryID->getColumnMeta($fieldOffset);
-
- if (!$arr) {
- $o->name = 'bad getColumnMeta()';
- $o->max_length = -1;
- $o->type = 'VARCHAR';
- $o->precision = 0;
- return $o;
- }
- $o->name = $arr['name'];
- if (isset($arr['sqlsrv:decl_type']) && $arr['sqlsrv:decl_type'] <> "null") {
- // Use the SQL Server driver specific value
- $o->type = $arr['sqlsrv:decl_type'];
- } else {
- $o->type = adodb_pdo_type($arr['pdo_type']);
- }
- $o->max_length = $arr['len'];
- $o->precision = $arr['precision'];
-
- switch (ADODB_ASSOC_CASE) {
- case ADODB_ASSOC_CASE_LOWER:
- $o->name = strtolower($o->name);
- break;
- case ADODB_ASSOC_CASE_UPPER:
- $o->name = strtoupper($o->name);
- break;
- }
-
- return $o;
- }
-
- function SetTransactionMode( $transaction_mode )
- {
- $this->_transmode = $transaction_mode;
- if (empty($transaction_mode)) {
- $this->_connectionID->query('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
- return;
- }
- if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
- $this->_connectionID->query("SET TRANSACTION ".$transaction_mode);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-postgres.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-postgres.inc.php
deleted file mode 100644
index 070ac1c7c..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-postgres.inc.php
+++ /dev/null
@@ -1,25 +0,0 @@
- 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
-
- // used when schema defined
- var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum
- FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n
- WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s'))
- and c.relnamespace=n.oid and n.nspname='%s'
- and a.attname not like '....%%' AND a.attnum > 0
- AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
-
- // get primary key etc -- from Freek Dijkstra
- var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key
- FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a
- WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid
- AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum)
- AND a.attrelid = bc.oid AND bc.relname = '%s'";
-
- var $hasAffectedRows = true;
- var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10
- // below suggested by Freek Dijkstra
- var $true = 'TRUE'; // string that represents TRUE for a database
- var $false = 'FALSE'; // string that represents FALSE for a database
- var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database
- var $fmtTimeStamp = "'Y-m-d H:i:s'"; // used by DBTimeStamp as the default timestamp fmt.
- var $hasMoveFirst = true;
- var $hasGenID = true;
- var $_genIDSQL = "SELECT NEXTVAL('%s')";
- var $_genSeqSQL = "CREATE SEQUENCE %s START %s";
- var $_dropSeqSQL = "DROP SEQUENCE %s";
- var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum";
- var $random = 'random()'; /// random function
- var $autoRollback = true; // apparently pgsql does not autorollback properly before php 4.3.4
- // http://bugs.php.net/bug.php?id=25404
-
- var $uniqueIisR = true;
- var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database
- var $disableBlobs = false; // set to true to disable blob checking, resulting in 2-5% improvement in performance.
-
- /** @var int $_pnum Number of the last assigned query parameter {@see param()} */
- var $_pnum = 0;
-
- // The last (fmtTimeStamp is not entirely correct:
- // PostgreSQL also has support for time zones,
- // and writes these time in this format: "2001-03-01 18:59:26+02".
- // There is no code for the "+02" time zone information, so I just left that out.
- // I'm not familiar enough with both ADODB as well as Postgres
- // to know what the concequences are. The other values are correct (wheren't in 0.94)
- // -- Freek Dijkstra
-
- /**
- * Retrieve Server information.
- * In addition to server version and description, the function also returns
- * the client version.
- * @param bool $detailed If true, retrieve detailed version string (executes
- * a SQL query) in addition to the version number
- * @return array|bool Server info or false if version could not be retrieved
- * e.g. if there is no active connection
- */
- function ServerInfo($detailed = true)
- {
- if (empty($this->version['version'])) {
- // We don't have a connection, so we can't retrieve server info
- if (!$this->_connectionID) {
- return false;
- }
-
- $version = pg_version($this->_connectionID);
- $this->version = array(
- // If PHP has been compiled with PostgreSQL 7.3 or lower, then
- // server version is not set so we use pg_parameter_status()
- // which includes logic to obtain values server_version
- 'version' => isset($version['server'])
- ? $version['server']
- : pg_parameter_status($this->_connectionID, 'server_version'),
- 'client' => $version['client'],
- 'description' => null,
- );
- }
- if ($detailed && $this->version['description'] === null) {
- $this->version['description'] = $this->GetOne('select version()');
- }
-
- return $this->version;
- }
-
- function IfNull( $field, $ifNull )
- {
- return " coalesce($field, $ifNull) ";
- }
-
- // get the last id - never tested
- function pg_insert_id($tablename,$fieldname)
- {
- $result=pg_query($this->_connectionID, 'SELECT last_value FROM '. $tablename .'_'. $fieldname .'_seq');
- if ($result) {
- $arr = @pg_fetch_row($result,0);
- pg_free_result($result);
- if (isset($arr[0])) return $arr[0];
- }
- return false;
- }
-
- /**
- * Warning from http://www.php.net/manual/function.pg-getlastoid.php:
- * Using a OID as a unique identifier is not generally wise.
- * Unless you are very careful, you might end up with a tuple having
- * a different OID if a database must be reloaded.
- *
- * @inheritDoc
- */
- protected function _insertID($table = '', $column = '')
- {
- if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false;
- $oid = pg_last_oid($this->_resultid);
- // to really return the id, we need the table and column-name, else we can only return the oid != id
- return empty($table) || empty($column) ? $oid : $this->GetOne("SELECT $column FROM $table WHERE oid=".(int)$oid);
- }
-
- function _affectedrows()
- {
- if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false;
- return pg_affected_rows($this->_resultid);
- }
-
-
- /**
- * @return bool
- */
- function BeginTrans()
- {
- if ($this->transOff) return true;
- $this->transCnt += 1;
- return pg_query($this->_connectionID, 'begin '.$this->_transmode);
- }
-
- function RowLock($tables,$where,$col='1 as adodbignore')
- {
- if (!$this->transCnt) $this->BeginTrans();
- return $this->GetOne("select $col from $tables where $where for update");
- }
-
- // returns true/false.
- function CommitTrans($ok=true)
- {
- if ($this->transOff) return true;
- if (!$ok) return $this->RollbackTrans();
-
- $this->transCnt -= 1;
- return pg_query($this->_connectionID, 'commit');
- }
-
- // returns true/false
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- $this->transCnt -= 1;
- return pg_query($this->_connectionID, 'rollback');
- }
-
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- $info = $this->ServerInfo();
- if ($info['version'] >= 7.3) {
- $this->metaTablesSQL = "
- select table_name,'T' from information_schema.tables where table_schema not in ( 'pg_catalog','information_schema')
- union
- select table_name,'V' from information_schema.views where table_schema not in ( 'pg_catalog','information_schema') ";
- }
- if ($mask) {
- $save = $this->metaTablesSQL;
- $mask = $this->qstr(strtolower($mask));
- if ($info['version']>=7.3)
- $this->metaTablesSQL = "
- select table_name,'T' from information_schema.tables where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema')
- union
- select table_name,'V' from information_schema.views where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema') ";
- else
- $this->metaTablesSQL = "
- select tablename,'T' from pg_tables where tablename like $mask
- union
- select viewname,'V' from pg_views where viewname like $mask";
- }
- $ret = ADOConnection::MetaTables($ttype,$showSchema);
-
- if ($mask) {
- $this->metaTablesSQL = $save;
- }
- return $ret;
- }
-
-
- /**
- * Quotes a string to be sent to the database.
- *
- * Relies on pg_escape_string()
- * @link https://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:qstr
- *
- * @param string $s The string to quote
- * @param bool $magic_quotes This param is not used since 5.21.0.
- * It remains for backwards compatibility.
- *
- * @return string Quoted string
- */
- function qStr($s, $magic_quotes=false)
- {
- if (is_bool($s)) {
- return $s ? 'true' : 'false';
- }
-
- if ($this->_connectionID) {
- return "'" . pg_escape_string($this->_connectionID, $s) . "'";
- } else {
- return "'" . pg_escape_string($s) . "'";
- }
- }
-
-
- // Format date column in sql string given an input format that understands Y M D
- function SQLDate($fmt, $col=false)
- {
- if (!$col) $col = $this->sysTimeStamp;
- $s = 'TO_CHAR('.$col.",'";
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= 'YYYY';
- break;
- case 'Q':
- case 'q':
- $s .= 'Q';
- break;
-
- case 'M':
- $s .= 'Mon';
- break;
-
- case 'm':
- $s .= 'MM';
- break;
- case 'D':
- case 'd':
- $s .= 'DD';
- break;
-
- case 'H':
- $s.= 'HH24';
- break;
-
- case 'h':
- $s .= 'HH';
- break;
-
- case 'i':
- $s .= 'MI';
- break;
-
- case 's':
- $s .= 'SS';
- break;
-
- case 'a':
- case 'A':
- $s .= 'AM';
- break;
-
- case 'w':
- $s .= 'D';
- break;
-
- case 'l':
- $s .= 'DAY';
- break;
-
- case 'W':
- $s .= 'WW';
- break;
-
- default:
- // handle escape characters...
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- if (strpos('-/.:;, ',$ch) !== false) $s .= $ch;
- else $s .= '"'.$ch.'"';
-
- }
- }
- return $s. "')";
- }
-
-
-
- /*
- * Load a Large Object from a file
- * - the procedure stores the object id in the table and imports the object using
- * postgres proprietary blob handling routines
- *
- * contributed by Mattia Rossi mattia@technologist.com
- * modified for safe mode by juraj chlebec
- */
- function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB')
- {
- pg_query($this->_connectionID, 'begin');
-
- $fd = fopen($path,'r');
- $contents = fread($fd,filesize($path));
- fclose($fd);
-
- $oid = pg_lo_create($this->_connectionID);
- $handle = pg_lo_open($this->_connectionID, $oid, 'w');
- pg_lo_write($handle, $contents);
- pg_lo_close($handle);
-
- // $oid = pg_lo_import ($path);
- pg_query($this->_connectionID, 'commit');
- $rs = ADOConnection::UpdateBlob($table,$column,$oid,$where,$blobtype);
- $rez = !empty($rs);
- return $rez;
- }
-
- /*
- * Deletes/Unlinks a Blob from the database, otherwise it
- * will be left behind
- *
- * Returns TRUE on success or FALSE on failure.
- *
- * contributed by Todd Rogers todd#windfox.net
- */
- function BlobDelete( $blob )
- {
- pg_query($this->_connectionID, 'begin');
- $result = @pg_lo_unlink($this->_connectionID, $blob);
- pg_query($this->_connectionID, 'commit');
- return( $result );
- }
-
- /*
- Heuristic - not guaranteed to work.
- */
- function GuessOID($oid)
- {
- if (strlen($oid)>16) return false;
- return is_numeric($oid);
- }
-
- /*
- * If an OID is detected, then we use pg_lo_* to open the oid file and read the
- * real blob from the db using the oid supplied as a parameter. If you are storing
- * blobs using bytea, we autodetect and process it so this function is not needed.
- *
- * contributed by Mattia Rossi mattia@technologist.com
- *
- * see http://www.postgresql.org/idocs/index.php?largeobjects.html
- *
- * Since adodb 4.54, this returns the blob, instead of sending it to stdout. Also
- * added maxsize parameter, which defaults to $db->maxblobsize if not defined.
- */
- function BlobDecode($blob,$maxsize=false,$hastrans=true)
- {
- if (!$this->GuessOID($blob)) return $blob;
-
- if ($hastrans) pg_query($this->_connectionID,'begin');
- $fd = @pg_lo_open($this->_connectionID,$blob,'r');
- if ($fd === false) {
- if ($hastrans) pg_query($this->_connectionID,'commit');
- return $blob;
- }
- if (!$maxsize) $maxsize = $this->maxblobsize;
- $realblob = @pg_lo_read($fd,$maxsize);
- @pg_lo_close($fd);
- if ($hastrans) pg_query($this->_connectionID,'commit');
- return $realblob;
- }
-
- /**
- * Encode binary value prior to DB storage.
- *
- * See https://www.postgresql.org/docs/current/static/datatype-binary.html
- *
- * NOTE: SQL string literals (input strings) must be preceded with two
- * backslashes due to the fact that they must pass through two parsers in
- * the PostgreSQL backend.
- *
- * @param string $blob
- */
- function BlobEncode($blob)
- {
- return pg_escape_bytea($this->_connectionID, $blob);
- }
-
- // assumes bytea for blob, and varchar for clob
- function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
- {
- if ($blobtype == 'CLOB') {
- return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where");
- }
- // do not use bind params which uses qstr(), as blobencode() already quotes data
- return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where");
- }
-
- function OffsetDate($dayFraction,$date=false)
- {
- if (!$date) $date = $this->sysDate;
- else if (strncmp($date,"'",1) == 0) {
- $len = strlen($date);
- if (10 <= $len && $len <= 12) $date = 'date '.$date;
- else $date = 'timestamp '.$date;
- }
-
-
- return "($date+interval'".($dayFraction * 1440)." minutes')";
- #return "($date+interval'$dayFraction days')";
- }
-
- /**
- * Generate the SQL to retrieve MetaColumns data
- * @param string $table Table name
- * @param string $schema Schema name (can be blank)
- * @return string SQL statement to execute
- */
- protected function _generateMetaColumnsSQL($table, $schema)
- {
- if ($schema) {
- return sprintf($this->metaColumnsSQL1, $table, $table, $schema);
- }
- else {
- return sprintf($this->metaColumnsSQL, $table, $table, $schema);
- }
- }
-
- // for schema support, pass in the $table param "$schema.$tabname".
- // converts field names to lowercase, $upper is ignored
- // see PHPLens Issue No: 14018 for more info
- function MetaColumns($table,$normalize=true)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = false;
- $false = false;
- $this->_findschema($table,$schema);
-
- if ($normalize) $table = strtolower($table);
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
-
- $rs = $this->Execute($this->_generateMetaColumnsSQL($table, $schema));
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if ($rs === false) {
- return $false;
- }
- if (!empty($this->metaKeySQL)) {
- // If we want the primary keys, we have to issue a separate query
- // Of course, a modified version of the metaColumnsSQL query using a
- // LEFT JOIN would have been much more elegant, but postgres does
- // not support OUTER JOINS. So here is the clumsy way.
-
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
-
- $rskey = $this->Execute(sprintf($this->metaKeySQL,($table)));
- // fetch all result in once for performance.
- $keys = $rskey->GetArray();
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- $rskey->Close();
- unset($rskey);
- }
-
- $rsdefa = array();
- if (!empty($this->metaDefaultsSQL)) {
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- $sql = sprintf($this->metaDefaultsSQL, ($table));
- $rsdef = $this->Execute($sql);
- if (isset($savem)) $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if ($rsdef) {
- while (!$rsdef->EOF) {
- $num = $rsdef->fields['num'];
- $s = $rsdef->fields['def'];
- if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
- $s = substr($s, 1);
- $s = substr($s, 0, strlen($s) - 1);
- }
-
- $rsdefa[$num] = $s;
- $rsdef->MoveNext();
- }
- } else {
- ADOConnection::outp( "==> SQL => " . $sql);
- }
- unset($rsdef);
- }
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->fields[0];
- $fld->type = $rs->fields[1];
- $fld->max_length = $rs->fields[2];
- $fld->attnum = $rs->fields[6];
-
- if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
- if ($fld->max_length <= 0) $fld->max_length = -1;
- if ($fld->type == 'numeric') {
- $fld->scale = $fld->max_length & 0xFFFF;
- $fld->max_length >>= 16;
- }
- // dannym
- // 5 hasdefault; 6 num-of-column
- $fld->has_default = ($rs->fields[5] == 't');
- if ($fld->has_default) {
- $fld->default_value = $rsdefa[$rs->fields[6]];
- }
-
- //Freek
- $fld->not_null = $rs->fields[4] == 't';
-
-
- // Freek
- if (is_array($keys)) {
- foreach($keys as $key) {
- if ($fld->name == $key['column_name'] AND $key['primary_key'] == 't')
- $fld->primary_key = true;
- if ($fld->name == $key['column_name'] AND $key['unique_key'] == 't')
- $fld->unique = true; // What name is more compatible?
- }
- }
-
- if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
- else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld;
-
- $rs->MoveNext();
- }
- $rs->Close();
- if (empty($retarr))
- return $false;
- else
- return $retarr;
-
- }
-
- function param($name, $type='C')
- {
- if (!$name) {
- // Reset parameter number if $name is falsy
- $this->_pnum = 0;
- if ($name === false) {
- // and don't return placeholder if false (see #380)
- return '';
- }
- }
-
- return '$' . ++$this->_pnum;
- }
-
- function MetaIndexes ($table, $primary = FALSE, $owner = false)
- {
- global $ADODB_FETCH_MODE;
-
- $schema = false;
- $this->_findschema($table,$schema);
-
- if ($schema) { // requires pgsql 7.3+ - pg_namespace used.
- $sql = '
- SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns"
- FROM pg_catalog.pg_class c
- JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid
- JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid
- ,pg_namespace n
- WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))
- and c.relnamespace=c2.relnamespace
- and c.relnamespace=n.oid
- and n.nspname=\'%s\'';
- } else {
- $sql = '
- SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns"
- FROM pg_catalog.pg_class c
- JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid
- JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid
- WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))';
- }
-
- if ($primary == FALSE) {
- $sql .= ' AND i.indisprimary=false;';
- }
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $rs = $this->Execute(sprintf($sql,$table,$table,$schema));
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- $false = false;
- return $false;
- }
-
- $col_names = $this->MetaColumnNames($table,true,true);
- // 3rd param is use attnum,
- // see https://sourceforge.net/p/adodb/bugs/45/
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- $columns = array();
- foreach (explode(' ', $row[2]) as $col) {
- $columns[] = $col_names[$col];
- }
-
- $indexes[$row[0]] = array(
- 'unique' => ($row[1] == 't'),
- 'columns' => $columns
- );
- }
- return $indexes;
- }
-
- /**
- * Connect to a database.
- *
- * Examples:
- * $db->Connect("host=host1 user=user1 password=secret port=4341");
- * $db->Connect('host1:4341', 'user1', 'secret');
- *
- * @param string $str pg_connect() Connection string or Hostname[:port]
- * @param string $user (Optional) The username to connect as.
- * @param string $pwd (Optional) The password to connect with.
- * @param string $db (Optional) The name of the database to start in when connected.
- * @param int $ctype Connection type
- * @return bool|null True if connected successfully, false if connection failed, or
- * null if the PostgreSQL extension is not loaded.
- */
- function _connect($str, $user='', $pwd='', $db='', $ctype=0)
- {
- if (!function_exists('pg_connect')) {
- return null;
- }
-
- $this->_errorMsg = false;
-
- // If $user, $pwd and $db are all null, then $str is a pg_connect()
- // connection string. Otherwise we expect it to be a hostname,
- // with optional port separated by ':'
- if ($user || $pwd || $db) {
- // Hostname & port
- if ($str) {
- $host = explode(':', $str);
- if ($host[0]) {
- $conn['host'] = $host[0];
- }
- if (isset($host[1])) {
- $conn['port'] = (int)$host[1];
- } elseif (!empty($this->port)) {
- $conn['port'] = $this->port;
- }
- }
- $conn['user'] = $user;
- $conn['password'] = $pwd;
- // @TODO not sure why we default to 'template1', pg_connect() uses the username when dbname is empty
- $conn['dbname'] = $db ?: 'template1';
-
- // Generate connection string
- $str = '';
- foreach ($conn as $param => $value) {
- // Escaping single quotes and backslashes per pg_connect() documentation
- $str .= $param . "='" . addcslashes($value, "'\\") . "' ";
- }
- }
-
- if ($ctype === 1) { // persistent
- $this->_connectionID = pg_pconnect($str);
- } else {
- if ($ctype === -1) { // nconnect, we trick pgsql ext by changing the connection str
- static $ncnt;
-
- if (empty($ncnt)) $ncnt = 1;
- else $ncnt += 1;
-
- $str .= str_repeat(' ',$ncnt);
- }
- $this->_connectionID = pg_connect($str);
- }
- if ($this->_connectionID === false) return false;
- $this->Execute("set datestyle='ISO'");
-
- $info = $this->ServerInfo(false);
-
- if (version_compare($info['version'], '7.1', '>=')) {
- $this->_nestedSQL = true;
- }
-
- # PostgreSQL 9.0 changed the default output for bytea from 'escape' to 'hex'
- # PHP does not handle 'hex' properly ('x74657374' is returned as 't657374')
- # https://bugs.php.net/bug.php?id=59831 states this is in fact not a bug,
- # so we manually set bytea_output
- if (!empty($this->connection->noBlobs)
- && version_compare($info['version'], '9.0', '>=')
- && version_compare($info['client'], '9.2', '<')
- ) {
- $this->Execute('set bytea_output=escape');
- }
-
- return true;
- }
-
- function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName)
- {
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName,-1);
- }
-
- // returns true or false
- //
- // examples:
- // $db->PConnect("host=host1 user=user1 password=secret port=4341");
- // $db->PConnect('host1','user1','secret');
- function _pconnect($str,$user='',$pwd='',$db='')
- {
- return $this->_connect($str,$user,$pwd,$db,1);
- }
-
-
- // returns queryID or false
- function _query($sql,$inputarr=false)
- {
- $this->_pnum = 0;
- $this->_errorMsg = false;
- if ($inputarr) {
- /*
- It appears that PREPARE/EXECUTE is slower for many queries.
-
- For query executed 1000 times:
- "select id,firstname,lastname from adoxyz
- where firstname not like ? and lastname not like ? and id = ?"
-
- with plan = 1.51861286163 secs
- no plan = 1.26903700829 secs
- */
- $plan = 'P'.md5($sql);
-
- $execp = '';
- foreach($inputarr as $v) {
- if ($execp) $execp .= ',';
- if (is_string($v)) {
- if (strncmp($v,"'",1) !== 0) $execp .= $this->qstr($v);
- } else {
- $execp .= $v;
- }
- }
-
- if ($execp) $exsql = "EXECUTE $plan ($execp)";
- else $exsql = "EXECUTE $plan";
-
- $rez = @pg_query($this->_connectionID, $exsql);
- if (!$rez) {
- # Perhaps plan does not exist? Prepare/compile plan.
- $params = '';
- foreach($inputarr as $v) {
- if ($params) $params .= ',';
- if (is_string($v)) {
- $params .= 'VARCHAR';
- } else if (is_integer($v)) {
- $params .= 'INTEGER';
- } else {
- $params .= "REAL";
- }
- }
- $sqlarr = explode('?',$sql);
- //print_r($sqlarr);
- $sql = '';
- $i = 1;
- foreach($sqlarr as $v) {
- $sql .= $v.' $'.$i;
- $i++;
- }
- $s = "PREPARE $plan ($params) AS ".substr($sql,0,strlen($sql)-2);
- //adodb_pr($s);
- $rez = pg_query($this->_connectionID, $s);
- //echo $this->ErrorMsg();
- }
- if ($rez)
- $rez = pg_query($this->_connectionID, $exsql);
- } else {
- //adodb_backtrace();
- $rez = pg_query($this->_connectionID, $sql);
- }
- // check if no data returned, then no need to create real recordset
- if ($rez && pg_num_fields($rez) <= 0) {
- if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') {
- pg_free_result($this->_resultid);
- }
- $this->_resultid = $rez;
- return true;
- }
-
- return $rez;
- }
-
- function _errconnect()
- {
- if (defined('DB_ERROR_CONNECT_FAILED')) return DB_ERROR_CONNECT_FAILED;
- else return 'Database connection failed';
- }
-
- /* Returns: the last error message from previous database operation */
- function ErrorMsg()
- {
- if ($this->_errorMsg !== false) {
- return $this->_errorMsg;
- }
-
- if (!empty($this->_resultid)) {
- $this->_errorMsg = @pg_result_error($this->_resultid);
- if ($this->_errorMsg) {
- return $this->_errorMsg;
- }
- }
-
- if (!empty($this->_connectionID)) {
- $this->_errorMsg = @pg_last_error($this->_connectionID);
- } else {
- $this->_errorMsg = $this->_errconnect();
- }
-
- return $this->_errorMsg;
- }
-
- function ErrorNo()
- {
- $e = $this->ErrorMsg();
- if (strlen($e)) {
- return ADOConnection::MetaError($e);
- }
- return 0;
- }
-
- // returns true or false
- function _close()
- {
- if ($this->transCnt) $this->RollbackTrans();
- if ($this->_resultid) {
- @pg_free_result($this->_resultid);
- $this->_resultid = false;
- }
- @pg_close($this->_connectionID);
- $this->_connectionID = false;
- return true;
- }
-
-
- /*
- * Maximum size of C field
- */
- function CharMax()
- {
- return 1000000000; // should be 1 Gb?
- }
-
- /*
- * Maximum size of X field
- */
- function TextMax()
- {
- return 1000000000; // should be 1 Gb?
- }
-
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordSet_postgres64 extends ADORecordSet{
- var $_blobArr;
- var $databaseType = "postgres64";
- var $canSeek = true;
-
- function __construct($queryID, $mode=false)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- switch ($mode)
- {
- case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break;
- 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)
- {
- if ($this->fetchMode == PGSQL_ASSOC && $upper == ADODB_ASSOC_CASE_LOWER) {
- return $this->fields;
- }
- $row = ADORecordSet::GetRowAssoc($upper);
- return $row;
- }
-
- function _initRS()
- {
- global $ADODB_COUNTRECS;
- $qid = $this->_queryID;
- $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_num_rows($qid):-1;
- $this->_numOfFields = @pg_num_fields($qid);
-
- // cache types for blob decode check
- // apparently pg_field_type actually performs an sql query on the database to get the type.
- if (empty($this->connection->noBlobs))
- for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) {
- if (pg_field_type($qid,$i) == 'bytea') {
- $this->_blobArr[$i] = pg_field_name($qid,$i);
- }
- }
- }
-
- function fields($colname)
- {
- if ($this->fetchMode != PGSQL_NUM) {
- return @$this->fields[$colname];
- }
-
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- function fetchField($fieldOffset = 0)
- {
- // offsets begin at 0
-
- $o = new ADOFieldObject();
- $o->name = @pg_field_name($this->_queryID, $fieldOffset);
- $o->type = @pg_field_type($this->_queryID, $fieldOffset);
- $o->max_length = @pg_field_size($this->_queryID, $fieldOffset);
- return $o;
- }
-
- function _seek($row)
- {
- return @pg_fetch_row($this->_queryID,$row);
- }
-
- function _decode($blob)
- {
- if ($blob === NULL) return NULL;
-// eval('$realblob="'.str_replace(array('"','$'),array('\"','\$'),$blob).'";');
- return pg_unescape_bytea($blob);
- }
-
- /**
- * Fetches and prepares the RecordSet's fields.
- *
- * Fixes the blobs if there are any.
- */
- protected function _prepFields()
- {
- $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
-
- // Check prerequisites and bail early if we do not have what we need.
- if (!isset($this->_blobArr) || $this->fields === false) {
- return;
- }
-
- if ($this->fetchMode == PGSQL_NUM || $this->fetchMode == PGSQL_BOTH) {
- foreach($this->_blobArr as $k => $v) {
- $this->fields[$k] = ADORecordSet_postgres64::_decode($this->fields[$k]);
- }
- }
- if ($this->fetchMode == PGSQL_ASSOC || $this->fetchMode == PGSQL_BOTH) {
- foreach($this->_blobArr as $k => $v) {
- $this->fields[$v] = ADORecordSet_postgres64::_decode($this->fields[$v]);
- }
- }
- }
-
- // 10% speedup to move MoveNext to child class
- function MoveNext()
- {
- if (!$this->EOF) {
- $this->_currentRow++;
- if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
- $this->_prepfields();
- if ($this->fields !== false) {
- return true;
- }
- }
- $this->fields = false;
- $this->EOF = true;
- }
- return false;
- }
-
- function _fetch()
- {
- if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) {
- return false;
- }
-
- $this->_prepfields();
- return $this->fields !== false;
- }
-
- function _close()
- {
- if (!is_resource($this->_queryID)
- || get_resource_type($this->_queryID) != 'pgsql result'
- ) {
- return true;
- }
- return pg_free_result($this->_queryID);
- }
-
- function MetaType($t,$len=-1,$fieldobj=false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- $t = strtoupper($t);
-
- if (array_key_exists($t,$this->connection->customActualTypes))
- return $this->connection->customActualTypes[$t];
-
- switch ($t) {
- case 'MONEY': // stupid, postgres expects money to be a string
- case 'INTERVAL':
- case 'CHAR':
- case 'CHARACTER':
- case 'VARCHAR':
- case 'NAME':
- case 'BPCHAR':
- case '_VARCHAR':
- case 'CIDR':
- case 'INET':
- case 'MACADDR':
- case 'UUID':
- if ($len <= $this->blobSize) return 'C';
-
- case 'TEXT':
- return 'X';
-
- case 'IMAGE': // user defined type
- case 'BLOB': // user defined type
- case 'BIT': // This is a bit string, not a single bit, so don't return 'L'
- case 'VARBIT':
- case 'BYTEA':
- return 'B';
-
- case 'BOOL':
- case 'BOOLEAN':
- return 'L';
-
- case 'DATE':
- return 'D';
-
-
- case 'TIMESTAMP WITHOUT TIME ZONE':
- case 'TIME':
- case 'DATETIME':
- case 'TIMESTAMP':
- case 'TIMESTAMPTZ':
- return 'T';
-
- case 'SMALLINT':
- case 'BIGINT':
- case 'INTEGER':
- case 'INT8':
- case 'INT4':
- case 'INT2':
- if (isset($fieldobj) &&
- empty($fieldobj->primary_key) && (!$this->connection->uniqueIisR || empty($fieldobj->unique))) return 'I';
-
- case 'OID':
- case 'SERIAL':
- return 'R';
-
- case 'NUMERIC':
- case 'DECIMAL':
- case 'FLOAT4':
- case 'FLOAT8':
- return 'N';
-
- default:
- return ADODB_DEFAULT_METATYPE;
- }
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-postgres7.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-postgres7.inc.php
deleted file mode 100644
index ddbe7a6e0..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-postgres7.inc.php
+++ /dev/null
@@ -1,352 +0,0 @@
- 0
- AND a.attrelid = c.oid
- ORDER BY
- a.attnum";
-
- // used when schema defined
- var $metaColumnsSQL1 = "
- SELECT
- a.attname,
- CASE
- WHEN x.sequence_name != ''
- THEN 'SERIAL'
- ELSE t.typname
- END AS typname,
- a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum
- FROM
- pg_class c,
- pg_namespace n,
- pg_attribute a
- JOIN pg_type t ON a.atttypid = t.oid
- LEFT JOIN (
- SELECT
- c.relname as sequence_name,
- c1.relname as related_table,
- a.attname as related_column
- FROM pg_class c
- JOIN pg_depend d ON d.objid = c.oid
- LEFT JOIN pg_class c1 ON d.refobjid = c1.oid
- LEFT JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
- WHERE c.relkind = 'S' AND c1.relname = '%s'
- ) x ON x.related_column= a.attname
- WHERE
- c.relkind in ('r','v')
- AND (c.relname='%s' or c.relname = lower('%s'))
- AND c.relnamespace=n.oid and n.nspname='%s'
- AND a.attname not like '....%%'
- AND a.attnum > 0
- AND a.atttypid = t.oid
- AND a.attrelid = c.oid
- ORDER BY a.attnum";
-
-
- function __construct()
- {
- parent::__construct();
- if (ADODB_ASSOC_CASE !== ADODB_ASSOC_CASE_NATIVE) {
- $this->rsPrefix .= 'assoc_';
- }
- $this->_bindInputArray = true;
- }
-
-
- // the following should be compat with postgresql 7.2,
- // which makes obsolete the LIMIT limit,offset syntax
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr = ($offset >= 0) ? " OFFSET ".((integer)$offset) : '';
- $limitStr = ($nrows >= 0) ? " LIMIT ".((integer)$nrows) : '';
- if ($secs2cache)
- $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
- else
- $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr);
-
- return $rs;
- }
-
- /*
- function Prepare($sql)
- {
- $info = $this->ServerInfo();
- if ($info['version']>=7.3) {
- return array($sql,false);
- }
- return $sql;
- }
- */
-
- /**
- * Generate the SQL to retrieve MetaColumns data
- * @param string $table Table name
- * @param string $schema Schema name (can be blank)
- * @return string SQL statement to execute
- */
- protected function _generateMetaColumnsSQL($table, $schema)
- {
- if ($schema) {
- return sprintf($this->metaColumnsSQL1, $table, $table, $table, $schema);
- }
- else {
- return sprintf($this->metaColumnsSQL, $table, $table, $schema);
- }
- }
-
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- # Regex isolates the 2 terms between parenthesis using subexpressions
- $regex = '^.*\((.*)\).*\((.*)\).*$';
- $sql="
- SELECT
- lookup_table,
- regexp_replace(consrc, '$regex', '\\2') AS lookup_field,
- dep_table,
- regexp_replace(consrc, '$regex', '\\1') AS dep_field
- FROM (
- SELECT
- pg_get_constraintdef(c.oid) AS consrc,
- t.relname AS dep_table,
- ft.relname AS lookup_table
- FROM pg_constraint c
- JOIN pg_class t ON (t.oid = c.conrelid)
- JOIN pg_class ft ON (ft.oid = c.confrelid)
- JOIN pg_namespace nft ON (nft.oid = ft.relnamespace)
- LEFT JOIN pg_description ds ON (ds.objoid = c.oid)
- JOIN pg_namespace n ON (n.oid = t.relnamespace)
- WHERE c.contype = 'f'::\"char\"
- ORDER BY t.relname, n.nspname, c.conname, c.oid
- ) constraints
- WHERE
- dep_table='".strtolower($table)."'
- ORDER BY
- lookup_table,
- dep_table,
- dep_field";
- $rs = $this->Execute($sql);
-
- if (!$rs || $rs->EOF) return false;
-
- $a = array();
- while (!$rs->EOF) {
- $lookup_table = $rs->fields('lookup_table');
- $fields = $rs->fields('dep_field') . '=' . $rs->fields('lookup_field');
- if ($upper) {
- $lookup_table = strtoupper($lookup_table);
- $fields = strtoupper($fields);
- }
- $a[$lookup_table][] = str_replace('"','', $fields);
-
- $rs->MoveNext();
- }
-
- return $a;
- }
-
- function _query($sql,$inputarr=false)
- {
- if (! $this->_bindInputArray) {
- // We don't have native support for parameterized queries, so let's emulate it at the parent
- return ADODB_postgres64::_query($sql, $inputarr);
- }
-
- $this->_pnum = 0;
- $this->_errorMsg = false;
- // -- added Cristiano da Cunha Duarte
- if ($inputarr) {
- $sqlarr = explode('?',trim($sql));
- $sql = '';
- $i = 1;
- $last = sizeof($sqlarr)-1;
- foreach($sqlarr as $v) {
- if ($last < $i) $sql .= $v;
- else $sql .= $v.' $'.$i;
- $i++;
- }
-
- $rez = pg_query_params($this->_connectionID,$sql, $inputarr);
- } else {
- $rez = pg_query($this->_connectionID,$sql);
- }
- // check if no data returned, then no need to create real recordset
- if ($rez && pg_num_fields($rez) <= 0) {
- if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') {
- pg_free_result($this->_resultid);
- }
- $this->_resultid = $rez;
- return true;
- }
- return $rez;
- }
-
- /**
- * Retrieve the client connection's current character set.
-
- * If no charsets were compiled into the server, the function will always
- * return 'SQL_ASCII'.
- * @see https://www.php.net/manual/en/function.pg-client-encoding.php
- *
- * @return string|false The character set, or false if it can't be determined.
- */
- function getCharSet()
- {
- if (!$this->_connectionID) {
- return false;
- }
- $this->charSet = pg_client_encoding($this->_connectionID);
- return $this->charSet ?: false;
- }
-
- /**
- * Sets the client-side character set (encoding).
- *
- * Allows managing client encoding - very important if the database and
- * the output target (i.e. HTML) don't match; for instance, you may have a
- * UNICODE database and server your pages as WIN1251, etc.
- *
- * Supported on PostgreSQL 7.0 and above. Available charsets depend on
- * PostgreSQL version and the distribution's compile flags.
- *
- * @param string $charset The character set to switch to.
- *
- * @return bool True if the character set was changed successfully, false otherwise.
- */
- function setCharSet($charset)
- {
- if ($this->charSet !== $charset) {
- if (!$this->_connectionID || pg_set_client_encoding($this->_connectionID, $charset) != 0) {
- return false;
- }
- $this->getCharSet();
- }
- return true;
- }
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordSet_postgres7 extends ADORecordSet_postgres64{
-
- var $databaseType = "postgres7";
-
- // 10% speedup to move MoveNext to child class
- function MoveNext()
- {
- if (!$this->EOF) {
- $this->_currentRow++;
- if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
- $this->_prepfields();
- if ($this->fields !== false) {
- return true;
- }
- }
- $this->fields = false;
- $this->EOF = true;
- }
- return false;
- }
-
-}
-
-class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{
-
- var $databaseType = "postgres7";
-
-
- function _fetch()
- {
- if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) {
- return false;
- }
-
- $this->_prepfields();
- if ($this->fields !== false) {
- $this->_updatefields();
- return true;
- }
-
- return false;
- }
-
- function MoveNext()
- {
- if (!$this->EOF) {
- $this->_currentRow++;
- if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
- $this->_prepfields();
- if ($this->fields !== false) {
- $this->_updatefields();
- return true;
- }
- }
-
- $this->fields = false;
- $this->EOF = true;
- }
- return false;
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-postgres8.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-postgres8.inc.php
deleted file mode 100644
index 37c2aae14..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-postgres8.inc.php
+++ /dev/null
@@ -1,64 +0,0 @@
-GetOne("SELECT lastval()")
- : $this->GetOne("SELECT currval(pg_get_serial_sequence('$table', '$column'))");
- }
-}
-
-class ADORecordSet_postgres8 extends ADORecordSet_postgres7
-{
- var $databaseType = "postgres8";
-}
-
-class ADORecordSet_assoc_postgres8 extends ADORecordSet_assoc_postgres7
-{
- var $databaseType = "postgres8";
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-postgres9.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-postgres9.inc.php
deleted file mode 100644
index fb9c6785e..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-postgres9.inc.php
+++ /dev/null
@@ -1,40 +0,0 @@
-Quote(strtoupper($table));
-
- return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos");
- }
-
- function MetaIndexes ($table, $primary = FALSE, $owner = false)
- {
- $table = $this->Quote(strtoupper($table));
-
- $sql = "SELECT INDEXNAME,TYPE,COLUMNNAME FROM INDEXCOLUMNS ".
- " WHERE TABLENAME=$table".
- " ORDER BY INDEXNAME,COLUMNNO";
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $rs = $this->Execute($sql);
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- if (!is_object($rs)) {
- return FALSE;
- }
-
- $indexes = array();
- while ($row = $rs->FetchRow()) {
- $indexes[$row[0]]['unique'] = $row[1] == 'UNIQUE';
- $indexes[$row[0]]['columns'][] = $row[2];
- }
- if ($primary) {
- $indexes['SYSPRIMARYKEYINDEX'] = array(
- 'unique' => True, // by definition
- 'columns' => $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"),
- );
- }
- return $indexes;
- }
-
- function MetaColumns ($table, $normalize = true)
- {
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
- $table = $this->Quote(strtoupper($table));
-
- $retarr = array();
- foreach($this->GetAll("SELECT COLUMNNAME,DATATYPE,LEN,DEC,NULLABLE,MODE,\"DEFAULT\",CASE WHEN \"DEFAULT\" IS NULL THEN 0 ELSE 1 END AS HAS_DEFAULT FROM COLUMNS WHERE tablename=$table ORDER BY pos") as $column)
- {
- $fld = new ADOFieldObject();
- $fld->name = $column[0];
- $fld->type = $column[1];
- $fld->max_length = $fld->type == 'LONG' ? 2147483647 : $column[2];
- $fld->scale = $column[3];
- $fld->not_null = $column[4] == 'NO';
- $fld->primary_key = $column[5] == 'KEY';
- if ($fld->has_default = $column[7]) {
- if ($fld->primary_key && $column[6] == 'DEFAULT SERIAL (1)') {
- $fld->auto_increment = true;
- $fld->has_default = false;
- } else {
- $fld->default_value = $column[6];
- switch($fld->type) {
- case 'VARCHAR':
- case 'CHARACTER':
- case 'LONG':
- $fld->default_value = $column[6];
- break;
- default:
- $fld->default_value = trim($column[6]);
- break;
- }
- }
- }
- $retarr[$fld->name] = $fld;
- }
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
-
- return $retarr;
- }
-
- function MetaColumnNames($table, $numIndexes = false, $useattnum = false)
- {
- $table = $this->Quote(strtoupper($table));
-
- return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table ORDER BY pos");
- }
-
- // unlike it seems, this depends on the db-session and works in a multiuser environment
- protected function _insertID($table = '', $column = '')
- {
- return empty($table) ? False : $this->GetOne("SELECT $table.CURRVAL FROM DUAL");
- }
-
- /*
- SelectLimit implementation problems:
-
- The following will return random 10 rows as order by performed after "WHERE rowno<10"
- which is not ideal...
-
- select * from table where rowno < 10 order by 1
-
- This means that we have to use the adoconnection base class SelectLimit when
- there is an "order by".
-
- See http://listserv.sap.com/pipermail/sapdb.general/2002-January/010405.html
- */
-
-};
-
-
-class ADORecordSet_sapdb extends ADORecordSet_odbc {
-
- var $databaseType = "sapdb";
-
-}
-
-} //define
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sqlanywhere.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sqlanywhere.inc.php
deleted file mode 100644
index 88897af92..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sqlanywhere.inc.php
+++ /dev/null
@@ -1,138 +0,0 @@
-GetOne('select @@identity');
- }
-
- function create_blobvar($blobVarName) {
- $this->Execute("create variable $blobVarName long binary");
- return;
- }
-
- function drop_blobvar($blobVarName) {
- $this->Execute("drop variable $blobVarName");
- return;
- }
-
- function load_blobvar_from_file($blobVarName, $filename) {
- $chunk_size = 1000;
-
- $fd = fopen ($filename, "rb");
-
- $integer_chunks = (integer)filesize($filename) / $chunk_size;
- $modulus = filesize($filename) % $chunk_size;
- if ($modulus != 0){
- $integer_chunks += 1;
- }
-
- for($loop=1;$loop<=$integer_chunks;$loop++){
- $contents = fread ($fd, $chunk_size);
- $contents = bin2hex($contents);
-
- $hexstring = '';
-
- for($loop2=0;$loop2qstr($hexstring);
-
- $this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
- }
-
- fclose ($fd);
- return;
- }
-
- function load_blobvar_from_var($blobVarName, &$varName) {
- $chunk_size = 1000;
-
- $integer_chunks = (integer)strlen($varName) / $chunk_size;
- $modulus = strlen($varName) % $chunk_size;
- if ($modulus != 0){
- $integer_chunks += 1;
- }
-
- for($loop=1;$loop<=$integer_chunks;$loop++){
- $contents = substr ($varName, (($loop - 1) * $chunk_size), $chunk_size);
- $contents = bin2hex($contents);
-
- $hexstring = '';
-
- for($loop2=0;$loop2qstr($hexstring);
-
- $this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
- }
-
- return;
- }
-
- /*
- Insert a null into the blob field of the table first.
- Then use UpdateBlob to store the blob.
-
- Usage:
-
- $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');
- $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
- */
- function UpdateBlob($table,$column,&$val,$where,$blobtype='BLOB')
- {
- $blobVarName = 'hold_blob';
- $this->create_blobvar($blobVarName);
- $this->load_blobvar_from_var($blobVarName, $val);
- $this->Execute("UPDATE $table SET $column=$blobVarName WHERE $where");
- $this->drop_blobvar($blobVarName);
- return true;
- }
- }; //class
-
- class ADORecordSet_sqlanywhere extends ADORecordSet_odbc {
-
- var $databaseType = "sqlanywhere";
-
-
- }; //class
-
-
-} //define
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sqlite.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sqlite.inc.php
deleted file mode 100644
index 0711f1dde..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sqlite.inc.php
+++ /dev/null
@@ -1,513 +0,0 @@
-transOff) {
- return true;
- }
- $ret = $this->Execute("BEGIN TRANSACTION");
- $this->transCnt += 1;
- return true;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) {
- return true;
- }
- if (!$ok) {
- return $this->RollbackTrans();
- }
- $ret = $this->Execute("COMMIT");
- if ($this->transCnt > 0) {
- $this->transCnt -= 1;
- }
- return !empty($ret);
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) {
- return true;
- }
- $ret = $this->Execute("ROLLBACK");
- if ($this->transCnt > 0) {
- $this->transCnt -= 1;
- }
- return !empty($ret);
- }
-
- // mark newnham
- function MetaColumns($table, $normalize=true)
- {
- global $ADODB_FETCH_MODE;
- $false = false;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- if ($this->fetchMode !== false) {
- $savem = $this->SetFetchMode(false);
- }
- $rs = $this->Execute("PRAGMA table_info('$table')");
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- if (!$rs) {
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
- $arr = array();
- while ($r = $rs->FetchRow()) {
- $type = explode('(',$r['type']);
- $size = '';
- if (sizeof($type)==2) {
- $size = trim($type[1],')');
- }
- $fn = strtoupper($r['name']);
- $fld = new ADOFieldObject;
- $fld->name = $r['name'];
- $fld->type = $type[0];
- $fld->max_length = $size;
- $fld->not_null = $r['notnull'];
- $fld->default_value = $r['dflt_value'];
- $fld->scale = 0;
- if (isset($r['pk']) && $r['pk']) {
- $fld->primary_key=1;
- }
- if ($save == ADODB_FETCH_NUM) {
- $arr[] = $fld;
- } else {
- $arr[strtoupper($fld->name)] = $fld;
- }
- }
- $rs->Close();
- $ADODB_FETCH_MODE = $save;
- return $arr;
- }
-
- function _init($parentDriver)
- {
- $parentDriver->hasTransactions = false;
- $parentDriver->hasInsertID = true;
- }
-
- protected function _insertID($table = '', $column = '')
- {
- return sqlite_last_insert_rowid($this->_connectionID);
- }
-
- function _affectedrows()
- {
- return sqlite_changes($this->_connectionID);
- }
-
- function ErrorMsg()
- {
- if ($this->_logsql) {
- return $this->_errorMsg;
- }
- return ($this->_errorNo) ? sqlite_error_string($this->_errorNo) : '';
- }
-
- function ErrorNo()
- {
- return $this->_errorNo;
- }
-
- function SQLDate($fmt, $col=false)
- {
- $fmt = $this->qstr($fmt);
- return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)";
- }
-
-
- function _createFunctions()
- {
- @sqlite_create_function($this->_connectionID, 'adodb_date', 'adodb_date', 1);
- @sqlite_create_function($this->_connectionID, 'adodb_date2', 'adodb_date2', 2);
- }
-
-
- // returns true or false
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('sqlite_open')) {
- return null;
- }
- if (empty($argHostname) && $argDatabasename) {
- $argHostname = $argDatabasename;
- }
-
- $this->_connectionID = sqlite_open($argHostname);
- if ($this->_connectionID === false) {
- return false;
- }
- $this->_createFunctions();
- return true;
- }
-
- // returns true or false
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('sqlite_open')) {
- return null;
- }
- if (empty($argHostname) && $argDatabasename) {
- $argHostname = $argDatabasename;
- }
-
- $this->_connectionID = sqlite_popen($argHostname);
- if ($this->_connectionID === false) {
- return false;
- }
- $this->_createFunctions();
- return true;
- }
-
- // returns query ID if successful, otherwise false
- function _query($sql,$inputarr=false)
- {
- $rez = sqlite_query($sql,$this->_connectionID);
- if (!$rez) {
- $this->_errorNo = sqlite_last_error($this->_connectionID);
- }
- // If no data was returned, we don't need to create a real recordset
- // Note: this code is untested, as I don't have a sqlite2 setup available
- elseif (sqlite_num_fields($rez) == 0) {
- $rez = true;
- }
-
- return $rez;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
- $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : '');
- if ($secs2cache) {
- $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
- } else {
- $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr);
- }
-
- return $rs;
- }
-
- /*
- This algorithm is not very efficient, but works even if table locking
- is not available.
-
- Will return false if unable to generate an ID after $MAXLOOPS attempts.
- */
- var $_genSeqSQL = "create table %s (id integer)";
-
- function GenID($seq='adodbseq',$start=1)
- {
- // if you have to modify the parameter below, your database is overloaded,
- // or you need to implement generation of id's yourself!
- $MAXLOOPS = 100;
- //$this->debug=1;
- while (--$MAXLOOPS>=0) {
- @($num = $this->GetOne("select id from $seq"));
- if ($num === false) {
- $this->Execute(sprintf($this->_genSeqSQL ,$seq));
- $start -= 1;
- $num = '0';
- $ok = $this->Execute("insert into $seq values($start)");
- if (!$ok) {
- return false;
- }
- }
- $this->Execute("update $seq set id=id+1 where id=$num");
-
- if ($this->affected_rows() > 0) {
- $num += 1;
- $this->genID = $num;
- return $num;
- }
- }
- if ($fn = $this->raiseErrorFn) {
- $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
- }
- return false;
- }
-
- function CreateSequence($seqname='adodbseq',$start=1)
- {
- if (empty($this->_genSeqSQL)) {
- return false;
- }
- $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
- if (!$ok) {
- return false;
- }
- $start -= 1;
- return $this->Execute("insert into $seqname values($start)");
- }
-
- var $_dropSeqSQL = 'drop table %s';
- function DropSequence($seqname = 'adodbseq')
- {
- if (empty($this->_dropSeqSQL)) {
- return false;
- }
- return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
- }
-
- // returns true or false
- function _close()
- {
- return @sqlite_close($this->_connectionID);
- }
-
- function MetaIndexes($table, $primary = FALSE, $owner = false)
- {
- $false = false;
- // save old fetch mode
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
- $SQL=sprintf("SELECT name,sql FROM sqlite_master WHERE type='index' AND tbl_name='%s'", strtolower($table));
- $rs = $this->Execute($SQL);
- if (!is_object($rs)) {
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
-
- $indexes = array ();
- while ($row = $rs->FetchRow()) {
- if ($primary && preg_match("/primary/i",$row[1]) == 0) {
- continue;
- }
- if (!isset($indexes[$row[0]])) {
- $indexes[$row[0]] = array(
- 'unique' => preg_match("/unique/i",$row[1]),
- 'columns' => array()
- );
- }
- /**
- * There must be a more elegant way of doing this,
- * the index elements appear in the SQL statement
- * in cols[1] between parentheses
- * e.g CREATE UNIQUE INDEX ware_0 ON warehouse (org,warehouse)
- */
- $cols = explode("(",$row[1]);
- $cols = explode(")",$cols[1]);
- array_pop($cols);
- $indexes[$row[0]]['columns'] = $cols;
- }
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- }
- return $indexes;
- }
-
- /**
- * Returns the maximum size of a MetaType C field. Because of the
- * database design, sqlite places no limits on the size of data inserted
- *
- * @return int
- */
- function charMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Returns the maximum size of a MetaType X field. Because of the
- * database design, sqlite places no limits on the size of data inserted
- *
- * @return int
- */
- function textMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /*
- * Converts a date to a month only field and pads it to 2 characters
- *
- * @param str $fld The name of the field to process
- * @return str The SQL Statement
- */
- function month($fld)
- {
- $x = "strftime('%m',$fld)";
-
- return $x;
- }
-
- /*
- * Converts a date to a day only field and pads it to 2 characters
- *
- * @param str $fld The name of the field to process
- * @return str The SQL Statement
- */
- function day($fld) {
- $x = "strftime('%d',$fld)";
- return $x;
- }
-
- /*
- * Converts a date to a year only field
- *
- * @param str $fld The name of the field to process
- * @return str The SQL Statement
- */
- function year($fld) {
- $x = "strftime('%Y',$fld)";
-
- return $x;
- }
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_sqlite extends ADORecordSet {
-
- var $databaseType = "sqlite";
- var $bind = 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 = SQLITE_NUM;
- break;
- case ADODB_FETCH_ASSOC:
- $this->fetchMode = SQLITE_ASSOC;
- break;
- default:
- $this->fetchMode = SQLITE_BOTH;
- break;
- }
- $this->adodbFetchMode = $mode;
-
- $this->_queryID = $queryID;
-
- $this->_inited = true;
- $this->fields = array();
- if ($queryID) {
- $this->_currentRow = 0;
- $this->EOF = !$this->_fetch();
- @$this->_initrs();
- } else {
- $this->_numOfRows = 0;
- $this->_numOfFields = 0;
- $this->EOF = true;
- }
-
- return $this->_queryID;
- }
-
-
- function FetchField($fieldOffset = -1)
- {
- $fld = new ADOFieldObject;
- $fld->name = sqlite_field_name($this->_queryID, $fieldOffset);
- $fld->type = 'VARCHAR';
- $fld->max_length = -1;
- return $fld;
- }
-
- function _initrs()
- {
- $this->_numOfRows = @sqlite_num_rows($this->_queryID);
- $this->_numOfFields = @sqlite_num_fields($this->_queryID);
- }
-
- function Fields($colname)
- {
- if ($this->fetchMode != SQLITE_NUM) {
- return $this->fields[$colname];
- }
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- function _seek($row)
- {
- return sqlite_seek($this->_queryID, $row);
- }
-
- function _fetch($ignore_fields=false)
- {
- $this->fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode);
- return !empty($this->fields);
- }
-
- function _close()
- {
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sqlite3.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sqlite3.inc.php
deleted file mode 100644
index 318171a8c..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sqlite3.inc.php
+++ /dev/null
@@ -1,810 +0,0 @@
-transOff) {
- return true;
- }
- $this->Execute("BEGIN TRANSACTION");
- $this->transCnt += 1;
- return true;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) {
- return true;
- }
- if (!$ok) {
- return $this->RollbackTrans();
- }
- $ret = $this->Execute("COMMIT");
- if ($this->transCnt > 0) {
- $this->transCnt -= 1;
- }
- return !empty($ret);
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) {
- return true;
- }
- $ret = $this->Execute("ROLLBACK");
- if ($this->transCnt > 0) {
- $this->transCnt -= 1;
- }
- return !empty($ret);
- }
-
- function metaType($t,$len=-1,$fieldobj=false)
- {
-
- if (is_object($t))
- {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
-
- $t = strtoupper($t);
-
- if (array_key_exists($t,$this->customActualTypes))
- return $this->customActualTypes[$t];
-
- /*
- * We are using the Sqlite affinity method here
- * @link https://www.sqlite.org/datatype3.html
- */
- $affinity = array(
- 'INT'=>'INTEGER',
- 'INTEGER'=>'INTEGER',
- 'TINYINT'=>'INTEGER',
- 'SMALLINT'=>'INTEGER',
- 'MEDIUMINT'=>'INTEGER',
- 'BIGINT'=>'INTEGER',
- 'UNSIGNED BIG INT'=>'INTEGER',
- 'INT2'=>'INTEGER',
- 'INT8'=>'INTEGER',
-
- 'CHARACTER'=>'TEXT',
- 'VARCHAR'=>'TEXT',
- 'VARYING CHARACTER'=>'TEXT',
- 'NCHAR'=>'TEXT',
- 'NATIVE CHARACTER'=>'TEXT',
- 'NVARCHAR'=>'TEXT',
- 'TEXT'=>'TEXT',
- 'CLOB'=>'TEXT',
-
- 'BLOB'=>'BLOB',
-
- 'REAL'=>'REAL',
- 'DOUBLE'=>'REAL',
- 'DOUBLE PRECISION'=>'REAL',
- 'FLOAT'=>'REAL',
-
- 'NUMERIC'=>'NUMERIC',
- 'DECIMAL'=>'NUMERIC',
- 'BOOLEAN'=>'NUMERIC',
- 'DATE'=>'NUMERIC',
- 'DATETIME'=>'NUMERIC'
- );
-
- if (!isset($affinity[$t]))
- return ADODB_DEFAULT_METATYPE;
-
- $subt = $affinity[$t];
- /*
- * Now that we have subclassed the provided data down
- * the sqlite 'affinity', we convert to ADOdb metatype
- */
-
- $subclass = array('INTEGER'=>'I',
- 'TEXT'=>'X',
- 'BLOB'=>'B',
- 'REAL'=>'N',
- 'NUMERIC'=>'N');
-
- return $subclass[$subt];
- }
- // mark newnham
- function MetaColumns($table, $normalize=true)
- {
- global $ADODB_FETCH_MODE;
- $false = false;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- if ($this->fetchMode !== false) {
- $savem = $this->SetFetchMode(false);
- }
- $rs = $this->Execute("PRAGMA table_info('$table')");
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- if (!$rs) {
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
- $arr = array();
- while ($r = $rs->FetchRow()) {
- $type = explode('(',$r['type']);
- $size = '';
- if (sizeof($type)==2) {
- $size = trim($type[1],')');
- }
- $fn = strtoupper($r['name']);
- $fld = new ADOFieldObject;
- $fld->name = $r['name'];
- $fld->type = $type[0];
- $fld->max_length = $size;
- $fld->not_null = $r['notnull'];
- $fld->default_value = $r['dflt_value'];
- $fld->scale = 0;
- if (isset($r['pk']) && $r['pk']) {
- $fld->primary_key=1;
- }
- if ($save == ADODB_FETCH_NUM) {
- $arr[] = $fld;
- } else {
- $arr[strtoupper($fld->name)] = $fld;
- }
- }
- $rs->Close();
- $ADODB_FETCH_MODE = $save;
- return $arr;
- }
-
- public function metaForeignKeys($table, $owner = '', $upper = false, $associative = false)
- {
- global $ADODB_FETCH_MODE;
- if ($ADODB_FETCH_MODE == ADODB_FETCH_ASSOC
- || $this->fetchMode == ADODB_FETCH_ASSOC)
- $associative = true;
-
- /*
- * Read sqlite master to find foreign keys
- */
- $sql = "SELECT sql
- FROM (
- SELECT sql sql, type type, tbl_name tbl_name, name name
- FROM sqlite_master
- )
- WHERE type != 'meta'
- AND sql NOTNULL
- AND LOWER(name) ='" . strtolower($table) . "'";
-
- $tableSql = $this->getOne($sql);
-
- $fkeyList = array();
- $ylist = preg_split("/,+/",$tableSql);
- foreach ($ylist as $y)
- {
- if (!preg_match('/FOREIGN/',$y))
- continue;
-
- $matches = false;
- preg_match_all('/\((.+?)\)/i',$y,$matches);
- $tmatches = false;
- preg_match_all('/REFERENCES (.+?)\(/i',$y,$tmatches);
-
- if ($associative)
- {
- if (!isset($fkeyList[$tmatches[1][0]]))
- $fkeyList[$tmatches[1][0]] = array();
- $fkeyList[$tmatches[1][0]][$matches[1][0]] = $matches[1][1];
- }
- else
- $fkeyList[$tmatches[1][0]][] = $matches[1][0] . '=' . $matches[1][1];
- }
-
- if ($associative)
- {
- if ($upper)
- $fkeyList = array_change_key_case($fkeyList,CASE_UPPER);
- else
- $fkeyList = array_change_key_case($fkeyList,CASE_LOWER);
- }
- return $fkeyList;
- }
-
-
- function _init($parentDriver)
- {
- $parentDriver->hasTransactions = false;
- $parentDriver->hasInsertID = true;
- }
-
- protected function _insertID($table = '', $column = '')
- {
- return $this->_connectionID->lastInsertRowID();
- }
-
- function _affectedrows()
- {
- return $this->_connectionID->changes();
- }
-
- function ErrorMsg()
- {
- if ($this->_logsql) {
- return $this->_errorMsg;
- }
- return ($this->_errorNo) ? $this->ErrorNo() : ''; //**tochange?
- }
-
- function ErrorNo()
- {
- return $this->_connectionID->lastErrorCode(); //**tochange??
- }
-
- function SQLDate($fmt, $col=false)
- {
- /*
- * In order to map the values correctly, we must ensure the proper
- * casing for certain fields
- * Y must be UC, because y is a 2 digit year
- * d must be LC, because D is 3 char day
- * A must be UC because a is non-portable am
- * Q must be UC because q means nothing
- */
- $fromChars = array('y','D','a','q');
- $toChars = array('Y','d','A','Q');
- $fmt = str_replace($fromChars,$toChars,$fmt);
-
- $fmt = $this->qstr($fmt);
- return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)";
- }
-
- function _createFunctions()
- {
- $this->_connectionID->createFunction('adodb_date', 'adodb_date', 1);
- $this->_connectionID->createFunction('adodb_date2', 'adodb_date2', 2);
- }
-
- /** @noinspection PhpUnusedParameterInspection */
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (empty($argHostname) && $argDatabasename) {
- $argHostname = $argDatabasename;
- }
- $this->_connectionID = new SQLite3($argHostname);
- $this->_createFunctions();
-
- return true;
- }
-
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- // There's no permanent connect in SQLite3
- return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
- }
-
- // returns query ID if successful, otherwise false
- function _query($sql,$inputarr=false)
- {
- $rez = $this->_connectionID->query($sql);
- if ($rez === false) {
- $this->_errorNo = $this->_connectionID->lastErrorCode();
- }
- // If no data was returned, we don't need to create a real recordset
- elseif ($rez->numColumns() == 0) {
- $rez->finalize();
- $rez = true;
- }
-
- return $rez;
- }
-
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- $nrows = (int) $nrows;
- $offset = (int) $offset;
- $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
- $limitStr = ($nrows >= 0) ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : '');
- if ($secs2cache) {
- $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
- } else {
- $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr);
- }
-
- return $rs;
- }
-
- /*
- This algorithm is not very efficient, but works even if table locking
- is not available.
-
- Will return false if unable to generate an ID after $MAXLOOPS attempts.
- */
- var $_genSeqSQL = "create table %s (id integer)";
-
- function GenID($seq='adodbseq',$start=1)
- {
- // if you have to modify the parameter below, your database is overloaded,
- // or you need to implement generation of id's yourself!
- $MAXLOOPS = 100;
- //$this->debug=1;
- while (--$MAXLOOPS>=0) {
- @($num = $this->GetOne("select id from $seq"));
- if ($num === false) {
- $this->Execute(sprintf($this->_genSeqSQL ,$seq));
- $start -= 1;
- $num = '0';
- $ok = $this->Execute("insert into $seq values($start)");
- if (!$ok) {
- return false;
- }
- }
- $this->Execute("update $seq set id=id+1 where id=$num");
-
- if ($this->affected_rows() > 0) {
- $num += 1;
- $this->genID = $num;
- return $num;
- }
- }
- if ($fn = $this->raiseErrorFn) {
- $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
- }
- return false;
- }
-
- function createSequence($seqname='adodbseq', $startID=1)
- {
- if (empty($this->_genSeqSQL)) {
- return false;
- }
- $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
- if (!$ok) {
- return false;
- }
- $startID -= 1;
- return $this->Execute("insert into $seqname values($startID)");
- }
-
- var $_dropSeqSQL = 'drop table %s';
- function DropSequence($seqname = 'adodbseq')
- {
- if (empty($this->_dropSeqSQL)) {
- return false;
- }
- return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
- }
-
- // returns true or false
- function _close()
- {
- return $this->_connectionID->close();
- }
-
- function metaIndexes($table, $primary = FALSE, $owner = false)
- {
- $false = false;
- // save old fetch mode
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->fetchMode !== FALSE) {
- $savem = $this->SetFetchMode(FALSE);
- }
-
- $pragmaData = array();
-
- /*
- * If we want the primary key, we must extract
- * it from the table statement, and the pragma
- */
- if ($primary)
- {
- $sql = sprintf('PRAGMA table_info([%s]);',
- strtolower($table)
- );
- $pragmaData = $this->getAll($sql);
- }
-
- /*
- * Exclude the empty entry for the primary index
- */
- $sqlite = "SELECT name,sql
- FROM sqlite_master
- WHERE type='index'
- AND sql IS NOT NULL
- AND LOWER(tbl_name)='%s'";
-
- $SQL = sprintf($sqlite,
- strtolower($table)
- );
-
- $rs = $this->execute($SQL);
-
- if (!is_object($rs)) {
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- }
- $ADODB_FETCH_MODE = $save;
- return $false;
- }
-
- $indexes = array ();
-
- while ($row = $rs->FetchRow())
- {
-
- if (!isset($indexes[$row[0]])) {
- $indexes[$row[0]] = array(
- 'unique' => preg_match("/unique/i",$row[1]),
- 'columns' => array()
- );
- }
- /**
- * The index elements appear in the SQL statement
- * in cols[1] between parentheses
- * e.g CREATE UNIQUE INDEX ware_0 ON warehouse (org,warehouse)
- */
- preg_match_all('/\((.*)\)/',$row[1],$indexExpression);
- $indexes[$row[0]]['columns'] = array_map('trim',explode(',',$indexExpression[1][0]));
- }
-
- if (isset($savem)) {
- $this->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
- }
-
- /*
- * If we want primary, add it here
- */
- if ($primary){
-
- /*
- * Check the previously retrieved pragma to search
- * with a closure
- */
-
- $pkIndexData = array('unique'=>1,'columns'=>array());
-
- $pkCallBack = function ($value, $key) use (&$pkIndexData) {
-
- /*
- * As we iterate the elements check for pk index and sort
- */
- if ($value[5] > 0)
- {
- $pkIndexData['columns'][$value[5]] = strtolower($value[1]);
- ksort($pkIndexData['columns']);
- }
- };
-
- array_walk($pragmaData,$pkCallBack);
-
- /*
- * If we found no columns, there is no
- * primary index
- */
- if (count($pkIndexData['columns']) > 0)
- $indexes['PRIMARY'] = $pkIndexData;
- }
-
- return $indexes;
- }
-
- /**
- * Returns the maximum size of a MetaType C field. Because of the
- * database design, sqlite places no limits on the size of data inserted
- *
- * @return int
- */
- function charMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Returns the maximum size of a MetaType X field. Because of the
- * database design, sqlite places no limits on the size of data inserted
- *
- * @return int
- */
- function textMax()
- {
- return ADODB_STRINGMAX_NOLIMIT;
- }
-
- /**
- * Converts a date to a month only field and pads it to 2 characters
- *
- * This uses the more efficient strftime native function to process
- *
- * @param string $fld The name of the field to process
- *
- * @return string The SQL Statement
- */
- function month($fld)
- {
- return "strftime('%m',$fld)";
- }
-
- /**
- * Converts a date to a day only field and pads it to 2 characters
- *
- * This uses the more efficient strftime native function to process
- *
- * @param string $fld The name of the field to process
- *
- * @return string The SQL Statement
- */
- function day($fld) {
- return "strftime('%d',$fld)";
- }
-
- /**
- * Converts a date to a year only field
- *
- * This uses the more efficient strftime native function to process
- *
- * @param string $fld The name of the field to process
- *
- * @return string The SQL Statement
- */
- function year($fld)
- {
- return "strftime('%Y',$fld)";
- }
-
- /**
- * SQLite update for blob
- *
- * SQLite must be a fully prepared statement (all variables must be bound),
- * so $where can either be an array (array params) or a string that we will
- * do our best to unpack and turn into a prepared statement.
- *
- * @param string $table
- * @param string $column
- * @param string $val Blob value to set
- * @param mixed $where An array of parameters (key => value pairs),
- * or a string (where clause).
- * @param string $blobtype ignored
- *
- * @return bool success
- */
- function updateBlob($table, $column, $val, $where, $blobtype = 'BLOB')
- {
- if (is_array($where)) {
- // We were passed a set of key=>value pairs
- $params = $where;
- } else {
- // Given a where clause string, we have to disassemble the
- // statements into keys and values
- $params = array();
- $temp = preg_split('/(where|and)/i', $where);
- $where = array_filter($temp);
-
- foreach ($where as $wValue) {
- $wTemp = preg_split('/[= \']+/', $wValue);
- $wTemp = array_filter($wTemp);
- $wTemp = array_values($wTemp);
- $params[$wTemp[0]] = $wTemp[1];
- }
- }
-
- $paramWhere = array();
- foreach ($params as $bindKey => $bindValue) {
- $paramWhere[] = $bindKey . '=?';
- }
-
- $sql = "UPDATE $table SET $column=? WHERE "
- . implode(' AND ', $paramWhere);
-
- // Prepare the statement
- $stmt = $this->_connectionID->prepare($sql);
-
- // Set the first bind value equal to value we want to update
- if (!$stmt->bindValue(1, $val, SQLITE3_BLOB)) {
- return false;
- }
-
- // Build as many keys as available
- $bindIndex = 2;
- foreach ($params as $bindValue) {
- if (is_integer($bindValue) || is_bool($bindValue) || is_float($bindValue)) {
- $type = SQLITE3_NUM;
- } elseif (is_object($bindValue)) {
- // Assume a blob, this should never appear in
- // the binding for a where statement anyway
- $type = SQLITE3_BLOB;
- } else {
- $type = SQLITE3_TEXT;
- }
-
- if (!$stmt->bindValue($bindIndex, $bindValue, $type)) {
- return false;
- }
-
- $bindIndex++;
- }
-
- // Now execute the update. NB this is SQLite execute, not ADOdb
- $ok = $stmt->execute();
- return is_object($ok);
- }
-
- /**
- * SQLite update for blob from a file
- *
- * @param string $table
- * @param string $column
- * @param string $path Filename containing blob data
- * @param mixed $where {@see updateBlob()}
- * @param string $blobtype ignored
- *
- * @return bool success
- */
- function updateBlobFile($table, $column, $path, $where, $blobtype = 'BLOB')
- {
- if (!file_exists($path)) {
- return false;
- }
-
- // Read file information
- $fileContents = file_get_contents($path);
- if ($fileContents === false)
- // Distinguish between an empty file and failure
- return false;
-
- return $this->updateBlob($table, $column, $fileContents, $where, $blobtype);
- }
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_sqlite3 extends ADORecordSet {
-
- var $databaseType = "sqlite3";
- var $bind = false;
-
- /** @var SQLite3Result */
- var $_queryID;
-
- /** @noinspection PhpMissingParentConstructorInspection */
- function __construct($queryID,$mode=false)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- switch($mode) {
- case ADODB_FETCH_NUM:
- $this->fetchMode = SQLITE3_NUM;
- break;
- case ADODB_FETCH_ASSOC:
- $this->fetchMode = SQLITE3_ASSOC;
- break;
- default:
- $this->fetchMode = SQLITE3_BOTH;
- break;
- }
- $this->adodbFetchMode = $mode;
-
- $this->_queryID = $queryID;
-
- $this->_inited = true;
- $this->fields = array();
- if ($queryID) {
- $this->_currentRow = 0;
- $this->EOF = !$this->_fetch();
- @$this->_initrs();
- } else {
- $this->_numOfRows = 0;
- $this->_numOfFields = 0;
- $this->EOF = true;
- }
-
- return $this->_queryID;
- }
-
-
- function FetchField($fieldOffset = -1)
- {
- $fld = new ADOFieldObject;
- $fld->name = $this->_queryID->columnName($fieldOffset);
- $fld->type = 'VARCHAR';
- $fld->max_length = -1;
- return $fld;
- }
-
- function _initrs()
- {
- $this->_numOfFields = $this->_queryID->numColumns();
-
- }
-
- function Fields($colname)
- {
- if ($this->fetchMode != SQLITE3_NUM) {
- return $this->fields[$colname];
- }
- if (!$this->bind) {
- $this->bind = array();
- for ($i=0; $i < $this->_numOfFields; $i++) {
- $o = $this->FetchField($i);
- $this->bind[strtoupper($o->name)] = $i;
- }
- }
-
- return $this->fields[$this->bind[strtoupper($colname)]];
- }
-
- function _seek($row)
- {
- // sqlite3 does not implement seek
- if ($this->debug) {
- ADOConnection::outp("SQLite3 does not implement seek");
- }
- return false;
- }
-
- function _fetch($ignore_fields=false)
- {
- $this->fields = $this->_queryID->fetchArray($this->fetchMode);
- return !empty($this->fields);
- }
-
- function _close()
- {
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sqlitepo.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sqlitepo.inc.php
deleted file mode 100644
index cb69ff9e9..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sqlitepo.inc.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
- */
-
-if (!defined('ADODB_DIR')) die();
-
-include_once(ADODB_DIR.'/drivers/adodb-sqlite.inc.php');
-
-class ADODB_sqlitepo extends ADODB_sqlite {
- var $databaseType = 'sqlitepo';
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-class ADORecordset_sqlitepo extends ADORecordset_sqlite {
-
- var $databaseType = 'sqlitepo';
-
- // Modified to strip table names from returned fields
- function _fetch($ignore_fields=false)
- {
- $this->fields = array();
- $fields = @sqlite_fetch_array($this->_queryID,$this->fetchMode);
- if(is_array($fields))
- foreach($fields as $n => $v)
- {
- if(($p = strpos($n, ".")) !== false)
- $n = substr($n, $p+1);
- $this->fields[$n] = $v;
- }
-
- return !empty($this->fields);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sybase.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sybase.inc.php
deleted file mode 100644
index b8db07479..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sybase.inc.php
+++ /dev/null
@@ -1,444 +0,0 @@
-
- */
-
- // security - hide paths
-if (!defined('ADODB_DIR')) die();
-
-class ADODB_sybase extends ADOConnection {
- var $databaseType = "sybase";
- var $dataProvider = 'sybase';
- var $replaceQuote = "''"; // string to use to replace quotes
- var $fmtDate = "'Y-m-d'";
- var $fmtTimeStamp = "'Y-m-d H:i:s'";
- var $hasInsertID = true;
- var $hasAffectedRows = true;
- var $metaTablesSQL="select name from sysobjects where type='U' or type='V'";
- // see http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=5981;uf=0?target=0;window=new;showtoc=true;book=dbrfen8
- var $metaColumnsSQL = "SELECT c.column_name, c.column_type, c.width FROM syscolumn c, systable t WHERE t.table_name='%s' AND c.table_id=t.table_id AND t.table_type='BASE'";
- /*
- "select c.name,t.name,c.length from
- syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id
- where o.name='%s'";
- */
- var $concat_operator = '+';
- var $arrayClass = 'ADORecordSet_array_sybase';
- var $sysDate = 'GetDate()';
- var $leftOuter = '*=';
- var $rightOuter = '=*';
-
- var $port;
-
- /**
- * might require begintrans -- committrans
- * @inheritDoc
- */
- protected function _insertID($table = '', $column = '')
- {
- return $this->GetOne('select @@identity');
- }
-
- // might require begintrans -- committrans
- function _affectedrows()
- {
- return $this->GetOne('select @@rowcount');
- }
-
-
- function BeginTrans()
- {
-
- if ($this->transOff) return true;
- $this->transCnt += 1;
-
- $this->Execute('BEGIN TRAN');
- return true;
- }
-
- function CommitTrans($ok=true)
- {
- if ($this->transOff) return true;
-
- if (!$ok) return $this->RollbackTrans();
-
- $this->transCnt -= 1;
- $this->Execute('COMMIT TRAN');
- return true;
- }
-
- function RollbackTrans()
- {
- if ($this->transOff) return true;
- $this->transCnt -= 1;
- $this->Execute('ROLLBACK TRAN');
- return true;
- }
-
- // http://www.isug.com/Sybase_FAQ/ASE/section6.1.html#6.1.4
- function RowLock($tables,$where,$col='top 1 null as ignore')
- {
- if (!$this->_hastrans) $this->BeginTrans();
- $tables = str_replace(',',' HOLDLOCK,',$tables);
- return $this->GetOne("select $col from $tables HOLDLOCK where $where");
-
- }
-
- function SelectDB($dbName)
- {
- $this->database = $dbName;
- $this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions
- if ($this->_connectionID) {
- return @sybase_select_db($dbName);
- }
- else return false;
- }
-
- /* Returns: the last error message from previous database operation
- Note: This function is NOT available for Microsoft SQL Server. */
-
-
- function ErrorMsg()
- {
- if ($this->_logsql) return $this->_errorMsg;
- if (function_exists('sybase_get_last_message'))
- $this->_errorMsg = sybase_get_last_message();
- else {
- $this->_errorMsg = 'SYBASE error messages not supported on this platform';
- }
-
- return $this->_errorMsg;
- }
-
- // returns true or false
- function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('sybase_connect')) return null;
-
- // Sybase connection on custom port
- if ($this->port) {
- $argHostname .= ':' . $this->port;
- }
-
- if ($this->charSet) {
- $this->_connectionID = @sybase_connect($argHostname,$argUsername,$argPassword, $this->charSet);
- } else {
- $this->_connectionID = @sybase_connect($argHostname,$argUsername,$argPassword);
- }
-
- if ($this->_connectionID === false) return false;
- if ($argDatabasename) return $this->SelectDB($argDatabasename);
- return true;
- }
-
- // returns true or false
- function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
- {
- if (!function_exists('sybase_connect')) return null;
-
- // Sybase connection on custom port
- if ($this->port) {
- $argHostname .= ':' . $this->port;
- }
-
- if ($this->charSet) {
- $this->_connectionID = @sybase_pconnect($argHostname,$argUsername,$argPassword, $this->charSet);
- } else {
- $this->_connectionID = @sybase_pconnect($argHostname,$argUsername,$argPassword);
- }
-
- if ($this->_connectionID === false) return false;
- if ($argDatabasename) return $this->SelectDB($argDatabasename);
- return true;
- }
-
- // returns query ID if successful, otherwise false
- function _query($sql,$inputarr=false)
- {
- global $ADODB_COUNTRECS;
-
- if ($ADODB_COUNTRECS == false)
- return sybase_unbuffered_query($sql,$this->_connectionID);
- else
- return sybase_query($sql,$this->_connectionID);
- }
-
- // See http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.12
- function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
- {
- if ($secs2cache > 0) {// we do not cache rowcount, so we have to load entire recordset
- $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- return $rs;
- }
-
- $nrows = (integer) $nrows;
- $offset = (integer) $offset;
-
- $cnt = ($nrows >= 0) ? $nrows : 999999999;
- if ($offset > 0 && $cnt) $cnt += $offset;
-
- $this->Execute("set rowcount $cnt");
- $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,0);
- $this->Execute("set rowcount 0");
-
- return $rs;
- }
-
- // returns true or false
- function _close()
- {
- return @sybase_close($this->_connectionID);
- }
-
- static function UnixDate($v)
- {
- return ADORecordSet_array_sybase::UnixDate($v);
- }
-
- static function UnixTimeStamp($v)
- {
- return ADORecordSet_array_sybase::UnixTimeStamp($v);
- }
-
-
-
- # Added 2003-10-05 by Chris Phillipson
- # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=16756?target=%25N%15_12018_START_RESTART_N%25
- # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version
- // Format date column in sql string given an input format that understands Y M D
- function SQLDate($fmt, $col=false)
- {
- if (!$col) $col = $this->sysTimeStamp;
- $s = '';
-
- $len = strlen($fmt);
- for ($i=0; $i < $len; $i++) {
- if ($s) $s .= '+';
- $ch = $fmt[$i];
- switch($ch) {
- case 'Y':
- case 'y':
- $s .= "datename(yy,$col)";
- break;
- case 'M':
- $s .= "convert(char(3),$col,0)";
- break;
- case 'm':
- $s .= "str_replace(str(month($col),2),' ','0')";
- break;
- case 'Q':
- case 'q':
- $s .= "datename(qq,$col)";
- break;
- case 'D':
- case 'd':
- $s .= "str_replace(str(datepart(dd,$col),2),' ','0')";
- break;
- case 'h':
- $s .= "substring(convert(char(14),$col,0),13,2)";
- break;
-
- case 'H':
- $s .= "str_replace(str(datepart(hh,$col),2),' ','0')";
- break;
-
- case 'i':
- $s .= "str_replace(str(datepart(mi,$col),2),' ','0')";
- break;
- case 's':
- $s .= "str_replace(str(datepart(ss,$col),2),' ','0')";
- break;
- case 'a':
- case 'A':
- $s .= "substring(convert(char(19),$col,0),18,2)";
- break;
-
- default:
- if ($ch == '\\') {
- $i++;
- $ch = substr($fmt,$i,1);
- }
- $s .= $this->qstr($ch);
- break;
- }
- }
- return $s;
- }
-
- # Added 2003-10-07 by Chris Phillipson
- # Used ASA SQL Reference Manual -- http://sybooks.sybase.com/onlinebooks/group-aw/awg0800e/dbrfen8/@ebt-link;pt=5981;uf=0?target=0;window=new;showtoc=true;book=dbrfen8
- # to convert similar Microsoft SQL*Server (mssql) API into Sybase compatible version
- function MetaPrimaryKeys($table, $owner = false)
- {
- $sql = "SELECT c.column_name " .
- "FROM syscolumn c, systable t " .
- "WHERE t.table_name='$table' AND c.table_id=t.table_id " .
- "AND t.table_type='BASE' " .
- "AND c.pkey = 'Y' " .
- "ORDER BY c.column_id";
-
- $a = $this->GetCol($sql);
- if ($a && sizeof($a)>0) return $a;
- return false;
- }
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-global $ADODB_sybase_mths;
-$ADODB_sybase_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);
-
-class ADORecordset_sybase extends ADORecordSet {
-
- var $databaseType = "sybase";
- var $canSeek = true;
- // _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)
- {
- if ($mode === false) {
- global $ADODB_FETCH_MODE;
- $mode = $ADODB_FETCH_MODE;
- }
- if (!$mode) $this->fetchMode = ADODB_FETCH_ASSOC;
- else $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
- fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by
- fetchField() is retrieved. */
- function FetchField($fieldOffset = -1)
- {
- if ($fieldOffset != -1) {
- $o = @sybase_fetch_field($this->_queryID, $fieldOffset);
- }
- else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */
- $o = @sybase_fetch_field($this->_queryID);
- }
- // older versions of PHP did not support type, only numeric
- if ($o && !isset($o->type)) $o->type = ($o->numeric) ? 'float' : 'varchar';
- return $o;
- }
-
- function _initrs()
- {
- global $ADODB_COUNTRECS;
- $this->_numOfRows = ($ADODB_COUNTRECS)? @sybase_num_rows($this->_queryID):-1;
- $this->_numOfFields = @sybase_num_fields($this->_queryID);
- }
-
- function _seek($row)
- {
- return @sybase_data_seek($this->_queryID, $row);
- }
-
- function _fetch($ignore_fields=false)
- {
- if ($this->fetchMode == ADODB_FETCH_NUM) {
- $this->fields = @sybase_fetch_row($this->_queryID);
- } else if ($this->fetchMode == ADODB_FETCH_ASSOC) {
- $this->fields = @sybase_fetch_assoc($this->_queryID);
-
- if (is_array($this->fields)) {
- $this->fields = $this->GetRowAssoc();
- return true;
- }
- return false;
- } else {
- $this->fields = @sybase_fetch_array($this->_queryID);
- }
- if ( is_array($this->fields)) {
- return true;
- }
-
- return false;
- }
-
- /* close() only needs to be called if you are worried about using too much memory while your script
- is running. All associated result memory for the specified result identifier will automatically be freed. */
- function _close() {
- return @sybase_free_result($this->_queryID);
- }
-
- // sybase/mssql uses a default date like Dec 30 2000 12:00AM
- static function UnixDate($v)
- {
- return ADORecordSet_array_sybase::UnixDate($v);
- }
-
- static function UnixTimeStamp($v)
- {
- return ADORecordSet_array_sybase::UnixTimeStamp($v);
- }
-}
-
-class ADORecordSet_array_sybase extends ADORecordSet_array {
-
- // sybase/mssql uses a default date like Dec 30 2000 12:00AM
- static function UnixDate($v)
- {
- global $ADODB_sybase_mths;
-
- //Dec 30 2000 12:00AM
- if (!preg_match( "/([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})/"
- ,$v, $rr)) return parent::UnixDate($v);
-
- if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
-
- $themth = substr(strtoupper($rr[1]),0,3);
- $themth = $ADODB_sybase_mths[$themth];
- if ($themth <= 0) return false;
- // h-m-s-MM-DD-YY
- return adodb_mktime(0,0,0,$themth,$rr[2],$rr[3]);
- }
-
- static function UnixTimeStamp($v)
- {
- global $ADODB_sybase_mths;
- //11.02.2001 Toni Tunkkari toni.tunkkari@finebyte.com
- //Changed [0-9] to [0-9 ] in day conversion
- if (!preg_match( "/([A-Za-z]{3})[-/\. ]([0-9 ]{1,2})[-/\. ]([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})/"
- ,$v, $rr)) return parent::UnixTimeStamp($v);
- if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;
-
- $themth = substr(strtoupper($rr[1]),0,3);
- $themth = $ADODB_sybase_mths[$themth];
- if ($themth <= 0) return false;
-
- switch (strtoupper($rr[6])) {
- case 'P':
- if ($rr[4]<12) $rr[4] += 12;
- break;
- case 'A':
- if ($rr[4]==12) $rr[4] = 0;
- break;
- default:
- break;
- }
- // h-m-s-MM-DD-YY
- return adodb_mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-sybase_ase.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-sybase_ase.inc.php
deleted file mode 100644
index d301ba996..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-sybase_ase.inc.php
+++ /dev/null
@@ -1,118 +0,0 @@
-
- */
-
-require_once ADODB_DIR."/drivers/adodb-sybase.inc.php";
-
-class ADODB_sybase_ase extends ADODB_sybase {
- var $databaseType = "sybase_ase";
-
- var $metaTablesSQL="SELECT sysobjects.name FROM sysobjects, sysusers WHERE sysobjects.type='U' AND sysobjects.uid = sysusers.uid";
- var $metaColumnsSQL = "SELECT syscolumns.name AS field_name, systypes.name AS type, systypes.length AS width FROM sysobjects, syscolumns, systypes WHERE sysobjects.name='%s' AND syscolumns.id = sysobjects.id AND systypes.type=syscolumns.type";
- var $metaDatabasesSQL ="SELECT a.name FROM master.dbo.sysdatabases a, master.dbo.syslogins b WHERE a.suid = b.suid and a.name like '%' and a.name != 'tempdb' and a.status3 != 256 order by 1";
-
- // split the Views, Tables and procedures.
- function MetaTables($ttype=false,$showSchema=false,$mask=false)
- {
- $false = false;
- if ($this->metaTablesSQL) {
- // complicated state saving by the need for backward compat
-
- if ($ttype == 'VIEWS'){
- $sql = str_replace('U', 'V', $this->metaTablesSQL);
- }elseif (false === $ttype){
- $sql = str_replace('U',"U' OR type='V", $this->metaTablesSQL);
- }else{ // TABLES OR ANY OTHER
- $sql = $this->metaTablesSQL;
- }
- $rs = $this->Execute($sql);
-
- if ($rs === false || !method_exists($rs, 'GetArray')){
- return $false;
- }
- $arr = $rs->GetArray();
-
- $arr2 = array();
- foreach($arr as $key=>$value){
- $arr2[] = trim($value['name']);
- }
- return $arr2;
- }
- return $false;
- }
-
- function MetaDatabases()
- {
- $arr = array();
- if ($this->metaDatabasesSQL!='') {
- $rs = $this->Execute($this->metaDatabasesSQL);
- if ($rs && !$rs->EOF){
- while (!$rs->EOF){
- $arr[] = $rs->Fields('name');
- $rs->MoveNext();
- }
- return $arr;
- }
- }
- return false;
- }
-
- // fix a bug which prevent the metaColumns query to be executed for Sybase ASE
- function MetaColumns($table,$upper=false)
- {
- $false = false;
- if (!empty($this->metaColumnsSQL)) {
-
- $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
- if ($rs === false) return $false;
-
- $retarr = array();
- while (!$rs->EOF) {
- $fld = new ADOFieldObject();
- $fld->name = $rs->Fields('field_name');
- $fld->type = $rs->Fields('type');
- $fld->max_length = $rs->Fields('width');
- $retarr[strtoupper($fld->name)] = $fld;
- $rs->MoveNext();
- }
- $rs->Close();
- return $retarr;
- }
- return $false;
- }
-
- function getProcedureList($schema)
- {
- return false;
- }
-
- function ErrorMsg()
- {
- if (!function_exists('sybase_connect')){
- return 'Your PHP doesn\'t contain the Sybase connection module!';
- }
- return parent::ErrorMsg();
- }
-}
-
-class adorecordset_sybase_ase extends ADORecordset_sybase {
- var $databaseType = "sybase_ase";
-}
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-text.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-text.inc.php
deleted file mode 100644
index 77ad06a0b..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-text.inc.php
+++ /dev/null
@@ -1,341 +0,0 @@
- $b[0]) ? -1 : 1;
-}
-class ADODB_text extends ADOConnection {
- var $databaseType = 'text';
-
- var $_origarray; // original data
- var $_types;
- var $_proberows = 8;
- var $_colnames;
- var $_skiprow1=false;
- var $readOnly = true;
- var $hasTransactions = false;
-
- var $_rezarray;
- var $_reznames;
- var $_reztypes;
-
- function RSRecordCount()
- {
- if (!empty($this->_rezarray)) return sizeof($this->_rezarray);
-
- return sizeof($this->_origarray);
- }
-
- function _affectedrows()
- {
- return false;
- }
-
- // returns true or false
- function PConnect(&$array, $types = false, $colnames = false)
- {
- return $this->Connect($array, $types, $colnames);
- }
- // returns true or false
- function Connect(&$array, $types = false, $colnames = false)
- {
- if (is_string($array) and $array === 'iluvphplens') return 'me2';
-
- if (!$array) {
- $this->_origarray = false;
- return true;
- }
- $row = $array[0];
- $cols = sizeof($row);
-
-
- if ($colnames) $this->_colnames = $colnames;
- else {
- $this->_colnames = $array[0];
- $this->_skiprow1 = true;
- }
- if (!$types) {
- // probe and guess the type
- $types = array();
- $firstrow = true;
- if ($this->_proberows > sizeof($array)) $max = sizeof($array);
- else $max = $this->_proberows;
- for ($j=($this->_skiprow1)?1:0;$j < $max; $j++) {
- $row = $array[$j];
- if (!$row) break;
- $i = -1;
- foreach($row as $v) {
- $i += 1;
- //print " ($i ".$types[$i]. "$v) ";
- $v = trim($v);
- if (!preg_match('/^[+-]{0,1}[0-9\.]+$/',$v)) {
- $types[$i] = 'C'; // once C, always C
- continue;
- }
- if (isset($types[$i]) && $types[$i]=='C') continue;
- if ($firstrow) {
- // If empty string, we presume is character
- // test for integer for 1st row only
- // after that it is up to testing other rows to prove
- // that it is not an integer
- if (strlen($v) == 0) $types[0] = 'C';
- if (strpos($v,'.') !== false) $types[0] = 'N';
- else $types[$i] = 'I';
- continue;
- }
-
- if (strpos($v,'.') !== false) $types[$i] = 'N';
-
- }
- $firstrow = false;
- }
- }
- //print_r($types);
- $this->_origarray = $array;
- $this->_types = $types;
- return true;
- }
-
-
-
- // returns queryID or false
- // We presume that the select statement is on the same table (what else?),
- // with the only difference being the order by.
- //You can filter by using $eval and each clause is stored in $arr .eg. $arr[1] == 'name'
- // also supports SELECT [DISTINCT] COL FROM ... -- only 1 col supported
- function _query($sql,$input_arr,$eval=false)
- {
- if ($this->_origarray === false) return false;
-
- $eval = $this->evalAll;
- $usql = strtoupper(trim($sql));
- $usql = preg_replace("/[\t\n\r]/",' ',$usql);
- $usql = preg_replace('/ *BY/i',' BY',strtoupper($usql));
-
- $eregword ='([A-Z_0-9]*)';
- //print "
$sql $eval ";
- if ($eval) {
- $i = 0;
- foreach($this->_colnames as $n) {
- $n = strtoupper(trim($n));
- $eval = str_replace("\$$n","\$arr[$i]",$eval);
-
- $i += 1;
- }
-
- $i = 0;
- $eval = "\$rez=($eval);";
- //print "Eval string = $eval
";
- $where_arr = array();
-
- reset($this->_origarray);
- foreach ($this->_origarray as $arr) {
-
- if ($i == 0 && $this->_skiprow1)
- $where_arr[] = $arr;
- else {
- eval($eval);
- //print " $i: result=$rez arr[0]={$arr[0]} arr[1]={$arr[1]}
\n ";
- if ($rez) $where_arr[] = $arr;
- }
- $i += 1;
- }
- $this->_rezarray = $where_arr;
- }else
- $where_arr = $this->_origarray;
-
- // THIS PROJECTION CODE ONLY WORKS FOR 1 COLUMN,
- // OTHERWISE IT RETURNS ALL COLUMNS
- if (substr($usql,0,7) == 'SELECT ') {
- $at = strpos($usql,' FROM ');
- $sel = trim(substr($usql,7,$at-7));
-
- $distinct = false;
- if (substr($sel,0,8) == 'DISTINCT') {
- $distinct = true;
- $sel = trim(substr($sel,8,$at));
- }
-
- // $sel holds the selection clause, comma delimited
- // currently we only project if one column is involved
- // this is to support popups in PHPLens
- if (strpos(',',$sel)===false) {
- $colarr = array();
-
- preg_match("/$eregword/",$sel,$colarr);
- $col = $colarr[1];
- $i = 0;
- $n = '';
- reset($this->_colnames);
- foreach ($this->_colnames as $n) {
-
- if ($col == strtoupper(trim($n))) break;
- $i += 1;
- }
-
- if ($n && $col) {
- $distarr = array();
- $projarray = array();
- $projtypes = array($this->_types[$i]);
- $projnames = array($n);
-
- foreach ($where_arr as $a) {
- if ($i == 0 && $this->_skiprow1) {
- $projarray[] = array($n);
- continue;
- }
-
- if ($distinct) {
- $v = strtoupper($a[$i]);
- if (! $distarr[$v]) {
- $projarray[] = array($a[$i]);
- $distarr[$v] = 1;
- }
- } else
- $projarray[] = array($a[$i]);
-
- } //foreach
- //print_r($projarray);
- }
- } // check 1 column in projection
- } // is SELECT
-
- if (empty($projarray)) {
- $projtypes = $this->_types;
- $projarray = $where_arr;
- $projnames = $this->_colnames;
- }
- $this->_rezarray = $projarray;
- $this->_reztypes = $projtypes;
- $this->_reznames = $projnames;
-
-
- $pos = strpos($usql,' ORDER BY ');
- if ($pos === false) return $this;
- $orderby = trim(substr($usql,$pos+10));
-
- preg_match("/$eregword/",$orderby,$arr);
- if (sizeof($arr) < 2) return $this; // actually invalid sql
- $col = $arr[1];
- $at = (integer) $col;
- if ($at == 0) {
- $i = 0;
- reset($projnames);
- foreach ($projnames as $n) {
- if (strtoupper(trim($n)) == $col) {
- $at = $i+1;
- break;
- }
- $i += 1;
- }
- }
-
- if ($at <= 0 || $at > sizeof($projarray[0])) return $this; // cannot find sort column
- $at -= 1;
-
- // generate sort array consisting of (sortval1, row index1) (sortval2, row index2)...
- $sorta = array();
- $t = $projtypes[$at];
- $num = ($t == 'I' || $t == 'N');
- for ($i=($this->_skiprow1)?1:0, $max = sizeof($projarray); $i < $max; $i++) {
- $row = $projarray[$i];
- $val = ($num)?(float)$row[$at]:$row[$at];
- $sorta[]=array($val,$i);
- }
-
- // check for desc sort
- $orderby = substr($orderby,strlen($col)+1);
- $arr = array();
- preg_match('/([A-Z_0-9]*)/i',$orderby,$arr);
-
- if (trim($arr[1]) == 'DESC') $sortf = 'adodb_cmpr';
- else $sortf = 'adodb_cmp';
-
- // hasta la sorta babe
- usort($sorta, $sortf);
-
- // rearrange original array
- $arr2 = array();
- if ($this->_skiprow1) $arr2[] = $projarray[0];
- foreach($sorta as $v) {
- $arr2[] = $projarray[$v[1]];
- }
-
- $this->_rezarray = $arr2;
- return $this;
- }
-
- /* Returns: the last error message from previous database operation */
- function ErrorMsg()
- {
- return '';
- }
-
- /* Returns: the last error number from previous database operation */
- function ErrorNo()
- {
- return 0;
- }
-
- // returns true or false
- function _close()
- {
- }
-
-
-}
-
-/*--------------------------------------------------------------------------------------
- Class Name: Recordset
---------------------------------------------------------------------------------------*/
-
-
-class ADORecordSet_text extends ADORecordSet_array
-{
-
- var $databaseType = "text";
-
- function __construct( $conn,$mode=false)
- {
- parent::__construct();
- $this->InitArray($conn->_rezarray,$conn->_reztypes,$conn->_reznames);
- $conn->_rezarray = false;
- }
-
-} // class ADORecordSet_text
-
-
-} // defined
diff --git a/app/vendor/adodb/adodb-php/drivers/adodb-vfp.inc.php b/app/vendor/adodb/adodb-php/drivers/adodb-vfp.inc.php
deleted file mode 100644
index bb4351683..000000000
--- a/app/vendor/adodb/adodb-php/drivers/adodb-vfp.inc.php
+++ /dev/null
@@ -1,106 +0,0 @@
-replaceQuote,$s))."'";
- return "'".$s."'";
- }
-
-
- // TOP requires ORDER BY for VFP
- function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)
- {
- $this->hasTop = preg_match('/ORDER[ \t\r\n]+BY/is',$sql) ? 'top' : false;
- $ret = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
- return $ret;
- }
-
-
-
-};
-
-
-class ADORecordSet_vfp extends ADORecordSet_odbc {
-
- var $databaseType = "vfp";
-
-
- function MetaType($t, $len = -1, $fieldobj = false)
- {
- if (is_object($t)) {
- $fieldobj = $t;
- $t = $fieldobj->type;
- $len = $fieldobj->max_length;
- }
- switch (strtoupper($t)) {
- case 'C':
- if ($len <= $this->blobSize) return 'C';
- case 'M':
- return 'X';
-
- case 'D': return 'D';
-
- case 'T': return 'T';
-
- case 'L': return 'L';
-
- case 'I': return 'I';
-
- default: return ADODB_DEFAULT_METATYPE;
- }
- }
-}
-
-} //define
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-ar.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-ar.inc.php
deleted file mode 100644
index 920c99432..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-ar.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'ar',
- DB_ERROR => 'خطأ غير محدد',
- DB_ERROR_ALREADY_EXISTS => 'موجود مسبقا',
- DB_ERROR_CANNOT_CREATE => 'لا يمكن إنشاء',
- DB_ERROR_CANNOT_DELETE => 'لا يمكن حذف',
- DB_ERROR_CANNOT_DROP => 'لا يمكن حذف',
- DB_ERROR_CONSTRAINT => 'عملية إدخال ممنوعة',
- DB_ERROR_DIVZERO => 'عملية التقسيم على صفر',
- DB_ERROR_INVALID => 'غير صحيح',
- DB_ERROR_INVALID_DATE => 'صيغة وقت أو تاريخ غير صحيحة',
- DB_ERROR_INVALID_NUMBER => 'صيغة رقم غير صحيحة',
- DB_ERROR_MISMATCH => 'غير متطابق',
- DB_ERROR_NODBSELECTED => 'لم يتم إختيار قاعدة البيانات بعد',
- DB_ERROR_NOSUCHFIELD => 'ليس هنالك حقل بهذا الاسم',
- DB_ERROR_NOSUCHTABLE => 'ليس هنالك جدول بهذا الاسم',
- DB_ERROR_NOT_CAPABLE => 'قاعدة البيانات المرتبط بها غير قادرة',
- DB_ERROR_NOT_FOUND => 'لم يتم إيجاده',
- DB_ERROR_NOT_LOCKED => 'غير مقفول',
- DB_ERROR_SYNTAX => 'خطأ في الصيغة',
- DB_ERROR_UNSUPPORTED => 'غير مدعوم',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'عدد القيم في السجل',
- DB_ERROR_INVALID_DSN => 'DSN غير صحيح',
- DB_ERROR_CONNECT_FAILED => 'فشل عملية الإتصال',
- 0 => 'ليس هنالك أخطاء', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'البيانات المزودة غير كافية',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'لم يتم إيجاد الإضافة المتعلقة',
- DB_ERROR_NOSUCHDB => 'ليس هنالك قاعدة بيانات بهذا الاسم',
- DB_ERROR_ACCESS_VIOLATION => 'سماحيات غير كافية'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-bg.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-bg.inc.php
deleted file mode 100644
index bbfd92f28..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-bg.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'bg',
- DB_ERROR => 'неизвестна грешка',
- DB_ERROR_ALREADY_EXISTS => 'вече съществува',
- DB_ERROR_CANNOT_CREATE => 'не може да бъде създадена',
- DB_ERROR_CANNOT_DELETE => 'не може да бъде изтрита',
- DB_ERROR_CANNOT_DROP => 'не може да бъде унищожена',
- DB_ERROR_CONSTRAINT => 'нарушено условие',
- DB_ERROR_DIVZERO => 'деление на нула',
- DB_ERROR_INVALID => 'неправилно',
- DB_ERROR_INVALID_DATE => 'некоректна дата или час',
- DB_ERROR_INVALID_NUMBER => 'невалиден номер',
- DB_ERROR_MISMATCH => 'погрешна употреба',
- DB_ERROR_NODBSELECTED => 'не е избрана база данни',
- DB_ERROR_NOSUCHFIELD => 'несъществуващо поле',
- DB_ERROR_NOSUCHTABLE => 'несъществуваща таблица',
- DB_ERROR_NOT_CAPABLE => 'DB backend not capable',
- DB_ERROR_NOT_FOUND => 'не е намерена',
- DB_ERROR_NOT_LOCKED => 'не е заключена',
- DB_ERROR_SYNTAX => 'грешен синтаксис',
- DB_ERROR_UNSUPPORTED => 'не се поддържа',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'некоректен брой колони в реда',
- DB_ERROR_INVALID_DSN => 'невалиден DSN',
- DB_ERROR_CONNECT_FAILED => 'връзката не може да бъде осъществена',
- 0 => 'няма грешки', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'предоставените данни са недостатъчни',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'разширението не е намерено',
- DB_ERROR_NOSUCHDB => 'несъществуваща база данни',
- DB_ERROR_ACCESS_VIOLATION => 'нямате достатъчно права'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-ca.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-ca.inc.php
deleted file mode 100644
index 4b046884f..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-ca.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'ca',
- DB_ERROR => 'error desconegut',
- DB_ERROR_ALREADY_EXISTS => 'ja existeix',
- DB_ERROR_CANNOT_CREATE => 'no es pot crear',
- DB_ERROR_CANNOT_DELETE => 'no es pot esborrar',
- DB_ERROR_CANNOT_DROP => 'no es pot eliminar',
- DB_ERROR_CONSTRAINT => 'violació de constraint',
- DB_ERROR_DIVZERO => 'divisió per zero',
- DB_ERROR_INVALID => 'no és vàlid',
- DB_ERROR_INVALID_DATE => 'la data o l\'hora no són vàlides',
- DB_ERROR_INVALID_NUMBER => 'el nombre no és vàlid',
- DB_ERROR_MISMATCH => 'no hi ha coincidència',
- DB_ERROR_NODBSELECTED => 'cap base de dades seleccionada',
- DB_ERROR_NOSUCHFIELD => 'camp inexistent',
- DB_ERROR_NOSUCHTABLE => 'taula inexistent',
- DB_ERROR_NOT_CAPABLE => 'l\'execució secundària de DB no pot',
- DB_ERROR_NOT_FOUND => 'no trobat',
- DB_ERROR_NOT_LOCKED => 'no blocat',
- DB_ERROR_SYNTAX => 'error de sintaxi',
- DB_ERROR_UNSUPPORTED => 'no suportat',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'el nombre de columnes no coincideix amb el nombre de valors en la fila',
- DB_ERROR_INVALID_DSN => 'el DSN no és vàlid',
- DB_ERROR_CONNECT_FAILED => 'connexió fallida',
- 0 => 'cap error', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'les dades subministrades són insuficients',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extensió no trobada',
- DB_ERROR_NOSUCHDB => 'base de dades inexistent',
- DB_ERROR_ACCESS_VIOLATION => 'permisos insuficients'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-cn.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-cn.inc.php
deleted file mode 100644
index 512ffb82e..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-cn.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'cn',
- DB_ERROR => '未知错误',
- DB_ERROR_ALREADY_EXISTS => '已经存在',
- DB_ERROR_CANNOT_CREATE => '不能创建',
- DB_ERROR_CANNOT_DELETE => '不能删除',
- DB_ERROR_CANNOT_DROP => '不能丢弃',
- DB_ERROR_CONSTRAINT => '约束限制',
- DB_ERROR_DIVZERO => '被0除',
- DB_ERROR_INVALID => '无效',
- DB_ERROR_INVALID_DATE => '无效的日期或者时间',
- DB_ERROR_INVALID_NUMBER => '无效的数字',
- DB_ERROR_MISMATCH => '不匹配',
- DB_ERROR_NODBSELECTED => '没有数据库被选择',
- DB_ERROR_NOSUCHFIELD => '没有相应的字段',
- DB_ERROR_NOSUCHTABLE => '没有相应的表',
- DB_ERROR_NOT_CAPABLE => '数据库后台不兼容',
- DB_ERROR_NOT_FOUND => '没有发现',
- DB_ERROR_NOT_LOCKED => '没有被锁定',
- DB_ERROR_SYNTAX => '语法错误',
- DB_ERROR_UNSUPPORTED => '不支持',
- DB_ERROR_VALUE_COUNT_ON_ROW => '在行上累计值',
- DB_ERROR_INVALID_DSN => '无效的数据源 (DSN)',
- DB_ERROR_CONNECT_FAILED => '连接失败',
- 0 => '没有错误', // DB_OK
- DB_ERROR_NEED_MORE_DATA => '提供的数据不能符合要求',
- DB_ERROR_EXTENSION_NOT_FOUND=> '扩展没有被发现',
- DB_ERROR_NOSUCHDB => '没有相应的数据库',
- DB_ERROR_ACCESS_VIOLATION => '没有合适的权限'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-cz.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-cz.inc.php
deleted file mode 100644
index eb2fb2e3a..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-cz.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'cz',
- DB_ERROR => 'neznámá chyba',
- DB_ERROR_ALREADY_EXISTS => 'ji? existuje',
- DB_ERROR_CANNOT_CREATE => 'nelze vytvo?it',
- DB_ERROR_CANNOT_DELETE => 'nelze smazat',
- DB_ERROR_CANNOT_DROP => 'nelze odstranit',
- DB_ERROR_CONSTRAINT => 'poru?ení omezující podmínky',
- DB_ERROR_DIVZERO => 'd?lení nulou',
- DB_ERROR_INVALID => 'neplatné',
- DB_ERROR_INVALID_DATE => 'neplatné datum nebo ?as',
- DB_ERROR_INVALID_NUMBER => 'neplatné ?íslo',
- DB_ERROR_MISMATCH => 'nesouhlasí',
- DB_ERROR_NODBSELECTED => '?ádná databáze není vybrána',
- DB_ERROR_NOSUCHFIELD => 'pole nenalezeno',
- DB_ERROR_NOSUCHTABLE => 'tabulka nenalezena',
- DB_ERROR_NOT_CAPABLE => 'nepodporováno',
- DB_ERROR_NOT_FOUND => 'nenalezeno',
- DB_ERROR_NOT_LOCKED => 'nezam?eno',
- DB_ERROR_SYNTAX => 'syntaktická chyba',
- DB_ERROR_UNSUPPORTED => 'nepodporováno',
- DB_ERROR_VALUE_COUNT_ON_ROW => '',
- DB_ERROR_INVALID_DSN => 'neplatné DSN',
- DB_ERROR_CONNECT_FAILED => 'p?ipojení selhalo',
- 0 => 'bez chyb', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'málo zdrojových dat',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'roz?í?ení nenalezeno',
- DB_ERROR_NOSUCHDB => 'databáze neexistuje',
- DB_ERROR_ACCESS_VIOLATION => 'nedostate?ná práva'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-da.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-da.inc.php
deleted file mode 100644
index e4c655be9..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-da.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'da',
- DB_ERROR => 'ukendt fejl',
- DB_ERROR_ALREADY_EXISTS => 'eksisterer allerede',
- DB_ERROR_CANNOT_CREATE => 'kan ikke oprette',
- DB_ERROR_CANNOT_DELETE => 'kan ikke slette',
- DB_ERROR_CANNOT_DROP => 'kan ikke droppe',
- DB_ERROR_CONSTRAINT => 'begrænsning krænket',
- DB_ERROR_DIVZERO => 'division med nul',
- DB_ERROR_INVALID => 'ugyldig',
- DB_ERROR_INVALID_DATE => 'ugyldig dato eller klokkeslet',
- DB_ERROR_INVALID_NUMBER => 'ugyldigt tal',
- DB_ERROR_MISMATCH => 'mismatch',
- DB_ERROR_NODBSELECTED => 'ingen database valgt',
- DB_ERROR_NOSUCHFIELD => 'felt findes ikke',
- DB_ERROR_NOSUCHTABLE => 'tabel findes ikke',
- DB_ERROR_NOT_CAPABLE => 'DB backend opgav',
- DB_ERROR_NOT_FOUND => 'ikke fundet',
- DB_ERROR_NOT_LOCKED => 'ikke låst',
- DB_ERROR_SYNTAX => 'syntaksfejl',
- DB_ERROR_UNSUPPORTED => 'ikke understøttet',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'resulterende antal felter svarer ikke til forespørgslens antal felter',
- DB_ERROR_INVALID_DSN => 'ugyldig DSN',
- DB_ERROR_CONNECT_FAILED => 'tilslutning mislykkedes',
- 0 => 'ingen fejl', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'utilstrækkelige data angivet',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'udvidelse ikke fundet',
- DB_ERROR_NOSUCHDB => 'database ikke fundet',
- DB_ERROR_ACCESS_VIOLATION => 'utilstrækkelige rettigheder'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-de.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-de.inc.php
deleted file mode 100644
index a02dd7295..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-de.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'de',
- DB_ERROR => 'unbekannter Fehler',
- DB_ERROR_ALREADY_EXISTS => 'existiert bereits',
- DB_ERROR_CANNOT_CREATE => 'kann nicht erstellen',
- DB_ERROR_CANNOT_DELETE => 'kann nicht löschen',
- DB_ERROR_CANNOT_DROP => 'Tabelle oder Index konnte nicht gelöscht werden',
- DB_ERROR_CONSTRAINT => 'Randbedingung verletzt',
- DB_ERROR_DIVZERO => 'Division durch Null',
- DB_ERROR_INVALID => 'ungültig',
- DB_ERROR_INVALID_DATE => 'ungültiges Datum oder Zeit',
- DB_ERROR_INVALID_NUMBER => 'ungültige Zahl',
- DB_ERROR_MISMATCH => 'Unverträglichkeit',
- DB_ERROR_NODBSELECTED => 'Keine Datenbank ausgewählt',
- DB_ERROR_NOSUCHFIELD => 'Feld nicht vorhanden',
- DB_ERROR_NOSUCHTABLE => 'Tabelle nicht vorhanden',
- DB_ERROR_NOT_CAPABLE => 'Funktion nicht installiert',
- DB_ERROR_NOT_FOUND => 'nicht gefunden',
- DB_ERROR_NOT_LOCKED => 'nicht gesperrt',
- DB_ERROR_SYNTAX => 'Syntaxfehler',
- DB_ERROR_UNSUPPORTED => 'nicht unterstützt',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'Anzahl der zurückgelieferten Felder entspricht nicht der Anzahl der Felder in der Abfrage',
- DB_ERROR_INVALID_DSN => 'ungültiger DSN',
- DB_ERROR_CONNECT_FAILED => 'Verbindung konnte nicht hergestellt werden',
- 0 => 'kein Fehler', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'Nicht genügend Daten geliefert',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'Erweiterung nicht gefunden',
- DB_ERROR_NOSUCHDB => 'keine Datenbank',
- DB_ERROR_ACCESS_VIOLATION => 'ungenügende Rechte'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-en.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-en.inc.php
deleted file mode 100644
index 74c4ea021..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-en.inc.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'en',
- DB_ERROR => 'unknown error',
- DB_ERROR_ALREADY_EXISTS => 'already exists',
- DB_ERROR_CANNOT_CREATE => 'can not create',
- DB_ERROR_CANNOT_DELETE => 'can not delete',
- DB_ERROR_CANNOT_DROP => 'can not drop',
- DB_ERROR_CONSTRAINT => 'constraint violation',
- DB_ERROR_DIVZERO => 'division by zero',
- DB_ERROR_INVALID => 'invalid',
- DB_ERROR_INVALID_DATE => 'invalid date or time',
- DB_ERROR_INVALID_NUMBER => 'invalid number',
- DB_ERROR_MISMATCH => 'mismatch',
- DB_ERROR_NODBSELECTED => 'no database selected',
- DB_ERROR_NOSUCHFIELD => 'no such field',
- DB_ERROR_NOSUCHTABLE => 'no such table',
- DB_ERROR_NOT_CAPABLE => 'DB backend not capable',
- DB_ERROR_NOT_FOUND => 'not found',
- DB_ERROR_NOT_LOCKED => 'not locked',
- DB_ERROR_SYNTAX => 'syntax error',
- DB_ERROR_UNSUPPORTED => 'not supported',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row',
- DB_ERROR_INVALID_DSN => 'invalid DSN',
- DB_ERROR_CONNECT_FAILED => 'connect failed',
- 0 => 'no error', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'insufficient data supplied',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found',
- DB_ERROR_NOSUCHDB => 'no such database',
- DB_ERROR_ACCESS_VIOLATION => 'insufficient permissions',
- DB_ERROR_DEADLOCK => 'deadlock detected',
- DB_ERROR_STATEMENT_TIMEOUT => 'statement timeout',
- DB_ERROR_SERIALIZATION_FAILURE => 'could not serialize access'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-eo.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-eo.inc.php
deleted file mode 100644
index 107a3b37f..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-eo.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'eo',
- DB_ERROR => 'nekonata eraro',
- DB_ERROR_ALREADY_EXISTS => 'jam ekzistas',
- DB_ERROR_CANNOT_CREATE => 'maleblas krei',
- DB_ERROR_CANNOT_DELETE => 'maleblas elimini',
- DB_ERROR_CANNOT_DROP => 'maleblas elimini (drop)',
- DB_ERROR_CONSTRAINT => 'rompo de kondiĉoj de provo',
- DB_ERROR_DIVZERO => 'divido per 0 (nul)',
- DB_ERROR_INVALID => 'malregule',
- DB_ERROR_INVALID_DATE => 'malregula dato kaj tempo',
- DB_ERROR_INVALID_NUMBER => 'malregula nombro',
- DB_ERROR_MISMATCH => 'eraro',
- DB_ERROR_NODBSELECTED => 'datumbazo ne elektita',
- DB_ERROR_NOSUCHFIELD => 'ne ekzistas kampo',
- DB_ERROR_NOSUCHTABLE => 'ne ekzistas tabelo',
- DB_ERROR_NOT_CAPABLE => 'DBMS ne povas',
- DB_ERROR_NOT_FOUND => 'ne trovita',
- DB_ERROR_NOT_LOCKED => 'ne blokita',
- DB_ERROR_SYNTAX => 'sintaksa eraro',
- DB_ERROR_UNSUPPORTED => 'ne apogata',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'nombrilo de valoroj en linio',
- DB_ERROR_INVALID_DSN => 'malregula DSN-o',
- DB_ERROR_CONNECT_FAILED => 'konekto malsukcesa',
- 0 => 'ĉio bone', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'ne sufiĉe da datumo',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'etendo ne trovita',
- DB_ERROR_NOSUCHDB => 'datumbazo ne ekzistas',
- DB_ERROR_ACCESS_VIOLATION => 'ne sufiĉe da rajto por atingo'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-es.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-es.inc.php
deleted file mode 100644
index bcb0cceac..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-es.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'es',
- DB_ERROR => 'error desconocido',
- DB_ERROR_ALREADY_EXISTS => 'ya existe',
- DB_ERROR_CANNOT_CREATE => 'imposible crear',
- DB_ERROR_CANNOT_DELETE => 'imposible borrar',
- DB_ERROR_CANNOT_DROP => 'imposible hacer drop',
- DB_ERROR_CONSTRAINT => 'violacion de constraint',
- DB_ERROR_DIVZERO => 'division por cero',
- DB_ERROR_INVALID => 'invalido',
- DB_ERROR_INVALID_DATE => 'fecha u hora invalida',
- DB_ERROR_INVALID_NUMBER => 'numero invalido',
- DB_ERROR_MISMATCH => 'error',
- DB_ERROR_NODBSELECTED => 'no hay base de datos seleccionada',
- DB_ERROR_NOSUCHFIELD => 'campo invalido',
- DB_ERROR_NOSUCHTABLE => 'tabla no existe',
- DB_ERROR_NOT_CAPABLE => 'capacidad invalida para esta DB',
- DB_ERROR_NOT_FOUND => 'no encontrado',
- DB_ERROR_NOT_LOCKED => 'no bloqueado',
- DB_ERROR_SYNTAX => 'error de sintaxis',
- DB_ERROR_UNSUPPORTED => 'no soportado',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'la cantidad de columnas no corresponden a la cantidad de valores',
- DB_ERROR_INVALID_DSN => 'DSN invalido',
- DB_ERROR_CONNECT_FAILED => 'fallo la conexion',
- 0 => 'sin error', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'insuficientes datos',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extension no encontrada',
- DB_ERROR_NOSUCHDB => 'base de datos no encontrada',
- DB_ERROR_ACCESS_VIOLATION => 'permisos insuficientes'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-fa.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-fa.inc.php
deleted file mode 100644
index 84f17bd85..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-fa.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'fa',
- DB_ERROR => 'خطای ناشناخته',
- DB_ERROR_ALREADY_EXISTS => 'وجود دارد',
- DB_ERROR_CANNOT_CREATE => 'امکان create وجود ندارد',
- DB_ERROR_CANNOT_DELETE => 'امکان حذف وجود ندارد',
- DB_ERROR_CANNOT_DROP => 'امکان drop وجود ندارد',
- DB_ERROR_CONSTRAINT => 'نقض شرط',
- DB_ERROR_DIVZERO => 'تقسیم بر صفر',
- DB_ERROR_INVALID => 'نامعتبر',
- DB_ERROR_INVALID_DATE => 'زمان یا تاریخ نامعتبر',
- DB_ERROR_INVALID_NUMBER => 'عدد نامعتبر',
- DB_ERROR_MISMATCH => 'عدم مطابقت',
- DB_ERROR_NODBSELECTED => 'بانک اطلاعاتی انتخاب نشده است',
- DB_ERROR_NOSUCHFIELD => 'چنین ستونی وجود ندارد',
- DB_ERROR_NOSUCHTABLE => 'چنین جدولی وجود ندارد',
- DB_ERROR_NOT_CAPABLE => 'backend بانک اطلاعاتی قادر نیست',
- DB_ERROR_NOT_FOUND => 'پیدا نشد',
- DB_ERROR_NOT_LOCKED => 'قفل نشده',
- DB_ERROR_SYNTAX => 'خطای دستوری',
- DB_ERROR_UNSUPPORTED => 'پشتیبانی نمی شود',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'شمارش مقادیر روی ردیف',
- DB_ERROR_INVALID_DSN => 'DSN نامعتبر',
- DB_ERROR_CONNECT_FAILED => 'ارتباط برقرار نشد',
- 0 => 'بدون خطا', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'داده ناکافی است',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extension پیدا نشد',
- DB_ERROR_NOSUCHDB => 'چنین بانک اطلاعاتی وجود ندارد',
- DB_ERROR_ACCESS_VIOLATION => 'حق دسترسی ناکافی'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-fr.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-fr.inc.php
deleted file mode 100644
index b010d1e59..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-fr.inc.php
+++ /dev/null
@@ -1,51 +0,0 @@
- 'fr',
- DB_ERROR => 'erreur inconnue',
- DB_ERROR_ALREADY_EXISTS => 'existe déjà',
- DB_ERROR_CANNOT_CREATE => 'création impossible',
- DB_ERROR_CANNOT_DELETE => 'effacement impossible',
- DB_ERROR_CANNOT_DROP => 'suppression impossible',
- DB_ERROR_CONSTRAINT => 'violation de contrainte',
- DB_ERROR_DIVZERO => 'division par zéro',
- DB_ERROR_INVALID => 'invalide',
- DB_ERROR_INVALID_DATE => 'date ou heure invalide',
- DB_ERROR_INVALID_NUMBER => 'nombre invalide',
- DB_ERROR_MISMATCH => 'erreur de concordance',
- DB_ERROR_NODBSELECTED => 'pas de base de données sélectionnée',
- DB_ERROR_NOSUCHFIELD => 'nom de colonne invalide',
- DB_ERROR_NOSUCHTABLE => 'table ou vue inexistante',
- DB_ERROR_NOT_CAPABLE => 'fonction optionnelle non installée',
- DB_ERROR_NOT_FOUND => 'pas trouvé',
- DB_ERROR_NOT_LOCKED => 'non verrouillé',
- DB_ERROR_SYNTAX => 'erreur de syntaxe',
- DB_ERROR_UNSUPPORTED => 'non supporté',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'valeur insérée trop grande pour colonne',
- DB_ERROR_INVALID_DSN => 'DSN invalide',
- DB_ERROR_CONNECT_FAILED => 'échec à la connexion',
- 0 => "pas d'erreur", // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'données fournies insuffisantes',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extension non trouvée',
- DB_ERROR_NOSUCHDB => 'base de données inconnue',
- DB_ERROR_ACCESS_VIOLATION => 'droits insuffisants'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-hu.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-hu.inc.php
deleted file mode 100644
index 5a73827b3..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-hu.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'hu',
- DB_ERROR => 'ismeretlen hiba',
- DB_ERROR_ALREADY_EXISTS => 'már létezik',
- DB_ERROR_CANNOT_CREATE => 'nem sikerült létrehozni',
- DB_ERROR_CANNOT_DELETE => 'nem sikerült törölni',
- DB_ERROR_CANNOT_DROP => 'nem sikerült eldobni',
- DB_ERROR_CONSTRAINT => 'szabályok megszegése',
- DB_ERROR_DIVZERO => 'osztás nullával',
- DB_ERROR_INVALID => 'érvénytelen',
- DB_ERROR_INVALID_DATE => 'érvénytelen dátum vagy idő',
- DB_ERROR_INVALID_NUMBER => 'érvénytelen szám',
- DB_ERROR_MISMATCH => 'nem megfelelő',
- DB_ERROR_NODBSELECTED => 'nincs kiválasztott adatbázis',
- DB_ERROR_NOSUCHFIELD => 'nincs ilyen mező',
- DB_ERROR_NOSUCHTABLE => 'nincs ilyen tábla',
- DB_ERROR_NOT_CAPABLE => 'DB backend nem támogatja',
- DB_ERROR_NOT_FOUND => 'nem található',
- DB_ERROR_NOT_LOCKED => 'nincs lezárva',
- DB_ERROR_SYNTAX => 'szintaktikai hiba',
- DB_ERROR_UNSUPPORTED => 'nem támogatott',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'soron végzett érték számlálás',
- DB_ERROR_INVALID_DSN => 'hibás DSN',
- DB_ERROR_CONNECT_FAILED => 'sikertelen csatlakozás',
- 0 => 'nincs hiba', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'túl kevés az adat',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'bővítmény nem található',
- DB_ERROR_NOSUCHDB => 'nincs ilyen adatbázis',
- DB_ERROR_ACCESS_VIOLATION => 'nincs jogosultság'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-id.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-id.inc.php
deleted file mode 100644
index abd38eee3..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-id.inc.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'id',
- DB_ERROR => 'kesalahan tidak diketahui',
- DB_ERROR_ALREADY_EXISTS => 'sudah ada',
- DB_ERROR_CANNOT_CREATE => 'tak dapat membuat',
- DB_ERROR_CANNOT_DELETE => 'tak dapat menghapus',
- DB_ERROR_CANNOT_DROP => 'tak dapat menghapus',
- DB_ERROR_CONSTRAINT => 'pelanggaran kendala',
- DB_ERROR_DIVZERO => 'pembagian dengan 0',
- DB_ERROR_INVALID => 'tidak sah',
- DB_ERROR_INVALID_DATE => 'tanggal atau waktu tidak valid',
- DB_ERROR_INVALID_NUMBER => 'nomor tidak sah',
- DB_ERROR_MISMATCH => 'tak cocok',
- DB_ERROR_NODBSELECTED => 'tak ada database dipilih',
- DB_ERROR_NOSUCHFIELD => 'kolom tak ditemukan',
- DB_ERROR_NOSUCHTABLE => 'tabel tak ditemukan',
- DB_ERROR_NOT_CAPABLE => 'kemampuan DB tak memadai',
- DB_ERROR_NOT_FOUND => 'tidak ditemukan',
- DB_ERROR_NOT_LOCKED => 'tidak terkunci',
- DB_ERROR_SYNTAX => 'kesalahan sintak',
- DB_ERROR_UNSUPPORTED => 'tak didukung',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'menghitung isi pada baris',
- DB_ERROR_INVALID_DSN => 'DSN tidak sah',
- DB_ERROR_CONNECT_FAILED => 'koneksi gagal',
- 0 => 'tak ada kesalahan', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'data yang dimasukan tidak memadai',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'ekstensi tak ditemukan',
- DB_ERROR_NOSUCHDB => 'database tak ditemukan',
- DB_ERROR_ACCESS_VIOLATION => 'izin tidak memadai',
- DB_ERROR_DEADLOCK => 'kebuntuan terdeteksi',
- DB_ERROR_STATEMENT_TIMEOUT => 'perintah kehabisan waktu',
- DB_ERROR_SERIALIZATION_FAILURE => 'tak dapat melanjutkan akses'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-it.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-it.inc.php
deleted file mode 100644
index a6516308d..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-it.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'it',
- DB_ERROR => 'errore sconosciuto',
- DB_ERROR_ALREADY_EXISTS => 'esiste già',
- DB_ERROR_CANNOT_CREATE => 'non posso creare',
- DB_ERROR_CANNOT_DELETE => 'non posso cancellare',
- DB_ERROR_CANNOT_DROP => 'non posso eliminare',
- DB_ERROR_CONSTRAINT => 'violazione constraint',
- DB_ERROR_DIVZERO => 'divisione per zero',
- DB_ERROR_INVALID => 'non valido',
- DB_ERROR_INVALID_DATE => 'data od ora non valida',
- DB_ERROR_INVALID_NUMBER => 'numero non valido',
- DB_ERROR_MISMATCH => 'diversi',
- DB_ERROR_NODBSELECTED => 'nessun database selezionato',
- DB_ERROR_NOSUCHFIELD => 'nessun campo trovato',
- DB_ERROR_NOSUCHTABLE => 'nessuna tabella trovata',
- DB_ERROR_NOT_CAPABLE => 'DB backend non abilitato',
- DB_ERROR_NOT_FOUND => 'non trovato',
- DB_ERROR_NOT_LOCKED => 'non bloccato',
- DB_ERROR_SYNTAX => 'errore di sintassi',
- DB_ERROR_UNSUPPORTED => 'non supportato',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'valore inserito troppo grande per una colonna',
- DB_ERROR_INVALID_DSN => 'DSN non valido',
- DB_ERROR_CONNECT_FAILED => 'connessione fallita',
- 0 => 'nessun errore', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'dati inseriti insufficienti',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'estensione non trovata',
- DB_ERROR_NOSUCHDB => 'database non trovato',
- DB_ERROR_ACCESS_VIOLATION => 'permessi insufficienti'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-nl.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-nl.inc.php
deleted file mode 100644
index 8a898193f..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-nl.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'nl',
- DB_ERROR => 'onbekende fout',
- DB_ERROR_ALREADY_EXISTS => 'bestaat al',
- DB_ERROR_CANNOT_CREATE => 'kan niet aanmaken',
- DB_ERROR_CANNOT_DELETE => 'kan niet wissen',
- DB_ERROR_CANNOT_DROP => 'kan niet verwijderen',
- DB_ERROR_CONSTRAINT => 'constraint overtreding',
- DB_ERROR_DIVZERO => 'poging tot delen door nul',
- DB_ERROR_INVALID => 'ongeldig',
- DB_ERROR_INVALID_DATE => 'ongeldige datum of tijd',
- DB_ERROR_INVALID_NUMBER => 'ongeldig nummer',
- DB_ERROR_MISMATCH => 'is incorrect',
- DB_ERROR_NODBSELECTED => 'geen database geselecteerd',
- DB_ERROR_NOSUCHFIELD => 'onbekend veld',
- DB_ERROR_NOSUCHTABLE => 'onbekende tabel',
- DB_ERROR_NOT_CAPABLE => 'database systeem is niet tot uitvoer in staat',
- DB_ERROR_NOT_FOUND => 'niet gevonden',
- DB_ERROR_NOT_LOCKED => 'niet vergrendeld',
- DB_ERROR_SYNTAX => 'syntaxis fout',
- DB_ERROR_UNSUPPORTED => 'niet ondersteund',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'waarde telling op rij',
- DB_ERROR_INVALID_DSN => 'ongeldige DSN',
- DB_ERROR_CONNECT_FAILED => 'connectie mislukt',
- 0 => 'geen fout', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'onvoldoende data gegeven',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie niet gevonden',
- DB_ERROR_NOSUCHDB => 'onbekende database',
- DB_ERROR_ACCESS_VIOLATION => 'onvoldoende rechten'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-oc.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-oc.inc.php
deleted file mode 100644
index 3481e79a1..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-oc.inc.php
+++ /dev/null
@@ -1,51 +0,0 @@
- 'oc',
- DB_ERROR => 'error desconeguda',
- DB_ERROR_ALREADY_EXISTS => 'existís ja',
- DB_ERROR_CANNOT_CREATE => 'creacion impossibla',
- DB_ERROR_CANNOT_DELETE => 'escafament impossible',
- DB_ERROR_CANNOT_DROP => 'supression impossibla',
- DB_ERROR_CONSTRAINT => 'violacion de constrenta',
- DB_ERROR_DIVZERO => 'division per zèro',
- DB_ERROR_INVALID => 'invalid',
- DB_ERROR_INVALID_DATE => 'data o ora invalida',
- DB_ERROR_INVALID_NUMBER => 'nombre invalid',
- DB_ERROR_MISMATCH => 'error de concordància',
- DB_ERROR_NODBSELECTED => 'pas de basa de donadas de seleccionada',
- DB_ERROR_NOSUCHFIELD => 'nom de colomna invalid',
- DB_ERROR_NOSUCHTABLE => 'taula o vista inexistenta',
- DB_ERROR_NOT_CAPABLE => 'foncion opcionala pas installada',
- DB_ERROR_NOT_FOUND => 'pas trobat',
- DB_ERROR_NOT_LOCKED => 'pas verrolhat',
- DB_ERROR_SYNTAX => 'error de sintaxi',
- DB_ERROR_UNSUPPORTED => 'pas suportat',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'valor inserida tròp granda per colomna',
- DB_ERROR_INVALID_DSN => 'DSN invalid',
- DB_ERROR_CONNECT_FAILED => 'fracàs a la connexion',
- 0 => "pas d'error", // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'donadas provesidas insufisentas',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extension pas trobada',
- DB_ERROR_NOSUCHDB => 'basa de donadas desconeguda',
- DB_ERROR_ACCESS_VIOLATION => 'dreits insufisents'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-pl.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-pl.inc.php
deleted file mode 100644
index f855153eb..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-pl.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'pl',
- DB_ERROR => 'niezidentyfikowany błąd',
- DB_ERROR_ALREADY_EXISTS => 'już istnieją',
- DB_ERROR_CANNOT_CREATE => 'nie można stworzyć',
- DB_ERROR_CANNOT_DELETE => 'nie można usunąć',
- DB_ERROR_CANNOT_DROP => 'nie można porzucić',
- DB_ERROR_CONSTRAINT => 'pogwałcenie uprawnień',
- DB_ERROR_DIVZERO => 'dzielenie przez zero',
- DB_ERROR_INVALID => 'błędny',
- DB_ERROR_INVALID_DATE => 'błędna godzina lub data',
- DB_ERROR_INVALID_NUMBER => 'błędny numer',
- DB_ERROR_MISMATCH => 'niedopasowanie',
- DB_ERROR_NODBSELECTED => 'baza danych nie została wybrana',
- DB_ERROR_NOSUCHFIELD => 'nie znaleziono pola',
- DB_ERROR_NOSUCHTABLE => 'nie znaleziono tabeli',
- DB_ERROR_NOT_CAPABLE => 'nie zdolny',
- DB_ERROR_NOT_FOUND => 'nie znaleziono',
- DB_ERROR_NOT_LOCKED => 'nie zakmnięty',
- DB_ERROR_SYNTAX => 'błąd składni',
- DB_ERROR_UNSUPPORTED => 'nie obsługuje',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'wartość liczona w szeregu',
- DB_ERROR_INVALID_DSN => 'błędny DSN',
- DB_ERROR_CONNECT_FAILED => 'połączenie nie zostało zrealizowane',
- 0 => 'brak błędów', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'niedostateczna ilość informacji',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'nie znaleziono rozszerzenia',
- DB_ERROR_NOSUCHDB => 'nie znaleziono bazy',
- DB_ERROR_ACCESS_VIOLATION => 'niedostateczne uprawnienia'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-pt-br.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-pt-br.inc.php
deleted file mode 100644
index b6c0d1c95..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-pt-br.inc.php
+++ /dev/null
@@ -1,53 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'pt-br',
- DB_ERROR => 'erro desconhecido',
- DB_ERROR_ALREADY_EXISTS => 'já existe',
- DB_ERROR_CANNOT_CREATE => 'impossível criar',
- DB_ERROR_CANNOT_DELETE => 'impossível excluír',
- DB_ERROR_CANNOT_DROP => 'impossível remover',
- DB_ERROR_CONSTRAINT => 'violação do confinamente',
- DB_ERROR_DIVZERO => 'divisão por zero',
- DB_ERROR_INVALID => 'inválido',
- DB_ERROR_INVALID_DATE => 'data ou hora inválida',
- DB_ERROR_INVALID_NUMBER => 'número inválido',
- DB_ERROR_MISMATCH => 'erro',
- DB_ERROR_NODBSELECTED => 'nenhum banco de dados selecionado',
- DB_ERROR_NOSUCHFIELD => 'campo inválido',
- DB_ERROR_NOSUCHTABLE => 'tabela inexistente',
- DB_ERROR_NOT_CAPABLE => 'capacidade inválida para este BD',
- DB_ERROR_NOT_FOUND => 'não encontrado',
- DB_ERROR_NOT_LOCKED => 'não bloqueado',
- DB_ERROR_SYNTAX => 'erro de sintaxe',
- DB_ERROR_UNSUPPORTED =>
-'não suportado',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'a quantidade de colunas não corresponde ao de valores',
- DB_ERROR_INVALID_DSN => 'DSN inválido',
- DB_ERROR_CONNECT_FAILED => 'falha na conexão',
- 0 => 'sem erro', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'dados insuficientes',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extensão não encontrada',
- DB_ERROR_NOSUCHDB => 'banco de dados não encontrado',
- DB_ERROR_ACCESS_VIOLATION => 'permissão insuficiente'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-ro.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-ro.inc.php
deleted file mode 100644
index 011c01636..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-ro.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'ro',
- DB_ERROR => 'eroare necunoscuta',
- DB_ERROR_ALREADY_EXISTS => 'deja exista',
- DB_ERROR_CANNOT_CREATE => 'nu se poate creea',
- DB_ERROR_CANNOT_DELETE => 'nu se poate sterge',
- DB_ERROR_CANNOT_DROP => 'nu se poate executa drop',
- DB_ERROR_CONSTRAINT => 'violare de constrain',
- DB_ERROR_DIVZERO => 'se divide la zero',
- DB_ERROR_INVALID => 'invalid',
- DB_ERROR_INVALID_DATE => 'data sau timp invalide',
- DB_ERROR_INVALID_NUMBER => 'numar invalid',
- DB_ERROR_MISMATCH => 'nepotrivire-mismatch',
- DB_ERROR_NODBSELECTED => 'nu exista baza de date selectata',
- DB_ERROR_NOSUCHFIELD => 'camp inexistent',
- DB_ERROR_NOSUCHTABLE => 'tabela inexistenta',
- DB_ERROR_NOT_CAPABLE => 'functie optionala neinstalata',
- DB_ERROR_NOT_FOUND => 'negasit',
- DB_ERROR_NOT_LOCKED => 'neblocat',
- DB_ERROR_SYNTAX => 'eroare de sintaxa',
- DB_ERROR_UNSUPPORTED => 'nu e suportat',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'valoare prea mare pentru coloana',
- DB_ERROR_INVALID_DSN => 'DSN invalid',
- DB_ERROR_CONNECT_FAILED => 'conectare esuata',
- 0 => 'fara eroare', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'data introduse insuficiente',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie negasita',
- DB_ERROR_NOSUCHDB => 'nu exista baza de date',
- DB_ERROR_ACCESS_VIOLATION => 'permisiuni insuficiente'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-ru.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-ru.inc.php
deleted file mode 100644
index a311784a5..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-ru.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'ru',
- DB_ERROR => 'неизвестная ошибка',
- DB_ERROR_ALREADY_EXISTS => 'уже существует',
- DB_ERROR_CANNOT_CREATE => 'невозможно создать',
- DB_ERROR_CANNOT_DELETE => 'невозможно удалить',
- DB_ERROR_CANNOT_DROP => 'невозможно удалить (drop)',
- DB_ERROR_CONSTRAINT => 'нарушение условий проверки',
- DB_ERROR_DIVZERO => 'деление на 0',
- DB_ERROR_INVALID => 'неправильно',
- DB_ERROR_INVALID_DATE => 'некорректная дата или время',
- DB_ERROR_INVALID_NUMBER => 'некорректное число',
- DB_ERROR_MISMATCH => 'ошибка',
- DB_ERROR_NODBSELECTED => 'БД не выбрана',
- DB_ERROR_NOSUCHFIELD => 'не существует поле',
- DB_ERROR_NOSUCHTABLE => 'не существует таблица',
- DB_ERROR_NOT_CAPABLE => 'СУБД не в состоянии',
- DB_ERROR_NOT_FOUND => 'не найдено',
- DB_ERROR_NOT_LOCKED => 'не заблокировано',
- DB_ERROR_SYNTAX => 'синтаксическая ошибка',
- DB_ERROR_UNSUPPORTED => 'не поддерживается',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'счетчик значений в строке',
- DB_ERROR_INVALID_DSN => 'неправильная DSN',
- DB_ERROR_CONNECT_FAILED => 'соединение неуспешно',
- 0 => 'нет ошибки', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'предоставлено недостаточно данных',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'расширение не найдено',
- DB_ERROR_NOSUCHDB => 'не существует БД',
- DB_ERROR_ACCESS_VIOLATION => 'недостаточно прав доступа'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-sv.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-sv.inc.php
deleted file mode 100644
index 72e243011..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-sv.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'en',
- DB_ERROR => 'Okänt fel',
- DB_ERROR_ALREADY_EXISTS => 'finns redan',
- DB_ERROR_CANNOT_CREATE => 'kan inte skapa',
- DB_ERROR_CANNOT_DELETE => 'kan inte ta bort',
- DB_ERROR_CANNOT_DROP => 'kan inte släppa',
- DB_ERROR_CONSTRAINT => 'begränsning kränkt',
- DB_ERROR_DIVZERO => 'division med noll',
- DB_ERROR_INVALID => 'ogiltig',
- DB_ERROR_INVALID_DATE => 'ogiltigt datum eller tid',
- DB_ERROR_INVALID_NUMBER => 'ogiltigt tal',
- DB_ERROR_MISMATCH => 'felaktig matchning',
- DB_ERROR_NODBSELECTED => 'ingen databas vald',
- DB_ERROR_NOSUCHFIELD => 'inget sådant fält',
- DB_ERROR_NOSUCHTABLE => 'ingen sådan tabell',
- DB_ERROR_NOT_CAPABLE => 'DB backend klarar det inte',
- DB_ERROR_NOT_FOUND => 'finns inte',
- DB_ERROR_NOT_LOCKED => 'inte låst',
- DB_ERROR_SYNTAX => 'syntaxfel',
- DB_ERROR_UNSUPPORTED => 'stöds ej',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'värde räknat på rad',
- DB_ERROR_INVALID_DSN => 'ogiltig DSN',
- DB_ERROR_CONNECT_FAILED => 'anslutning misslyckades',
- 0 => 'inget fel', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'otillräckligt med data angivet',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'utökning hittades ej',
- DB_ERROR_NOSUCHDB => 'ingen sådan databas',
- DB_ERROR_ACCESS_VIOLATION => 'otillräckliga rättigheter'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-th.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-th.inc.php
deleted file mode 100644
index 354acca1e..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-th.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'th',
- DB_ERROR => 'error ไม่รู้สาเหตุ',
- DB_ERROR_ALREADY_EXISTS => 'มี�?ล้ว',
- DB_ERROR_CANNOT_CREATE => 'สร้างไม่ได้',
- DB_ERROR_CANNOT_DELETE => 'ลบไม่ได้',
- DB_ERROR_CANNOT_DROP => 'drop ไม่ได้',
- DB_ERROR_CONSTRAINT => 'constraint violation',
- DB_ERROR_DIVZERO => 'หา�?ด้วยสู�?',
- DB_ERROR_INVALID => 'ไม่ valid',
- DB_ERROR_INVALID_DATE => 'วันที่ เวลา ไม่ valid',
- DB_ERROR_INVALID_NUMBER => 'เลขไม่ valid',
- DB_ERROR_MISMATCH => 'mismatch',
- DB_ERROR_NODBSELECTED => 'ไม่ได้เลือ�?�?านข้อมูล',
- DB_ERROR_NOSUCHFIELD => 'ไม่มีฟีลด์นี้',
- DB_ERROR_NOSUCHTABLE => 'ไม่มีตารางนี้',
- DB_ERROR_NOT_CAPABLE => 'DB backend not capable',
- DB_ERROR_NOT_FOUND => 'ไม่พบ',
- DB_ERROR_NOT_LOCKED => 'ไม่ได้ล๊อ�?',
- DB_ERROR_SYNTAX => 'ผิด syntax',
- DB_ERROR_UNSUPPORTED => 'ไม่ support',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row',
- DB_ERROR_INVALID_DSN => 'invalid DSN',
- DB_ERROR_CONNECT_FAILED => 'ไม่สามารถ connect',
- 0 => 'no error',
- DB_ERROR_NEED_MORE_DATA => 'ข้อมูลไม่เพียงพอ',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'ไม่พบ extension',
- DB_ERROR_NOSUCHDB => 'ไม่มีข้อมูลนี้',
- DB_ERROR_ACCESS_VIOLATION => 'permissions ไม่พอ'
-);
diff --git a/app/vendor/adodb/adodb-php/lang/adodb-uk.inc.php b/app/vendor/adodb/adodb-php/lang/adodb-uk.inc.php
deleted file mode 100644
index e54a96708..000000000
--- a/app/vendor/adodb/adodb-php/lang/adodb-uk.inc.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- */
-
-$ADODB_LANG_ARRAY = array (
- 'LANG' => 'uk',
- DB_ERROR => 'невідома помилка',
- DB_ERROR_ALREADY_EXISTS => 'вже існує',
- DB_ERROR_CANNOT_CREATE => 'неможливо створити',
- DB_ERROR_CANNOT_DELETE => 'неможливо видалити',
- DB_ERROR_CANNOT_DROP => 'неможливо знищити (drop)',
- DB_ERROR_CONSTRAINT => 'порушення умов перевірки',
- DB_ERROR_DIVZERO => 'ділення на 0',
- DB_ERROR_INVALID => 'неправильно',
- DB_ERROR_INVALID_DATE => 'неправильна дата чи час',
- DB_ERROR_INVALID_NUMBER => 'неправильне число',
- DB_ERROR_MISMATCH => 'помилка',
- DB_ERROR_NODBSELECTED => 'не вибрано БД',
- DB_ERROR_NOSUCHFIELD => 'не існує поле',
- DB_ERROR_NOSUCHTABLE => 'не існує таблиця',
- DB_ERROR_NOT_CAPABLE => 'СУБД не в стані',
- DB_ERROR_NOT_FOUND => 'не знайдено',
- DB_ERROR_NOT_LOCKED => 'не заблоковано',
- DB_ERROR_SYNTAX => 'синтаксична помилка',
- DB_ERROR_UNSUPPORTED => 'не підтримується',
- DB_ERROR_VALUE_COUNT_ON_ROW => 'рахівник значень в стрічці',
- DB_ERROR_INVALID_DSN => 'неправильна DSN',
- DB_ERROR_CONNECT_FAILED => 'з\'єднання неуспішне',
- 0 => 'все гаразд', // DB_OK
- DB_ERROR_NEED_MORE_DATA => 'надано недостатньо даних',
- DB_ERROR_EXTENSION_NOT_FOUND=> 'розширення не знайдено',
- DB_ERROR_NOSUCHDB => 'не існує БД',
- DB_ERROR_ACCESS_VIOLATION => 'недостатньо прав доступа'
-);
diff --git a/app/vendor/adodb/adodb-php/pear/Auth/Container/ADOdb.php b/app/vendor/adodb/adodb-php/pear/Auth/Container/ADOdb.php
deleted file mode 100644
index 807da9d7b..000000000
--- a/app/vendor/adodb/adodb-php/pear/Auth/Container/ADOdb.php
+++ /dev/null
@@ -1,406 +0,0 @@
-
- * @author Richard Tango-Lowy
- */
-
-require_once 'Auth/Container.php';
-require_once 'adodb.inc.php';
-require_once 'adodb-pear.inc.php';
-require_once 'adodb-errorpear.inc.php';
-
-
-class Auth_Container_ADOdb extends Auth_Container
-{
-
- /**
- * Additional options for the storage container
- * @var array
- */
- var $options = array();
-
- /**
- * DB object
- * @var object
- */
- var $db = null;
- var $dsn = '';
-
- /**
- * User that is currently selected from the DB.
- * @var string
- */
- var $activeUser = '';
-
- // {{{ Constructor
-
- /**
- * Constructor of the container class
- *
- * Initiate connection to the database via PEAR::ADOdb
- *
- * @param string Connection data or DB object
- * @return object Returns an error object if something went wrong
- */
- function __construct($dsn)
- {
- $this->_setDefaults();
-
- if (is_array($dsn)) {
- $this->_parseOptions($dsn);
-
- if (empty($this->options['dsn'])) {
- PEAR::raiseError('No connection parameters specified!');
- }
- } else {
- // Extract db_type from dsn string.
- $this->options['dsn'] = $dsn;
- }
- }
-
- // }}}
- // {{{ _connect()
-
- /**
- * Connect to database by using the given DSN string
- *
- * @access private
- * @param string DSN string
- * @return mixed Object on error, otherwise bool
- */
- function _connect($dsn)
- {
- if (is_string($dsn) || is_array($dsn)) {
- if(!$this->db) {
- $this->db = ADONewConnection($dsn);
- if( $err = ADODB_Pear_error() ) {
- return PEAR::raiseError($err);
- }
- }
-
- } else {
- return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__,
- 41,
- PEAR_ERROR_RETURN,
- null,
- null
- );
- }
-
- if(!$this->db) {
- return PEAR::raiseError(ADODB_Pear_error());
- } else {
- return true;
- }
- }
-
- // }}}
- // {{{ _prepare()
-
- /**
- * Prepare database connection
- *
- * This function checks if we have already opened a connection to
- * the database. If that's not the case, a new connection is opened.
- *
- * @access private
- * @return mixed True or a DB error object.
- */
- function _prepare()
- {
- if(!$this->db) {
- $res = $this->_connect($this->options['dsn']);
- }
- return true;
- }
-
- // }}}
- // {{{ query()
-
- /**
- * Prepare query to the database
- *
- * This function checks if we have already opened a connection to
- * the database. If that's not the case, a new connection is opened.
- * After that the query is passed to the database.
- *
- * @access public
- * @param string Query string
- * @return mixed a DB_result object or DB_OK on success, a DB
- * or PEAR error on failure
- */
- function query($query)
- {
- $err = $this->_prepare();
- if ($err !== true) {
- return $err;
- }
- return $this->db->query($query);
- }
-
- // }}}
- // {{{ _setDefaults()
-
- /**
- * Set some default options
- *
- * @access private
- * @return void
- */
- function _setDefaults()
- {
- $this->options['db_type'] = 'mysql';
- $this->options['table'] = 'auth';
- $this->options['usernamecol'] = 'username';
- $this->options['passwordcol'] = 'password';
- $this->options['dsn'] = '';
- $this->options['db_fields'] = '';
- $this->options['cryptType'] = 'md5';
- }
-
- // }}}
- // {{{ _parseOptions()
-
- /**
- * Parse options passed to the container class
- *
- * @access private
- * @param array
- */
- function _parseOptions($array)
- {
- foreach ($array as $key => $value) {
- if (isset($this->options[$key])) {
- $this->options[$key] = $value;
- }
- }
-
- /* Include additional fields if they exist */
- if(!empty($this->options['db_fields'])){
- if(is_array($this->options['db_fields'])){
- $this->options['db_fields'] = join(', ', $this->options['db_fields']);
- }
- $this->options['db_fields'] = ', '.$this->options['db_fields'];
- }
- }
-
- // }}}
- // {{{ fetchData()
-
- /**
- * Get user information from database
- *
- * This function uses the given username to fetch
- * the corresponding login data from the database
- * table. If an account that matches the passed username
- * and password is found, the function returns true.
- * Otherwise it returns false.
- *
- * @param string Username
- * @param string Password
- * @return mixed Error object or boolean
- */
- function fetchData($username, $password)
- {
- // Prepare for a database query
- $err = $this->_prepare();
- if ($err !== true) {
- return PEAR::raiseError($err->getMessage(), $err->getCode());
- }
-
- // Find if db_fields contains a *, i so assume all col are selected
- if(strstr($this->options['db_fields'], '*')){
- $sql_from = "*";
- }
- else{
- $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
- }
-
- $query = "SELECT ".$sql_from.
- " FROM ".$this->options['table'].
- " WHERE ".$this->options['usernamecol']." = " . $this->db->Quote($username);
-
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- $rset = $this->db->Execute( $query );
- $res = $rset->fetchRow();
-
- if (DB::isError($res)) {
- return PEAR::raiseError($res->getMessage(), $res->getCode());
- }
- if (!is_array($res)) {
- $this->activeUser = '';
- return false;
- }
- if ($this->verifyPassword(trim($password, "\r\n"),
- trim($res[$this->options['passwordcol']], "\r\n"),
- $this->options['cryptType'])) {
- // Store additional field values in the session
- foreach ($res as $key => $value) {
- if ($key == $this->options['passwordcol'] ||
- $key == $this->options['usernamecol']) {
- continue;
- }
- // Use reference to the auth object if exists
- // This is because the auth session variable can change so a static call to setAuthData does not make sense
- if(is_object($this->_auth_obj)){
- $this->_auth_obj->setAuthData($key, $value);
- } else {
- Auth::setAuthData($key, $value);
- }
- }
-
- return true;
- }
-
- $this->activeUser = $res[$this->options['usernamecol']];
- return false;
- }
-
- // }}}
- // {{{ listUsers()
-
- function listUsers()
- {
- $err = $this->_prepare();
- if ($err !== true) {
- return PEAR::raiseError($err->getMessage(), $err->getCode());
- }
-
- $retVal = array();
-
- // Find if db_fileds contains a *, i so assume all col are selected
- if(strstr($this->options['db_fields'], '*')){
- $sql_from = "*";
- }
- else{
- $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
- }
-
- $query = sprintf("SELECT %s FROM %s",
- $sql_from,
- $this->options['table']
- );
- $res = $this->db->getAll($query, null, DB_FETCHMODE_ASSOC);
-
- if (DB::isError($res)) {
- return PEAR::raiseError($res->getMessage(), $res->getCode());
- } else {
- foreach ($res as $user) {
- $user['username'] = $user[$this->options['usernamecol']];
- $retVal[] = $user;
- }
- }
- return $retVal;
- }
-
- // }}}
- // {{{ addUser()
-
- /**
- * Add user to the storage container
- *
- * @access public
- * @param string Username
- * @param string Password
- * @param mixed Additional information that are stored in the DB
- *
- * @return mixed True on success, otherwise error object
- */
- function addUser($username, $password, $additional = "")
- {
- if (function_exists($this->options['cryptType'])) {
- $cryptFunction = $this->options['cryptType'];
- } else {
- $cryptFunction = 'md5';
- }
-
- $additional_key = '';
- $additional_value = '';
-
- if (is_array($additional)) {
- foreach ($additional as $key => $value) {
- $additional_key .= ', ' . $key;
- $additional_value .= ", '" . $value . "'";
- }
- }
-
- $query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)",
- $this->options['table'],
- $this->options['usernamecol'],
- $this->options['passwordcol'],
- $additional_key,
- $username,
- $cryptFunction($password),
- $additional_value
- );
-
- $res = $this->query($query);
-
- if (DB::isError($res)) {
- return PEAR::raiseError($res->getMessage(), $res->getCode());
- } else {
- return true;
- }
- }
-
- // }}}
- // {{{ removeUser()
-
- /**
- * Remove user from the storage container
- *
- * @access public
- * @param string Username
- *
- * @return mixed True on success, otherwise error object
- */
- function removeUser($username)
- {
- $query = sprintf("DELETE FROM %s WHERE %s = '%s'",
- $this->options['table'],
- $this->options['usernamecol'],
- $username
- );
-
- $res = $this->query($query);
-
- if (DB::isError($res)) {
- return PEAR::raiseError($res->getMessage(), $res->getCode());
- } else {
- return true;
- }
- }
-
- // }}}
-}
-
-function showDbg( $string ) {
- print "
--- $string";
-}
-function dump( $var, $str, $vardump = false ) {
- print "$str
";
- ( !$vardump ) ? ( print_r( $var )) : ( var_dump( $var ));
- print "
";
-}
diff --git a/app/vendor/adodb/adodb-php/pear/auth_adodb_example.php b/app/vendor/adodb/adodb-php/pear/auth_adodb_example.php
deleted file mode 100644
index 77af93955..000000000
--- a/app/vendor/adodb/adodb-php/pear/auth_adodb_example.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- $dsn, 'table' => 'auth', 'cryptType' => 'none',
- 'usernamecol' => 'username', 'passwordcol' => 'password');
-$a = new Auth("ADOdb", $params, "loginFunction");
-$a->start();
-
-if ($a->getAuth()) {
- echo "Success";
- // * The output of your site goes here.
-}
diff --git a/app/vendor/adodb/adodb-php/pear/readme.Auth.txt b/app/vendor/adodb/adodb-php/pear/readme.Auth.txt
deleted file mode 100644
index f5b162cc1..000000000
--- a/app/vendor/adodb/adodb-php/pear/readme.Auth.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-From: Rich Tango-Lowy (richtl#arscognita.com)
-Date: Sat, May 29, 2004 11:20 am
-
-OK, I hacked out an ADOdb container for PEAR-Auth. The error handling's
-a bit of a mess, but all the methods work.
-
-Copy ADOdb.php to your pear/Auth/Container/ directory.
-
-Use the ADOdb container exactly as you would the DB
-container, but specify 'ADOdb' instead of 'DB':
-
-$dsn = "mysql://myuser:mypass@localhost/authdb";
-$a = new Auth("ADOdb", $dsn, "loginFunction");
-
-
--------------------
-
-John Lim adds:
-
-See http://pear.php.net/manual/en/package.authentication.php
diff --git a/app/vendor/adodb/adodb-php/perf/perf-db2.inc.php b/app/vendor/adodb/adodb-php/perf/perf-db2.inc.php
deleted file mode 100644
index fc05219d8..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-db2.inc.php
+++ /dev/null
@@ -1,113 +0,0 @@
- array('RATIO',
- "SELECT
- case when sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)=0 then 0
- else 100*(1-sum(POOL_DATA_P_READS+POOL_INDEX_P_READS)/sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)) end
- FROM TABLE(SNAPSHOT_APPL('',-2)) as t",
- '=WarnCacheRatio'),
-
- 'Data Cache',
- 'data cache buffers' => array('DATAC',
- 'select sum(npages) from SYSCAT.BUFFERPOOLS',
- 'See tuning reference.' ),
- 'cache blocksize' => array('DATAC',
- 'select avg(pagesize) from SYSCAT.BUFFERPOOLS',
- '' ),
- 'data cache size' => array('DATAC',
- 'select sum(npages*pagesize) from SYSCAT.BUFFERPOOLS',
- '' ),
- 'Connections',
- 'current connections' => array('SESS',
- "SELECT count(*) FROM TABLE(SNAPSHOT_APPL_INFO('',-2)) as t",
- ''),
-
- false
- );
-
-
- function __construct(&$conn)
- {
- $this->conn = $conn;
- }
-
- function Explain($sql,$partial=false)
- {
- $save = $this->conn->LogSQL(false);
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
- $qno = rand();
- $ok = $this->conn->Execute("EXPLAIN PLAN SET QUERYNO=$qno FOR $sql");
- ob_start();
- if (!$ok) echo "Have EXPLAIN tables been created?
";
- else {
- $rs = $this->conn->Execute("select * from explain_statement where queryno=$qno");
- if ($rs) rs2html($rs);
- }
- $s = ob_get_contents();
- ob_end_clean();
- $this->conn->LogSQL($save);
-
- $s .= $this->Tracer($sql);
- return $s;
- }
-
- /**
- * Gets a list of tables
- *
- * @param int $throwaway discarded variable to match the parent method
- * @return string The formatted table list
- */
- function Tables($throwaway=0)
- {
- $rs = $this->conn->Execute("select tabschema,tabname,card as rows,
- npages pages_used,fpages pages_allocated, tbspace tablespace
- from syscat.tables where tabschema not in ('SYSCAT','SYSIBM','SYSSTAT') order by 1,2");
- return rs2html($rs,false,false,false,false);
- }
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-informix.inc.php b/app/vendor/adodb/adodb-php/perf/perf-informix.inc.php
deleted file mode 100644
index 88802bcc5..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-informix.inc.php
+++ /dev/null
@@ -1,76 +0,0 @@
- array('RATIOH',
- "select round((1-(wt.value / (rd.value + wr.value)))*100,2)
- from sysmaster:sysprofile wr, sysmaster:sysprofile rd, sysmaster:sysprofile wt
- where rd.name = 'pagreads' and
- wr.name = 'pagwrites' and
- wt.name = 'buffwts'",
- '=WarnCacheRatio'),
- 'IO',
- 'data reads' => array('IO',
- "select value from sysmaster:sysprofile where name='pagreads'",
- 'Page reads'),
-
- 'data writes' => array('IO',
- "select value from sysmaster:sysprofile where name='pagwrites'",
- 'Page writes'),
-
- 'Connections',
- 'current connections' => array('SESS',
- 'select count(*) from sysmaster:syssessions',
- 'Number of sessions'),
-
- false
-
- );
-
- function __construct(&$conn)
- {
- $this->conn = $conn;
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-mssql.inc.php b/app/vendor/adodb/adodb-php/perf/perf-mssql.inc.php
deleted file mode 100644
index 5d8320326..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-mssql.inc.php
+++ /dev/null
@@ -1,168 +0,0 @@
- array('RATIO',
- "select round((a.cntr_value*100.0)/b.cntr_value,2) from master.dbo.sysperfinfo a, master.dbo.sysperfinfo b where a.counter_name = 'Buffer cache hit ratio' and b.counter_name='Buffer cache hit ratio base'",
- '=WarnCacheRatio'),
- 'prepared sql hit ratio' => array('RATIO',
- array('dbcc cachestats','Prepared',1,100),
- ''),
- 'adhoc sql hit ratio' => array('RATIO',
- array('dbcc cachestats','Adhoc',1,100),
- ''),
- 'IO',
- 'data reads' => array('IO',
- "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page reads/sec'"),
- 'data writes' => array('IO',
- "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page writes/sec'"),
-
- 'Data Cache',
- 'data cache size' => array('DATAC',
- "select cntr_value*8192 from master.dbo.sysperfinfo where counter_name = 'Total Pages' and object_name='SQLServer:Buffer Manager'",
- '' ),
- 'data cache blocksize' => array('DATAC',
- "select 8192",'page size'),
- 'Connections',
- 'current connections' => array('SESS',
- '=sp_who',
- ''),
- 'max connections' => array('SESS',
- "SELECT @@MAX_CONNECTIONS",
- ''),
-
- false
- );
-
-
- function __construct(&$conn)
- {
- if ($conn->dataProvider == 'odbc') {
- $this->sql1 = 'sql1';
- //$this->explain = false;
- }
- $this->conn = $conn;
- }
-
- function Explain($sql,$partial=false)
- {
-
- $save = $this->conn->LogSQL(false);
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
-
- $s = 'Explain: '.htmlspecialchars($sql).'
';
- $this->conn->Execute("SET SHOWPLAN_ALL ON;");
- $sql = str_replace('?',"''",$sql);
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $rs = $this->conn->Execute($sql);
- //adodb_printr($rs);
- $ADODB_FETCH_MODE = $save;
- if ($rs && !$rs->EOF) {
- $rs->MoveNext();
- $s .= '| Rows | IO | CPU | Plan |
';
- while (!$rs->EOF) {
- $s .= '| '.round($rs->fields[8],1).' | '.round($rs->fields[9],3).' | '.round($rs->fields[10],3).' | '.htmlspecialchars($rs->fields[0])." |
\n"; ## NOTE CORRUPT tag is intentional!!!!
- $rs->MoveNext();
- }
- $s .= '
';
-
- $rs->NextRecordSet();
- }
-
- $this->conn->Execute("SET SHOWPLAN_ALL OFF;");
- $this->conn->LogSQL($save);
- $s .= $this->Tracer($sql);
- return $s;
- }
-
- function Tables()
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- //$this->conn->debug=1;
- $s = '| tablename | size_in_k | index size | reserved size |
';
- $rs1 = $this->conn->Execute("select distinct name from sysobjects where xtype='U'");
- if ($rs1) {
- while (!$rs1->EOF) {
- $tab = $rs1->fields[0];
- $tabq = $this->conn->qstr($tab);
- $rs2 = $this->conn->Execute("sp_spaceused $tabq");
- if ($rs2) {
- $s .= '| '.$tab.' | '.$rs2->fields[3].' | '.$rs2->fields[4].' | '.$rs2->fields[2].' |
';
- $rs2->Close();
- }
- $rs1->MoveNext();
- }
- $rs1->Close();
- }
- $ADODB_FETCH_MODE = $save;
- return $s.'
';
- }
-
- function sp_who()
- {
- $arr = $this->conn->GetArray('sp_who');
- return sizeof($arr);
- }
-
- function HealthCheck($cli=false)
- {
-
- $this->conn->Execute('dbcc traceon(3604)');
- $html = adodb_perf::HealthCheck($cli);
- $this->conn->Execute('dbcc traceoff(3604)');
- return $html;
- }
-
-
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-mssqlnative.inc.php b/app/vendor/adodb/adodb-php/perf/perf-mssqlnative.inc.php
deleted file mode 100644
index c2c90fc75..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-mssqlnative.inc.php
+++ /dev/null
@@ -1,168 +0,0 @@
- array('RATIO',
- "select round((a.cntr_value*100.0)/b.cntr_value,2) from master.dbo.sysperfinfo a, master.dbo.sysperfinfo b where a.counter_name = 'Buffer cache hit ratio' and b.counter_name='Buffer cache hit ratio base'",
- '=WarnCacheRatio'),
- 'prepared sql hit ratio' => array('RATIO',
- array('dbcc cachestats','Prepared',1,100),
- ''),
- 'adhoc sql hit ratio' => array('RATIO',
- array('dbcc cachestats','Adhoc',1,100),
- ''),
- 'IO',
- 'data reads' => array('IO',
- "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page reads/sec'"),
- 'data writes' => array('IO',
- "select cntr_value from master.dbo.sysperfinfo where counter_name = 'Page writes/sec'"),
-
- 'Data Cache',
- 'data cache size' => array('DATAC',
- "select cntr_value*8192 from master.dbo.sysperfinfo where counter_name = 'Total Pages' and object_name='SQLServer:Buffer Manager'",
- '' ),
- 'data cache blocksize' => array('DATAC',
- "select 8192",'page size'),
- 'Connections',
- 'current connections' => array('SESS',
- '=sp_who',
- ''),
- 'max connections' => array('SESS',
- "SELECT @@MAX_CONNECTIONS",
- ''),
-
- false
- );
-
-
- function __construct(&$conn)
- {
- if ($conn->dataProvider == 'odbc') {
- $this->sql1 = 'sql1';
- //$this->explain = false;
- }
- $this->conn =& $conn;
- }
-
- function Explain($sql,$partial=false)
- {
-
- $save = $this->conn->LogSQL(false);
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
-
- $s = 'Explain: '.htmlspecialchars($sql).'
';
- $this->conn->Execute("SET SHOWPLAN_ALL ON;");
- $sql = str_replace('?',"''",$sql);
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- $rs =& $this->conn->Execute($sql);
- //adodb_printr($rs);
- $ADODB_FETCH_MODE = $save;
- if ($rs) {
- $rs->MoveNext();
- $s .= '| Rows | IO | CPU | Plan |
';
- while (!$rs->EOF) {
- $s .= '| '.round($rs->fields[8],1).' | '.round($rs->fields[9],3).' | '.round($rs->fields[10],3).' | '.htmlspecialchars($rs->fields[0])." |
\n"; ## NOTE CORRUPT tag is intentional!!!!
- $rs->MoveNext();
- }
- $s .= '
';
-
- $rs->NextRecordSet();
- }
-
- $this->conn->Execute("SET SHOWPLAN_ALL OFF;");
- $this->conn->LogSQL($save);
- $s .= $this->Tracer($sql);
- return $s;
- }
-
- function Tables($orderby='1')
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- //$this->conn->debug=1;
- $s = '| tablename | size_in_k | index size | reserved size |
';
- $rs1 = $this->conn->Execute("select distinct name from sysobjects where xtype='U'");
- if ($rs1) {
- while (!$rs1->EOF) {
- $tab = $rs1->fields[0];
- $tabq = $this->conn->qstr($tab);
- $rs2 = $this->conn->Execute("sp_spaceused $tabq");
- if ($rs2) {
- $s .= '| '.$tab.' | '.$rs2->fields[3].' | '.$rs2->fields[4].' | '.$rs2->fields[2].' |
';
- $rs2->Close();
- }
- $rs1->MoveNext();
- }
- $rs1->Close();
- }
- $ADODB_FETCH_MODE = $save;
- return $s.'
';
- }
-
- function sp_who()
- {
- $arr = $this->conn->GetArray('sp_who');
- return sizeof($arr);
- }
-
- function HealthCheck($cli=false)
- {
-
- $this->conn->Execute('dbcc traceon(3604)');
- $html = adodb_perf::HealthCheck($cli);
- $this->conn->Execute('dbcc traceoff(3604)');
- return $html;
- }
-
-
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-mysql.inc.php b/app/vendor/adodb/adodb-php/perf/perf-mysql.inc.php
deleted file mode 100644
index ed92c8051..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-mysql.inc.php
+++ /dev/null
@@ -1,325 +0,0 @@
- array('RATIO',
- '=GetKeyHitRatio',
- '=WarnCacheRatio'),
- 'InnoDB cache hit ratio' => array('RATIO',
- '=GetInnoDBHitRatio',
- '=WarnCacheRatio'),
- 'data cache hit ratio' => array('HIDE', # only if called
- '=FindDBHitRatio',
- '=WarnCacheRatio'),
- 'sql cache hit ratio' => array('RATIO',
- '=GetQHitRatio',
- ''),
- 'IO',
- 'data reads' => array('IO',
- '=GetReads',
- 'Number of selects (Key_reads is not accurate)'),
- 'data writes' => array('IO',
- '=GetWrites',
- 'Number of inserts/updates/deletes * coef (Key_writes is not accurate)'),
-
- 'Data Cache',
- 'MyISAM data cache size' => array('DATAC',
- array("show variables", 'key_buffer_size'),
- '' ),
- 'BDB data cache size' => array('DATAC',
- array("show variables", 'bdb_cache_size'),
- '' ),
- 'InnoDB data cache size' => array('DATAC',
- array("show variables", 'innodb_buffer_pool_size'),
- '' ),
- 'Memory Usage',
- 'read buffer size' => array('CACHE',
- array("show variables", 'read_buffer_size'),
- '(per session)'),
- 'sort buffer size' => array('CACHE',
- array("show variables", 'sort_buffer_size'),
- 'Size of sort buffer (per session)' ),
- 'table cache' => array('CACHE',
- array("show variables", 'table_cache'),
- 'Number of tables to keep open'),
- 'Connections',
- 'current connections' => array('SESS',
- array('show status','Threads_connected'),
- ''),
- 'max connections' => array( 'SESS',
- array("show variables",'max_connections'),
- ''),
-
- false
- );
-
- function __construct(&$conn)
- {
- $this->conn = $conn;
- }
-
- function Explain($sql,$partial=false)
- {
-
- if (strtoupper(substr(trim($sql),0,6)) !== 'SELECT') return 'Unable to EXPLAIN non-select statement
';
- $save = $this->conn->LogSQL(false);
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
- $sql = str_replace('?',"''",$sql);
-
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $sql = $this->conn->GetOne("select sql1 from adodb_logsql where sql1 like $sqlq");
- }
-
- $s = 'Explain: '.htmlspecialchars($sql).'
';
- $rs = $this->conn->Execute('EXPLAIN '.$sql);
- $s .= rs2html($rs,false,false,false,false);
- $this->conn->LogSQL($save);
- $s .= $this->Tracer($sql);
- return $s;
- }
-
- /**
- * Returns a list of table statuses.
- *
- * @param string $orderby Unused (compatibility with parent method)
- * @return string A formatted set of recordsets
- */
- function tables($orderby='1')
- {
- if (!$this->tablesSQL) return false;
-
- $rs = $this->conn->Execute($this->tablesSQL);
- if (!$rs) return false;
-
- $html = rs2html($rs,false,false,false,false);
- return $html;
- }
-
- function GetReads()
- {
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $rs = $this->conn->Execute('show status');
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if (!$rs) return 0;
- $val = 0;
- while (!$rs->EOF) {
- switch($rs->fields[0]) {
- case 'Com_select':
- $val = $rs->fields[1];
- $rs->Close();
- return $val;
- }
- $rs->MoveNext();
- }
-
- $rs->Close();
-
- return $val;
- }
-
- function GetWrites()
- {
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $rs = $this->conn->Execute('show status');
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if (!$rs) return 0;
- $val = 0.0;
- while (!$rs->EOF) {
- switch($rs->fields[0]) {
- case 'Com_insert':
- $val += $rs->fields[1]; break;
- case 'Com_delete':
- $val += $rs->fields[1]; break;
- case 'Com_update':
- $val += $rs->fields[1]/2;
- $rs->Close();
- return $val;
- }
- $rs->MoveNext();
- }
-
- $rs->Close();
-
- return $val;
- }
-
- function FindDBHitRatio()
- {
- // first find out type of table
- //$this->conn->debug=1;
-
- global $ADODB_FETCH_MODE;
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $rs = $this->conn->Execute('show table status');
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if (!$rs) return '';
- $type = strtoupper($rs->fields[1]);
- $rs->Close();
- switch($type){
- case 'MYISAM':
- case 'ISAM':
- return $this->DBParameter('MyISAM cache hit ratio').' (MyISAM)';
- case 'INNODB':
- return $this->DBParameter('InnoDB cache hit ratio').' (InnoDB)';
- default:
- return $type.' not supported';
- }
-
- }
-
- function GetQHitRatio()
- {
- //Total number of queries = Qcache_inserts + Qcache_hits + Qcache_not_cached
- $hits = $this->_DBParameter(array("show status","Qcache_hits"));
- $total = $this->_DBParameter(array("show status","Qcache_inserts"));
- $total += $this->_DBParameter(array("show status","Qcache_not_cached"));
-
- $total += $hits;
- if ($total) return round(($hits*100)/$total,2);
- return 0;
- }
-
- /*
- Use session variable to store Hit percentage, because MySQL
- does not remember last value of SHOW INNODB STATUS hit ratio
-
- # 1st query to SHOW INNODB STATUS
- 0.00 reads/s, 0.00 creates/s, 0.00 writes/s
- Buffer pool hit rate 1000 / 1000
-
- # 2nd query to SHOW INNODB STATUS
- 0.00 reads/s, 0.00 creates/s, 0.00 writes/s
- No buffer pool activity since the last printout
- */
- function GetInnoDBHitRatio()
- {
- global $ADODB_FETCH_MODE;
-
- $save = $ADODB_FETCH_MODE;
- $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $rs = $this->conn->Execute('show engine innodb status');
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_FETCH_MODE = $save;
-
- if (!$rs || $rs->EOF) return 0;
- $stat = $rs->fields[0];
- $rs->Close();
- $at = strpos($stat,'Buffer pool hit rate');
- $stat = substr($stat,$at,200);
- if (preg_match('!Buffer pool hit rate\s*([0-9]*) / ([0-9]*)!',$stat,$arr)) {
- $val = 100*$arr[1]/$arr[2];
- $_SESSION['INNODB_HIT_PCT'] = $val;
- return round($val,2);
- } else {
- if (isset($_SESSION['INNODB_HIT_PCT'])) return $_SESSION['INNODB_HIT_PCT'];
- return 0;
- }
- return 0;
- }
-
- function GetKeyHitRatio()
- {
- $hits = $this->_DBParameter(array("show status","Key_read_requests"));
- $reqs = $this->_DBParameter(array("show status","Key_reads"));
- if ($reqs == 0) return 0;
-
- return round(($hits/($reqs+$hits))*100,2);
- }
-
- // start hack
- var $optimizeTableLow = 'CHECK TABLE %s FAST QUICK';
- var $optimizeTableHigh = 'OPTIMIZE TABLE %s';
-
- /**
- * @see adodb_perf::optimizeTable()
- */
- function optimizeTable( $table, $mode = ADODB_OPT_LOW)
- {
- if ( !is_string( $table)) return false;
-
- $conn = $this->conn;
- if ( !$conn) return false;
-
- $sql = '';
- switch( $mode) {
- case ADODB_OPT_LOW : $sql = $this->optimizeTableLow; break;
- case ADODB_OPT_HIGH : $sql = $this->optimizeTableHigh; break;
- default :
- // May don't use __FUNCTION__ constant for BC (__FUNCTION__ Added in PHP 4.3.0)
- ADOConnection::outp( sprintf( "%s: '%s' using of undefined mode '%s'
", __CLASS__, __FUNCTION__, $mode));
- return false;
- }
- $sql = sprintf( $sql, $table);
-
- return $conn->Execute( $sql) !== false;
- }
- // end hack
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-oci8.inc.php b/app/vendor/adodb/adodb-php/perf/perf-oci8.inc.php
deleted file mode 100644
index c11b261fd..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-oci8.inc.php
+++ /dev/null
@@ -1,708 +0,0 @@
- array('RATIOH',
- "select round((1-(phy.value / (cur.value + con.value)))*100,2)
- from v\$sysstat cur, v\$sysstat con, v\$sysstat phy
- where cur.name = 'db block gets' and
- con.name = 'consistent gets' and
- phy.name = 'physical reads'",
- '=WarnCacheRatio'),
-
- 'sql cache hit ratio' => array( 'RATIOH',
- 'select round(100*(sum(pins)-sum(reloads))/sum(pins),2) from v$librarycache',
- 'increase shared_pool_size if too ratio low'),
-
- 'datadict cache hit ratio' => array('RATIOH',
- "select
- round((1 - (sum(getmisses) / (sum(gets) +
- sum(getmisses))))*100,2)
- from v\$rowcache",
- 'increase shared_pool_size if too ratio low'),
-
- 'memory sort ratio' => array('RATIOH',
- "SELECT ROUND((100 * b.VALUE) /DECODE ((a.VALUE + b.VALUE),
- 0,1,(a.VALUE + b.VALUE)),2)
-FROM v\$sysstat a,
- v\$sysstat b
-WHERE a.name = 'sorts (disk)'
-AND b.name = 'sorts (memory)'",
- "% of memory sorts compared to disk sorts - should be over 95%"),
-
- 'IO',
- 'data reads' => array('IO',
- "select value from v\$sysstat where name='physical reads'"),
-
- 'data writes' => array('IO',
- "select value from v\$sysstat where name='physical writes'"),
-
- 'Data Cache',
-
- 'data cache buffers' => array( 'DATAC',
- "select a.value/b.value from v\$parameter a, v\$parameter b
- where a.name = 'db_cache_size' and b.name= 'db_block_size'",
- 'Number of cache buffers. Tune db_cache_size if the data cache hit ratio is too low.'),
- 'data cache blocksize' => array('DATAC',
- "select value from v\$parameter where name='db_block_size'",
- '' ),
-
- 'Memory Pools',
- 'Mem Max Target (11g+)' => array( 'DATAC',
- "select value from v\$parameter where name = 'memory_max_target'",
- 'The memory_max_size is the maximum value to which memory_target can be set.' ),
- 'Memory target (11g+)' => array( 'DATAC',
- "select value from v\$parameter where name = 'memory_target'",
- 'If memory_target is defined then SGA and PGA targets are consolidated into one memory_target.' ),
- 'SGA Max Size' => array( 'DATAC',
- "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'sga_max_size'",
- 'The sga_max_size is the maximum value to which sga_target can be set.' ),
- 'SGA target' => array( 'DATAC',
- "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'sga_target'",
- 'If sga_target is defined then data cache, shared, java and large pool size can be 0. This is because all these pools are consolidated into one sga_target.' ),
- 'PGA aggr target' => array( 'DATAC',
- "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'pga_aggregate_target'",
- 'If pga_aggregate_target is defined then this is the maximum memory that can be allocated for cursor operations such as sorts, group by, joins, merges. When in doubt, set it to 20% of sga_target.' ),
- 'data cache size' => array('DATAC',
- "select value from v\$parameter where name = 'db_cache_size'",
- 'db_cache_size' ),
- 'shared pool size' => array('DATAC',
- "select value from v\$parameter where name = 'shared_pool_size'",
- 'shared_pool_size, which holds shared sql, stored procedures, dict cache and similar shared structs' ),
- 'java pool size' => array('DATAJ',
- "select value from v\$parameter where name = 'java_pool_size'",
- 'java_pool_size' ),
- 'large pool buffer size' => array('CACHE',
- "select value from v\$parameter where name='large_pool_size'",
- 'this pool is for large mem allocations (not because it is larger than shared pool), for MTS sessions, parallel queries, io buffers (large_pool_size) ' ),
-
- 'dynamic memory usage' => array('CACHE', "select '-' from dual", '=DynMemoryUsage'),
-
- 'Connections',
- 'current connections' => array('SESS',
- 'select count(*) from sys.v_$session where username is not null',
- ''),
- 'max connections' => array( 'SESS',
- "select value from v\$parameter where name='sessions'",
- ''),
-
- 'Memory Utilization',
- 'data cache utilization ratio' => array('RATIOU',
- "select round((1-bytes/sgasize)*100, 2)
- from (select sum(bytes) sgasize from sys.v_\$sgastat) s, sys.v_\$sgastat f
- where name = 'free memory' and pool = 'shared pool'",
- 'Percentage of data cache actually in use - should be over 85%'),
-
- 'shared pool utilization ratio' => array('RATIOU',
- 'select round((sga.bytes/case when p.value=0 then sga.bytes else to_number(p.value) end)*100,2)
- from v$sgastat sga, v$parameter p
- where sga.name = \'free memory\' and sga.pool = \'shared pool\'
- and p.name = \'shared_pool_size\'',
- 'Percentage of shared pool actually used - too low is bad, too high is worse'),
-
- 'large pool utilization ratio' => array('RATIOU',
- "select round((1-bytes/sgasize)*100, 2)
- from (select sum(bytes) sgasize from sys.v_\$sgastat) s, sys.v_\$sgastat f
- where name = 'free memory' and pool = 'large pool'",
- 'Percentage of large_pool actually in use - too low is bad, too high is worse'),
- 'sort buffer size' => array('CACHE',
- "select value from v\$parameter where name='sort_area_size'",
- 'max in-mem sort_area_size (per query), uses memory in pga' ),
-
- /*'pga usage at peak' => array('RATIOU',
- '=PGA','Mb utilization at peak transactions (requires Oracle 9i+)'),*/
- 'Transactions',
- 'rollback segments' => array('ROLLBACK',
- "select count(*) from sys.v_\$rollstat",
- ''),
-
- 'peak transactions' => array('ROLLBACK',
- "select max_utilization tx_hwm
- from sys.v_\$resource_limit
- where resource_name = 'transactions'",
- 'Taken from high-water-mark'),
- 'max transactions' => array('ROLLBACK',
- "select value from v\$parameter where name = 'transactions'",
- 'max transactions / rollback segments < 3.5 (or transactions_per_rollback_segment)'),
- 'Parameters',
- 'cursor sharing' => array('CURSOR',
- "select value from v\$parameter where name = 'cursor_sharing'",
- 'Cursor reuse strategy. Recommended is FORCE (8i+) or SIMILAR (9i+). See cursor_sharing.'),
- /*
- 'cursor reuse' => array('CURSOR',
- "select count(*) from (select sql_text_wo_constants, count(*)
- from t1
- group by sql_text_wo_constants
-having count(*) > 100)",'These are sql statements that should be using bind variables'),*/
- 'index cache cost' => array('COST',
- "select value from v\$parameter where name = 'optimizer_index_caching'",
- '=WarnIndexCost'),
- 'random page cost' => array('COST',
- "select value from v\$parameter where name = 'optimizer_index_cost_adj'",
- '=WarnPageCost'),
- 'Waits',
- 'Recent wait events' => array('WAITS','select \'Top 5 events\' from dual','=TopRecentWaits'),
-// 'Historical wait SQL' => array('WAITS','select \'Last 2 days\' from dual','=TopHistoricalWaits'), -- requires AWR license
- 'Backup',
- 'Achivelog Mode' => array('BACKUP', 'select log_mode from v$database', '=LogMode'),
-
- 'DBID' => array('BACKUP','select dbid from v$database','Primary key of database, used for recovery with an RMAN Recovery Catalog'),
- 'Archive Log Dest' => array('BACKUP', "SELECT NVL(v1.value,v2.value)
-FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.name='log_archive_dest_10'", ''),
-
- 'Flashback Area' => array('BACKUP', "select nvl(value,'Flashback Area not used') from v\$parameter where name=lower('DB_RECOVERY_FILE_DEST')", 'Flashback area is a folder where all backup data and logs can be stored and managed by Oracle. If Error: message displayed, then it is not in use.'),
-
- 'Flashback Usage' => array('BACKUP', "select nvl('-','Flashback Area not used') from v\$parameter where name=lower('DB_RECOVERY_FILE_DEST')", '=FlashUsage', 'Flashback area usage.'),
-
- 'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. Recommended set to x2 or x3 times the frequency of your full backup.'),
- 'Recent RMAN Jobs' => array('BACKUP', "select '-' from dual", "=RMAN"),
-
- // 'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. I recommend it be set to x2 or x3 times the frequency of your full backup.'),
- 'Storage', 'Tablespaces' => array('TABLESPACE', "select '-' from dual", "=TableSpace"),
- false
-
- );
-
-
- function __construct(&$conn)
- {
- global $gSQLBlockRows;
-
- $gSQLBlockRows = 1000;
- $savelog = $conn->LogSQL(false);
- $this->version = $conn->ServerInfo();
- $conn->LogSQL($savelog);
- $this->conn = $conn;
- }
-
- function LogMode()
- {
- $mode = $this->conn->GetOne("select log_mode from v\$database");
-
- if ($mode == 'ARCHIVELOG') return 'To turn off archivelog:
-
- SQLPLUS> connect sys as sysdba;
- SQLPLUS> shutdown immediate;
-
- SQLPLUS> startup mount exclusive;
- SQLPLUS> alter database noarchivelog;
- SQLPLUS> alter database open;
-
';
-
- return 'To turn on archivelog:
-
- SQLPLUS> connect sys as sysdba;
- SQLPLUS> shutdown immediate;
-
- SQLPLUS> startup mount exclusive;
- SQLPLUS> alter database archivelog;
- SQLPLUS> archive log start;
- SQLPLUS> alter database open;
-
';
- }
-
- function TopRecentWaits()
- {
-
- $rs = $this->conn->Execute("select * from (
- select event, round(100*time_waited/(select sum(time_waited) from v\$system_event where wait_class <> 'Idle'),1) \"% Wait\",
- total_waits,time_waited, average_wait,wait_class from v\$system_event where wait_class <> 'Idle' order by 2 desc
- ) where rownum <=5");
-
- $ret = rs2html($rs,false,false,false,false);
- return " ".$ret."
";
-
- }
-
- function TopHistoricalWaits()
- {
- $days = 2;
-
- $rs = $this->conn->Execute("select * from ( SELECT
- b.wait_class,B.NAME,
- round(sum(wait_time+TIME_WAITED)/1000000) waitsecs,
- parsing_schema_name,
- C.SQL_TEXT, a.sql_id
-FROM V\$ACTIVE_SESSION_HISTORY A
- join V\$EVENT_NAME B on A.EVENT# = B.EVENT#
- join V\$SQLAREA C on A.SQL_ID = C.SQL_ID
-WHERE A.SAMPLE_TIME BETWEEN sysdate-$days and sysdate
- and parsing_schema_name not in ('SYS','SYSMAN','DBSNMP','SYSTEM')
-GROUP BY b.wait_class,parsing_schema_name,C.SQL_TEXT, B.NAME,A.sql_id
-order by 3 desc) where rownum <=10");
-
- $ret = rs2html($rs,false,false,false,false);
- return " ".$ret."
";
-
- }
-
- function TableSpace()
- {
-
- $rs = $this->conn->Execute(
- "select tablespace_name,round(sum(bytes)/1024/1024) as Used_MB,round(sum(maxbytes)/1024/1024) as Max_MB, round(sum(bytes)/sum(maxbytes),4) * 100 as PCT
- from dba_data_files
- group by tablespace_name order by 2 desc");
-
- $ret = "Tablespace".rs2html($rs,false,false,false,false);
-
- $rs = $this->conn->Execute("select * from dba_data_files order by tablespace_name, 1");
- $ret .= "
Datafile".rs2html($rs,false,false,false,false);
-
- return "
".$ret."
";
- }
-
- function RMAN()
- {
- $rs = $this->conn->Execute("select * from (select start_time, end_time, operation, status, mbytes_processed, output_device_type
- from V\$RMAN_STATUS order by start_time desc) where rownum <=10");
-
- $ret = rs2html($rs,false,false,false,false);
- return " ".$ret."
";
-
- }
-
- function DynMemoryUsage()
- {
- if (@$this->version['version'] >= 11) {
- $rs = $this->conn->Execute("select component, current_size/1024./1024 as \"CurrSize (M)\" from V\$MEMORY_DYNAMIC_COMPONENTS");
-
- } else
- $rs = $this->conn->Execute("select name, round(bytes/1024./1024,2) as \"CurrSize (M)\" from V\$sgainfo");
-
-
- $ret = rs2html($rs,false,false,false,false);
- return " ".$ret."
";
- }
-
- function FlashUsage()
- {
- $rs = $this->conn->Execute("select * from V\$FLASH_RECOVERY_AREA_USAGE");
- $ret = rs2html($rs,false,false,false,false);
- return " ".$ret."
";
- }
-
- function WarnPageCost($val)
- {
- if ($val == 100 && $this->version['version'] < 10) $s = 'Too High. ';
- else $s = '';
-
- return $s.'Recommended is 20-50 for TP, and 50 for data warehouses. Default is 100. See optimizer_index_cost_adj. ';
- }
-
- function WarnIndexCost($val)
- {
- if ($val == 0 && $this->version['version'] < 10) $s = 'Too Low. ';
- else $s = '';
-
- return $s.'Percentage of indexed data blocks expected in the cache.
- Recommended is 20 (fast disk array) to 30 (slower hard disks). Default is 0.
- See optimizer_index_caching.';
- }
-
- function PGA()
- {
-
- //if ($this->version['version'] < 9) return 'Oracle 9i or later required';
- }
-
- function PGA_Advice()
- {
- $t = "PGA Advice Estimate
";
- if ($this->version['version'] < 9) return $t.'Oracle 9i or later required';
-
- $rs = $this->conn->Execute('select a.MB,
- case when a.targ = 1 then \'<<= Current \'
- when a.targ < 1 or a.pct <= b.pct then null
- else
- \'- BETTER than Current by \'||round(a.pct/b.pct*100-100,2)||\'%\' end as "Percent Improved",
- a.targ as "PGA Size Factor",a.pct "% Perf"
- from
- (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
- pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
- from v$pga_target_advice) a left join
- (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
- pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
- from v$pga_target_advice) b on
- a.r = b.r+1 where
- b.pct < 100');
- if (!$rs) return $t."Only in 9i or later";
- // $rs->Close();
- if ($rs->EOF) return $t."PGA could be too big";
-
- return $t.rs2html($rs,false,false,true,false);
- }
-
- function Explain($sql,$partial=false)
- {
- $savelog = $this->conn->LogSQL(false);
- $rs = $this->conn->SelectLimit("select ID FROM PLAN_TABLE");
- if (!$rs) {
- echo "Missing PLAN_TABLE
-
-CREATE TABLE PLAN_TABLE (
- STATEMENT_ID VARCHAR2(30),
- TIMESTAMP DATE,
- REMARKS VARCHAR2(80),
- OPERATION VARCHAR2(30),
- OPTIONS VARCHAR2(30),
- OBJECT_NODE VARCHAR2(128),
- OBJECT_OWNER VARCHAR2(30),
- OBJECT_NAME VARCHAR2(30),
- OBJECT_INSTANCE NUMBER(38),
- OBJECT_TYPE VARCHAR2(30),
- OPTIMIZER VARCHAR2(255),
- SEARCH_COLUMNS NUMBER,
- ID NUMBER(38),
- PARENT_ID NUMBER(38),
- POSITION NUMBER(38),
- COST NUMBER(38),
- CARDINALITY NUMBER(38),
- BYTES NUMBER(38),
- OTHER_TAG VARCHAR2(255),
- PARTITION_START VARCHAR2(255),
- PARTITION_STOP VARCHAR2(255),
- PARTITION_ID NUMBER(38),
- OTHER LONG,
- DISTRIBUTION VARCHAR2(30)
-);
-
";
- return false;
- }
-
- $rs->Close();
- // $this->conn->debug=1;
-
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
-
- $s = "Explain: ".htmlspecialchars($sql)."
";
-
- $this->conn->BeginTrans();
- $id = "ADODB ".microtime();
-
- $rs = $this->conn->Execute("EXPLAIN PLAN SET STATEMENT_ID='$id' FOR $sql");
- $m = $this->conn->ErrorMsg();
- if ($m) {
- $this->conn->RollbackTrans();
- $this->conn->LogSQL($savelog);
- $s .= "$m
";
- return $s;
- }
- $rs = $this->conn->Execute("
- select
- ''||lpad('--', (level-1)*2,'-') || trim(operation) || ' ' || trim(options)||'' as Operation,
- object_name,COST,CARDINALITY,bytes
- FROM plan_table
-START WITH id = 0 and STATEMENT_ID='$id'
-CONNECT BY prior id=parent_id and statement_id='$id'");
-
- $s .= rs2html($rs,false,false,false,false);
- $this->conn->RollbackTrans();
- $this->conn->LogSQL($savelog);
- $s .= $this->Tracer($sql,$partial);
- return $s;
- }
-
- function CheckMemory()
- {
- if ($this->version['version'] < 9) return 'Oracle 9i or later required';
-
- $rs = $this->conn->Execute("
-select a.name Buffer_Pool, b.size_for_estimate as cache_mb_estimate,
- case when b.size_factor=1 then
- '<<= Current'
- when a.estd_physical_read_factor-b.estd_physical_read_factor > 0.001 and b.estd_physical_read_factor<1 then
- '- BETTER than current by ' || round((1-b.estd_physical_read_factor)/b.estd_physical_read_factor*100,2) || '%'
- else ' ' end as RATING,
- b.estd_physical_read_factor \"Phys. Reads Factor\",
- round((a.estd_physical_read_factor-b.estd_physical_read_factor)/b.estd_physical_read_factor*100,2) as \"% Improve\"
- from (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r,name from v\$db_cache_advice order by name,1) a ,
- (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r,name from v\$db_cache_advice order by name,1) b
- where a.r = b.r-1 and a.name = b.name
- ");
- if (!$rs) return false;
-
- /*
- The v$db_cache_advice utility show the marginal changes in physical data block reads for different sizes of db_cache_size
- */
- $s = "Data Cache Advice Estimate
";
- if ($rs->EOF) {
- $s .= "Cache that is 50% of current size is still too big
";
- } else {
- $s .= "Ideal size of Data Cache is when %BETTER gets close to zero.";
- $s .= rs2html($rs,false,false,false,false);
- }
- return $s.$this->PGA_Advice();
- }
-
- /*
- Generate html for suspicious/expensive sql
- */
- function tohtml(&$rs,$type)
- {
- $o1 = $rs->FetchField(0);
- $o2 = $rs->FetchField(1);
- $o3 = $rs->FetchField(2);
- if ($rs->EOF) return 'None found
';
- $check = '';
- $sql = '';
- $s = "\n\n| ".$o1->name.' | '.$o2->name.' | '.$o3->name.' |
';
- while (!$rs->EOF) {
- if ($check != $rs->fields[0].'::'.$rs->fields[1]) {
- if ($check) {
- $carr = explode('::',$check);
- $prefix = "';
- $suffix = '';
- if (strlen($prefix)>2000) {
- $prefix = '';
- $suffix = '';
- }
-
- $s .= "\n| ".$carr[0].' | '.$carr[1].' | '.$prefix.$sql.$suffix.' |
';
- }
- $sql = $rs->fields[2];
- $check = $rs->fields[0].'::'.$rs->fields[1];
- } else
- $sql .= $rs->fields[2];
- if (substr($sql,strlen($sql)-1) == "\0") $sql = substr($sql,0,strlen($sql)-1);
- $rs->MoveNext();
- }
- $rs->Close();
-
- $carr = explode('::',$check);
- $prefix = "';
- $suffix = '';
- if (strlen($prefix)>2000) {
- $prefix = '';
- $suffix = '';
- }
- $s .= "\n| ".$carr[0].' | '.$carr[1].' | '.$prefix.$sql.$suffix.' |
';
-
- return $s."
\n\n";
- }
-
- // code thanks to Ixora.
- // http://www.ixora.com.au/scripts/query_opt.htm
- // requires oracle 8.1.7 or later
- function SuspiciousSQL($numsql=10)
- {
- $sql = "
-select
- substr(to_char(s.pct, '99.00'), 2) || '%' load,
- s.executions executes,
- p.sql_text
-from
- (
- select
- address,
- buffer_gets,
- executions,
- pct,
- rank() over (order by buffer_gets desc) ranking
- from
- (
- select
- address,
- buffer_gets,
- executions,
- 100 * ratio_to_report(buffer_gets) over () pct
- from
- sys.v_\$sql
- where
- command_type != 47 and module != 'T.O.A.D.'
- )
- where
- buffer_gets > 50 * executions
- ) s,
- sys.v_\$sqltext p
-where
- s.ranking <= $numsql and
- p.address = s.address
-order by
- 1 desc, s.address, p.piece";
-
- global $ADODB_CACHE_MODE;
- if (isset($_GET['expsixora']) && isset($_GET['sql'])) {
- $partial = empty($_GET['part']);
- echo "".$this->Explain($_GET['sql'],$partial)."\n";
- }
-
- if (isset($_GET['sql'])) return $this->_SuspiciousSQL($numsql);
-
- $s = '';
- $timer = time();
- $s .= $this->_SuspiciousSQL($numsql);
- $timer = time() - $timer;
-
- if ($timer > $this->noShowIxora) return $s;
- $s .= '';
-
- $save = $ADODB_CACHE_MODE;
- $ADODB_CACHE_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $savelog = $this->conn->LogSQL(false);
- $rs = $this->conn->SelectLimit($sql);
- $this->conn->LogSQL($savelog);
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_CACHE_MODE = $save;
- if ($rs) {
- $s .= "\n
Ixora Suspicious SQL
";
- $s .= $this->tohtml($rs,'expsixora');
- }
-
- return $s;
- }
-
- // code thanks to Ixora.
- // http://www.ixora.com.au/scripts/query_opt.htm
- // requires oracle 8.1.7 or later
- function ExpensiveSQL($numsql = 10)
- {
- $sql = "
-select
- substr(to_char(s.pct, '99.00'), 2) || '%' load,
- s.executions executes,
- p.sql_text
-from
- (
- select
- address,
- disk_reads,
- executions,
- pct,
- rank() over (order by disk_reads desc) ranking
- from
- (
- select
- address,
- disk_reads,
- executions,
- 100 * ratio_to_report(disk_reads) over () pct
- from
- sys.v_\$sql
- where
- command_type != 47 and module != 'T.O.A.D.'
- )
- where
- disk_reads > 50 * executions
- ) s,
- sys.v_\$sqltext p
-where
- s.ranking <= $numsql and
- p.address = s.address
-order by
- 1 desc, s.address, p.piece
-";
- global $ADODB_CACHE_MODE;
- if (isset($_GET['expeixora']) && isset($_GET['sql'])) {
- $partial = empty($_GET['part']);
- echo "".$this->Explain($_GET['sql'],$partial)."\n";
- }
- if (isset($_GET['sql'])) {
- $var = $this->_ExpensiveSQL($numsql);
- return $var;
- }
-
- $s = '';
- $timer = time();
- $s .= $this->_ExpensiveSQL($numsql);
- $timer = time() - $timer;
- if ($timer > $this->noShowIxora) return $s;
-
- $s .= '';
- $save = $ADODB_CACHE_MODE;
- $ADODB_CACHE_MODE = ADODB_FETCH_NUM;
- if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);
-
- $savelog = $this->conn->LogSQL(false);
- $rs = $this->conn->Execute($sql);
- $this->conn->LogSQL($savelog);
-
- if (isset($savem)) $this->conn->SetFetchMode($savem);
- $ADODB_CACHE_MODE = $save;
-
- if ($rs) {
- $s .= "\n
Ixora Expensive SQL
";
- $s .= $this->tohtml($rs,'expeixora');
- }
-
- return $s;
- }
-
- function clearsql()
- {
- $perf_table = adodb_perf::table();
- // using the naive "delete from $perf_table where created<".$this->conn->sysTimeStamp will cause the table to lock, possibly
- // for a long time
- $sql =
-"DECLARE cnt pls_integer;
-BEGIN
- cnt := 0;
- FOR rec IN (SELECT ROWID AS rr FROM $perf_table WHERE createdconn->Execute($sql);
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-postgres.inc.php b/app/vendor/adodb/adodb-php/perf/perf-postgres.inc.php
deleted file mode 100644
index 16b767d20..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-postgres.inc.php
+++ /dev/null
@@ -1,156 +0,0 @@
- array('RATIO',
- "select case when count(*)=3 then 'TRUE' else 'FALSE' end from pg_settings where (name='stats_block_level' or name='stats_row_level' or name='stats_start_collector') and setting='on' ",
- 'Value must be TRUE to enable hit ratio statistics (stats_start_collector,stats_row_level and stats_block_level must be set to true in postgresql.conf)'),
- 'data cache hit ratio' => array('RATIO',
- "select case when blks_hit=0 then 0 else round( ((1-blks_read::float/blks_hit)*100)::numeric, 2) end from pg_stat_database where datname='\$DATABASE'",
- '=WarnCacheRatio'),
- 'IO',
- 'data reads' => array('IO',
- 'select sum(heap_blks_read+toast_blks_read) from pg_statio_user_tables',
- ),
- 'data writes' => array('IO',
- 'select round((sum(n_tup_ins/4.0+n_tup_upd/8.0+n_tup_del/4.0)/16)::numeric,2) from pg_stat_user_tables',
- 'Count of inserts/updates/deletes * coef'),
-
- 'Data Cache',
- 'data cache buffers' => array('DATAC',
- "select setting from pg_settings where name='shared_buffers'",
- 'Number of cache buffers. Tuning'),
- 'cache blocksize' => array('DATAC',
- 'select 8192',
- '(estimate)' ),
- 'data cache size' => array( 'DATAC',
- "select setting::integer*8192 from pg_settings where name='shared_buffers'",
- '' ),
- 'operating system cache size' => array( 'DATA',
- "select setting::integer*8192 from pg_settings where name='effective_cache_size'",
- '(effective cache size)' ),
- 'Memory Usage',
- # Postgres 7.5 changelog: Rename server parameters SortMem and VacuumMem to work_mem and maintenance_work_mem;
- 'sort/work buffer size' => array('CACHE',
- "select setting::integer*1024 from pg_settings where name='sort_mem' or name = 'work_mem' order by name",
- 'Size of sort buffer (per query)' ),
- 'Connections',
- 'current connections' => array('SESS',
- 'select count(*) from pg_stat_activity',
- ''),
- 'max connections' => array('SESS',
- "select setting from pg_settings where name='max_connections'",
- ''),
- 'Parameters',
- 'rollback buffers' => array('COST',
- "select setting from pg_settings where name='wal_buffers'",
- 'WAL buffers'),
- 'random page cost' => array('COST',
- "select setting from pg_settings where name='random_page_cost'",
- 'Cost of doing a seek (default=4). See random_page_cost'),
- false
- );
-
- function __construct(&$conn)
- {
- $this->conn = $conn;
- }
-
- var $optimizeTableLow = 'VACUUM %s';
- var $optimizeTableHigh = 'VACUUM ANALYZE %s';
-
-/**
- * @see adodb_perf::optimizeTable()
- */
-
- function optimizeTable($table, $mode = ADODB_OPT_LOW)
- {
- if(! is_string($table)) return false;
-
- $conn = $this->conn;
- if (! $conn) return false;
-
- $sql = '';
- switch($mode) {
- case ADODB_OPT_LOW : $sql = $this->optimizeTableLow; break;
- case ADODB_OPT_HIGH: $sql = $this->optimizeTableHigh; break;
- default :
- ADOConnection::outp(sprintf("%s: '%s' using of undefined mode '%s'
", __CLASS__, 'optimizeTable', $mode));
- return false;
- }
- $sql = sprintf($sql, $table);
-
- return $conn->Execute($sql) !== false;
- }
-
- function Explain($sql,$partial=false)
- {
- $save = $this->conn->LogSQL(false);
-
- if ($partial) {
- $sqlq = $this->conn->qstr($sql.'%');
- $arr = $this->conn->getArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq");
- if ($arr) {
- foreach($arr as $row) {
- $sql = reset($row);
- if (crc32($sql) == $partial) break;
- }
- }
- }
- $sql = str_replace('?',"''",$sql);
- $s = 'Explain: '.htmlspecialchars($sql).'
';
- $rs = $this->conn->Execute('EXPLAIN '.$sql);
- $this->conn->LogSQL($save);
- $s .= '';
- if ($rs)
- while (!$rs->EOF) {
- $s .= reset($rs->fields)."\n";
- $rs->MoveNext();
- }
- $s .= '';
- $s .= $this->Tracer($sql,$partial);
- return $s;
- }
-}
diff --git a/app/vendor/adodb/adodb-php/perf/perf-sqlite3.inc.php b/app/vendor/adodb/adodb-php/perf/perf-sqlite3.inc.php
deleted file mode 100644
index 19198d5b3..000000000
--- a/app/vendor/adodb/adodb-php/perf/perf-sqlite3.inc.php
+++ /dev/null
@@ -1,40 +0,0 @@
-conn = $conn;
- }
-
- function tables($orderby='1')
- {
- if (!$this->tablesSQL){
- return false;
- }
-
- $rs = $this->conn->execute($this->tablesSQL);
- if (!$rs) {
- return false;
- }
-
- $html = rs2html($rs, false, false, false, false);
- return $html;
- }
-}
diff --git a/app/vendor/adodb/adodb-php/phpdoc b/app/vendor/adodb/adodb-php/phpdoc
deleted file mode 100644
index d4cb73a91..000000000
--- a/app/vendor/adodb/adodb-php/phpdoc
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- docs/cache
-
-
-
-
-
-
- scripts
- tests
- vendor/**/*
- xsl
-
-
-
-
diff --git a/app/vendor/adodb/adodb-php/pivottable.inc.php b/app/vendor/adodb/adodb-php/pivottable.inc.php
deleted file mode 100644
index 14d8eebe5..000000000
--- a/app/vendor/adodb/adodb-php/pivottable.inc.php
+++ /dev/null
@@ -1,195 +0,0 @@
-databaseType,'access') !== false;
- // note - vfp 6 still doesn' work even with IIF enabled || $db->databaseType == 'vfp';
-
- //$hidecnt = false;
-
- if ($where) $where = "\nWHERE $where";
- if (!is_array($colfield)) $colarr = $db->GetCol("select distinct $colfield from $tables $where order by 1");
- if (!$aggfield) $hidecnt = false;
-
- $sel = "$rowfields, ";
- if (is_array($colfield)) {
- foreach ($colfield as $k => $v) {
- $k = trim($k);
- if (!$hidecnt) {
- $sel .= $iif ?
- "\n\t$aggfn(IIF($v,1,0)) AS \"$k\", "
- :
- "\n\t$aggfn(CASE WHEN $v THEN 1 ELSE 0 END) AS \"$k\", ";
- }
- if ($aggfield) {
- $sel .= $iif ?
- "\n\t$aggfn(IIF($v,$aggfield,0)) AS \"$sumlabel$k\", "
- :
- "\n\t$aggfn(CASE WHEN $v THEN $aggfield ELSE 0 END) AS \"$sumlabel$k\", ";
- }
- }
- } else {
- foreach ($colarr as $v) {
- if (!is_numeric($v)) $vq = $db->qstr($v);
- else $vq = $v;
- $v = trim($v);
- if (strlen($v) == 0 ) $v = 'null';
- if (!$hidecnt) {
- $sel .= $iif ?
- "\n\t$aggfn(IIF($colfield=$vq,1,0)) AS \"$v\", "
- :
- "\n\t$aggfn(CASE WHEN $colfield=$vq THEN 1 ELSE 0 END) AS \"$v\", ";
- }
- if ($aggfield) {
- if ($hidecnt) $label = $v;
- else $label = "{$v}_$aggfield";
- $sel .= $iif ?
- "\n\t$aggfn(IIF($colfield=$vq,$aggfield,0)) AS \"$label\", "
- :
- "\n\t$aggfn(CASE WHEN $colfield=$vq THEN $aggfield ELSE 0 END) AS \"$label\", ";
- }
- }
- }
- if ($aggfield && $aggfield != '1'){
- $agg = "$aggfn($aggfield)";
- $sel .= "\n\t$agg as \"$sumlabel$aggfield\", ";
- }
-
- if ($showcount)
- $sel .= "\n\tSUM(1) as Total";
- else
- $sel = substr($sel,0,strlen($sel)-2);
-
-
- // Strip aliases
- $rowfields = preg_replace('/ AS (\w+)/i', '', $rowfields);
-
- $sql = "SELECT $sel \nFROM $tables $where \nGROUP BY $rowfields";
-
- return $sql;
- }
-
-/* EXAMPLES USING MS NORTHWIND DATABASE */
-if (0) {
-
-# example1
-#
-# Query the main "product" table
-# Set the rows to CompanyName and QuantityPerUnit
-# and the columns to the Categories
-# and define the joins to link to lookup tables
-# "categories" and "suppliers"
-#
-
- $sql = PivotTableSQL(
- $gDB, # adodb connection
- 'products p ,categories c ,suppliers s', # tables
- 'CompanyName,QuantityPerUnit', # row fields
- 'CategoryName', # column fields
- 'p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID' # joins/where
-);
- print "$sql";
- $rs = $gDB->Execute($sql);
- rs2html($rs);
-
-/*
-Generated SQL:
-
-SELECT CompanyName,QuantityPerUnit,
- SUM(CASE WHEN CategoryName='Beverages' THEN 1 ELSE 0 END) AS "Beverages",
- SUM(CASE WHEN CategoryName='Condiments' THEN 1 ELSE 0 END) AS "Condiments",
- SUM(CASE WHEN CategoryName='Confections' THEN 1 ELSE 0 END) AS "Confections",
- SUM(CASE WHEN CategoryName='Dairy Products' THEN 1 ELSE 0 END) AS "Dairy Products",
- SUM(CASE WHEN CategoryName='Grains/Cereals' THEN 1 ELSE 0 END) AS "Grains/Cereals",
- SUM(CASE WHEN CategoryName='Meat/Poultry' THEN 1 ELSE 0 END) AS "Meat/Poultry",
- SUM(CASE WHEN CategoryName='Produce' THEN 1 ELSE 0 END) AS "Produce",
- SUM(CASE WHEN CategoryName='Seafood' THEN 1 ELSE 0 END) AS "Seafood",
- SUM(1) as Total
-FROM products p ,categories c ,suppliers s WHERE p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID
-GROUP BY CompanyName,QuantityPerUnit
-*/
-//=====================================================================
-
-# example2
-#
-# Query the main "product" table
-# Set the rows to CompanyName and QuantityPerUnit
-# and the columns to the UnitsInStock for diiferent ranges
-# and define the joins to link to lookup tables
-# "categories" and "suppliers"
-#
- $sql = PivotTableSQL(
- $gDB, # adodb connection
- 'products p ,categories c ,suppliers s', # tables
- 'CompanyName,QuantityPerUnit', # row fields
- # column ranges
-array(
-' 0 ' => 'UnitsInStock <= 0',
-"1 to 5" => '0 < UnitsInStock and UnitsInStock <= 5',
-"6 to 10" => '5 < UnitsInStock and UnitsInStock <= 10',
-"11 to 15" => '10 < UnitsInStock and UnitsInStock <= 15',
-"16+" =>'15 < UnitsInStock'
-),
- ' p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID', # joins/where
- 'UnitsInStock', # sum this field
- 'Sum' # sum label prefix
-);
- print "$sql";
- $rs = $gDB->Execute($sql);
- rs2html($rs);
- /*
- Generated SQL:
-
-SELECT CompanyName,QuantityPerUnit,
- SUM(CASE WHEN UnitsInStock <= 0 THEN UnitsInStock ELSE 0 END) AS "Sum 0 ",
- SUM(CASE WHEN 0 < UnitsInStock and UnitsInStock <= 5 THEN UnitsInStock ELSE 0 END) AS "Sum 1 to 5",
- SUM(CASE WHEN 5 < UnitsInStock and UnitsInStock <= 10 THEN UnitsInStock ELSE 0 END) AS "Sum 6 to 10",
- SUM(CASE WHEN 10 < UnitsInStock and UnitsInStock <= 15 THEN UnitsInStock ELSE 0 END) AS "Sum 11 to 15",
- SUM(CASE WHEN 15 < UnitsInStock THEN UnitsInStock ELSE 0 END) AS "Sum 16+",
- SUM(UnitsInStock) AS "Sum UnitsInStock",
- SUM(1) as Total
-FROM products p ,categories c ,suppliers s WHERE p.CategoryID = c.CategoryID and s.SupplierID= p.SupplierID
-GROUP BY CompanyName,QuantityPerUnit
- */
-}
diff --git a/app/vendor/adodb/adodb-php/rsfilter.inc.php b/app/vendor/adodb/adodb-php/rsfilter.inc.php
deleted file mode 100644
index 34c5311cf..000000000
--- a/app/vendor/adodb/adodb-php/rsfilter.inc.php
+++ /dev/null
@@ -1,67 +0,0 @@
- $v) {
- $arr[$k] = ucwords($v);
- }
- }
- $rs = RSFilter($rs,'do_ucwords');
- */
-function RSFilter($rs,$fn)
-{
- if ($rs->databaseType != 'array') {
- if (!$rs->connection) return false;
-
- $rs = $rs->connection->_rs2rs($rs);
- }
- $rows = $rs->RecordCount();
- for ($i=0; $i < $rows; $i++) {
- if (is_array ($fn)) {
- $obj = $fn[0];
- $method = $fn[1];
- $obj->$method ($rs->_array[$i],$rs);
- } else {
- $fn($rs->_array[$i],$rs);
- }
-
- }
- if (!$rs->EOF) {
- $rs->_currentRow = 0;
- $rs->fields = $rs->_array[0];
- }
-
- return $rs;
-}
diff --git a/app/vendor/adodb/adodb-php/session/adodb-compress-bzip2.php b/app/vendor/adodb/adodb-php/session/adodb-compress-bzip2.php
deleted file mode 100644
index 17ad99fb7..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-compress-bzip2.php
+++ /dev/null
@@ -1,126 +0,0 @@
-
- */
-
-if (!function_exists('bzcompress')) {
- trigger_error('bzip2 functions are not available', E_USER_ERROR);
- return 0;
-}
-
-/**
- */
-class ADODB_Compress_Bzip2 {
- /**
- */
- var $_block_size = null;
-
- /**
- */
- var $_work_level = null;
-
- /**
- */
- var $_min_length = 1;
-
- /**
- */
- function getBlockSize() {
- return $this->_block_size;
- }
-
- /**
- */
- function setBlockSize($block_size) {
- assert($block_size >= 1);
- assert($block_size <= 9);
- $this->_block_size = (int) $block_size;
- }
-
- /**
- */
- function getWorkLevel() {
- return $this->_work_level;
- }
-
- /**
- */
- function setWorkLevel($work_level) {
- assert($work_level >= 0);
- assert($work_level <= 250);
- $this->_work_level = (int) $work_level;
- }
-
- /**
- */
- function getMinLength() {
- return $this->_min_length;
- }
-
- /**
- */
- function setMinLength($min_length) {
- assert($min_length >= 0);
- $this->_min_length = (int) $min_length;
- }
-
- /**
- */
- function __construct($block_size = null, $work_level = null, $min_length = null) {
- if (!is_null($block_size)) {
- $this->setBlockSize($block_size);
- }
-
- if (!is_null($work_level)) {
- $this->setWorkLevel($work_level);
- }
-
- if (!is_null($min_length)) {
- $this->setMinLength($min_length);
- }
- }
-
- /**
- */
- function write($data, $key) {
- if (strlen($data) < $this->_min_length) {
- return $data;
- }
-
- if (!is_null($this->_block_size)) {
- if (!is_null($this->_work_level)) {
- return bzcompress($data, $this->_block_size, $this->_work_level);
- } else {
- return bzcompress($data, $this->_block_size);
- }
- }
-
- return bzcompress($data);
- }
-
- /**
- */
- function read($data, $key) {
- return $data ? bzdecompress($data) : $data;
- }
-
-}
-
-return 1;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-compress-gzip.php b/app/vendor/adodb/adodb-php/session/adodb-compress-gzip.php
deleted file mode 100644
index bbaf6c637..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-compress-gzip.php
+++ /dev/null
@@ -1,99 +0,0 @@
-_level;
- }
-
- /**
- */
- function setLevel($level) {
- assert($level >= 0);
- assert($level <= 9);
- $this->_level = (int) $level;
- }
-
- /**
- */
- function getMinLength() {
- return $this->_min_length;
- }
-
- /**
- */
- function setMinLength($min_length) {
- assert($min_length >= 0);
- $this->_min_length = (int) $min_length;
- }
-
- /**
- */
- function __construct($level = null, $min_length = null) {
- if (!is_null($level)) {
- $this->setLevel($level);
- }
-
- if (!is_null($min_length)) {
- $this->setMinLength($min_length);
- }
- }
-
- /**
- */
- function write($data, $key) {
- if (strlen($data) < $this->_min_length) {
- return $data;
- }
-
- if (!is_null($this->_level)) {
- return gzcompress($data, $this->_level);
- } else {
- return gzcompress($data);
- }
- }
-
- /**
- */
- function read($data, $key) {
- return $data ? gzuncompress($data) : $data;
- }
-
-}
-
-return 1;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-cryptsession.php b/app/vendor/adodb/adodb-php/session/adodb-cryptsession.php
deleted file mode 100644
index 088053217..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-cryptsession.php
+++ /dev/null
@@ -1,30 +0,0 @@
-_cipher;
- }
-
- /**
- */
- function setCipher($cipher) {
- $this->_cipher = $cipher;
- }
-
- /**
- */
- function getMode() {
- return $this->_mode;
- }
-
- /**
- */
- function setMode($mode) {
- $this->_mode = $mode;
- }
-
- /**
- */
- function getSource() {
- return $this->_source;
- }
-
- /**
- */
- function setSource($source) {
- $this->_source = $source;
- }
-
- /**
- */
- function __construct($cipher = null, $mode = null, $source = null) {
- if (!$cipher) {
- $cipher = MCRYPT_RIJNDAEL_256;
- }
- if (!$mode) {
- $mode = MCRYPT_MODE_ECB;
- }
- if (!$source) {
- $source = MCRYPT_RAND;
- }
-
- $this->_cipher = $cipher;
- $this->_mode = $mode;
- $this->_source = $source;
- }
-
- /**
- */
- function write($data, $key) {
- $iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode);
- $iv = mcrypt_create_iv($iv_size, $this->_source);
- return mcrypt_encrypt($this->_cipher, $key, $data, $this->_mode, $iv);
- }
-
- /**
- */
- function read($data, $key) {
- $iv_size = mcrypt_get_iv_size($this->_cipher, $this->_mode);
- $iv = mcrypt_create_iv($iv_size, $this->_source);
- $rv = mcrypt_decrypt($this->_cipher, $key, $data, $this->_mode, $iv);
- return rtrim($rv, "\0");
- }
-
-}
-
-return 1;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-encrypt-md5.php b/app/vendor/adodb/adodb-php/session/adodb-encrypt-md5.php
deleted file mode 100644
index 7ae9b56eb..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-encrypt-md5.php
+++ /dev/null
@@ -1,46 +0,0 @@
-encrypt($data, $key);
- }
-
- /**
- */
- function read($data, $key) {
- $md5crypt = new MD5Crypt();
- return $md5crypt->decrypt($data, $key);
- }
-
-}
-
-return 1;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-encrypt-secret.php b/app/vendor/adodb/adodb-php/session/adodb-encrypt-secret.php
deleted file mode 100644
index 2c29f7a08..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-encrypt-secret.php
+++ /dev/null
@@ -1,47 +0,0 @@
-encrypt($data, $key);
-
- }
-
-
- function read($data, $key)
- {
- $sha1crypt = new SHA1Crypt();
- return $sha1crypt->decrypt($data, $key);
-
- }
-}
-
-
-
-return 1;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-sess.txt b/app/vendor/adodb/adodb-php/session/adodb-sess.txt
deleted file mode 100644
index 1e9a8aace..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-sess.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-John,
-
-I have been an extremely satisfied ADODB user for several years now.
-
-To give you something back for all your hard work, I've spent the last 3
-days rewriting the adodb-session.php code.
-
-----------
-What's New
-----------
-
-Here's a list of the new code's benefits:
-
-* Combines the functionality of the three files:
-
-adodb-session.php
-adodb-session-clob.php
-adodb-cryptsession.php
-
-each with very similar functionality, into a single file adodb-session.php.
-This will ease maintenance and support issues.
-
-* Supports multiple encryption and compression schemes.
- Currently, we support:
-
- MD5Crypt (crypt.inc.php)
- MCrypt
- Secure (Horde's emulation of MCrypt, if MCrypt module is not available.)
- GZip
- BZip2
-
-These can be stacked, so if you want to compress and then encrypt your
-session data, it's easy.
-Also, the built-in MCrypt functions will be *much* faster, and more secure,
-than the MD5Crypt code.
-
-* adodb-session.php contains a single class ADODB_Session that encapsulates
-all functionality.
- This eliminates the use of global vars and defines (though they are
-supported for backwards compatibility).
-
-* All user defined parameters are now static functions in the ADODB_Session
-class.
-
-New parameters include:
-
-* encryptionKey(): Define the encryption key used to encrypt the session.
-Originally, it was a hard coded string.
-
-* persist(): Define if the database will be opened in persistent mode.
-Originally, the user had to call adodb_sess_open().
-
-* dataFieldName(): Define the field name used to store the session data, as
-'DATA' appears to be a reserved word in the following cases:
- ANSI SQL
- IBM DB2
- MS SQL Server
- Postgres
- SAP
-
-* filter(): Used to support multiple, simultaneous encryption/compression
-schemes.
-
-* Debug support is improved through _rsdump() function, which is called after
-every database call.
-
-------------
-What's Fixed
-------------
-
-The new code includes several bug fixes and enhancements:
-
-* sesskey is compared in BINARY mode for MySQL, to avoid problems with
-session keys that differ only by case.
- Of course, the user should define the sesskey field as BINARY, to
-correctly fix this problem, otherwise performance will suffer.
-
-* In ADODB_Session::gc(), if $expire_notify is true, the multiple DELETES in
-the original code have been optimized to a single DELETE.
-
-* In ADODB_Session::destroy(), since "SELECT expireref, sesskey FROM $table
-WHERE sesskey = $qkey" will only return a single value, we don't loop on the
-result, we simply process the row, if any.
-
-* We close $rs after every use.
-
----------------
-What's the Same
----------------
-
-I know backwards compatibility is *very* important to you. Therefore, the
-new code is 100% backwards compatible.
-
-If you like my code, but don't "trust" it's backwards compatible, maybe we
-offer it as beta code, in a new directory for a release or two?
-
-------------
-What's To Do
-------------
-
-I've vascillated over whether to use a single function to get/set
-parameters:
-
-$user = ADODB_Session::user(); // get
-ADODB_Session::user($user); // set
-
-or to use separate functions (which is the PEAR/Java way):
-
-$user = ADODB_Session::getUser();
-ADODB_Session::setUser($user);
-
-I've chosen the former as it's makes for a simpler API, and reduces the
-amount of code, but I'd be happy to change it to the latter.
-
-Also, do you think the class should be a singleton class, versus a static
-class?
-
-Let me know if you find this code useful, and will be including it in the
-next release of ADODB.
-
-If so, I will modify the current documentation to detail the new
-functionality. To that end, what file(s) contain the documentation? Please
-send them to me if they are not publicly available.
-
-Also, if there is *anything* in the code that you like to see changed, let
-me know.
-
-Thanks,
-
-Ross
-
diff --git a/app/vendor/adodb/adodb-php/session/adodb-session-clob.php b/app/vendor/adodb/adodb-php/session/adodb-session-clob.php
deleted file mode 100644
index 8c5e9fb39..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-session-clob.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
- */
-
-if (!defined('ADODB_SESSION')) {
- require_once dirname(__FILE__) . '/adodb-session2.php';
-}
-ADODB_Session::clob('CLOB');
diff --git a/app/vendor/adodb/adodb-php/session/adodb-session.php b/app/vendor/adodb/adodb-php/session/adodb-session.php
deleted file mode 100644
index 9e716232c..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-session.php
+++ /dev/null
@@ -1,941 +0,0 @@
-
- */
-
-/*
- You may want to rename the 'data' field to 'session_data' as
- 'data' appears to be a reserved word for one or more of the following:
- ANSI SQL
- IBM DB2
- MS SQL Server
- Postgres
- SAP
-
- If you do, then execute:
-
- ADODB_Session::dataFieldName('session_data');
-
-*/
-
-if (!defined('_ADODB_LAYER')) {
- require realpath(dirname(__FILE__) . '/../adodb.inc.php');
-}
-
-if (defined('ADODB_SESSION')) return 1;
-
-define('ADODB_SESSION', dirname(__FILE__));
-
-
-/*
- Unserialize session data manually. See PHPLens Issue No: 9821
-
- From Kerr Schere, to unserialize session data stored via ADOdb.
- 1. Pull the session data from the db and loop through it.
- 2. Inside the loop, you will need to urldecode the data column.
- 3. After urldecode, run the serialized string through this function:
-
-*/
-function adodb_unserialize( $serialized_string )
-{
- $variables = array( );
- $a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
- for( $i = 0; $i < count( $a ); $i = $i+2 ) {
- $variables[$a[$i]] = unserialize( $a[$i+1] );
- }
- return( $variables );
-}
-
-/*
- Thanks Joe Li. See PHPLens Issue No: 11487&x=1
- Since adodb 4.61.
-*/
-function adodb_session_regenerate_id()
-{
- $conn = ADODB_Session::_conn();
- if (!$conn) return false;
-
- $old_id = session_id();
- if (function_exists('session_regenerate_id')) {
- session_regenerate_id();
- } else {
- session_id(md5(uniqid(rand(), true)));
- $ck = session_get_cookie_params();
- setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure'], $ck['httponly']);
- //@session_start();
- }
- $new_id = session_id();
- $ok = $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id));
-
- /* it is possible that the update statement fails due to a collision */
- if (!$ok) {
- session_id($old_id);
- if (empty($ck)) $ck = session_get_cookie_params();
- setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure'], $ck['httponly']);
- return false;
- }
-
- return true;
-}
-
-/*
- Generate database table for session data
- @see PHPLens Issue No: 12280
- @return 0 if failure, 1 if errors, 2 if successful.
- @author Markus Staab http://www.public-4u.de
-*/
-function adodb_session_create_table($schemaFile=null,$conn = null)
-{
- // set default values
- if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema.xml';
- if ($conn===null) $conn = ADODB_Session::_conn();
-
- if (!$conn) return 0;
-
- $schema = new adoSchema($conn);
- $schema->ParseSchema($schemaFile);
- return $schema->ExecuteSchema();
-}
-
-/*!
- \static
-*/
-class ADODB_Session {
- /////////////////////
- // getter/setter methods
- /////////////////////
-
- /*
-
- function Lock($lock=null)
- {
- static $_lock = false;
-
- if (!is_null($lock)) $_lock = $lock;
- return $lock;
- }
- */
- /*!
- */
- function driver($driver = null) {
- static $_driver = 'mysql';
- static $set = false;
-
- if (!is_null($driver)) {
- $_driver = trim($driver);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) {
- return $GLOBALS['ADODB_SESSION_DRIVER'];
- }
- }
-
- return $_driver;
- }
-
- /*!
- */
- function host($host = null) {
- static $_host = 'localhost';
- static $set = false;
-
- if (!is_null($host)) {
- $_host = trim($host);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) {
- return $GLOBALS['ADODB_SESSION_CONNECT'];
- }
- }
-
- return $_host;
- }
-
- /*!
- */
- function user($user = null) {
- static $_user = 'root';
- static $set = false;
-
- if (!is_null($user)) {
- $_user = trim($user);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_USER'])) {
- return $GLOBALS['ADODB_SESSION_USER'];
- }
- }
-
- return $_user;
- }
-
- /*!
- */
- function password($password = null) {
- static $_password = '';
- static $set = false;
-
- if (!is_null($password)) {
- $_password = $password;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_PWD'])) {
- return $GLOBALS['ADODB_SESSION_PWD'];
- }
- }
-
- return $_password;
- }
-
- /*!
- */
- function database($database = null) {
- static $_database = 'xphplens_2';
- static $set = false;
-
- if (!is_null($database)) {
- $_database = trim($database);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_DB'])) {
- return $GLOBALS['ADODB_SESSION_DB'];
- }
- }
-
- return $_database;
- }
-
- /*!
- */
- function persist($persist = null)
- {
- static $_persist = true;
-
- if (!is_null($persist)) {
- $_persist = trim($persist);
- }
-
- return $_persist;
- }
-
- /*!
- */
- function lifetime($lifetime = null) {
- static $_lifetime;
- static $set = false;
-
- if (!is_null($lifetime)) {
- $_lifetime = (int) $lifetime;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESS_LIFE'])) {
- return $GLOBALS['ADODB_SESS_LIFE'];
- }
- }
- if (!$_lifetime) {
- $_lifetime = ini_get('session.gc_maxlifetime');
- if ($_lifetime <= 1) {
- // bug in PHP 4.0.3 pl 1 -- how about other versions?
- //print "Session Error: PHP.INI setting session.gc_maxlifetimenot set: $lifetime
";
- $_lifetime = 1440;
- }
- }
-
- return $_lifetime;
- }
-
- /*!
- */
- function debug($debug = null) {
- static $_debug = false;
- static $set = false;
-
- if (!is_null($debug)) {
- $_debug = (bool) $debug;
-
- $conn = ADODB_Session::_conn();
- if ($conn) {
- $conn->debug = $_debug;
- }
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESS_DEBUG'])) {
- return $GLOBALS['ADODB_SESS_DEBUG'];
- }
- }
-
- return $_debug;
- }
-
- /*!
- */
- function expireNotify($expire_notify = null) {
- static $_expire_notify;
- static $set = false;
-
- if (!is_null($expire_notify)) {
- $_expire_notify = $expire_notify;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) {
- return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'];
- }
- }
-
- return $_expire_notify;
- }
-
- /*!
- */
- function table($table = null) {
- static $_table = 'sessions';
- static $set = false;
-
- if (!is_null($table)) {
- $_table = trim($table);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_TBL'])) {
- return $GLOBALS['ADODB_SESSION_TBL'];
- }
- }
-
- return $_table;
- }
-
- /*!
- */
- function optimize($optimize = null) {
- static $_optimize = false;
- static $set = false;
-
- if (!is_null($optimize)) {
- $_optimize = (bool) $optimize;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (defined('ADODB_SESSION_OPTIMIZE')) {
- return true;
- }
- }
-
- return $_optimize;
- }
-
- /*!
- */
- function syncSeconds($sync_seconds = null) {
- static $_sync_seconds = 60;
- static $set = false;
-
- if (!is_null($sync_seconds)) {
- $_sync_seconds = (int) $sync_seconds;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (defined('ADODB_SESSION_SYNCH_SECS')) {
- return ADODB_SESSION_SYNCH_SECS;
- }
- }
-
- return $_sync_seconds;
- }
-
- /*!
- */
- function clob($clob = null) {
- static $_clob = false;
- static $set = false;
-
- if (!is_null($clob)) {
- $_clob = strtolower(trim($clob));
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) {
- return $GLOBALS['ADODB_SESSION_USE_LOBS'];
- }
- }
-
- return $_clob;
- }
-
- /*!
- */
- function dataFieldName($data_field_name = null) {
- static $_data_field_name = 'data';
-
- if (!is_null($data_field_name)) {
- $_data_field_name = trim($data_field_name);
- }
-
- return $_data_field_name;
- }
-
- /*!
- */
- function filter($filter = null) {
- static $_filter = array();
-
- if (!is_null($filter)) {
- if (!is_array($filter)) {
- $filter = array($filter);
- }
- $_filter = $filter;
- }
-
- return $_filter;
- }
-
- /*!
- */
- function encryptionKey($encryption_key = null) {
- static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!';
-
- if (!is_null($encryption_key)) {
- $_encryption_key = $encryption_key;
- }
-
- return $_encryption_key;
- }
-
- /////////////////////
- // private methods
- /////////////////////
-
- /*!
- */
- function _conn($conn=null) {
- return $GLOBALS['ADODB_SESS_CONN'];
- }
-
- /*!
- */
- function _crc($crc = null) {
- static $_crc = false;
-
- if (!is_null($crc)) {
- $_crc = $crc;
- }
-
- return $_crc;
- }
-
- /*!
- */
- function _init() {
- session_set_save_handler(
- array('ADODB_Session', 'open'),
- array('ADODB_Session', 'close'),
- array('ADODB_Session', 'read'),
- array('ADODB_Session', 'write'),
- array('ADODB_Session', 'destroy'),
- array('ADODB_Session', 'gc')
- );
- }
-
-
- /*!
- */
- function _sessionKey() {
- // use this function to create the encryption key for crypted sessions
- // crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt
- return crypt(ADODB_Session::encryptionKey(), session_id());
- }
-
- /*!
- */
- function _dumprs($rs) {
- $conn = ADODB_Session::_conn();
- $debug = ADODB_Session::debug();
-
- if (!$conn) {
- return;
- }
-
- if (!$debug) {
- return;
- }
-
- if (!$rs) {
- echo "
\$rs is null or false
\n";
- return;
- }
-
- //echo "
\nAffected_Rows=",$conn->Affected_Rows(),"
\n";
-
- if (!is_object($rs)) {
- return;
- }
-
- require_once ADODB_SESSION.'/../tohtml.inc.php';
- rs2html($rs);
- }
-
- /////////////////////
- // public methods
- /////////////////////
-
- function config($driver, $host, $user, $password, $database=false,$options=false)
- {
- ADODB_Session::driver($driver);
- ADODB_Session::host($host);
- ADODB_Session::user($user);
- ADODB_Session::password($password);
- ADODB_Session::database($database);
-
- if ($driver == 'oci8' || $driver == 'oci8po') $options['lob'] = 'CLOB';
-
- if (isset($options['table'])) ADODB_Session::table($options['table']);
- if (isset($options['lob'])) ADODB_Session::clob($options['lob']);
- if (isset($options['debug'])) ADODB_Session::debug($options['debug']);
- }
-
- /*!
- Create the connection to the database.
-
- If $conn already exists, reuse that connection
- */
- function open($save_path, $session_name, $persist = null)
- {
- $conn = ADODB_Session::_conn();
-
- if ($conn) {
- return true;
- }
-
- $database = ADODB_Session::database();
- $debug = ADODB_Session::debug();
- $driver = ADODB_Session::driver();
- $host = ADODB_Session::host();
- $password = ADODB_Session::password();
- $user = ADODB_Session::user();
-
- if (!is_null($persist)) {
- ADODB_Session::persist($persist);
- } else {
- $persist = ADODB_Session::persist();
- }
-
-# these can all be defaulted to in php.ini
-# assert('$database');
-# assert('$driver');
-# assert('$host');
-
- $conn = ADONewConnection($driver);
-
- if ($debug) {
- $conn->debug = true;
-// ADOConnection::outp( " driver=$driver user=$user pwd=$password db=$database ");
- }
-
- if ($persist) {
- switch($persist) {
- default:
- case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break;
- case 'C': $ok = $conn->Connect($host, $user, $password, $database); break;
- case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break;
- }
- } else {
- $ok = $conn->Connect($host, $user, $password, $database);
- }
-
- if ($ok) $GLOBALS['ADODB_SESS_CONN'] = $conn;
- else
- ADOConnection::outp('Session: connection failed
', false);
-
-
- return $ok;
- }
-
- /*!
- Close the connection
- */
- function close()
- {
-/*
- $conn = ADODB_Session::_conn();
- if ($conn) $conn->Close();
-*/
- return true;
- }
-
- /*
- Slurp in the session variables and return the serialized string
- */
- function read($key)
- {
- $conn = ADODB_Session::_conn();
- $data = ADODB_Session::dataFieldName();
- $filter = ADODB_Session::filter();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return '';
- }
-
- //assert('$table');
-
- $qkey = $conn->quote($key);
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- $sql = "SELECT $data FROM $table WHERE sesskey = $binary $qkey AND expiry >= " . time();
- /* Lock code does not work as it needs to hold transaction within whole page, and we don't know if
- developer has committed elsewhere... :(
- */
- #if (ADODB_Session::Lock())
- # $rs = $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), $data);
- #else
-
- $rs = $conn->Execute($sql);
- //ADODB_Session::_dumprs($rs);
- if ($rs) {
- if ($rs->EOF) {
- $v = '';
- } else {
- $v = reset($rs->fields);
- $filter = array_reverse($filter);
- foreach ($filter as $f) {
- if (is_object($f)) {
- $v = $f->read($v, ADODB_Session::_sessionKey());
- }
- }
- $v = rawurldecode($v);
- }
-
- $rs->Close();
-
- ADODB_Session::_crc(strlen($v) . crc32($v));
- return $v;
- }
-
- return '';
- }
-
- /*!
- Write the serialized data to a database.
-
- If the data has not been modified since the last read(), we do not write.
- */
- function write($key, $val)
- {
- global $ADODB_SESSION_READONLY;
-
- if (!empty($ADODB_SESSION_READONLY)) return;
-
- $clob = ADODB_Session::clob();
- $conn = ADODB_Session::_conn();
- $crc = ADODB_Session::_crc();
- $data = ADODB_Session::dataFieldName();
- $debug = ADODB_Session::debug();
- $driver = ADODB_Session::driver();
- $expire_notify = ADODB_Session::expireNotify();
- $filter = ADODB_Session::filter();
- $lifetime = ADODB_Session::lifetime();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return false;
- }
- $qkey = $conn->qstr($key);
-
- //assert('$table');
-
- $expiry = time() + $lifetime;
-
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- // crc32 optimization since adodb 2.1
- // now we only update expiry date, thx to sebastian thom in adodb 2.32
- if ($crc !== false && $crc == (strlen($val) . crc32($val))) {
- if ($debug) {
- ADOConnection::outp( 'Session: Only updating date - crc32 not changed
');
- }
-
- $expirevar = '';
- if ($expire_notify) {
- $var = reset($expire_notify);
- global $$var;
- if (isset($$var)) {
- $expirevar = $$var;
- }
- }
-
-
- $sql = "UPDATE $table SET expiry = ".$conn->Param('0').",expireref=".$conn->Param('1')." WHERE $binary sesskey = ".$conn->Param('2')." AND expiry >= ".$conn->Param('3');
- $rs = $conn->Execute($sql,array($expiry,$expirevar,$key,time()));
- return true;
- }
- $val = rawurlencode($val);
- foreach ($filter as $f) {
- if (is_object($f)) {
- $val = $f->write($val, ADODB_Session::_sessionKey());
- }
- }
-
- $arr = array('sesskey' => $key, 'expiry' => $expiry, $data => $val, 'expireref' => '');
- if ($expire_notify) {
- $var = reset($expire_notify);
- global $$var;
- if (isset($$var)) {
- $arr['expireref'] = $$var;
- }
- }
-
- if (!$clob) { // no lobs, simply use replace()
- $arr[$data] = $val;
- $rs = $conn->Replace($table, $arr, 'sesskey', $autoQuote = true);
-
- } else {
- // what value shall we insert/update for lob row?
- switch ($driver) {
- // empty_clob or empty_lob for oracle dbs
- case 'oracle':
- case 'oci8':
- case 'oci8po':
- case 'oci805':
- $lob_value = sprintf('empty_%s()', strtolower($clob));
- break;
-
- // null for all other
- default:
- $lob_value = 'null';
- break;
- }
-
- $conn->StartTrans();
- $expiryref = $conn->qstr($arr['expireref']);
- // do we insert or update? => as for sesskey
- $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = $qkey");
- if ($rs && reset($rs->fields) > 0) {
- $sql = "UPDATE $table SET expiry = $expiry, $data = $lob_value, expireref=$expiryref WHERE sesskey = $qkey";
- } else {
- $sql = "INSERT INTO $table (expiry, $data, sesskey,expireref) VALUES ($expiry, $lob_value, $qkey,$expiryref)";
- }
- if ($rs)$rs->Close();
-
-
- $err = '';
- $rs1 = $conn->Execute($sql);
- if (!$rs1) $err = $conn->ErrorMsg()."\n";
-
- $rs2 = $conn->UpdateBlob($table, $data, $val, " sesskey=$qkey", strtoupper($clob));
- if (!$rs2) $err .= $conn->ErrorMsg()."\n";
-
- $rs = ($rs && $rs2) ? true : false;
- $conn->CompleteTrans();
- }
-
- if (!$rs) {
- ADOConnection::outp('Session Replace: ' . $conn->ErrorMsg() . '
', false);
- return false;
- } else {
- // bug in access driver (could be odbc?) means that info is not committed
- // properly unless select statement executed in Win2000
- if ($conn->databaseType == 'access') {
- $sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- if ($rs) {
- $rs->Close();
- }
- }
- }/*
- if (ADODB_Session::Lock()) {
- $conn->CommitTrans();
- }*/
- return $rs ? true : false;
- }
-
- /*!
- */
- function destroy($key) {
- $conn = ADODB_Session::_conn();
- $table = ADODB_Session::table();
- $expire_notify = ADODB_Session::expireNotify();
-
- if (!$conn) {
- return false;
- }
-
- //assert('$table');
-
- $qkey = $conn->quote($key);
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- if ($expire_notify) {
- reset($expire_notify);
- $fn = next($expire_notify);
- $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
- $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- $conn->SetFetchMode($savem);
- if (!$rs) {
- return false;
- }
- if (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- //assert('$ref');
- //assert('$key');
- $fn($ref, $key);
- }
- $rs->Close();
- }
-
- $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
-
- return $rs ? true : false;
- }
-
- /*!
- */
- function gc($maxlifetime)
- {
- $conn = ADODB_Session::_conn();
- $debug = ADODB_Session::debug();
- $expire_notify = ADODB_Session::expireNotify();
- $optimize = ADODB_Session::optimize();
- $sync_seconds = ADODB_Session::syncSeconds();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return false;
- }
-
-
- $time = time();
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- if ($expire_notify) {
- reset($expire_notify);
- $fn = next($expire_notify);
- $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
- $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- $conn->SetFetchMode($savem);
- if ($rs) {
- $conn->StartTrans();
- $keys = array();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref, $key);
- $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key));
- $rs->MoveNext();
- }
- $rs->Close();
-
- $conn->CompleteTrans();
- }
- } else {
-
- if (1) {
- $sql = "SELECT sesskey FROM $table WHERE expiry < $time";
- $arr = $conn->GetAll($sql);
- foreach ($arr as $row) {
- $sql2 = "DELETE FROM $table WHERE sesskey=".$conn->Param('0');
- $conn->Execute($sql2,array(reset($row)));
- }
- } else {
- $sql = "DELETE FROM $table WHERE expiry < $time";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- if ($rs) $rs->Close();
- }
- if ($debug) {
- ADOConnection::outp("Garbage Collection: $sql
");
- }
- }
-
- // suggested by Cameron, "GaM3R"
- if ($optimize) {
- $driver = ADODB_Session::driver();
-
- if (preg_match('/mysql/i', $driver)) {
- $sql = "OPTIMIZE TABLE $table";
- }
- if (preg_match('/postgres/i', $driver)) {
- $sql = "VACUUM $table";
- }
- if (!empty($sql)) {
- $conn->Execute($sql);
- }
- }
-
- if ($sync_seconds) {
- $sql = 'SELECT ';
- if ($conn->dataProvider === 'oci8') {
- $sql .= "TO_CHAR({$conn->sysTimeStamp}, 'RRRR-MM-DD HH24:MI:SS')";
- } else {
- $sql .= $conn->sysTimeStamp;
- }
- $sql .= " FROM $table";
-
- $rs = $conn->SelectLimit($sql, 1);
- if ($rs && !$rs->EOF) {
- $dbts = reset($rs->fields);
- $rs->Close();
- $dbt = $conn->UnixTimeStamp($dbts);
- $t = time();
-
- if (abs($dbt - $t) >= $sync_seconds) {
- $msg = __FILE__ .
- ": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: " .
- " database=$dbt ($dbts), webserver=$t (diff=". (abs($dbt - $t) / 60) . ' minutes)';
- error_log($msg);
- if ($debug) {
- ADOConnection::outp("$msg
");
- }
- }
- }
- }
-
- return true;
- }
-}
-
-ADODB_Session::_init();
-if (empty($ADODB_SESSION_READONLY))
- register_shutdown_function('session_write_close');
-
-// for backwards compatibility only
-function adodb_sess_open($save_path, $session_name, $persist = true) {
- return ADODB_Session::open($save_path, $session_name, $persist);
-}
-
-// for backwards compatibility only
-function adodb_sess_gc($t)
-{
- return ADODB_Session::gc($t);
-}
diff --git a/app/vendor/adodb/adodb-php/session/adodb-session2.php b/app/vendor/adodb/adodb-php/session/adodb-session2.php
deleted file mode 100644
index bf64b4166..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-session2.php
+++ /dev/null
@@ -1,915 +0,0 @@
-Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id));
-
- /* it is possible that the update statement fails due to a collision */
- if (!$ok) {
- session_id($old_id);
- if (empty($ck)) $ck = session_get_cookie_params();
- setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure'], $ck['httponly']);
- return false;
- }
-
- return true;
-}
-
-/*
- Generate database table for session data
- @see PHPLens Issue No: 12280
- @return 0 if failure, 1 if errors, 2 if successful.
- @author Markus Staab http://www.public-4u.de
-*/
-function adodb_session_create_table($schemaFile=null,$conn = null)
-{
- // set default values
- if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema2.xml';
- if ($conn===null) $conn = ADODB_Session::_conn();
-
- if (!$conn) return 0;
-
- $schema = new adoSchema($conn);
- $schema->ParseSchema($schemaFile);
- return $schema->ExecuteSchema();
-}
-
-/*!
- \static
-*/
-class ADODB_Session {
- /////////////////////
- // getter/setter methods
- /////////////////////
-
- /*
-
- function Lock($lock=null)
- {
- static $_lock = false;
-
- if (!is_null($lock)) $_lock = $lock;
- return $lock;
- }
- */
- /*!
- */
- static function driver($driver = null)
- {
- static $_driver = 'mysqli';
- static $set = false;
-
- if (!is_null($driver)) {
- $_driver = trim($driver);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) {
- return $GLOBALS['ADODB_SESSION_DRIVER'];
- }
- }
-
- return $_driver;
- }
-
- /*!
- */
- static function host($host = null) {
- static $_host = 'localhost';
- static $set = false;
-
- if (!is_null($host)) {
- $_host = trim($host);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) {
- return $GLOBALS['ADODB_SESSION_CONNECT'];
- }
- }
-
- return $_host;
- }
-
- /*!
- */
- static function user($user = null)
- {
- static $_user = 'root';
- static $set = false;
-
- if (!is_null($user)) {
- $_user = trim($user);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_USER'])) {
- return $GLOBALS['ADODB_SESSION_USER'];
- }
- }
-
- return $_user;
- }
-
- /*!
- */
- static function password($password = null)
- {
- static $_password = '';
- static $set = false;
-
- if (!is_null($password)) {
- $_password = $password;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_PWD'])) {
- return $GLOBALS['ADODB_SESSION_PWD'];
- }
- }
-
- return $_password;
- }
-
- /*!
- */
- static function database($database = null)
- {
- static $_database = '';
- static $set = false;
-
- if (!is_null($database)) {
- $_database = trim($database);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_DB'])) {
- return $GLOBALS['ADODB_SESSION_DB'];
- }
- }
- return $_database;
- }
-
- /*!
- */
- static function persist($persist = null)
- {
- static $_persist = true;
-
- if (!is_null($persist)) {
- $_persist = trim($persist);
- }
-
- return $_persist;
- }
-
- /*!
- */
- static function lifetime($lifetime = null)
- {
- static $_lifetime;
- static $set = false;
-
- if (!is_null($lifetime)) {
- $_lifetime = (int) $lifetime;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESS_LIFE'])) {
- return $GLOBALS['ADODB_SESS_LIFE'];
- }
- }
- if (!$_lifetime) {
- $_lifetime = ini_get('session.gc_maxlifetime');
- if ($_lifetime <= 1) {
- // bug in PHP 4.0.3 pl 1 -- how about other versions?
- //print "Session Error: PHP.INI setting session.gc_maxlifetimenot set: $lifetime
";
- $_lifetime = 1440;
- }
- }
-
- return $_lifetime;
- }
-
- /*!
- */
- static function debug($debug = null)
- {
- static $_debug = false;
- static $set = false;
-
- if (!is_null($debug)) {
- $_debug = (bool) $debug;
-
- $conn = ADODB_Session::_conn();
- if ($conn) {
- #$conn->debug = $_debug;
- }
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESS_DEBUG'])) {
- return $GLOBALS['ADODB_SESS_DEBUG'];
- }
- }
-
- return $_debug;
- }
-
- /*!
- */
- static function expireNotify($expire_notify = null)
- {
- static $_expire_notify;
- static $set = false;
-
- if (!is_null($expire_notify)) {
- $_expire_notify = $expire_notify;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) {
- return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'];
- }
- }
-
- return $_expire_notify;
- }
-
- /*!
- */
- static function table($table = null)
- {
- static $_table = 'sessions2';
- static $set = false;
-
- if (!is_null($table)) {
- $_table = trim($table);
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_TBL'])) {
- return $GLOBALS['ADODB_SESSION_TBL'];
- }
- }
-
- return $_table;
- }
-
- /*!
- */
- static function optimize($optimize = null)
- {
- static $_optimize = false;
- static $set = false;
-
- if (!is_null($optimize)) {
- $_optimize = (bool) $optimize;
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (defined('ADODB_SESSION_OPTIMIZE')) {
- return true;
- }
- }
-
- return $_optimize;
- }
-
- /*!
- */
- static function syncSeconds($sync_seconds = null) {
- //echo ("WARNING: ADODB_SESSION::syncSeconds is longer used, please remove this function for your code
");
-
- return 0;
- }
-
- /*!
- */
- static function clob($clob = null) {
- static $_clob = false;
- static $set = false;
-
- if (!is_null($clob)) {
- $_clob = strtolower(trim($clob));
- $set = true;
- } elseif (!$set) {
- // backwards compatibility
- if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) {
- return $GLOBALS['ADODB_SESSION_USE_LOBS'];
- }
- }
-
- return $_clob;
- }
-
- /*!
- */
- static function dataFieldName($data_field_name = null) {
- //echo ("WARNING: ADODB_SESSION::dataFieldName() is longer used, please remove this function for your code
");
- return '';
- }
-
- /*!
- */
- static function filter($filter = null) {
- static $_filter = array();
-
- if (!is_null($filter)) {
- if (!is_array($filter)) {
- $filter = array($filter);
- }
- $_filter = $filter;
- }
-
- return $_filter;
- }
-
- /*!
- */
- static function encryptionKey($encryption_key = null) {
- static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!';
-
- if (!is_null($encryption_key)) {
- $_encryption_key = $encryption_key;
- }
-
- return $_encryption_key;
- }
-
- /////////////////////
- // private methods
- /////////////////////
-
- /*!
- */
- static function _conn($conn=null) {
- return isset($GLOBALS['ADODB_SESS_CONN']) ? $GLOBALS['ADODB_SESS_CONN'] : false;
- }
-
- /*!
- */
- static function _crc($crc = null) {
- static $_crc = false;
-
- if (!is_null($crc)) {
- $_crc = $crc;
- }
-
- return $_crc;
- }
-
- /*!
- */
- static function _init() {
- session_set_save_handler(
- array('ADODB_Session', 'open'),
- array('ADODB_Session', 'close'),
- array('ADODB_Session', 'read'),
- array('ADODB_Session', 'write'),
- array('ADODB_Session', 'destroy'),
- array('ADODB_Session', 'gc')
- );
- }
-
-
- /*!
- */
- static function _sessionKey() {
- // use this function to create the encryption key for crypted sessions
- // crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt
- return crypt(ADODB_Session::encryptionKey(), session_id());
- }
-
- /*!
- */
- static function _dumprs(&$rs) {
- $conn = ADODB_Session::_conn();
- $debug = ADODB_Session::debug();
-
- if (!$conn) {
- return;
- }
-
- if (!$debug) {
- return;
- }
-
- if (!$rs) {
- echo "
\$rs is null or false
\n";
- return;
- }
-
- //echo "
\nAffected_Rows=",$conn->Affected_Rows(),"
\n";
-
- if (!is_object($rs)) {
- return;
- }
- $rs = $conn->_rs2rs($rs);
-
- require_once ADODB_SESSION.'/../tohtml.inc.php';
- rs2html($rs);
- $rs->MoveFirst();
- }
-
- /////////////////////
- // public methods
- /////////////////////
-
- static function config($driver, $host, $user, $password, $database=false,$options=false)
- {
- ADODB_Session::driver($driver);
- ADODB_Session::host($host);
- ADODB_Session::user($user);
- ADODB_Session::password($password);
- ADODB_Session::database($database);
-
- if (strncmp($driver, 'oci8', 4) == 0) $options['lob'] = 'CLOB';
-
- if (isset($options['table'])) ADODB_Session::table($options['table']);
- if (isset($options['lob'])) ADODB_Session::clob($options['lob']);
- if (isset($options['debug'])) ADODB_Session::debug($options['debug']);
- }
-
- /*!
- Create the connection to the database.
-
- If $conn already exists, reuse that connection
- */
- static function open($save_path, $session_name, $persist = null)
- {
- $conn = ADODB_Session::_conn();
-
- if ($conn) {
- return true;
- }
-
- $database = ADODB_Session::database();
- $debug = ADODB_Session::debug();
- $driver = ADODB_Session::driver();
- $host = ADODB_Session::host();
- $password = ADODB_Session::password();
- $user = ADODB_Session::user();
-
- if (!is_null($persist)) {
- ADODB_Session::persist($persist);
- } else {
- $persist = ADODB_Session::persist();
- }
-
-# these can all be defaulted to in php.ini
-# assert('$database');
-# assert('$driver');
-# assert('$host');
- if (strpos($driver, 'pdo_') === 0){
- $conn = ADONewConnection('pdo');
- $driver = str_replace('pdo_', '', $driver);
- $dsn = $driver.':'.'hostname='.$host.';dbname='.$database.';';
- if ($persist) {
- switch($persist) {
- default:
- case 'P': $ok = $conn->PConnect($dsn,$user,$password); break;
- case 'C': $ok = $conn->Connect($dsn,$user,$password); break;
- case 'N': $ok = $conn->NConnect($dsn,$user,$password); break;
- }
- } else {
- $ok = $conn->Connect($dsn,$user,$password);
- }
- }else{
- $conn = ADONewConnection($driver);
- if ($debug) {
- $conn->debug = true;
- ADOConnection::outp( " driver=$driver user=$user db=$database ");
- }
-
- if (empty($conn->_connectionID)) { // not dsn
- if ($persist) {
- switch($persist) {
- default:
- case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break;
- case 'C': $ok = $conn->Connect($host, $user, $password, $database); break;
- case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break;
- }
- } else {
- $ok = $conn->Connect($host, $user, $password, $database);
- }
- } else {
- $ok = true; // $conn->_connectionID is set after call to ADONewConnection
- }
- }
-
-
- if ($ok) $GLOBALS['ADODB_SESS_CONN'] = $conn;
- else
- ADOConnection::outp('Session: connection failed
', false);
-
-
- return $ok;
- }
-
- /*!
- Close the connection
- */
- static function close()
- {
-/*
- $conn = ADODB_Session::_conn();
- if ($conn) $conn->Close();
-*/
- return true;
- }
-
- /*
- Slurp in the session variables and return the serialized string
- */
- static function read($key)
- {
- $conn = ADODB_Session::_conn();
- $filter = ADODB_Session::filter();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return '';
- }
-
- //assert('$table');
-
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- global $ADODB_SESSION_SELECT_FIELDS;
- if (!isset($ADODB_SESSION_SELECT_FIELDS)) $ADODB_SESSION_SELECT_FIELDS = 'sessdata';
- $sql = "SELECT $ADODB_SESSION_SELECT_FIELDS FROM $table WHERE sesskey = $binary ".$conn->Param(0)." AND expiry >= " . $conn->sysTimeStamp;
-
- /* Lock code does not work as it needs to hold transaction within whole page, and we don't know if
- developer has committed elsewhere... :(
- */
- #if (ADODB_Session::Lock())
- # $rs = $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), sessdata);
- #else
- $rs = $conn->Execute($sql, array($key));
- //ADODB_Session::_dumprs($rs);
- if ($rs) {
- if ($rs->EOF) {
- $v = '';
- } else {
- $v = reset($rs->fields);
- $filter = array_reverse($filter);
- foreach ($filter as $f) {
- if (is_object($f)) {
- $v = $f->read($v, ADODB_Session::_sessionKey());
- }
- }
- $v = rawurldecode($v);
- }
-
- $rs->Close();
-
- ADODB_Session::_crc(strlen($v) . crc32($v));
- return $v;
- }
-
- return '';
- }
-
- /*!
- Write the serialized data to a database.
-
- If the data has not been modified since the last read(), we do not write.
- */
- static function write($key, $oval)
- {
- global $ADODB_SESSION_READONLY;
-
- if (!empty($ADODB_SESSION_READONLY)) return;
-
- $clob = ADODB_Session::clob();
- $conn = ADODB_Session::_conn();
- $crc = ADODB_Session::_crc();
- $debug = ADODB_Session::debug();
- $driver = ADODB_Session::driver();
- $expire_notify = ADODB_Session::expireNotify();
- $filter = ADODB_Session::filter();
- $lifetime = ADODB_Session::lifetime();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return false;
- }
- if ($debug) $conn->debug = 1;
- $sysTimeStamp = $conn->sysTimeStamp;
-
- //assert('$table');
-
- $expiry = $conn->OffsetDate($lifetime/(24*3600),$sysTimeStamp);
-
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- // crc32 optimization since adodb 2.1
- // now we only update expiry date, thx to sebastian thom in adodb 2.32
- if ($crc !== '00' && $crc !== false && $crc == (strlen($oval) . crc32($oval))) {
- if ($debug) {
- echo 'Session: Only updating date - crc32 not changed
';
- }
-
- $expirevar = '';
- if ($expire_notify) {
- $var = reset($expire_notify);
- global $$var;
- if (isset($$var)) {
- $expirevar = $$var;
- }
- }
-
-
- $sql = "UPDATE $table SET expiry = $expiry ,expireref=".$conn->Param('0').", modified = $sysTimeStamp WHERE $binary sesskey = ".$conn->Param('1')." AND expiry >= $sysTimeStamp";
- $rs = $conn->Execute($sql,array($expirevar,$key));
- return true;
- }
- $val = rawurlencode($oval);
- foreach ($filter as $f) {
- if (is_object($f)) {
- $val = $f->write($val, ADODB_Session::_sessionKey());
- }
- }
-
- $expireref = '';
- if ($expire_notify) {
- $var = reset($expire_notify);
- global $$var;
- if (isset($$var)) {
- $expireref = $$var;
- }
- }
-
- if (!$clob) { // no lobs, simply use replace()
- $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = ".$conn->Param(0),array($key));
- if ($rs) $rs->Close();
-
- if ($rs && reset($rs->fields) > 0) {
- $sql = "UPDATE $table SET expiry=$expiry, sessdata=".$conn->Param(0).", expireref= ".$conn->Param(1).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param(2);
-
- } else {
- $sql = "INSERT INTO $table (expiry, sessdata, expireref, sesskey, created, modified)
- VALUES ($expiry,".$conn->Param('0').", ". $conn->Param('1').", ".$conn->Param('2').", $sysTimeStamp, $sysTimeStamp)";
- }
-
-
- $rs = $conn->Execute($sql,array($val,$expireref,$key));
-
- } else {
- // what value shall we insert/update for lob row?
- if (strncmp($driver, 'oci8', 4) == 0) $lob_value = sprintf('empty_%s()', strtolower($clob));
- else $lob_value = 'null';
-
- $conn->StartTrans();
-
- $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = ".$conn->Param(0),array($key));
-
- if ($rs && reset($rs->fields) > 0) {
- $sql = "UPDATE $table SET expiry=$expiry, sessdata=$lob_value, expireref= ".$conn->Param(0).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param('1');
-
- } else {
- $sql = "INSERT INTO $table (expiry, sessdata, expireref, sesskey, created, modified)
- VALUES ($expiry,$lob_value, ". $conn->Param('0').", ".$conn->Param('1').", $sysTimeStamp, $sysTimeStamp)";
- }
-
- $rs = $conn->Execute($sql,array($expireref,$key));
-
- $qkey = $conn->qstr($key);
- $rs2 = $conn->UpdateBlob($table, 'sessdata', $val, " sesskey=$qkey", strtoupper($clob));
- if ($debug) echo "
",htmlspecialchars($oval), "
";
- $rs = @$conn->CompleteTrans();
-
-
- }
-
- if (!$rs) {
- ADOConnection::outp('Session Replace: ' . $conn->ErrorMsg() . '
', false);
- return false;
- } else {
- // bug in access driver (could be odbc?) means that info is not committed
- // properly unless select statement executed in Win2000
- if ($conn->databaseType == 'access') {
- $sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- if ($rs) {
- $rs->Close();
- }
- }
- }/*
- if (ADODB_Session::Lock()) {
- $conn->CommitTrans();
- }*/
- return $rs ? true : false;
- }
-
- /*!
- */
- static function destroy($key) {
- $conn = ADODB_Session::_conn();
- $table = ADODB_Session::table();
- $expire_notify = ADODB_Session::expireNotify();
-
- if (!$conn) {
- return false;
- }
- $debug = ADODB_Session::debug();
- if ($debug) $conn->debug = 1;
- //assert('$table');
-
- $qkey = $conn->quote($key);
- $binary = $conn->dataProvider === 'mysql' || $conn->dataProvider === 'pdo' ? '/*! BINARY */' : '';
-
- if ($expire_notify) {
- reset($expire_notify);
- $fn = next($expire_notify);
- $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
- $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- ADODB_Session::_dumprs($rs);
- $conn->SetFetchMode($savem);
- if (!$rs) {
- return false;
- }
- if (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- //assert('$ref');
- //assert('$key');
- $fn($ref, $key);
- }
- $rs->Close();
- }
-
- $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey";
- $rs = $conn->Execute($sql);
- if ($rs) {
- $rs->Close();
- }
-
- return $rs ? true : false;
- }
-
- /*!
- */
- static function gc($maxlifetime)
- {
- $conn = ADODB_Session::_conn();
- $debug = ADODB_Session::debug();
- $expire_notify = ADODB_Session::expireNotify();
- $optimize = ADODB_Session::optimize();
- $table = ADODB_Session::table();
-
- if (!$conn) {
- return false;
- }
-
-
- $debug = ADODB_Session::debug();
- if ($debug) {
- $conn->debug = 1;
- $COMMITNUM = 2;
- } else {
- $COMMITNUM = 20;
- }
-
- //assert('$table');
-
- $time = $conn->OffsetDate(-$maxlifetime/24/3600,$conn->sysTimeStamp);
- $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
-
- if ($expire_notify) {
- reset($expire_notify);
- $fn = next($expire_notify);
- } else {
- $fn = false;
- }
-
- $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
- $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time ORDER BY 2"; # add order by to prevent deadlock
- $rs = $conn->SelectLimit($sql,1000);
- if ($debug) ADODB_Session::_dumprs($rs);
- $conn->SetFetchMode($savem);
- if ($rs) {
- $tr = $conn->hasTransactions;
- if ($tr) $conn->BeginTrans();
- $keys = array();
- $ccnt = 0;
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- if ($fn) $fn($ref, $key);
- $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key));
- $rs->MoveNext();
- $ccnt += 1;
- if ($tr && $ccnt % $COMMITNUM == 0) {
- if ($debug) echo "Commit
\n";
- $conn->CommitTrans();
- $conn->BeginTrans();
- }
- }
- $rs->Close();
-
- if ($tr) $conn->CommitTrans();
- }
-
-
- // suggested by Cameron, "GaM3R"
- if ($optimize) {
- $driver = ADODB_Session::driver();
-
- if (preg_match('/mysql/i', $driver)) {
- $sql = "OPTIMIZE TABLE $table";
- }
- if (preg_match('/postgres/i', $driver)) {
- $sql = "VACUUM $table";
- }
- if (!empty($sql)) {
- $conn->Execute($sql);
- }
- }
-
-
- return true;
- }
-}
-
-ADODB_Session::_init();
-if (empty($ADODB_SESSION_READONLY))
- register_shutdown_function('session_write_close');
-
-// for backwards compatibility only
-function adodb_sess_open($save_path, $session_name, $persist = true) {
- return ADODB_Session::open($save_path, $session_name, $persist);
-}
-
-// for backwards compatibility only
-function adodb_sess_gc($t)
-{
- return ADODB_Session::gc($t);
-}
diff --git a/app/vendor/adodb/adodb-php/session/adodb-sessions.mysql.sql b/app/vendor/adodb/adodb-php/session/adodb-sessions.mysql.sql
deleted file mode 100644
index f90de4493..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-sessions.mysql.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- $CVSHeader$
-
-CREATE DATABASE /*! IF NOT EXISTS */ adodb_sessions;
-
-USE adodb_sessions;
-
-DROP TABLE /*! IF EXISTS */ sessions;
-
-CREATE TABLE /*! IF NOT EXISTS */ sessions (
- sesskey CHAR(32) /*! BINARY */ NOT NULL DEFAULT '',
- expiry INT(11) /*! UNSIGNED */ NOT NULL DEFAULT 0,
- expireref VARCHAR(64) DEFAULT '',
- data LONGTEXT DEFAULT '',
- PRIMARY KEY (sesskey),
- INDEX expiry (expiry)
-);
diff --git a/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.clob.sql b/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.clob.sql
deleted file mode 100644
index c5c4f2d07..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.clob.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- $CVSHeader$
-
-DROP TABLE adodb_sessions;
-
-CREATE TABLE sessions (
- sesskey CHAR(32) DEFAULT '' NOT NULL,
- expiry INT DEFAULT 0 NOT NULL,
- expireref VARCHAR(64) DEFAULT '',
- data CLOB DEFAULT '',
- PRIMARY KEY (sesskey)
-);
-
-CREATE INDEX ix_expiry ON sessions (expiry);
-
-QUIT;
diff --git a/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.sql b/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.sql
deleted file mode 100644
index 8fd5a3423..000000000
--- a/app/vendor/adodb/adodb-php/session/adodb-sessions.oracle.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- $CVSHeader$
-
-DROP TABLE adodb_sessions;
-
-CREATE TABLE sessions (
- sesskey CHAR(32) DEFAULT '' NOT NULL,
- expiry INT DEFAULT 0 NOT NULL,
- expireref VARCHAR(64) DEFAULT '',
- data VARCHAR(4000) DEFAULT '',
- PRIMARY KEY (sesskey),
- INDEX expiry (expiry)
-);
-
-CREATE INDEX ix_expiry ON sessions (expiry);
-
-QUIT;
diff --git a/app/vendor/adodb/adodb-php/session/crypt.inc.php b/app/vendor/adodb/adodb-php/session/crypt.inc.php
deleted file mode 100644
index 82121e397..000000000
--- a/app/vendor/adodb/adodb-php/session/crypt.inc.php
+++ /dev/null
@@ -1,172 +0,0 @@
-
- */
-
-class MD5Crypt{
- function keyED($txt,$encrypt_key)
- {
- $encrypt_key = md5($encrypt_key);
- $ctr=0;
- $tmp = "";
- for ($i=0;$ikeyED($tmp,$key));
- }
-
- function Decrypt($txt,$key)
- {
- $txt = $this->keyED(base64_decode($txt),$key);
- $tmp = "";
- for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96))
- {
- $randnumber = rand(48,120);
- }
-
- $randomPassword .= chr($randnumber);
- }
- return $randomPassword;
- }
-
-}
-
-
-class SHA1Crypt{
- function keyED($txt,$encrypt_key)
- {
-
- $encrypt_key = sha1($encrypt_key);
- $ctr=0;
- $tmp = "";
-
- for ($i=0;$ikeyED($tmp,$key));
-
- }
-
-
-
- function Decrypt($txt,$key)
- {
-
- $txt = $this->keyED(base64_decode($txt),$key);
-
- $tmp = "";
-
- for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96))
- {
- $randnumber = rand(48,120);
- }
-
- $randomPassword .= chr($randnumber);
- }
-
- return $randomPassword;
-
- }
-
-
-
-}
diff --git a/app/vendor/adodb/adodb-php/session/old/adodb-cryptsession.php b/app/vendor/adodb/adodb-php/session/old/adodb-cryptsession.php
deleted file mode 100644
index 6616de3d3..000000000
--- a/app/vendor/adodb/adodb-php/session/old/adodb-cryptsession.php
+++ /dev/null
@@ -1,331 +0,0 @@
-";
-
-
- Installation
- ============
- 1. Create a new database in MySQL or Access "sessions" like
-so:
-
- create table sessions (
- SESSKEY char(32) not null,
- EXPIRY int(11) unsigned not null,
- EXPIREREF varchar(64),
- DATA CLOB,
- primary key (sesskey)
- );
-
- 2. Then define the following parameters. You can either modify
- this file, or define them before this file is included:
-
- $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase';
- $ADODB_SESSION_CONNECT='server to connect to';
- $ADODB_SESSION_USER ='user';
- $ADODB_SESSION_PWD ='password';
- $ADODB_SESSION_DB ='database';
- $ADODB_SESSION_TBL = 'sessions'
-
- 3. Recommended is PHP 4.0.2 or later. There are documented
-session bugs in earlier versions of PHP.
-
-*/
-
-
-include_once('crypt.inc.php');
-
-if (!defined('_ADODB_LAYER')) {
- include (dirname(__FILE__).'/adodb.inc.php');
-}
-
- /* if database time and system time is difference is greater than this, then give warning */
- define('ADODB_SESSION_SYNCH_SECS',60);
-
-if (!defined('ADODB_SESSION')) {
-
- define('ADODB_SESSION',1);
-
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_CONN,
- $ADODB_SESS_LIFE,
- $ADODB_SESS_DEBUG,
- $ADODB_SESS_INSERT,
- $ADODB_SESSION_EXPIRE_NOTIFY,
- $ADODB_SESSION_TBL;
-
- //$ADODB_SESS_DEBUG = true;
-
- /* SET THE FOLLOWING PARAMETERS */
-if (empty($ADODB_SESSION_DRIVER)) {
- $ADODB_SESSION_DRIVER='mysql';
- $ADODB_SESSION_CONNECT='localhost';
- $ADODB_SESSION_USER ='root';
- $ADODB_SESSION_PWD ='';
- $ADODB_SESSION_DB ='xphplens_2';
-}
-
-if (empty($ADODB_SESSION_TBL)){
- $ADODB_SESSION_TBL = 'sessions';
-}
-
-if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
- $ADODB_SESSION_EXPIRE_NOTIFY = false;
-}
-
-function ADODB_Session_Key()
-{
-$ADODB_CRYPT_KEY = 'CRYPTED ADODB SESSIONS ROCK!';
-
- /* USE THIS FUNCTION TO CREATE THE ENCRYPTION KEY FOR CRYPTED SESSIONS */
- /* Crypt the used key, $ADODB_CRYPT_KEY as key and session_ID as SALT */
- return crypt($ADODB_CRYPT_KEY, session_ID());
-}
-
-$ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime');
-if ($ADODB_SESS_LIFE <= 1) {
- // bug in PHP 4.0.3 pl 1 -- how about other versions?
- //print "Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE
";
- $ADODB_SESS_LIFE=1440;
-}
-
-function adodb_sess_open($save_path, $session_name)
-{
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_CONN,
- $ADODB_SESS_DEBUG;
-
- $ADODB_SESS_INSERT = false;
-
- if (isset($ADODB_SESS_CONN)) return true;
-
- $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
- if (!empty($ADODB_SESS_DEBUG)) {
- $ADODB_SESS_CONN->debug = true;
- print" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ";
- }
- return $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
- $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
-
-}
-
-function adodb_sess_close()
-{
-global $ADODB_SESS_CONN;
-
- if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
- return true;
-}
-
-function adodb_sess_read($key)
-{
-$Crypt = new MD5Crypt;
-global $ADODB_SESS_CONN,$ADODB_SESS_INSERT,$ADODB_SESSION_TBL;
- $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
- if ($rs) {
- if ($rs->EOF) {
- $ADODB_SESS_INSERT = true;
- $v = '';
- } else {
- // Decrypt session data
- $v = rawurldecode($Crypt->Decrypt(reset($rs->fields), ADODB_Session_Key()));
- }
- $rs->Close();
- return $v;
- }
- else $ADODB_SESS_INSERT = true;
-
- return '';
-}
-
-function adodb_sess_write($key, $val)
-{
-$Crypt = new MD5Crypt;
- global $ADODB_SESS_INSERT,$ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- $expiry = time() + $ADODB_SESS_LIFE;
-
- // encrypt session data..
- $val = $Crypt->Encrypt(rawurlencode($val), ADODB_Session_Key());
-
- $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val);
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
- global $$var;
- $arr['expireref'] = $$var;
- }
- $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,
- $arr,
- 'sesskey',$autoQuote = true);
-
- if (!$rs) {
- ADOConnection::outp( '
--- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'',false);
- } else {
- // bug in access driver (could be odbc?) means that info is not committed
- // properly unless select statement executed in Win2000
-
- if ($ADODB_SESS_CONN->databaseType == 'access') $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
- }
- return isset($rs);
-}
-
-function adodb_sess_destroy($key)
-{
- global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $ADODB_SESS_CONN->CommitTrans();
- }
- } else {
- $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
- $rs = $ADODB_SESS_CONN->Execute($qry);
- }
- return $rs ? true : false;
-}
-
-
-function adodb_sess_gc($maxlifetime) {
- global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY,$ADODB_SESS_DEBUG;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $t = time();
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- //$del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $rs->Close();
-
- $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t");
- $ADODB_SESS_CONN->CommitTrans();
- }
- } else {
- $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time();
- $ADODB_SESS_CONN->Execute($qry);
- }
-
- // suggested by Cameron, "GaM3R"
- if (defined('ADODB_SESSION_OPTIMIZE'))
- {
- global $ADODB_SESSION_DRIVER;
-
- switch( $ADODB_SESSION_DRIVER ) {
- case 'mysql':
- case 'mysqlt':
- $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
- break;
- case 'postgresql':
- case 'postgresql7':
- $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL;
- break;
- }
- }
-
- if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
- else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL;
-
- $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
- if ($rs && !$rs->EOF) {
-
- $dbts = reset($rs->fields);
- $rs->Close();
- $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
- $t = time();
- if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) {
- $msg =
- __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)";
- error_log($msg);
- if ($ADODB_SESS_DEBUG) ADOConnection::outp("
--- $msg");
- }
- }
-
- return true;
-}
-
-session_set_save_handler(
- "adodb_sess_open",
- "adodb_sess_close",
- "adodb_sess_read",
- "adodb_sess_write",
- "adodb_sess_destroy",
- "adodb_sess_gc");
-}
-
-/* TEST SCRIPT -- UNCOMMENT */
-/*
-if (0) {
-
- session_start();
- session_register('AVAR');
- $_SESSION['AVAR'] += 1;
- print "
--- \$_SESSION['AVAR']={$_SESSION['AVAR']}";
-}
-*/
diff --git a/app/vendor/adodb/adodb-php/session/old/adodb-session-clob.php b/app/vendor/adodb/adodb-php/session/old/adodb-session-clob.php
deleted file mode 100644
index 864fdfd73..000000000
--- a/app/vendor/adodb/adodb-php/session/old/adodb-session-clob.php
+++ /dev/null
@@ -1,457 +0,0 @@
-";
-
-To force non-persistent connections, call adodb_session_open first before session_start():
-
- include('adodb.inc.php');
- include('adodb-session.php');
- adodb_session_open(false,false,false);
- session_start();
- session_register('AVAR');
- $_SESSION['AVAR'] += 1;
- print "
--- \$_SESSION['AVAR']={$_SESSION['AVAR']}";
-
-
- Installation
- ============
- 1. Create this table in your database (syntax might vary depending on your db):
-
- create table sessions (
- SESSKEY char(32) not null,
- EXPIRY int(11) unsigned not null,
- EXPIREREF varchar(64),
- DATA CLOB,
- primary key (sesskey)
- );
-
-
- 2. Then define the following parameters in this file:
- $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase';
- $ADODB_SESSION_CONNECT='server to connect to';
- $ADODB_SESSION_USER ='user';
- $ADODB_SESSION_PWD ='password';
- $ADODB_SESSION_DB ='database';
- $ADODB_SESSION_TBL = 'sessions'
- $ADODB_SESSION_USE_LOBS = false; (or, if you wanna use CLOBS (= 'CLOB') or ( = 'BLOB')
-
- 3. Recommended is PHP 4.1.0 or later. There are documented
- session bugs in earlier versions of PHP.
-
- 4. If you want to receive notifications when a session expires, then
- you can tag a session with an EXPIREREF, and before the session
- record is deleted, we can call a function that will pass the EXPIREREF
- as the first parameter, and the session key as the second parameter.
-
- To do this, define a notification function, say NotifyFn:
-
- function NotifyFn($expireref, $sesskey)
- {
- }
-
- Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY.
- This is an array with 2 elements, the first being the name of the variable
- you would like to store in the EXPIREREF field, and the 2nd is the
- notification function's name.
-
- In this example, we want to be notified when a user's session
- has expired, so we store the user id in the global variable $USERID,
- store this value in the EXPIREREF field:
-
- $ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn');
-
- Then when the NotifyFn is called, we are passed the $USERID as the first
- parameter, eg. NotifyFn($userid, $sesskey).
-*/
-
-if (!defined('_ADODB_LAYER')) {
- include (dirname(__FILE__).'/adodb.inc.php');
-}
-
-if (!defined('ADODB_SESSION')) {
-
- define('ADODB_SESSION',1);
-
- /* if database time and system time is difference is greater than this, then give warning */
- define('ADODB_SESSION_SYNCH_SECS',60);
-
-/****************************************************************************************\
- Global definitions
-\****************************************************************************************/
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_CONN,
- $ADODB_SESS_LIFE,
- $ADODB_SESS_DEBUG,
- $ADODB_SESSION_EXPIRE_NOTIFY,
- $ADODB_SESSION_CRC,
- $ADODB_SESSION_USE_LOBS,
- $ADODB_SESSION_TBL;
-
- if (!isset($ADODB_SESSION_USE_LOBS)) $ADODB_SESSION_USE_LOBS = 'CLOB';
-
- $ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime');
- if ($ADODB_SESS_LIFE <= 1) {
- // bug in PHP 4.0.3 pl 1 -- how about other versions?
- //print "Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE
";
- $ADODB_SESS_LIFE=1440;
- }
- $ADODB_SESSION_CRC = false;
- //$ADODB_SESS_DEBUG = true;
-
- //////////////////////////////////
- /* SET THE FOLLOWING PARAMETERS */
- //////////////////////////////////
-
- if (empty($ADODB_SESSION_DRIVER)) {
- $ADODB_SESSION_DRIVER='mysql';
- $ADODB_SESSION_CONNECT='localhost';
- $ADODB_SESSION_USER ='root';
- $ADODB_SESSION_PWD ='';
- $ADODB_SESSION_DB ='xphplens_2';
- }
-
- if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
- $ADODB_SESSION_EXPIRE_NOTIFY = false;
- }
- // Made table name configurable - by David Johnson djohnson@inpro.net
- if (empty($ADODB_SESSION_TBL)){
- $ADODB_SESSION_TBL = 'sessions';
- }
-
-
- // defaulting $ADODB_SESSION_USE_LOBS
- if (!isset($ADODB_SESSION_USE_LOBS) || empty($ADODB_SESSION_USE_LOBS)) {
- $ADODB_SESSION_USE_LOBS = false;
- }
-
- /*
- $ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER;
- $ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT;
- $ADODB_SESS['user'] = $ADODB_SESSION_USER;
- $ADODB_SESS['pwd'] = $ADODB_SESSION_PWD;
- $ADODB_SESS['db'] = $ADODB_SESSION_DB;
- $ADODB_SESS['life'] = $ADODB_SESS_LIFE;
- $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG;
-
- $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG;
- $ADODB_SESS['table'] = $ADODB_SESS_TBL;
- */
-
-/****************************************************************************************\
- Create the connection to the database.
-
- If $ADODB_SESS_CONN already exists, reuse that connection
-\****************************************************************************************/
-function adodb_sess_open($save_path, $session_name,$persist=true)
-{
-GLOBAL $ADODB_SESS_CONN;
- if (isset($ADODB_SESS_CONN)) return true;
-
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_DEBUG;
-
- // cannot use & below - do not know why...
- $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
- if (!empty($ADODB_SESS_DEBUG)) {
- $ADODB_SESS_CONN->debug = true;
- ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ");
- }
- if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
- $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
- else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT,
- $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
-
- if (!$ok) ADOConnection::outp( "
--- Session: connection failed",false);
-}
-
-/****************************************************************************************\
- Close the connection
-\****************************************************************************************/
-function adodb_sess_close()
-{
-global $ADODB_SESS_CONN;
-
- if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
- return true;
-}
-
-/****************************************************************************************\
- Slurp in the session variables and return the serialized string
-\****************************************************************************************/
-function adodb_sess_read($key)
-{
-global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC;
-
- $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
- if ($rs) {
- if ($rs->EOF) {
- $v = '';
- } else
- $v = rawurldecode(reset($rs->fields));
-
- $rs->Close();
-
- // new optimization adodb 2.1
- $ADODB_SESSION_CRC = strlen($v).crc32($v);
-
- return $v;
- }
-
- return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com
-}
-
-/****************************************************************************************\
- Write the serialized data to a database.
-
- If the data has not been modified since adodb_sess_read(), we do not write.
-\****************************************************************************************/
-function adodb_sess_write($key, $val)
-{
- global
- $ADODB_SESS_CONN,
- $ADODB_SESS_LIFE,
- $ADODB_SESSION_TBL,
- $ADODB_SESS_DEBUG,
- $ADODB_SESSION_CRC,
- $ADODB_SESSION_EXPIRE_NOTIFY,
- $ADODB_SESSION_DRIVER, // added
- $ADODB_SESSION_USE_LOBS; // added
-
- $expiry = time() + $ADODB_SESS_LIFE;
-
- // crc32 optimization since adodb 2.1
- // now we only update expiry date, thx to sebastian thom in adodb 2.32
- if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) {
- if ($ADODB_SESS_DEBUG) echo "
--- Session: Only updating date - crc32 not changed";
- $qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time();
- $rs = $ADODB_SESS_CONN->Execute($qry);
- return true;
- }
- $val = rawurlencode($val);
-
- $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val);
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
- global $$var;
- $arr['expireref'] = $$var;
- }
-
-
- if ($ADODB_SESSION_USE_LOBS === false) { // no lobs, simply use replace()
- $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr, 'sesskey',$autoQuote = true);
- if (!$rs) {
- $err = $ADODB_SESS_CONN->ErrorMsg();
- }
- } else {
- // what value shall we insert/update for lob row?
- switch ($ADODB_SESSION_DRIVER) {
- // empty_clob or empty_lob for oracle dbs
- case "oracle":
- case "oci8":
- case "oci8po":
- case "oci805":
- $lob_value = sprintf("empty_%s()", strtolower($ADODB_SESSION_USE_LOBS));
- break;
-
- // null for all other
- default:
- $lob_value = "null";
- break;
- }
-
- // do we insert or update? => as for sesskey
- $res = $ADODB_SESS_CONN->Execute("select count(*) as cnt from $ADODB_SESSION_TBL where sesskey = '$key'");
- if ($res && reset($res->fields) > 0) {
- $qry = sprintf("update %s set expiry = %d, data = %s where sesskey = '%s'", $ADODB_SESSION_TBL, $expiry, $lob_value, $key);
- } else {
- // insert
- $qry = sprintf("insert into %s (sesskey, expiry, data) values ('%s', %d, %s)", $ADODB_SESSION_TBL, $key, $expiry, $lob_value);
- }
-
- $err = "";
- $rs1 = $ADODB_SESS_CONN->Execute($qry);
- if (!$rs1) {
- $err .= $ADODB_SESS_CONN->ErrorMsg()."\n";
- }
- $rs2 = $ADODB_SESS_CONN->UpdateBlob($ADODB_SESSION_TBL, 'data', $val, "sesskey='$key'", strtoupper($ADODB_SESSION_USE_LOBS));
- if (!$rs2) {
- $err .= $ADODB_SESS_CONN->ErrorMsg()."\n";
- }
- $rs = ($rs1 && $rs2) ? true : false;
- }
-
- if (!$rs) {
- ADOConnection::outp( '
--- Session Replace: '.nl2br($err).'',false);
- } else {
- // bug in access driver (could be odbc?) means that info is not committed
- // properly unless select statement executed in Win2000
- if ($ADODB_SESS_CONN->databaseType == 'access')
- $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
- }
- return !empty($rs);
-}
-
-function adodb_sess_destroy($key)
-{
- global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $ADODB_SESS_CONN->CommitTrans();
- }
- } else {
- $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
- $rs = $ADODB_SESS_CONN->Execute($qry);
- }
- return $rs ? true : false;
-}
-
-function adodb_sess_gc($maxlifetime)
-{
- global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $t = time();
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $rs->Close();
-
- //$ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t");
- $ADODB_SESS_CONN->CommitTrans();
-
- }
- } else {
- $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time());
-
- if ($ADODB_SESS_DEBUG) ADOConnection::outp("
--- Garbage Collection: $qry");
- }
- // suggested by Cameron, "GaM3R"
- if (defined('ADODB_SESSION_OPTIMIZE')) {
- global $ADODB_SESSION_DRIVER;
-
- switch( $ADODB_SESSION_DRIVER ) {
- case 'mysql':
- case 'mysqlt':
- $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
- break;
- case 'postgresql':
- case 'postgresql7':
- $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL;
- break;
- }
- if (!empty($opt_qry)) {
- $ADODB_SESS_CONN->Execute($opt_qry);
- }
- }
- if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
- else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL;
-
- $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
- if ($rs && !$rs->EOF) {
-
- $dbts = reset($rs->fields);
- $rs->Close();
- $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
- $t = time();
- if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) {
- $msg =
- __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)";
- error_log($msg);
- if ($ADODB_SESS_DEBUG) ADOConnection::outp("
--- $msg");
- }
- }
-
- return true;
-}
-
-session_set_save_handler(
- "adodb_sess_open",
- "adodb_sess_close",
- "adodb_sess_read",
- "adodb_sess_write",
- "adodb_sess_destroy",
- "adodb_sess_gc");
-}
-
-/* TEST SCRIPT -- UNCOMMENT */
-
-if (0) {
-
- session_start();
- session_register('AVAR');
- $_SESSION['AVAR'] += 1;
- ADOConnection::outp( "
--- \$_SESSION['AVAR']={$_SESSION['AVAR']}",false);
-}
diff --git a/app/vendor/adodb/adodb-php/session/old/adodb-session.php b/app/vendor/adodb/adodb-php/session/old/adodb-session.php
deleted file mode 100644
index 5fd43abc0..000000000
--- a/app/vendor/adodb/adodb-php/session/old/adodb-session.php
+++ /dev/null
@@ -1,449 +0,0 @@
-";
-
-To force non-persistent connections, call adodb_session_open first before session_start():
-
- include('adodb.inc.php');
- include('adodb-session.php');
- adodb_sess_open(false,false,false);
- session_start();
- session_register('AVAR');
- $_SESSION['AVAR'] += 1;
- print "
--- \$_SESSION['AVAR']={$_SESSION['AVAR']}";
-
-
- Installation
- ============
- 1. Create this table in your database (syntax might vary depending on your db):
-
- create table sessions (
- SESSKEY char(32) not null,
- EXPIRY int(11) unsigned not null,
- EXPIREREF varchar(64),
- DATA text not null,
- primary key (sesskey)
- );
-
- For oracle:
- create table sessions (
- SESSKEY char(32) not null,
- EXPIRY DECIMAL(16) not null,
- EXPIREREF varchar(64),
- DATA varchar(4000) not null,
- primary key (sesskey)
- );
-
-
- 2. Then define the following parameters. You can either modify
- this file, or define them before this file is included:
-
- $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase';
- $ADODB_SESSION_CONNECT='server to connect to';
- $ADODB_SESSION_USER ='user';
- $ADODB_SESSION_PWD ='password';
- $ADODB_SESSION_DB ='database';
- $ADODB_SESSION_TBL = 'sessions'
-
- 3. Recommended is PHP 4.1.0 or later. There are documented
- session bugs in earlier versions of PHP.
-
- 4. If you want to receive notifications when a session expires, then
- you can tag a session with an EXPIREREF, and before the session
- record is deleted, we can call a function that will pass the EXPIREREF
- as the first parameter, and the session key as the second parameter.
-
- To do this, define a notification function, say NotifyFn:
-
- function NotifyFn($expireref, $sesskey)
- {
- }
-
- Then you need to define a global variable $ADODB_SESSION_EXPIRE_NOTIFY.
- This is an array with 2 elements, the first being the name of the variable
- you would like to store in the EXPIREREF field, and the 2nd is the
- notification function's name.
-
- In this example, we want to be notified when a user's session
- has expired, so we store the user id in the global variable $USERID,
- store this value in the EXPIREREF field:
-
- $ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn');
-
- Then when the NotifyFn is called, we are passed the $USERID as the first
- parameter, eg. NotifyFn($userid, $sesskey).
-*/
-
-if (!defined('_ADODB_LAYER')) {
- include (dirname(__FILE__).'/adodb.inc.php');
-}
-
-if (!defined('ADODB_SESSION')) {
-
- define('ADODB_SESSION',1);
-
- /* if database time and system time is difference is greater than this, then give warning */
- define('ADODB_SESSION_SYNCH_SECS',60);
-
- /*
- Thanks Joe Li. See PHPLens Issue No: 11487&x=1
-*/
-function adodb_session_regenerate_id()
-{
- $conn = ADODB_Session::_conn();
- if (!$conn) return false;
-
- $old_id = session_id();
- if (function_exists('session_regenerate_id')) {
- session_regenerate_id();
- } else {
- session_id(md5(uniqid(rand(), true)));
- $ck = session_get_cookie_params();
- setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']);
- //@session_start();
- }
- $new_id = session_id();
- $ok = $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id));
-
- /* it is possible that the update statement fails due to a collision */
- if (!$ok) {
- session_id($old_id);
- if (empty($ck)) $ck = session_get_cookie_params();
- setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']);
- return false;
- }
-
- return true;
-}
-
-/****************************************************************************************\
- Global definitions
-\****************************************************************************************/
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_CONN,
- $ADODB_SESS_LIFE,
- $ADODB_SESS_DEBUG,
- $ADODB_SESSION_EXPIRE_NOTIFY,
- $ADODB_SESSION_CRC,
- $ADODB_SESSION_TBL;
-
-
- $ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime');
- if ($ADODB_SESS_LIFE <= 1) {
- // bug in PHP 4.0.3 pl 1 -- how about other versions?
- //print "Session Error: PHP.INI setting session.gc_maxlifetimenot set: $ADODB_SESS_LIFE
";
- $ADODB_SESS_LIFE=1440;
- }
- $ADODB_SESSION_CRC = false;
- //$ADODB_SESS_DEBUG = true;
-
- //////////////////////////////////
- /* SET THE FOLLOWING PARAMETERS */
- //////////////////////////////////
-
- if (empty($ADODB_SESSION_DRIVER)) {
- $ADODB_SESSION_DRIVER='mysql';
- $ADODB_SESSION_CONNECT='localhost';
- $ADODB_SESSION_USER ='root';
- $ADODB_SESSION_PWD ='';
- $ADODB_SESSION_DB ='xphplens_2';
- }
-
- if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
- $ADODB_SESSION_EXPIRE_NOTIFY = false;
- }
- // Made table name configurable - by David Johnson djohnson@inpro.net
- if (empty($ADODB_SESSION_TBL)){
- $ADODB_SESSION_TBL = 'sessions';
- }
-
- /*
- $ADODB_SESS['driver'] = $ADODB_SESSION_DRIVER;
- $ADODB_SESS['connect'] = $ADODB_SESSION_CONNECT;
- $ADODB_SESS['user'] = $ADODB_SESSION_USER;
- $ADODB_SESS['pwd'] = $ADODB_SESSION_PWD;
- $ADODB_SESS['db'] = $ADODB_SESSION_DB;
- $ADODB_SESS['life'] = $ADODB_SESS_LIFE;
- $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG;
-
- $ADODB_SESS['debug'] = $ADODB_SESS_DEBUG;
- $ADODB_SESS['table'] = $ADODB_SESS_TBL;
- */
-
-/****************************************************************************************\
- Create the connection to the database.
-
- If $ADODB_SESS_CONN already exists, reuse that connection
-\****************************************************************************************/
-function adodb_sess_open($save_path, $session_name,$persist=true)
-{
-GLOBAL $ADODB_SESS_CONN;
- if (isset($ADODB_SESS_CONN)) return true;
-
-GLOBAL $ADODB_SESSION_CONNECT,
- $ADODB_SESSION_DRIVER,
- $ADODB_SESSION_USER,
- $ADODB_SESSION_PWD,
- $ADODB_SESSION_DB,
- $ADODB_SESS_DEBUG;
-
- // cannot use & below - do not know why...
- $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
- if (!empty($ADODB_SESS_DEBUG)) {
- $ADODB_SESS_CONN->debug = true;
- ADOConnection::outp( " conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ");
- }
- if ($persist) $ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
- $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
- else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT,
- $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
-
- if (!$ok) ADOConnection::outp( "
--- Session: connection failed",false);
-}
-
-/****************************************************************************************\
- Close the connection
-\****************************************************************************************/
-function adodb_sess_close()
-{
-global $ADODB_SESS_CONN;
-
- if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
- return true;
-}
-
-/****************************************************************************************\
- Slurp in the session variables and return the serialized string
-\****************************************************************************************/
-function adodb_sess_read($key)
-{
-global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC;
-
- $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
- if ($rs) {
- if ($rs->EOF) {
- $v = '';
- } else
- $v = rawurldecode(reset($rs->fields));
-
- $rs->Close();
-
- // new optimization adodb 2.1
- $ADODB_SESSION_CRC = strlen($v).crc32($v);
-
- return $v;
- }
-
- return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com
-}
-
-/****************************************************************************************\
- Write the serialized data to a database.
-
- If the data has not been modified since adodb_sess_read(), we do not write.
-\****************************************************************************************/
-function adodb_sess_write($key, $val)
-{
- global
- $ADODB_SESS_CONN,
- $ADODB_SESS_LIFE,
- $ADODB_SESSION_TBL,
- $ADODB_SESS_DEBUG,
- $ADODB_SESSION_CRC,
- $ADODB_SESSION_EXPIRE_NOTIFY;
-
- $expiry = time() + $ADODB_SESS_LIFE;
-
- // crc32 optimization since adodb 2.1
- // now we only update expiry date, thx to sebastian thom in adodb 2.32
- if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) {
- if ($ADODB_SESS_DEBUG) echo "
--- Session: Only updating date - crc32 not changed";
- $qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time();
- $rs = $ADODB_SESS_CONN->Execute($qry);
- return true;
- }
- $val = rawurlencode($val);
-
- $arr = array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val);
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
- global $$var;
- $arr['expireref'] = $$var;
- }
- $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr,
- 'sesskey',$autoQuote = true);
-
- if (!$rs) {
- ADOConnection::outp( '
--- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'',false);
- } else {
- // bug in access driver (could be odbc?) means that info is not committed
- // properly unless select statement executed in Win2000
- if ($ADODB_SESS_CONN->databaseType == 'access')
- $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
- }
- return !empty($rs);
-}
-
-function adodb_sess_destroy($key)
-{
- global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $ADODB_SESS_CONN->CommitTrans();
- }
- } else {
- $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
- $rs = $ADODB_SESS_CONN->Execute($qry);
- }
- return $rs ? true : false;
-}
-
-function adodb_sess_gc($maxlifetime)
-{
- global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
-
- if ($ADODB_SESSION_EXPIRE_NOTIFY) {
- reset($ADODB_SESSION_EXPIRE_NOTIFY);
- $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
- $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
- $t = time();
- $rs = $ADODB_SESS_CONN->Execute("SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
- $ADODB_SESS_CONN->SetFetchMode($savem);
- if ($rs) {
- $ADODB_SESS_CONN->BeginTrans();
- while (!$rs->EOF) {
- $ref = $rs->fields[0];
- $key = $rs->fields[1];
- $fn($ref,$key);
- $del = $ADODB_SESS_CONN->Execute("DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
- $rs->MoveNext();
- }
- $rs->Close();
-
- $ADODB_SESS_CONN->CommitTrans();
-
- }
- } else {
- $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time();
- $ADODB_SESS_CONN->Execute($qry);
-
- if ($ADODB_SESS_DEBUG) ADOConnection::outp("
--- Garbage Collection: $qry");
- }
- // suggested by Cameron, "GaM3R"
- if (defined('ADODB_SESSION_OPTIMIZE')) {
- global $ADODB_SESSION_DRIVER;
-
- switch( $ADODB_SESSION_DRIVER ) {
- case 'mysql':
- case 'mysqlt':
- $opt_qry = 'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
- break;
- case 'postgresql':
- case 'postgresql7':
- $opt_qry = 'VACUUM '.$ADODB_SESSION_TBL;
- break;
- }
- if (!empty($opt_qry)) {
- $ADODB_SESS_CONN->Execute($opt_qry);
- }
- }
- if ($ADODB_SESS_CONN->dataProvider === 'oci8') $sql = 'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
- else $sql = 'select '.$ADODB_SESS_CONN->sysTimeStamp.' from '. $ADODB_SESSION_TBL;
-
- $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
- if ($rs && !$rs->EOF) {
-
- $dbts = reset($rs->fields);
- $rs->Close();
- $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
- $t = time();
-
- if (abs($dbt - $t) >= ADODB_SESSION_SYNCH_SECS) {
-
- $msg =
- __FILE__.": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600)." hrs)";
- error_log($msg);
- if ($ADODB_SESS_DEBUG) ADOConnection::outp("
--- $msg");
- }
- }
-
- return true;
-}
-
-session_set_save_handler(
- "adodb_sess_open",
- "adodb_sess_close",
- "adodb_sess_read",
- "adodb_sess_write",
- "adodb_sess_destroy",
- "adodb_sess_gc");
-}
-
-/* TEST SCRIPT -- UNCOMMENT */
-
-if (0) {
-
- session_start();
- session_register('AVAR');
- $_SESSION['AVAR'] += 1;
- ADOConnection::outp( "
--- \$_SESSION['AVAR']={$_SESSION['AVAR']}",false);
-}
diff --git a/app/vendor/adodb/adodb-php/session/old/crypt.inc.php b/app/vendor/adodb/adodb-php/session/old/crypt.inc.php
deleted file mode 100644
index 089e24a0a..000000000
--- a/app/vendor/adodb/adodb-php/session/old/crypt.inc.php
+++ /dev/null
@@ -1,83 +0,0 @@
-
- */
-
-class MD5Crypt{
- function keyED($txt,$encrypt_key)
- {
- $encrypt_key = md5($encrypt_key);
- $ctr=0;
- $tmp = "";
- for ($i=0;$ikeyED($tmp,$key));
- }
-
- function Decrypt($txt,$key)
- {
- $txt = $this->keyED(base64_decode($txt),$key);
- $tmp = "";
- for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96))
- {
- $randnumber = rand(48,120);
- }
-
- $randomPassword .= chr($randnumber);
- }
- return $randomPassword;
- }
-
-}
diff --git a/app/vendor/adodb/adodb-php/session/session_schema.xml b/app/vendor/adodb/adodb-php/session/session_schema.xml
deleted file mode 100644
index c1f75316d..000000000
--- a/app/vendor/adodb/adodb-php/session/session_schema.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- table for ADOdb session-management
-
-
- session key
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/vendor/adodb/adodb-php/session/session_schema2.xml b/app/vendor/adodb/adodb-php/session/session_schema2.xml
deleted file mode 100644
index a8a1b2294..000000000
--- a/app/vendor/adodb/adodb-php/session/session_schema2.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- Table for ADOdb session management
-
- Session key to identify a user's browser session.
-
-
-
-
- Slightly redundant as it can be dynamically calculated by NOW() and MODIFIED field,
- but it enables forcing a fixed timeout for specific sessions.
-
-
-
-
- New session creation Timestamp.
-
-
-
- Timestamp which is usually updated when the user interacts with a site, to extend the expire time.
-
-
-
- Usually a User Id or unique username of your application.
- The name EXPIREREF is a bit weird, it may be better to call it USERREF?
-
-
-
- PHP's serialized session data or encrypted serialized session data.
-
-
-
-
diff --git a/app/vendor/adodb/adodb-php/toexport.inc.php b/app/vendor/adodb/adodb-php/toexport.inc.php
deleted file mode 100644
index 66bbf5424..000000000
--- a/app/vendor/adodb/adodb-php/toexport.inc.php
+++ /dev/null
@@ -1,144 +0,0 @@
-FieldTypesArray();
- reset($fieldTypes);
- $i = 0;
- $elements = array();
- foreach ($fieldTypes as $o) {
-
- $v = ($o) ? $o->name : 'Field'.($i++);
- if ($escquote) $v = str_replace($quote,$escquotequote,$v);
- $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
- $elements[] = $v;
-
- }
- $s .= implode($sep, $elements).$NEWLINE;
- }
- $hasNumIndex = isset($rs->fields[0]);
-
- $line = 0;
- $max = $rs->FieldCount();
-
- while (!$rs->EOF) {
- $elements = array();
- $i = 0;
-
- if ($hasNumIndex) {
- for ($j=0; $j < $max; $j++) {
- $v = $rs->fields[$j];
- if (!is_object($v)) $v = trim($v);
- else $v = 'Object';
- if ($escquote) $v = str_replace($quote,$escquotequote,$v);
- $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
-
- if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote";
- else $elements[] = $v;
- }
- } else { // ASSOCIATIVE ARRAY
- foreach($rs->fields as $v) {
- if ($escquote) $v = str_replace($quote,$escquotequote,trim($v));
- $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
-
- if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote";
- else $elements[] = $v;
- }
- }
- $s .= implode($sep, $elements).$NEWLINE;
- $rs->MoveNext();
- $line += 1;
- if ($fp && ($line % $BUFLINES) == 0) {
- if ($fp === true) echo $s;
- else fwrite($fp,$s);
- $s = '';
- }
- }
-
- if ($fp) {
- if ($fp === true) echo $s;
- else fwrite($fp,$s);
- $s = '';
- }
-
- return $s;
-}
diff --git a/app/vendor/adodb/adodb-php/tohtml.inc.php b/app/vendor/adodb/adodb-php/tohtml.inc.php
deleted file mode 100644
index e92c8b44a..000000000
--- a/app/vendor/adodb/adodb-php/tohtml.inc.php
+++ /dev/null
@@ -1,208 +0,0 @@
- $gSQLBlockRows. This is because
- * web browsers normally require the whole table to be downloaded
- * before it can be rendered, so we break the output into several
- * smaller, faster rendering tables.
- *
- * This file is part of ADOdb, a Database Abstraction Layer library for PHP.
- *
- * @package ADOdb
- * @link https://adodb.org Project's web site and documentation
- * @link https://github.com/ADOdb/ADOdb Source code and issue tracker
- *
- * The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
- * and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
- * any later version. This means you can use it in proprietary products.
- * See the LICENSE.md file distributed with this source code for details.
- * @license BSD-3-Clause
- * @license LGPL-2.1-or-later
- *
- * @copyright 2000-2013 John Lim
- * @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
- */
-
-// specific code for tohtml
-GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND;
-
-$ADODB_ROUND=4; // rounding
-$gSQLMaxRows = 1000; // max no of rows to download
-$gSQLBlockRows=20; // max no of rows per table block
-
-// $rs: the recordset
-// $ztabhtml: the table tag attributes (optional)
-// $zheaderarray: contains the replacement strings for the headers (optional)
-//
-// USAGE:
-// include('adodb.inc.php');
-// $db = ADONewConnection('mysql');
-// $db->Connect('mysql','userid','password','database');
-// $rs = $db->Execute('select col1,col2,col3 from table');
-// rs2html($rs, 'BORDER=2', array('Title1', 'Title2', 'Title3'));
-// $rs->Close();
-//
-// RETURNS: number of rows displayed
-
-
-function rs2html(&$rs,$ztabhtml=false,$zheaderarray=false,$htmlspecialchars=true,$echo = true)
-{
-$s ='';$rows=0;$docnt = false;
-GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND;
-
- if (!$rs) {
- printf(ADODB_BAD_RS,'rs2html');
- return false;
- }
-
- if (! $ztabhtml) $ztabhtml = "BORDER='1' WIDTH='98%'";
- //else $docnt = true;
- $typearr = array();
- $ncols = $rs->FieldCount();
- $hdr = "\n\n";
- for ($i=0; $i < $ncols; $i++) {
- $field = $rs->FetchField($i);
- if ($field) {
- if ($zheaderarray) $fname = $zheaderarray[$i];
- else $fname = htmlspecialchars($field->name);
- $typearr[$i] = $rs->MetaType($field->type,$field->max_length);
- //print " $field->name $field->type $typearr[$i] ";
- } else {
- $fname = 'Field '.($i+1);
- $typearr[$i] = 'C';
- }
- if (strlen($fname)==0) $fname = ' ';
- $hdr .= "| $fname | ";
- }
- $hdr .= "\n
";
- if ($echo) print $hdr."\n\n";
- else $html = $hdr;
-
- // smart algorithm - handles ADODB_FETCH_MODE's correctly by probing...
- $numoffset = isset($rs->fields[0]) ||isset($rs->fields[1]) || isset($rs->fields[2]);
- while (!$rs->EOF) {
-
- $s .= "\n";
-
- for ($i=0; $i < $ncols; $i++) {
- if ($i===0) $v=($numoffset) ? $rs->fields[0] : reset($rs->fields);
- else $v = ($numoffset) ? $rs->fields[$i] : next($rs->fields);
-
- $type = $typearr[$i];
- switch($type) {
- case 'D':
- if (strpos($v,':') !== false);
- else {
- if (empty($v)) {
- $s .= "| | \n";
- } else {
- $s .= " ".$rs->UserDate($v,"D d, M Y") ." | \n";
- }
- break;
- }
- case 'T':
- if (empty($v)) $s .= " | \n";
- else $s .= " ".$rs->UserTimeStamp($v,"D d, M Y, H:i:s") ." | \n";
- break;
-
- case 'N':
- if (abs(abs($v) - round($v,0)) < 0.00000001)
- $v = round($v);
- else
- $v = round($v,$ADODB_ROUND);
- case 'I':
- $vv = stripslashes((trim($v)));
- if (strlen($vv) == 0) $vv .= ' ';
- $s .= " ".$vv ." | \n";
-
- break;
- /*
- case 'B':
- if (substr($v,8,2)=="BM" ) $v = substr($v,8);
- $mtime = substr(str_replace(' ','_',microtime()),2);
- $tmpname = "tmp/".uniqid($mtime).getmypid();
- $fd = @fopen($tmpname,'a');
- @ftruncate($fd,0);
- @fwrite($fd,$v);
- @fclose($fd);
- if (!function_exists ("mime_content_type")) {
- function mime_content_type ($file) {
- return exec("file -bi ".escapeshellarg($file));
- }
- }
- $t = mime_content_type($tmpname);
- $s .= (substr($t,0,5)=="image") ? "  | \\n" : " $t | \\n";
- break;
- */
-
- default:
- if ($htmlspecialchars) $v = htmlspecialchars(trim($v));
- $v = trim($v);
- if (strlen($v) == 0) $v = ' ';
- $s .= " ". str_replace("\n",' ',stripslashes($v)) ." | \n";
-
- }
- } // for
- $s .= "
\n\n";
-
- $rows += 1;
- if ($rows >= $gSQLMaxRows) {
- $rows = "Truncated at $gSQLMaxRows
";
- break;
- } // switch
-
- $rs->MoveNext();
-
- // additional EOF check to prevent a widow header
- if (!$rs->EOF && $rows % $gSQLBlockRows == 0) {
-
- //if (connection_aborted()) break;// not needed as PHP aborts script, unlike ASP
- if ($echo) print $s . "
\n\n";
- else $html .= $s ."\n\n";
- $s = $hdr;
- }
- } // while
-
- if ($echo) print $s."\n\n";
- else $html .= $s."\n\n";
-
- if ($docnt) if ($echo) print "".$rows." Rows
";
-
- return ($echo) ? $rows : $html;
- }
-
-// pass in 2 dimensional array
-function arr2html(&$arr,$ztabhtml='',$zheaderarray='')
-{
- if (!$ztabhtml) $ztabhtml = 'BORDER=1';
-
- $s = "";//';print_r($arr);
-
- if ($zheaderarray) {
- $s .= '';
- for ($i=0; $i\n";
- } else $s .= " | | \n";
- $s .= "\n
\n";
- }
- $s .= '
';
- print $s;
-}
diff --git a/app/vendor/adodb/adodb-php/xmlschema.dtd b/app/vendor/adodb/adodb-php/xmlschema.dtd
deleted file mode 100644
index 2d0b579d3..000000000
--- a/app/vendor/adodb/adodb-php/xmlschema.dtd
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-] >
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xmlschema03.dtd b/app/vendor/adodb/adodb-php/xmlschema03.dtd
deleted file mode 100644
index 351ea44b1..000000000
--- a/app/vendor/adodb/adodb-php/xmlschema03.dtd
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.2.xsl b/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.2.xsl
deleted file mode 100644
index 5b2e3cecd..000000000
--- a/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.2.xsl
+++ /dev/null
@@ -1,205 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
- 0.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.3.xsl b/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.3.xsl
deleted file mode 100644
index 3202dce43..000000000
--- a/app/vendor/adodb/adodb-php/xsl/convert-0.1-0.3.xsl
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
- 0.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.1.xsl b/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.1.xsl
deleted file mode 100644
index 6398e3e55..000000000
--- a/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.1.xsl
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
- 0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.3.xsl b/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.3.xsl
deleted file mode 100644
index 9e1f2ae34..000000000
--- a/app/vendor/adodb/adodb-php/xsl/convert-0.2-0.3.xsl
+++ /dev/null
@@ -1,281 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
- 0.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xsl/remove-0.2.xsl b/app/vendor/adodb/adodb-php/xsl/remove-0.2.xsl
deleted file mode 100644
index c82c3ad88..000000000
--- a/app/vendor/adodb/adodb-php/xsl/remove-0.2.xsl
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
-Uninstallation Schema
-
-
-
- 0.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/adodb/adodb-php/xsl/remove-0.3.xsl b/app/vendor/adodb/adodb-php/xsl/remove-0.3.xsl
deleted file mode 100644
index 4b1cd02ee..000000000
--- a/app/vendor/adodb/adodb-php/xsl/remove-0.3.xsl
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-ADODB XMLSchema
-http://adodb-xmlschema.sourceforge.net
-
-
-
-Uninstallation Schema
-
-
-
- 0.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/vendor/composer/autoload_files.php b/app/vendor/composer/autoload_files.php
index d08e7f4bf..cbb694e4c 100644
--- a/app/vendor/composer/autoload_files.php
+++ b/app/vendor/composer/autoload_files.php
@@ -6,17 +6,16 @@
$baseDir = dirname($vendorDir);
return array(
+ '9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
- '9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
- '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
'23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php',
- '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
- 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
+ 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
'ad155f8f1cf0d418fe49e248db8c661b' => $vendorDir . '/react/promise/src/functions_include.php',
'07d7f1a47144818725fd8d91a907ac57' => $vendorDir . '/laminas/laminas-diactoros/src/functions/create_uploaded_file.php',
@@ -42,8 +41,8 @@
'90236b492da7ca2983a2ad6e33e4152e' => $vendorDir . '/cakephp/cakephp/src/I18n/functions.php',
'2cb76c05856dfb60ada40ef54138d49a' => $vendorDir . '/cakephp/cakephp/src/Routing/functions.php',
'b1fc73705e1bec51cd2b20a32cf1c60a' => $vendorDir . '/cakephp/cakephp/src/Utility/bootstrap.php',
- '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
+ '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+ '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
'9e907be52ac44624247b526b1e9ccfae' => $vendorDir . '/cakephp/repl/src/functions.php',
- 'bf9f5270ae66ac6fa0290b4bf47867b7' => $vendorDir . '/adodb/adodb-php/adodb.inc.php',
);
diff --git a/app/vendor/composer/autoload_static.php b/app/vendor/composer/autoload_static.php
index d38ccaf5e..40ed7de28 100644
--- a/app/vendor/composer/autoload_static.php
+++ b/app/vendor/composer/autoload_static.php
@@ -7,17 +7,16 @@
class ComposerStaticInit8d81387c26c532d7a48feda4036c56c7
{
public static $files = array (
+ '9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
- '9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
- '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
'23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php',
- '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
- 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
+ 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
'07d7f1a47144818725fd8d91a907ac57' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/create_uploaded_file.php',
@@ -43,10 +42,10 @@ class ComposerStaticInit8d81387c26c532d7a48feda4036c56c7
'90236b492da7ca2983a2ad6e33e4152e' => __DIR__ . '/..' . '/cakephp/cakephp/src/I18n/functions.php',
'2cb76c05856dfb60ada40ef54138d49a' => __DIR__ . '/..' . '/cakephp/cakephp/src/Routing/functions.php',
'b1fc73705e1bec51cd2b20a32cf1c60a' => __DIR__ . '/..' . '/cakephp/cakephp/src/Utility/bootstrap.php',
- '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php',
+ '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+ '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php',
'9e907be52ac44624247b526b1e9ccfae' => __DIR__ . '/..' . '/cakephp/repl/src/functions.php',
- 'bf9f5270ae66ac6fa0290b4bf47867b7' => __DIR__ . '/..' . '/adodb/adodb-php/adodb.inc.php',
);
public static $prefixLengthsPsr4 = array (
diff --git a/app/vendor/composer/installed.json b/app/vendor/composer/installed.json
index 832901aa1..4bb14bef5 100644
--- a/app/vendor/composer/installed.json
+++ b/app/vendor/composer/installed.json
@@ -1,69 +1,5 @@
{
"packages": [
- {
- "name": "adodb/adodb-php",
- "version": "v5.22.1",
- "version_normalized": "5.22.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ADOdb/ADOdb.git",
- "reference": "64cfc1a65648e4d1245c724ca0c347c9c5eaf2f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ADOdb/ADOdb/zipball/64cfc1a65648e4d1245c724ca0c347c9c5eaf2f6",
- "reference": "64cfc1a65648e4d1245c724ca0c347c9c5eaf2f6",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "time": "2022-03-30T08:49:08+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "files": [
- "adodb.inc.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "LGPL-2.1-or-later"
- ],
- "authors": [
- {
- "name": "John Lim",
- "email": "jlim@natsoft.com",
- "role": "Author"
- },
- {
- "name": "Damien Regad",
- "role": "Current maintainer"
- },
- {
- "name": "Mark Newnham",
- "role": "Developer"
- }
- ],
- "description": "ADOdb is a PHP database abstraction layer library",
- "homepage": "https://adodb.org/",
- "keywords": [
- "abstraction",
- "database",
- "layer",
- "library",
- "php"
- ],
- "support": {
- "issues": "https://github.com/ADOdb/ADOdb/issues",
- "source": "https://github.com/ADOdb/ADOdb"
- },
- "install-path": "../adodb/adodb-php"
- },
{
"name": "brick/varexporter",
"version": "0.3.5",
@@ -1506,44 +1442,44 @@
},
{
"name": "doctrine/dbal",
- "version": "3.3.5",
- "version_normalized": "3.3.5.0",
+ "version": "3.5.1",
+ "version_normalized": "3.5.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "719663b15983278227669c8595151586a2ff3327"
+ "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327",
- "reference": "719663b15983278227669c8595151586a2ff3327",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
+ "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
- "doctrine/deprecations": "^0.5.3",
- "doctrine/event-manager": "^1.0",
- "php": "^7.3 || ^8.0",
+ "doctrine/deprecations": "^0.5.3|^1",
+ "doctrine/event-manager": "^1|^2",
+ "php": "^7.4 || ^8.0",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "9.0.0",
- "jetbrains/phpstorm-stubs": "2021.1",
- "phpstan/phpstan": "1.5.3",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "9.5.16",
- "psalm/plugin-phpunit": "0.16.1",
- "squizlabs/php_codesniffer": "3.6.2",
- "symfony/cache": "^5.2|^6.0",
- "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
- "vimeo/psalm": "4.22.0"
+ "doctrine/coding-standard": "10.0.0",
+ "jetbrains/phpstorm-stubs": "2022.2",
+ "phpstan/phpstan": "1.8.10",
+ "phpstan/phpstan-strict-rules": "^1.4",
+ "phpunit/phpunit": "9.5.25",
+ "psalm/plugin-phpunit": "0.17.0",
+ "squizlabs/php_codesniffer": "3.7.1",
+ "symfony/cache": "^5.4|^6.0",
+ "symfony/console": "^4.4|^5.4|^6.0",
+ "vimeo/psalm": "4.29.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
},
- "time": "2022-04-05T09:50:18+00:00",
+ "time": "2022-10-24T07:26:18+00:00",
"bin": [
"bin/doctrine-dbal"
],
@@ -1600,7 +1536,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.3.5"
+ "source": "https://github.com/doctrine/dbal/tree/3.5.1"
},
"funding": [
{
@@ -6613,38 +6549,48 @@
},
{
"name": "symfony/service-contracts",
- "version": "v1.1.2",
- "version_normalized": "1.1.2.0",
+ "version": "v3.1.1",
+ "version_normalized": "3.1.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
+ "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
- "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239",
+ "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239",
"shasum": ""
},
"require": {
- "php": "^7.1.3"
+ "php": ">=8.1",
+ "psr/container": "^2.0"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"suggest": {
- "psr/container": "",
"symfony/service-implementation": ""
},
- "time": "2019-05-28T07:50:59+00:00",
+ "time": "2022-05-30T19:18:58+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-main": "3.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -6671,8 +6617,22 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.1.1"
},
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"install-path": "../symfony/service-contracts"
},
{
diff --git a/app/vendor/composer/installed.php b/app/vendor/composer/installed.php
index 70e5d4f9b..0c2b0a319 100644
--- a/app/vendor/composer/installed.php
+++ b/app/vendor/composer/installed.php
@@ -5,20 +5,11 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
- 'reference' => 'c645d96951d91052f09e68221c4c124fe224df68',
+ 'reference' => '1027902b60c4a4271d98394c8a559f11f61a3df3',
'name' => 'cakephp/app',
'dev' => true,
),
'versions' => array(
- 'adodb/adodb-php' => array(
- 'pretty_version' => 'v5.22.1',
- 'version' => '5.22.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../adodb/adodb-php',
- 'aliases' => array(),
- 'reference' => '64cfc1a65648e4d1245c724ca0c347c9c5eaf2f6',
- 'dev_requirement' => false,
- ),
'brick/varexporter' => array(
'pretty_version' => '0.3.5',
'version' => '0.3.5.0',
@@ -34,7 +25,7 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
- 'reference' => 'c645d96951d91052f09e68221c4c124fe224df68',
+ 'reference' => '1027902b60c4a4271d98394c8a559f11f61a3df3',
'dev_requirement' => false,
),
'cakephp/bake' => array(
@@ -299,12 +290,12 @@
'dev_requirement' => false,
),
'doctrine/dbal' => array(
- 'pretty_version' => '3.3.5',
- 'version' => '3.3.5.0',
+ 'pretty_version' => '3.5.1',
+ 'version' => '3.5.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/dbal',
'aliases' => array(),
- 'reference' => '719663b15983278227669c8595151586a2ff3327',
+ 'reference' => 'f38ee8aaca2d58ee88653cb34a6a3880c23f38a5',
'dev_requirement' => false,
),
'doctrine/deprecations' => array(
@@ -1004,12 +995,12 @@
'dev_requirement' => true,
),
'symfony/service-contracts' => array(
- 'pretty_version' => 'v1.1.2',
- 'version' => '1.1.2.0',
+ 'pretty_version' => 'v3.1.1',
+ 'version' => '3.1.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/service-contracts',
'aliases' => array(),
- 'reference' => '191afdcb5804db960d26d8566b7e9a2843cab3a0',
+ 'reference' => '925e713fe8fcacf6bc05e936edd8dd5441a21239',
'dev_requirement' => false,
),
'symfony/string' => array(
diff --git a/app/vendor/composer/platform_check.php b/app/vendor/composer/platform_check.php
index 580fa9609..4c3a5d68f 100644
--- a/app/vendor/composer/platform_check.php
+++ b/app/vendor/composer/platform_check.php
@@ -4,8 +4,8 @@
$issues = array();
-if (!(PHP_VERSION_ID >= 70400)) {
- $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 80100)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
diff --git a/app/vendor/doctrine/dbal/README.md b/app/vendor/doctrine/dbal/README.md
index 21888b6f1..768107751 100644
--- a/app/vendor/doctrine/dbal/README.md
+++ b/app/vendor/doctrine/dbal/README.md
@@ -1,11 +1,11 @@
# Doctrine DBAL
-| [4.0-dev][4.0] | [3.3][3.3] |
+| [4.0-dev][4.0] | [3.5][3.5] |
|:-----------------------------------------------:|:---------------------------------------------------:|
-| [![GitHub Actions][GA 4.0 image]][GA 4.0] | [![GitHub Actions][GA 3.3 image]][GA 3.3] |
-| [![AppVeyor][AppVeyor 4.0 image]][AppVeyor 4.0] | [![AppVeyor][AppVeyor 3.3 image]][AppVeyor 3.3] |
-| [![Code Coverage][Coverage image]][CodeCov 4.0] | [![Code Coverage][Coverage 3.3 image]][CodeCov 3.3] |
-| N/A | [![Code Coverage][TypeCov 3.3 image]][TypeCov 3.3] |
+| [![GitHub Actions][GA 4.0 image]][GA 4.0] | [![GitHub Actions][GA 3.5 image]][GA 3.5] |
+| [![AppVeyor][AppVeyor 4.0 image]][AppVeyor 4.0] | [![AppVeyor][AppVeyor 3.5 image]][AppVeyor 3.5] |
+| [![Code Coverage][Coverage image]][CodeCov 4.0] | [![Code Coverage][Coverage 3.5 image]][CodeCov 3.5] |
+| N/A | [![Code Coverage][TypeCov 3.5 image]][TypeCov 3.5] |
Powerful ***D***ata***B***ase ***A***bstraction ***L***ayer with many features for database schema introspection and schema management.
@@ -23,12 +23,12 @@ Powerful ***D***ata***B***ase ***A***bstraction ***L***ayer with many features f
[GA 4.0]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A4.0.x
[GA 4.0 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg
- [Coverage 3.3 image]: https://codecov.io/gh/doctrine/dbal/branch/3.3.x/graph/badge.svg
- [3.3]: https://github.com/doctrine/dbal/tree/3.3.x
- [CodeCov 3.3]: https://codecov.io/gh/doctrine/dbal/branch/3.3.x
- [AppVeyor 3.3]: https://ci.appveyor.com/project/doctrine/dbal/branch/3.3.x
- [AppVeyor 3.3 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/3.3.x?svg=true
- [GA 3.3]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A3.3.x
- [GA 3.3 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=3.3.x
- [TypeCov 3.3]: https://shepherd.dev/github/doctrine/dbal
- [TypeCov 3.3 image]: https://shepherd.dev/github/doctrine/dbal/coverage.svg
+ [Coverage 3.5 image]: https://codecov.io/gh/doctrine/dbal/branch/3.5.x/graph/badge.svg
+ [3.5]: https://github.com/doctrine/dbal/tree/3.5.x
+ [CodeCov 3.5]: https://codecov.io/gh/doctrine/dbal/branch/3.5.x
+ [AppVeyor 3.5]: https://ci.appveyor.com/project/doctrine/dbal/branch/3.5.x
+ [AppVeyor 3.5 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/3.5.x?svg=true
+ [GA 3.5]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A3.5.x
+ [GA 3.5 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=3.5.x
+ [TypeCov 3.5]: https://shepherd.dev/github/doctrine/dbal
+ [TypeCov 3.5 image]: https://shepherd.dev/github/doctrine/dbal/coverage.svg
diff --git a/app/vendor/doctrine/dbal/bin/doctrine-dbal.php b/app/vendor/doctrine/dbal/bin/doctrine-dbal.php
index 726f21c88..4a88f78fc 100644
--- a/app/vendor/doctrine/dbal/bin/doctrine-dbal.php
+++ b/app/vendor/doctrine/dbal/bin/doctrine-dbal.php
@@ -5,8 +5,8 @@
fwrite(
STDERR,
'[Warning] The use of this script is discouraged.'
- . ' You find instructions on how to boostrap the console runner in our documentation.'
- . PHP_EOL
+ . ' You find instructions on how to bootstrap the console runner in our documentation.'
+ . PHP_EOL,
);
echo PHP_EOL . PHP_EOL;
diff --git a/app/vendor/doctrine/dbal/composer.json b/app/vendor/doctrine/dbal/composer.json
index 81016de84..e1e1aab90 100644
--- a/app/vendor/doctrine/dbal/composer.json
+++ b/app/vendor/doctrine/dbal/composer.json
@@ -31,25 +31,25 @@
{"name": "Jonathan Wage", "email": "jonwage@gmail.com"}
],
"require": {
- "php": "^7.3 || ^8.0",
+ "php": "^7.4 || ^8.0",
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
- "doctrine/deprecations": "^0.5.3",
- "doctrine/event-manager": "^1.0",
+ "doctrine/deprecations": "^0.5.3|^1",
+ "doctrine/event-manager": "^1|^2",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "9.0.0",
- "jetbrains/phpstorm-stubs": "2021.1",
- "phpstan/phpstan": "1.5.3",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "9.5.16",
- "psalm/plugin-phpunit": "0.16.1",
- "squizlabs/php_codesniffer": "3.6.2",
- "symfony/cache": "^5.2|^6.0",
- "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
- "vimeo/psalm": "4.22.0"
+ "doctrine/coding-standard": "10.0.0",
+ "jetbrains/phpstorm-stubs": "2022.2",
+ "phpstan/phpstan": "1.8.10",
+ "phpstan/phpstan-strict-rules": "^1.4",
+ "phpunit/phpunit": "9.5.25",
+ "psalm/plugin-phpunit": "0.17.0",
+ "squizlabs/php_codesniffer": "3.7.1",
+ "symfony/cache": "^5.4|^6.0",
+ "symfony/console": "^4.4|^5.4|^6.0",
+ "vimeo/psalm": "4.29.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
diff --git a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception.php b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception.php
index cce84b25b..7fc0f7060 100644
--- a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception.php
+++ b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception.php
@@ -4,9 +4,7 @@
use Throwable;
-/**
- * @internal
- */
+/** @internal */
interface Exception extends Throwable
{
}
diff --git a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingNamedParameter.php b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingNamedParameter.php
index 73803e2bd..cd9b9756a 100644
--- a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingNamedParameter.php
+++ b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingNamedParameter.php
@@ -7,15 +7,13 @@
use function sprintf;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class MissingNamedParameter extends LogicException implements Exception
{
public static function new(string $name): self
{
return new self(
- sprintf('Named parameter "%s" does not have a bound value.', $name)
+ sprintf('Named parameter "%s" does not have a bound value.', $name),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php
index 3bfb0ea48..f89a98b79 100644
--- a/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php
+++ b/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php
@@ -17,7 +17,7 @@ class MissingPositionalParameter extends LogicException implements Exception
public static function new(int $index): self
{
return new self(
- sprintf('Positional parameter at index %d does not have a bound value.', $index)
+ sprintf('Positional parameter at index %d does not have a bound value.', $index),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Cache/ArrayResult.php b/app/vendor/doctrine/dbal/src/Cache/ArrayResult.php
index 3b70d0c9e..93b93d176 100644
--- a/app/vendor/doctrine/dbal/src/Cache/ArrayResult.php
+++ b/app/vendor/doctrine/dbal/src/Cache/ArrayResult.php
@@ -9,23 +9,16 @@
use function count;
use function reset;
-/**
- * @internal The class is internal to the caching layer implementation.
- */
+/** @internal The class is internal to the caching layer implementation. */
final class ArrayResult implements Result
{
/** @var list> */
- private $data;
+ private array $data;
- /** @var int */
- private $columnCount = 0;
+ private int $columnCount = 0;
+ private int $num = 0;
- /** @var int */
- private $num = 0;
-
- /**
- * @param list> $data
- */
+ /** @param list> $data */
public function __construct(array $data)
{
$this->data = $data;
@@ -111,9 +104,7 @@ public function free(): void
$this->data = [];
}
- /**
- * @return array|false
- */
+ /** @return array|false */
private function fetch()
{
if (! isset($this->data[$this->num])) {
diff --git a/app/vendor/doctrine/dbal/src/Cache/CacheException.php b/app/vendor/doctrine/dbal/src/Cache/CacheException.php
index 3db115bdf..18e95d6be 100644
--- a/app/vendor/doctrine/dbal/src/Cache/CacheException.php
+++ b/app/vendor/doctrine/dbal/src/Cache/CacheException.php
@@ -4,22 +4,16 @@
use Doctrine\DBAL\Exception;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class CacheException extends Exception
{
- /**
- * @return CacheException
- */
+ /** @return CacheException */
public static function noCacheKey()
{
return new self('No cache key was set.');
}
- /**
- * @return CacheException
- */
+ /** @return CacheException */
public static function noResultDriverConfigured()
{
return new self('Trying to cache a query but no result driver is configured.');
diff --git a/app/vendor/doctrine/dbal/src/Cache/QueryCacheProfile.php b/app/vendor/doctrine/dbal/src/Cache/QueryCacheProfile.php
index 7115cc720..e1476112e 100644
--- a/app/vendor/doctrine/dbal/src/Cache/QueryCacheProfile.php
+++ b/app/vendor/doctrine/dbal/src/Cache/QueryCacheProfile.php
@@ -23,8 +23,7 @@
*/
class QueryCacheProfile
{
- /** @var CacheItemPoolInterface|null */
- private $resultCache;
+ private ?CacheItemPoolInterface $resultCache = null;
/** @var int */
private $lifetime;
@@ -50,7 +49,7 @@ public function __construct($lifetime = 0, $cacheKey = null, ?object $resultCach
'Passing an instance of %s to %s as $resultCache is deprecated. Pass an instance of %s instead.',
Cache::class,
__METHOD__,
- CacheItemPoolInterface::class
+ CacheItemPoolInterface::class,
);
$this->resultCache = CacheAdapter::wrap($resultCache);
@@ -59,7 +58,7 @@ public function __construct($lifetime = 0, $cacheKey = null, ?object $resultCach
'$resultCache: Expected either null or an instance of %s or %s, got %s.',
CacheItemPoolInterface::class,
Cache::class,
- get_class($resultCache)
+ get_class($resultCache),
));
}
}
@@ -80,15 +79,13 @@ public function getResultCacheDriver()
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4620',
'%s is deprecated, call getResultCache() instead.',
- __METHOD__
+ __METHOD__,
);
return $this->resultCache !== null ? DoctrineProvider::wrap($this->resultCache) : null;
}
- /**
- * @return int
- */
+ /** @return int */
public function getLifetime()
{
return $this->lifetime;
@@ -155,7 +152,7 @@ public function setResultCacheDriver(Cache $cache)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4620',
'%s is deprecated, call setResultCache() instead.',
- __METHOD__
+ __METHOD__,
);
return new QueryCacheProfile($this->lifetime, $this->cacheKey, CacheAdapter::wrap($cache));
diff --git a/app/vendor/doctrine/dbal/src/Configuration.php b/app/vendor/doctrine/dbal/src/Configuration.php
index 2d27d733b..114058271 100644
--- a/app/vendor/doctrine/dbal/src/Configuration.php
+++ b/app/vendor/doctrine/dbal/src/Configuration.php
@@ -10,13 +10,15 @@
use Doctrine\Deprecations\Deprecation;
use Psr\Cache\CacheItemPoolInterface;
+use function func_num_args;
+
/**
* Configuration container for the Doctrine DBAL.
*/
class Configuration
{
/** @var Middleware[] */
- private $middlewares = [];
+ private array $middlewares = [];
/**
* The SQL logger in use. If null, SQL logging is disabled.
@@ -27,10 +29,8 @@ class Configuration
/**
* The cache driver implementation that is used for query result caching.
- *
- * @var CacheItemPoolInterface|null
*/
- private $resultCache;
+ private ?CacheItemPoolInterface $resultCache = null;
/**
* The cache driver implementation that is used for query result caching.
@@ -55,19 +55,44 @@ class Configuration
*/
protected $autoCommit = true;
+ public function __construct()
+ {
+ $this->schemaAssetsFilter = static function (): bool {
+ return true;
+ };
+ }
+
/**
* Sets the SQL logger to use. Defaults to NULL which means SQL logging is disabled.
+ *
+ * @deprecated Use {@see setMiddlewares()} and {@see \Doctrine\DBAL\Logging\Middleware} instead.
*/
public function setSQLLogger(?SQLLogger $logger = null): void
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/4967',
+ '%s is deprecated, use setMiddlewares() and Logging\\Middleware instead.',
+ __METHOD__,
+ );
+
$this->sqlLogger = $logger;
}
/**
* Gets the SQL logger that is used.
+ *
+ * @deprecated
*/
public function getSQLLogger(): ?SQLLogger
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/4967',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $this->sqlLogger;
}
@@ -90,7 +115,7 @@ public function getResultCacheImpl(): ?Cache
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4620',
'%s is deprecated, call getResultCache() instead.',
- __METHOD__
+ __METHOD__,
);
return $this->resultCacheImpl;
@@ -116,7 +141,7 @@ public function setResultCacheImpl(Cache $cacheImpl): void
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4620',
'%s is deprecated, call setResultCache() instead.',
- __METHOD__
+ __METHOD__,
);
$this->resultCacheImpl = $cacheImpl;
@@ -128,6 +153,22 @@ public function setResultCacheImpl(Cache $cacheImpl): void
*/
public function setSchemaAssetsFilter(?callable $callable = null): void
{
+ if (func_num_args() < 1) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5483',
+ 'Not passing an argument to %s is deprecated.',
+ __METHOD__,
+ );
+ } elseif ($callable === null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5483',
+ 'Using NULL as a schema asset filter is deprecated.'
+ . ' Use a callable that always returns true instead.',
+ );
+ }
+
$this->schemaAssetsFilter = $callable;
}
@@ -179,9 +220,7 @@ public function setMiddlewares(array $middlewares): self
return $this;
}
- /**
- * @return Middleware[]
- */
+ /** @return Middleware[] */
public function getMiddlewares(): array
{
return $this->middlewares;
diff --git a/app/vendor/doctrine/dbal/src/Connection.php b/app/vendor/doctrine/dbal/src/Connection.php
index 60ae3aa4e..364df9a9c 100644
--- a/app/vendor/doctrine/dbal/src/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Connection.php
@@ -28,6 +28,7 @@
use Throwable;
use Traversable;
+use function array_key_exists;
use function assert;
use function count;
use function get_class;
@@ -64,6 +65,8 @@ class Connection
/**
* Offset by which PARAM_* constants are detected as arrays of the param type.
+ *
+ * @internal Should be used only within the wrapper layer.
*/
public const ARRAY_PARAM_OFFSET = 100;
@@ -77,7 +80,11 @@ class Connection
/** @var Configuration */
protected $_config;
- /** @var EventManager */
+ /**
+ * @deprecated
+ *
+ * @var EventManager
+ */
protected $_eventManager;
/**
@@ -89,31 +96,25 @@ class Connection
/**
* The current auto-commit mode of this connection.
- *
- * @var bool
*/
- private $autoCommit = true;
+ private bool $autoCommit = true;
/**
* The transaction nesting level.
- *
- * @var int
*/
- private $transactionNestingLevel = 0;
+ private int $transactionNestingLevel = 0;
/**
* The currently active transaction isolation level or NULL before it has been determined.
*
- * @var int|null
+ * @var TransactionIsolationLevel::*|null
*/
private $transactionIsolationLevel;
/**
* If nested transactions should use savepoints.
- *
- * @var bool
*/
- private $nestTransactionsWithSavepoints = false;
+ private bool $nestTransactionsWithSavepoints = false;
/**
* The parameters used during creation of the Connection instance.
@@ -121,20 +122,15 @@ class Connection
* @var array
* @psalm-var Params
*/
- private $params;
+ private array $params;
/**
* The database platform object used by the connection or NULL before it's initialized.
- *
- * @var AbstractPlatform|null
*/
- private $platform;
-
- /** @var ExceptionConverter|null */
- private $exceptionConverter;
+ private ?AbstractPlatform $platform = null;
- /** @var Parser|null */
- private $parser;
+ private ?ExceptionConverter $exceptionConverter = null;
+ private ?Parser $parser = null;
/**
* The schema manager.
@@ -154,10 +150,8 @@ class Connection
/**
* Flag that indicates whether the current transaction is marked for rollback only.
- *
- * @var bool
*/
- private $isRollbackOnly = false;
+ private bool $isRollbackOnly = false;
/**
* Initializes a new instance of the Connection class.
@@ -182,26 +176,29 @@ public function __construct(
$this->_driver = $driver;
$this->params = $params;
+ // Create default config and event manager if none given
+ $config ??= new Configuration();
+ $eventManager ??= new EventManager();
+
+ $this->_config = $config;
+ $this->_eventManager = $eventManager;
+
if (isset($params['platform'])) {
if (! $params['platform'] instanceof Platforms\AbstractPlatform) {
throw Exception::invalidPlatformType($params['platform']);
}
- $this->platform = $params['platform'];
- }
-
- // Create default config and event manager if none given
- if ($config === null) {
- $config = new Configuration();
- }
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5699',
+ 'The "platform" connection parameter is deprecated.'
+ . ' Use a driver middleware that would instantiate the platform instead.',
+ );
- if ($eventManager === null) {
- $eventManager = new EventManager();
+ $this->platform = $params['platform'];
+ $this->platform->setEventManager($this->_eventManager);
}
- $this->_config = $config;
- $this->_eventManager = $eventManager;
-
$this->_expr = $this->createExpressionBuilder();
$this->autoCommit = $config->getAutoCommit();
@@ -263,10 +260,19 @@ public function getConfiguration()
/**
* Gets the EventManager used by the Connection.
*
+ * @deprecated
+ *
* @return EventManager
*/
public function getEventManager()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $this->_eventManager;
}
@@ -308,7 +314,7 @@ public function getExpressionBuilder()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4515',
'Connection::getExpressionBuilder() is deprecated,'
- . ' use Connection::createExpressionBuilder() instead.'
+ . ' use Connection::createExpressionBuilder() instead.',
);
return $this->_expr;
@@ -329,7 +335,7 @@ public function connect()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4966',
- 'Public access to Connection::connect() is deprecated.'
+ 'Public access to Connection::connect() is deprecated.',
);
if ($this->_conn !== null) {
@@ -347,6 +353,13 @@ public function connect()
}
if ($this->_eventManager->hasListeners(Events::postConnect)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated. Implement a middleware instead.',
+ Events::postConnect,
+ );
+
$eventArgs = new Event\ConnectionEventArgs($this);
$this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs);
}
@@ -407,6 +420,15 @@ private function getDatabasePlatformVersion()
throw $originalException;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5707',
+ 'Relying on a fallback connection used to determine the database platform while connecting'
+ . ' to a non-existing database is deprecated. Either use an existing database name in'
+ . ' connection parameters or omit the database name if the platform'
+ . ' and the server configuration allow that.',
+ );
+
// The database to connect to might not yet exist.
// Retry detection without database name connection parameter.
$params = $this->params;
@@ -457,9 +479,9 @@ private function getServerVersion()
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4750',
+ 'https://github.com/doctrine/dbal/pull/4750',
'Not implementing the ServerInfoAwareConnection interface in %s is deprecated',
- get_class($connection)
+ get_class($connection),
);
// Unable to detect platform version.
@@ -640,7 +662,7 @@ public function delete($table, array $criteria, array $types = [])
return $this->executeStatement(
'DELETE FROM ' . $table . ' WHERE ' . implode(' AND ', $conditions),
$values,
- is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types
+ is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types,
);
}
@@ -658,7 +680,7 @@ public function close()
/**
* Sets the transaction isolation level.
*
- * @param int $level The level to set.
+ * @param TransactionIsolationLevel::* $level The level to set.
*
* @return int|string
*
@@ -674,17 +696,13 @@ public function setTransactionIsolation($level)
/**
* Gets the currently active transaction isolation level.
*
- * @return int The current transaction isolation level.
+ * @return TransactionIsolationLevel::* The current transaction isolation level.
*
* @throws Exception
*/
public function getTransactionIsolation()
{
- if ($this->transactionIsolationLevel === null) {
- $this->transactionIsolationLevel = $this->getDatabasePlatform()->getDefaultTransactionIsolationLevel();
- }
-
- return $this->transactionIsolationLevel;
+ return $this->transactionIsolationLevel ??= $this->getDatabasePlatform()->getDefaultTransactionIsolationLevel();
}
/**
@@ -756,7 +774,7 @@ public function insert($table, array $data, array $types = [])
'INSERT INTO ' . $table . ' (' . implode(', ', $columns) . ')' .
' VALUES (' . implode(', ', $set) . ')',
$values,
- is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types
+ is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types,
);
}
@@ -1039,12 +1057,10 @@ public function executeQuery(
}
$stmt = $connection->prepare($sql);
- if (count($types) > 0) {
- $this->_bindTypedValues($stmt, $params, $types);
- $result = $stmt->execute();
- } else {
- $result = $stmt->execute($params);
- }
+
+ $this->bindParameters($stmt, $params, $types);
+
+ $result = $stmt->execute();
} else {
$result = $connection->query($sql);
}
@@ -1146,15 +1162,10 @@ public function executeStatement($sql, array $params = [], array $types = [])
$stmt = $connection->prepare($sql);
- if (count($types) > 0) {
- $this->_bindTypedValues($stmt, $params, $types);
-
- $result = $stmt->execute();
- } else {
- $result = $stmt->execute($params);
- }
+ $this->bindParameters($stmt, $params, $types);
- return $result->rowCount();
+ return $stmt->execute()
+ ->rowCount();
}
return $connection->exec($sql);
@@ -1197,7 +1208,7 @@ public function lastInsertId($name = null)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
}
@@ -1216,11 +1227,13 @@ public function lastInsertId($name = null)
* If an exception occurs during execution of the function or transaction commit,
* the transaction is rolled back and the exception re-thrown.
*
- * @param Closure $func The function to execute transactionally.
+ * @param Closure(self):T $func The function to execute transactionally.
*
- * @return mixed The value returned by $func
+ * @return T The value returned by $func
*
* @throws Throwable
+ *
+ * @template T
*/
public function transactional(Closure $func)
{
@@ -1248,6 +1261,18 @@ public function transactional(Closure $func)
*/
public function setNestTransactionsWithSavepoints($nestTransactionsWithSavepoints)
{
+ if (! $nestTransactionsWithSavepoints) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5383',
+ <<<'DEPRECATION'
+ Nesting transactions without enabling savepoints is deprecated.
+ Call %s::setNestTransactionsWithSavepoints(true) to enable savepoints.
+ DEPRECATION,
+ self::class,
+ );
+ }
+
if ($this->transactionNestingLevel > 0) {
throw ConnectionException::mayNotAlterNestedTransactionWithSavepointsInTransaction();
}
@@ -1311,9 +1336,30 @@ public function beginTransaction()
if ($logger !== null) {
$logger->stopQuery();
}
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5383',
+ <<<'DEPRECATION'
+ Nesting transactions without enabling savepoints is deprecated.
+ Call %s::setNestTransactionsWithSavepoints(true) to enable savepoints.
+ DEPRECATION,
+ self::class,
+ );
}
- $this->getEventManager()->dispatchEvent(Events::onTransactionBegin, new TransactionBeginEventArgs($this));
+ $eventManager = $this->getEventManager();
+
+ if ($eventManager->hasListeners(Events::onTransactionBegin)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onTransactionBegin,
+ );
+
+ $eventManager->dispatchEvent(Events::onTransactionBegin, new TransactionBeginEventArgs($this));
+ }
return true;
}
@@ -1337,32 +1383,26 @@ public function commit()
$connection = $this->getWrappedConnection();
- $logger = $this->_config->getSQLLogger();
-
if ($this->transactionNestingLevel === 1) {
- if ($logger !== null) {
- $logger->startQuery('"COMMIT"');
- }
-
- $result = $connection->commit();
-
- if ($logger !== null) {
- $logger->stopQuery();
- }
+ $result = $this->doCommit($connection);
} elseif ($this->nestTransactionsWithSavepoints) {
- if ($logger !== null) {
- $logger->startQuery('"RELEASE SAVEPOINT"');
- }
-
$this->releaseSavepoint($this->_getNestedTransactionSavePointName());
- if ($logger !== null) {
- $logger->stopQuery();
- }
}
--$this->transactionNestingLevel;
- $this->getEventManager()->dispatchEvent(Events::onTransactionCommit, new TransactionCommitEventArgs($this));
+ $eventManager = $this->getEventManager();
+
+ if ($eventManager->hasListeners(Events::onTransactionCommit)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onTransactionCommit,
+ );
+
+ $eventManager->dispatchEvent(Events::onTransactionCommit, new TransactionCommitEventArgs($this));
+ }
if ($this->autoCommit !== false || $this->transactionNestingLevel !== 0) {
return $result;
@@ -1373,6 +1413,28 @@ public function commit()
return $result;
}
+ /**
+ * @return bool
+ *
+ * @throws DriverException
+ */
+ private function doCommit(DriverConnection $connection)
+ {
+ $logger = $this->_config->getSQLLogger();
+
+ if ($logger !== null) {
+ $logger->startQuery('"COMMIT"');
+ }
+
+ $result = $connection->commit();
+
+ if ($logger !== null) {
+ $logger->stopQuery();
+ }
+
+ return $result;
+ }
+
/**
* Commits all current nesting transactions.
*
@@ -1440,7 +1502,18 @@ public function rollBack()
--$this->transactionNestingLevel;
}
- $this->getEventManager()->dispatchEvent(Events::onTransactionRollBack, new TransactionRollBackEventArgs($this));
+ $eventManager = $this->getEventManager();
+
+ if ($eventManager->hasListeners(Events::onTransactionRollBack)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onTransactionRollBack,
+ );
+
+ $eventManager->dispatchEvent(Events::onTransactionRollBack, new TransactionRollBackEventArgs($this));
+ }
return true;
}
@@ -1476,6 +1549,8 @@ public function createSavepoint($savepoint)
*/
public function releaseSavepoint($savepoint)
{
+ $logger = $this->_config->getSQLLogger();
+
$platform = $this->getDatabasePlatform();
if (! $platform->supportsSavepoints()) {
@@ -1483,10 +1558,24 @@ public function releaseSavepoint($savepoint)
}
if (! $platform->supportsReleaseSavepoints()) {
+ if ($logger !== null) {
+ $logger->stopQuery();
+ }
+
return;
}
+ if ($logger !== null) {
+ $logger->startQuery('"RELEASE SAVEPOINT"');
+ }
+
$this->executeStatement($platform->releaseSavePoint($savepoint));
+
+ if ($logger === null) {
+ return;
+ }
+
+ $logger->stopQuery();
}
/**
@@ -1524,7 +1613,7 @@ public function getWrappedConnection()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4966',
'Connection::getWrappedConnection() is deprecated.'
- . ' Use Connection::getNativeConnection() to access the native connection.'
+ . ' Use Connection::getNativeConnection() to access the native connection.',
);
$this->connect();
@@ -1534,9 +1623,7 @@ public function getWrappedConnection()
return $this->_conn;
}
- /**
- * @return resource|object
- */
+ /** @return resource|object */
public function getNativeConnection()
{
$this->connect();
@@ -1545,7 +1632,7 @@ public function getNativeConnection()
if (! method_exists($this->_conn, 'getNativeConnection')) {
throw new LogicException(sprintf(
'The driver connection %s does not support accessing the native connection.',
- get_class($this->_conn)
+ get_class($this->_conn),
));
}
@@ -1562,7 +1649,7 @@ public function createSchemaManager(): AbstractSchemaManager
{
return $this->_driver->getSchemaManager(
$this,
- $this->getDatabasePlatform()
+ $this->getDatabasePlatform(),
);
}
@@ -1581,14 +1668,10 @@ public function getSchemaManager()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4515',
- 'Connection::getSchemaManager() is deprecated, use Connection::createSchemaManager() instead.'
+ 'Connection::getSchemaManager() is deprecated, use Connection::createSchemaManager() instead.',
);
- if ($this->_schemaManager === null) {
- $this->_schemaManager = $this->createSchemaManager();
- }
-
- return $this->_schemaManager;
+ return $this->_schemaManager ??= $this->createSchemaManager();
}
/**
@@ -1666,7 +1749,7 @@ public function convertToPHPValue($value, $type)
*
* @throws Exception
*/
- private function _bindTypedValues(DriverStatement $stmt, array $params, array $types): void
+ private function bindParameters(DriverStatement $stmt, array $params, array $types): void
{
// Check whether parameters are positional or named. Mixing is not allowed.
if (is_int(key($params))) {
@@ -1676,11 +1759,21 @@ private function _bindTypedValues(DriverStatement $stmt, array $params, array $t
if (isset($types[$key])) {
$type = $types[$key];
[$value, $bindingType] = $this->getBindingInfo($value, $type);
- $stmt->bindValue($bindIndex, $value, $bindingType);
} else {
- $stmt->bindValue($bindIndex, $value);
+ if (array_key_exists($key, $types)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5550',
+ 'Using NULL as prepared statement parameter type is deprecated.'
+ . 'Omit or use Parameter::STRING instead',
+ );
+ }
+
+ $bindingType = ParameterType::STRING;
}
+ $stmt->bindValue($bindIndex, $value, $bindingType);
+
++$bindIndex;
}
} else {
@@ -1689,10 +1782,20 @@ private function _bindTypedValues(DriverStatement $stmt, array $params, array $t
if (isset($types[$name])) {
$type = $types[$name];
[$value, $bindingType] = $this->getBindingInfo($value, $type);
- $stmt->bindValue($name, $value, $bindingType);
} else {
- $stmt->bindValue($name, $value);
+ if (array_key_exists($name, $types)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5550',
+ 'Using NULL as prepared statement parameter type is deprecated.'
+ . 'Omit or use Parameter::STRING instead',
+ );
+ }
+
+ $bindingType = ParameterType::STRING;
}
+
+ $stmt->bindValue($name, $value, $bindingType);
}
}
}
@@ -1748,9 +1851,7 @@ final public function convertExceptionDuringQuery(
return $this->handleDriverException($e, new Query($sql, $params, $types));
}
- /**
- * @internal
- */
+ /** @internal */
final public function convertException(Driver\Exception $e): DriverException
{
return $this->handleDriverException($e, null);
@@ -1764,11 +1865,8 @@ final public function convertException(Driver\Exception $e): DriverException
*/
private function expandArrayParameters(string $sql, array $params, array $types): array
{
- if ($this->parser === null) {
- $this->parser = $this->getDatabasePlatform()->createSQLParser();
- }
-
- $visitor = new ExpandArrayParameters($params, $types);
+ $this->parser ??= $this->getDatabasePlatform()->createSQLParser();
+ $visitor = new ExpandArrayParameters($params, $types);
$this->parser->parse($sql, $visitor);
@@ -1806,11 +1904,8 @@ private function handleDriverException(
Driver\Exception $driverException,
?Query $query
): DriverException {
- if ($this->exceptionConverter === null) {
- $this->exceptionConverter = $this->_driver->getExceptionConverter();
- }
-
- $exception = $this->exceptionConverter->convert($driverException, $query);
+ $this->exceptionConverter ??= $this->_driver->getExceptionConverter();
+ $exception = $this->exceptionConverter->convert($driverException, $query);
if ($exception instanceof ConnectionLost) {
$this->close();
diff --git a/app/vendor/doctrine/dbal/src/ConnectionException.php b/app/vendor/doctrine/dbal/src/ConnectionException.php
index 8426ca288..f1e18987b 100644
--- a/app/vendor/doctrine/dbal/src/ConnectionException.php
+++ b/app/vendor/doctrine/dbal/src/ConnectionException.php
@@ -2,38 +2,28 @@
namespace Doctrine\DBAL;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class ConnectionException extends Exception
{
- /**
- * @return ConnectionException
- */
+ /** @return ConnectionException */
public static function commitFailedRollbackOnly()
{
return new self('Transaction commit failed because the transaction has been marked for rollback only.');
}
- /**
- * @return ConnectionException
- */
+ /** @return ConnectionException */
public static function noActiveTransaction()
{
return new self('There is no active transaction.');
}
- /**
- * @return ConnectionException
- */
+ /** @return ConnectionException */
public static function savepointsNotSupported()
{
return new self('Savepoints are not supported by this driver.');
}
- /**
- * @return ConnectionException
- */
+ /** @return ConnectionException */
public static function mayNotAlterNestedTransactionWithSavepointsInTransaction()
{
return new self('May not alter the nested transaction with savepoints behavior while a transaction is open.');
diff --git a/app/vendor/doctrine/dbal/src/Connections/PrimaryReadReplicaConnection.php b/app/vendor/doctrine/dbal/src/Connections/PrimaryReadReplicaConnection.php
index 9d38f904b..c65eb8ae9 100644
--- a/app/vendor/doctrine/dbal/src/Connections/PrimaryReadReplicaConnection.php
+++ b/app/vendor/doctrine/dbal/src/Connections/PrimaryReadReplicaConnection.php
@@ -13,6 +13,7 @@
use Doctrine\DBAL\Events;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Statement;
+use Doctrine\Deprecations\Deprecation;
use InvalidArgumentException;
use function array_rand;
@@ -147,7 +148,7 @@ public function connect($connectionName = null)
if ($connectionName !== null) {
throw new InvalidArgumentException(
'Passing a connection name as first argument is not supported anymore.'
- . ' Use ensureConnectedToPrimary()/ensureConnectedToReplica() instead.'
+ . ' Use ensureConnectedToPrimary()/ensureConnectedToReplica() instead.',
);
}
@@ -199,6 +200,13 @@ protected function performConnect(?string $connectionName = null): bool
}
if ($this->_eventManager->hasListeners(Events::postConnect)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated. Implement a middleware instead.',
+ Events::postConnect,
+ );
+
$eventArgs = new ConnectionEventArgs($this);
$this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver.php b/app/vendor/doctrine/dbal/src/Driver.php
index 50a6005f9..efc1792b0 100644
--- a/app/vendor/doctrine/dbal/src/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver.php
@@ -37,6 +37,8 @@ public function getDatabasePlatform();
* Gets the SchemaManager that can be used to inspect and change the underlying
* database schema of the platform this driver connects to.
*
+ * @deprecated Use {@link AbstractPlatform::createSchemaManager()} instead.
+ *
* @return AbstractSchemaManager
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php b/app/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php
index c851949be..87d50aff9 100644
--- a/app/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php
+++ b/app/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php
@@ -22,9 +22,7 @@
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use Doctrine\DBAL\Query;
-/**
- * @internal
- */
+/** @internal */
final class ExceptionConverter implements ExceptionConverterInterface
{
/**
diff --git a/app/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php b/app/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php
index 727a605d7..4703a57d5 100644
--- a/app/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php
+++ b/app/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php
@@ -20,14 +20,10 @@
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use Doctrine\DBAL\Query;
-/**
- * @internal
- */
+/** @internal */
final class ExceptionConverter implements ExceptionConverterInterface
{
- /**
- * @link http://www.dba-oracle.com/t_error_code_list.htm
- */
+ /** @link http://www.dba-oracle.com/t_error_code_list.htm */
public function convert(Exception $exception, ?Query $query): DriverException
{
switch ($exception->getCode()) {
diff --git a/app/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php b/app/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php
index df34802cf..2baca1ee2 100644
--- a/app/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php
+++ b/app/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php
@@ -23,14 +23,10 @@
use function strpos;
-/**
- * @internal
- */
+/** @internal */
final class ExceptionConverter implements ExceptionConverterInterface
{
- /**
- * @link http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html
- */
+ /** @link http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html */
public function convert(Exception $exception, ?Query $query): DriverException
{
switch ($exception->getSQLState()) {
@@ -81,7 +77,7 @@ public function convert(Exception $exception, ?Query $query): DriverException
return new ConnectionException($exception, $query);
}
- // Prior to fixing https://bugs.php.net/bug.php?id=64705 (PHP 7.3.22 and PHP 7.4.10),
+ // Prior to fixing https://bugs.php.net/bug.php?id=64705 (PHP 7.4.10),
// in some cases (mainly connection errors) the PDO exception wouldn't provide a SQLSTATE via its code.
// We have to match against the SQLSTATE in the error message in these cases.
if ($exception->getCode() === 7 && strpos($exception->getMessage(), 'SQLSTATE[08006]') !== false) {
diff --git a/app/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php b/app/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php
index d78b0832a..9e67155ad 100644
--- a/app/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php
+++ b/app/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php
@@ -8,6 +8,7 @@
use Doctrine\DBAL\Driver\Exception;
use Doctrine\DBAL\Exception\ConnectionException;
use Doctrine\DBAL\Exception\DriverException;
+use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
use Doctrine\DBAL\Exception\InvalidFieldNameException;
use Doctrine\DBAL\Exception\LockWaitTimeoutException;
use Doctrine\DBAL\Exception\NonUniqueFieldNameException;
@@ -21,14 +22,10 @@
use function strpos;
-/**
- * @internal
- */
+/** @internal */
final class ExceptionConverter implements ExceptionConverterInterface
{
- /**
- * @link http://www.sqlite.org/c3ref/c_abort.html
- */
+ /** @link http://www.sqlite.org/c3ref/c_abort.html */
public function convert(Exception $exception, ?Query $query): DriverException
{
if (strpos($exception->getMessage(), 'database is locked') !== false) {
@@ -79,6 +76,10 @@ public function convert(Exception $exception, ?Query $query): DriverException
return new ConnectionException($exception, $query);
}
+ if (strpos($exception->getMessage(), 'FOREIGN KEY constraint failed') !== false) {
+ return new ForeignKeyConstraintViolationException($exception, $query);
+ }
+
return new DriverException($exception, $query);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php b/app/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php
index 29e73d1f2..3779c8bab 100644
--- a/app/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php
+++ b/app/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php
@@ -2,6 +2,11 @@
namespace Doctrine\DBAL\Driver\API\SQLite;
+use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\DBAL\Platforms\SqlitePlatform;
+use Doctrine\Deprecations\Deprecation;
+
+use function array_merge;
use function strpos;
/**
@@ -11,6 +16,25 @@
*/
final class UserDefinedFunctions
{
+ private const DEFAULT_FUNCTIONS = [
+ 'sqrt' => ['callback' => [SqlitePlatform::class, 'udfSqrt'], 'numArgs' => 1],
+ 'mod' => ['callback' => [SqlitePlatform::class, 'udfMod'], 'numArgs' => 2],
+ 'locate' => ['callback' => [SqlitePlatform::class, 'udfLocate'], 'numArgs' => -1],
+ ];
+
+ /**
+ * @param callable(string, callable, int): bool $callback
+ * @param array $additionalFunctions
+ */
+ public static function register(callable $callback, array $additionalFunctions = []): void
+ {
+ $userDefinedFunctions = array_merge(self::DEFAULT_FUNCTIONS, $additionalFunctions);
+
+ foreach ($userDefinedFunctions as $function => $data) {
+ $callback($function, $data['callback'], $data['numArgs']);
+ }
+ }
+
/**
* User-defined function that implements MOD().
*
@@ -31,6 +55,14 @@ public static function mod($a, $b): int
*/
public static function locate($str, $substr, $offset = 0): int
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5749',
+ 'Relying on DBAL\'s emulated LOCATE() function is deprecated. '
+ . 'Use INSTR() or %s::getLocateExpression() instead.',
+ AbstractPlatform::class,
+ );
+
// SQL's LOCATE function works on 1-based positions, while PHP's strpos works on 0-based positions.
// So we have to make them compatible if an offset is given.
if ($offset > 0) {
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php
index 38a460861..3a08312d6 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php
@@ -9,6 +9,7 @@
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\DB2Platform;
use Doctrine\DBAL\Schema\DB2SchemaManager;
+use Doctrine\Deprecations\Deprecation;
use function assert;
@@ -27,9 +28,18 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link DB2Platform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractDB2Driver::getSchemaManager() is deprecated.'
+ . ' Use DB2Platform::createSchemaManager() instead.',
+ );
+
assert($platform instanceof DB2Platform);
return new DB2SchemaManager($conn, $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractException.php b/app/vendor/doctrine/dbal/src/Driver/AbstractException.php
index f14501b2f..d4d20aa34 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractException.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractException.php
@@ -18,10 +18,8 @@ abstract class AbstractException extends BaseException implements Exception
{
/**
* The SQLSTATE of the driver.
- *
- * @var string|null
*/
- private $sqlState;
+ private ?string $sqlState = null;
/**
* @param string $message The driver error message.
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
index 7f74e42d4..d8f3fb35c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
@@ -53,7 +53,7 @@ public function createDatabasePlatformForVersion($version)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5060',
'MySQL 5.6 support is deprecated and will be removed in DBAL 4.'
- . ' Consider upgrading to MySQL 5.7 or later.'
+ . ' Consider upgrading to MySQL 5.7 or later.',
);
return $this->getDatabasePlatform();
@@ -73,12 +73,12 @@ private function getOracleMysqlVersionNumber(string $versionString): string
preg_match(
'/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/',
$versionString,
- $versionParts
+ $versionParts,
) === 0
) {
throw Exception::invalidPlatformVersionSpecified(
$versionString,
- '..'
+ '..',
);
}
@@ -86,8 +86,8 @@ private function getOracleMysqlVersionNumber(string $versionString): string
$minorVersion = $versionParts['minor'] ?? 0;
$patchVersion = $versionParts['patch'] ?? null;
- if ($majorVersion === '5' && $minorVersion === '7' && $patchVersion === null) {
- $patchVersion = '9';
+ if ($majorVersion === '5' && $minorVersion === '7') {
+ $patchVersion ??= '9';
}
return $majorVersion . '.' . $minorVersion . '.' . $patchVersion;
@@ -107,12 +107,12 @@ private function getMariaDbMysqlVersionNumber(string $versionString): string
preg_match(
'/^(?:5\.5\.5-)?(mariadb-)?(?P\d+)\.(?P\d+)\.(?P\d+)/i',
$versionString,
- $versionParts
+ $versionParts,
) === 0
) {
throw Exception::invalidPlatformVersionSpecified(
$versionString,
- '^(?:5\.5\.5-)?(mariadb-)?..'
+ '^(?:5\.5\.5-)?(mariadb-)?..',
);
}
@@ -132,10 +132,19 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
*
+ * @deprecated Use {@link AbstractMySQLPlatform::createSchemaManager()} instead.
+ *
* @return MySQLSchemaManager
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractMySQLDriver::getSchemaManager() is deprecated.'
+ . ' Use MySQLPlatform::createSchemaManager() instead.',
+ );
+
assert($platform instanceof AbstractMySQLPlatform);
return new MySQLSchemaManager($conn, $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php
index c62c87d90..d912109a0 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php
@@ -10,6 +10,7 @@
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Schema\OracleSchemaManager;
+use Doctrine\Deprecations\Deprecation;
use function assert;
@@ -28,9 +29,18 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link OraclePlatform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractOracleDriver::getSchemaManager() is deprecated.'
+ . ' Use OraclePlatform::createSchemaManager() instead.',
+ );
+
assert($platform instanceof OraclePlatform);
return new OracleSchemaManager($conn, $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php b/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php
index b94d0b1e4..91bc6a7e1 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php
@@ -15,8 +15,7 @@
*/
final class EasyConnectString
{
- /** @var string */
- private $string;
+ private string $string;
private function __construct(string $string)
{
@@ -87,9 +86,7 @@ public static function fromConnectionParameters(array $params): self
]);
}
- /**
- * @param mixed[] $params
- */
+ /** @param mixed[] $params */
private static function renderParams(array $params): string
{
$chunks = [];
@@ -107,9 +104,7 @@ private static function renderParams(array $params): string
return implode('', $chunks);
}
- /**
- * @param mixed $value
- */
+ /** @param mixed $value */
private static function renderValue($value): string
{
if (is_array($value)) {
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php
index adc0be095..69e4baff3 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php
@@ -31,7 +31,7 @@ public function createDatabasePlatformForVersion($version)
if (preg_match('/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/', $version, $versionParts) === 0) {
throw Exception::invalidPlatformVersionSpecified(
$version,
- '..'
+ '..',
);
}
@@ -48,7 +48,7 @@ public function createDatabasePlatformForVersion($version)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5060',
'PostgreSQL 9 support is deprecated and will be removed in DBAL 4.'
- . ' Consider upgrading to Postgres 10 or later.'
+ . ' Consider upgrading to Postgres 10 or later.',
);
return new PostgreSQL94Platform();
@@ -64,9 +64,18 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link PostgreSQLPlatform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractPostgreSQLDriver::getSchemaManager() is deprecated.'
+ . ' Use PostgreSQLPlatform::createSchemaManager() instead.',
+ );
+
assert($platform instanceof PostgreSQLPlatform);
return new PostgreSQLSchemaManager($conn, $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php
index adf31f554..c5d79feef 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php
@@ -8,7 +8,9 @@
use Doctrine\DBAL\Driver\API\SQLSrv\ExceptionConverter;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
+use Doctrine\DBAL\Platforms\SQLServerPlatform;
use Doctrine\DBAL\Schema\SQLServerSchemaManager;
+use Doctrine\Deprecations\Deprecation;
use function assert;
@@ -27,10 +29,19 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link SQLServerPlatform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
- assert($platform instanceof SQLServer2012Platform);
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractSQLServerDriver::getSchemaManager() is deprecated.'
+ . ' Use SQLServerPlatform::createSchemaManager() instead.',
+ );
+
+ assert($platform instanceof SQLServerPlatform);
return new SQLServerSchemaManager($conn, $platform);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php
index b6479267b..3c9d2c714 100644
--- a/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php
@@ -9,6 +9,7 @@
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\SqlitePlatform;
use Doctrine\DBAL\Schema\SqliteSchemaManager;
+use Doctrine\Deprecations\Deprecation;
use function assert;
@@ -27,9 +28,18 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link SqlitePlatform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractSQLiteDriver::getSchemaManager() is deprecated.'
+ . ' Use SqlitePlatform::createSchemaManager() instead.',
+ );
+
assert($platform instanceof SqlitePlatform);
return new SqliteSchemaManager($conn, $platform);
diff --git a/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver/Middleware/EnableForeignKeys.php b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver/Middleware/EnableForeignKeys.php
new file mode 100644
index 000000000..a5eee7484
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver/Middleware/EnableForeignKeys.php
@@ -0,0 +1,28 @@
+exec('PRAGMA foreign_keys=ON');
+
+ return $connection;
+ }
+ };
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Exception.php b/app/vendor/doctrine/dbal/src/Driver/Exception.php
index 0b108963a..f963563b8 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Exception.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Exception.php
@@ -6,9 +6,7 @@
use Throwable;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
interface Exception extends Throwable
{
/**
diff --git a/app/vendor/doctrine/dbal/src/Driver/Exception/UnknownParameterType.php b/app/vendor/doctrine/dbal/src/Driver/Exception/UnknownParameterType.php
index c989184d6..01a9b3d0c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Exception/UnknownParameterType.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Exception/UnknownParameterType.php
@@ -15,9 +15,7 @@
*/
final class UnknownParameterType extends AbstractException
{
- /**
- * @param mixed $type
- */
+ /** @param mixed $type */
public static function new($type): self
{
return new self(sprintf('Unknown parameter type, %d given.', $type));
diff --git a/app/vendor/doctrine/dbal/src/Driver/FetchUtils.php b/app/vendor/doctrine/dbal/src/Driver/FetchUtils.php
index 240cef4a0..50e02b1a2 100644
--- a/app/vendor/doctrine/dbal/src/Driver/FetchUtils.php
+++ b/app/vendor/doctrine/dbal/src/Driver/FetchUtils.php
@@ -4,9 +4,7 @@
namespace Doctrine\DBAL\Driver;
-/**
- * @internal
- */
+/** @internal */
final class FetchUtils
{
/**
diff --git a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php
index 4f2a29266..6a2aa802e 100644
--- a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php
@@ -104,11 +104,11 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
}
- return db2_last_insert_id($this->connection);
+ return db2_last_insert_id($this->connection) ?? false;
}
public function beginTransaction(): bool
@@ -143,9 +143,7 @@ public function rollBack(): bool
return $result;
}
- /**
- * @return resource
- */
+ /** @return resource */
public function getNativeConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php
index e1ec42f2d..6379efcfe 100644
--- a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php
+++ b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php
@@ -13,8 +13,7 @@
*/
final class DataSourceName
{
- /** @var string */
- private $string;
+ private string $string;
private function __construct(string $string)
{
diff --git a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php
index 86821688c..231c9d473 100644
--- a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php
+++ b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php
@@ -13,9 +13,7 @@
*/
final class CannotCopyStreamToStream extends AbstractException
{
- /**
- * @psalm-param array{message: string}|null $error
- */
+ /** @psalm-param array{message: string}|null $error */
public static function new(?array $error): self
{
$message = 'Could not copy source stream to temporary file';
diff --git a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCreateTemporaryFile.php b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCreateTemporaryFile.php
index 587ae65f4..63f7ca1e2 100644
--- a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCreateTemporaryFile.php
+++ b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCreateTemporaryFile.php
@@ -13,9 +13,7 @@
*/
final class CannotCreateTemporaryFile extends AbstractException
{
- /**
- * @psalm-param array{message: string}|null $error
- */
+ /** @psalm-param array{message: string}|null $error */
public static function new(?array $error): self
{
$message = 'Could not create temporary file';
diff --git a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotWriteToTemporaryFile.php b/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotWriteToTemporaryFile.php
deleted file mode 100644
index f2287b300..000000000
--- a/app/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotWriteToTemporaryFile.php
+++ /dev/null
@@ -1,29 +0,0 @@
-
*/
- private $lobs = [];
+ private array $lobs = [];
/**
* @internal The statement can be only instantiated by its driver connection.
@@ -63,33 +62,50 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool
{
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
return $this->bindParam($param, $value, $type);
}
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
switch ($type) {
case ParameterType::INTEGER:
$this->bind($param, $variable, DB2_PARAM_IN, DB2_LONG);
break;
case ParameterType::LARGE_OBJECT:
- if (isset($this->lobs[$param])) {
- [, $handle] = $this->lobs[$param];
- fclose($handle);
- }
-
- $handle = $this->createTemporaryFile();
- $path = stream_get_meta_data($handle)['uri'];
-
- $this->bind($param, $path, DB2_PARAM_FILE, DB2_BINARY);
-
- $this->lobs[$param] = [&$variable, $handle];
+ $this->lobs[$param] = &$variable;
break;
default:
@@ -108,9 +124,9 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le
*/
private function bind($position, &$variable, int $parameterType, int $dataType): void
{
- $this->bindParam[$position] =& $variable;
+ $this->parameters[$position] =& $variable;
- if (! db2_bind_param($this->stmt, $position, 'variable', $parameterType, $dataType)) {
+ if (! db2_bind_param($this->stmt, $position, '', $parameterType, $dataType)) {
throw StatementError::new($this->stmt);
}
}
@@ -120,29 +136,20 @@ private function bind($position, &$variable, int $parameterType, int $dataType):
*/
public function execute($params = null): ResultInterface
{
- if ($params === null) {
- ksort($this->bindParam);
-
- $params = [];
-
- foreach ($this->bindParam as $value) {
- $params[] = $value;
- }
+ if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
}
- foreach ($this->lobs as [$source, $target]) {
- if (is_resource($source)) {
- $this->copyStreamToStream($source, $target);
-
- continue;
- }
-
- $this->writeStringToStream($source, $target);
- }
+ $handles = $this->bindLobs();
- $result = @db2_execute($this->stmt, $params);
+ $result = @db2_execute($this->stmt, $params ?? $this->parameters);
- foreach ($this->lobs as [, $handle]) {
+ foreach ($handles as $handle) {
fclose($handle);
}
@@ -155,6 +162,31 @@ public function execute($params = null): ResultInterface
return new Result($this->stmt);
}
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function bindLobs(): array
+ {
+ $handles = [];
+
+ foreach ($this->lobs as $param => $value) {
+ if (is_resource($value)) {
+ $handle = $handles[] = $this->createTemporaryFile();
+ $path = stream_get_meta_data($handle)['uri'];
+
+ $this->copyStreamToStream($value, $handle);
+
+ $this->bind($param, $path, DB2_PARAM_FILE, DB2_BINARY);
+ } else {
+ $this->bind($param, $value, DB2_PARAM_IN, DB2_CHAR);
+ }
+ }
+
+ return $handles;
+ }
+
/**
* @return resource
*
@@ -183,16 +215,4 @@ private function copyStreamToStream($source, $target): void
throw CannotCopyStreamToStream::new(error_get_last());
}
}
-
- /**
- * @param resource $target
- *
- * @throws Exception
- */
- private function writeStringToStream(string $string, $target): void
- {
- if (@fwrite($target, $string) === false) {
- throw CannotWriteToTemporaryFile::new(error_get_last());
- }
- }
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php
index a0e69a5e7..6dab1cf13 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php
@@ -16,8 +16,7 @@
abstract class AbstractConnectionMiddleware implements ServerInfoAwareConnection
{
- /** @var Connection */
- private $wrappedConnection;
+ private Connection $wrappedConnection;
public function __construct(Connection $wrappedConnection)
{
@@ -56,7 +55,7 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
}
@@ -99,15 +98,13 @@ public function getServerVersion()
return $this->wrappedConnection->getServerVersion();
}
- /**
- * @return resource|object
- */
+ /** @return resource|object */
public function getNativeConnection()
{
if (! method_exists($this->wrappedConnection, 'getNativeConnection')) {
throw new LogicException(sprintf(
'The driver connection %s does not support accessing the native connection.',
- get_class($this->wrappedConnection)
+ get_class($this->wrappedConnection),
));
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php
index ab1f508f7..6914176f4 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php
@@ -7,11 +7,11 @@
use Doctrine\DBAL\Driver\API\ExceptionConverter;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\VersionAwarePlatformDriver;
+use Doctrine\Deprecations\Deprecation;
abstract class AbstractDriverMiddleware implements VersionAwarePlatformDriver
{
- /** @var Driver */
- private $wrappedDriver;
+ private Driver $wrappedDriver;
public function __construct(Driver $wrappedDriver)
{
@@ -36,9 +36,18 @@ public function getDatabasePlatform()
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@link AbstractPlatform::createSchemaManager()} instead.
*/
public function getSchemaManager(Connection $conn, AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5458',
+ 'AbstractDriverMiddleware::getSchemaManager() is deprecated.'
+ . ' Use AbstractPlatform::createSchemaManager() instead.',
+ );
+
return $this->wrappedDriver->getSchemaManager($conn, $platform);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php
index ebc63c570..de90207b0 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php
@@ -6,8 +6,7 @@
abstract class AbstractResultMiddleware implements Result
{
- /** @var Result */
- private $wrappedResult;
+ private Result $wrappedResult;
public function __construct(Result $result)
{
diff --git a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php
index a646cd30c..70e8df637 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php
@@ -5,11 +5,13 @@
use Doctrine\DBAL\Driver\Result;
use Doctrine\DBAL\Driver\Statement;
use Doctrine\DBAL\ParameterType;
+use Doctrine\Deprecations\Deprecation;
+
+use function func_num_args;
abstract class AbstractStatementMiddleware implements Statement
{
- /** @var Statement */
- private $wrappedStatement;
+ private Statement $wrappedStatement;
public function __construct(Statement $wrappedStatement)
{
@@ -21,14 +23,41 @@ public function __construct(Statement $wrappedStatement)
*/
public function bindValue($param, $value, $type = ParameterType::STRING)
{
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
return $this->wrappedStatement->bindValue($param, $value, $type);
}
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
return $this->wrappedStatement->bindParam($param, $variable, $type, $length);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php
index 8453f7406..78112d825 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php
@@ -18,12 +18,9 @@ final class Connection implements ServerInfoAwareConnection
*/
public const OPTION_FLAGS = 'flags';
- /** @var mysqli */
- private $connection;
+ private mysqli $connection;
- /**
- * @internal The connection can be only instantiated by its driver.
- */
+ /** @internal The connection can be only instantiated by its driver. */
public function __construct(mysqli $connection)
{
$this->connection = $connection;
@@ -42,7 +39,7 @@ public function getWrappedResourceHandle(): mysqli
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5037',
'%s is deprecated, call getNativeConnection() instead.',
- __METHOD__
+ __METHOD__,
);
return $this->getNativeConnection();
@@ -105,7 +102,7 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php
index 41a66a732..af305230f 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php
@@ -64,7 +64,7 @@ public function connect(array $params)
$params['dbname'] ?? null,
$params['port'] ?? null,
$params['unix_socket'] ?? null,
- $flags
+ $flags,
);
} catch (mysqli_sql_exception $e) {
throw ConnectionFailed::upcast($e);
@@ -116,7 +116,7 @@ private function withSecure(array $initializers, array $params): array
$params['ssl_cert'] ?? '',
$params['ssl_ca'] ?? '',
$params['ssl_capath'] ?? '',
- $params['ssl_cipher'] ?? ''
+ $params['ssl_cipher'] ?? '',
);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidCharset.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidCharset.php
index 763b4eb77..8c6bbb476 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidCharset.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidCharset.php
@@ -23,7 +23,7 @@ public static function fromCharset(mysqli $connection, string $charset): self
return new self(
sprintf('Failed to set charset "%s": %s', $charset, $connection->error),
$connection->sqlstate,
- $connection->errno
+ $connection->errno,
);
}
@@ -36,7 +36,7 @@ public static function upcast(mysqli_sql_exception $exception, string $charset):
sprintf('Failed to set charset "%s": %s', $charset, $exception->getMessage()),
$p->getValue($exception),
(int) $exception->getCode(),
- $exception
+ $exception,
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php
index 962175679..6fb46316e 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php
@@ -15,13 +15,11 @@
*/
final class InvalidOption extends AbstractException
{
- /**
- * @param mixed $value
- */
+ /** @param mixed $value */
public static function fromOption(int $option, $value): self
{
return new self(
- sprintf('Failed to set option %d with value "%s"', $option, $value)
+ sprintf('Failed to set option %d with value "%s"', $option, $value),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/NonStreamResourceUsedAsLargeObject.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/NonStreamResourceUsedAsLargeObject.php
index c4884c0cd..566d63638 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/NonStreamResourceUsedAsLargeObject.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/NonStreamResourceUsedAsLargeObject.php
@@ -18,7 +18,7 @@ final class NonStreamResourceUsedAsLargeObject extends AbstractException
public static function new(int $parameter): self
{
return new self(
- sprintf('The resource passed as a LARGE_OBJECT parameter #%d must be of type "stream"', $parameter)
+ sprintf('The resource passed as a LARGE_OBJECT parameter #%d must be of type "stream"', $parameter),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php
index 9966da46b..efab67e22 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php
@@ -9,8 +9,6 @@
interface Initializer
{
- /**
- * @throws Exception
- */
+ /** @throws Exception */
public function initialize(mysqli $connection): void;
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Charset.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Charset.php
index b32ecaf91..8143a265c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Charset.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Charset.php
@@ -11,8 +11,7 @@
final class Charset implements Initializer
{
- /** @var string */
- private $charset;
+ private string $charset;
public function __construct(string $charset)
{
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php
index bcf2fc2d1..2e66f8d69 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php
@@ -13,11 +13,9 @@
final class Options implements Initializer
{
/** @var array */
- private $options;
+ private array $options;
- /**
- * @param array $options
- */
+ /** @param array $options */
public function __construct(array $options)
{
$this->options = $options;
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php
index 9d6db4e0e..643475e58 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php
@@ -9,20 +9,11 @@
final class Secure implements Initializer
{
- /** @var string */
- private $key;
-
- /** @var string */
- private $cert;
-
- /** @var string */
- private $ca;
-
- /** @var string */
- private $capath;
-
- /** @var string */
- private $cipher;
+ private string $key;
+ private string $cert;
+ private string $ca;
+ private string $capath;
+ private string $cipher;
public function __construct(string $key, string $cert, string $ca, string $capath, string $cipher)
{
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php
index ac36df033..c096e6d76 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php
@@ -18,16 +18,13 @@
final class Result implements ResultInterface
{
- /** @var mysqli_stmt */
- private $statement;
+ private mysqli_stmt $statement;
/**
* Whether the statement result has columns. The property should be used only after the result metadata
* has been fetched ({@see $metadataFetched}). Otherwise, the property value is undetermined.
- *
- * @var bool
*/
- private $hasColumns = false;
+ private bool $hasColumns = false;
/**
* Mapping of statement result column indexes to their names. The property should be used only
@@ -35,10 +32,10 @@ final class Result implements ResultInterface
*
* @var array
*/
- private $columnNames = [];
+ private array $columnNames = [];
/** @var mixed[] */
- private $boundValues = [];
+ private array $boundValues = [];
/**
* @internal The result can be only instantiated by its driver connection or statement.
diff --git a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php
index 6e493c9e5..7b7c93129 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php
@@ -10,6 +10,7 @@
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
+use Doctrine\Deprecations\Deprecation;
use mysqli_sql_exception;
use mysqli_stmt;
@@ -18,6 +19,7 @@
use function count;
use function feof;
use function fread;
+use function func_num_args;
use function get_resource_type;
use function is_int;
use function is_resource;
@@ -26,7 +28,7 @@
final class Statement implements StatementInterface
{
/** @var string[] */
- private static $paramTypeMap = [
+ private static array $paramTypeMap = [
ParameterType::ASCII => 's',
ParameterType::STRING => 's',
ParameterType::BINARY => 's',
@@ -36,25 +38,21 @@ final class Statement implements StatementInterface
ParameterType::LARGE_OBJECT => 'b',
];
- /** @var mysqli_stmt */
- private $stmt;
+ private mysqli_stmt $stmt;
/** @var mixed[] */
- private $boundValues;
+ private array $boundValues;
- /** @var string */
- private $types;
+ private string $types;
/**
* Contains ref values for bindValue().
*
* @var mixed[]
*/
- private $values = [];
+ private array $values = [];
- /**
- * @internal The statement can be only instantiated by its driver connection.
- */
+ /** @internal The statement can be only instantiated by its driver connection. */
public function __construct(mysqli_stmt $stmt)
{
$this->stmt = $stmt;
@@ -66,11 +64,29 @@ public function __construct(mysqli_stmt $stmt)
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
if (! isset(self::$paramTypeMap[$type])) {
throw UnknownParameterType::new($type);
}
@@ -88,6 +104,15 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool
{
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
if (! isset(self::$paramTypeMap[$type])) {
throw UnknownParameterType::new($type);
}
@@ -104,6 +129,15 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool
*/
public function execute($params = null): ResultInterface
{
+ if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+ }
+
if ($params !== null && count($params) > 0) {
if (! $this->bindUntypedValues($params)) {
throw StatementError::new($this->stmt);
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php
index 46ff41866..da4f61aeb 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php
@@ -29,11 +29,8 @@ final class Connection implements ServerInfoAwareConnection
/** @var resource */
private $connection;
- /** @var Parser */
- private $parser;
-
- /** @var ExecutionMode */
- private $executionMode;
+ private Parser $parser;
+ private ExecutionMode $executionMode;
/**
* @internal The connection can be only instantiated by its driver.
@@ -61,9 +58,7 @@ public function getServerVersion(): string
return $matches[1];
}
- /**
- * @throws Parser\Exception
- */
+ /** @throws Parser\Exception */
public function prepare(string $sql): DriverStatement
{
$visitor = new ConvertPositionalToNamedPlaceholders();
@@ -126,7 +121,7 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
$result = $this->query('SELECT ' . $name . '.CURRVAL FROM DUAL')->fetchOne();
@@ -167,9 +162,7 @@ public function rollBack(): bool
return true;
}
- /**
- * @return resource
- */
+ /** @return resource */
public function getNativeConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php
index 483879d47..e2a112629 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php
@@ -18,10 +18,10 @@
final class ConvertPositionalToNamedPlaceholders implements Visitor
{
/** @var list */
- private $buffer = [];
+ private array $buffer = [];
/** @var array */
- private $parameterMap = [];
+ private array $parameterMap = [];
public function acceptOther(string $sql): void
{
@@ -48,9 +48,7 @@ public function getSQL(): string
return implode('', $this->buffer);
}
- /**
- * @return array
- */
+ /** @return array */
public function getParameterMap(): array
{
return $this->parameterMap;
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/Error.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/Error.php
index 7a27141fe..6abdf233c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/Error.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/Error.php
@@ -16,9 +16,7 @@
*/
final class Error extends AbstractException
{
- /**
- * @param resource $resource
- */
+ /** @param resource $resource */
public static function new($resource): self
{
$error = oci_error($resource);
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/NonTerminatedStringLiteral.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/NonTerminatedStringLiteral.php
index c26fe2990..776728fbe 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/NonTerminatedStringLiteral.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/NonTerminatedStringLiteral.php
@@ -20,8 +20,8 @@ public static function new(int $offset): self
return new self(
sprintf(
'The statement contains non-terminated string literal starting at offset %d.',
- $offset
- )
+ $offset,
+ ),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/UnknownParameterIndex.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/UnknownParameterIndex.php
index ea56c549e..2cd3fe796 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/UnknownParameterIndex.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Exception/UnknownParameterIndex.php
@@ -18,7 +18,7 @@ final class UnknownParameterIndex extends AbstractException
public static function new(int $index): self
{
return new self(
- sprintf('Could not find variable mapping with index %d, in the SQL statement', $index)
+ sprintf('Could not find variable mapping with index %d, in the SQL statement', $index),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/ExecutionMode.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/ExecutionMode.php
index 88c00216f..8efb93648 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/ExecutionMode.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/ExecutionMode.php
@@ -11,8 +11,7 @@
*/
final class ExecutionMode
{
- /** @var bool */
- private $isAutoCommitEnabled = true;
+ private bool $isAutoCommitEnabled = true;
public function enableAutoCommit(): void
{
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php
new file mode 100644
index 000000000..30896a23c
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php
@@ -0,0 +1,36 @@
+exec(
+ 'ALTER SESSION SET'
+ . " NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"
+ . " NLS_TIME_FORMAT = 'HH24:MI:SS'"
+ . " NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"
+ . " NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"
+ . " NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS TZH:TZM'"
+ . " NLS_NUMERIC_CHARACTERS = '.,'",
+ );
+
+ return $connection;
+ }
+ };
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Result.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Result.php
index 8f77da759..08add4faf 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Result.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Result.php
@@ -129,9 +129,7 @@ private function fetch(int $mode)
return $result;
}
- /**
- * @return array
- */
+ /** @return array */
private function fetchAll(int $mode, int $fetchStructure): array
{
oci_fetch_all(
@@ -139,7 +137,7 @@ private function fetchAll(int $mode, int $fetchStructure): array
$result,
0,
-1,
- $mode | OCI_RETURN_NULLS | $fetchStructure | OCI_RETURN_LOBS
+ $mode | OCI_RETURN_NULLS | $fetchStructure | OCI_RETURN_LOBS,
);
return $result;
diff --git a/app/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php b/app/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php
index 8caa9f28b..e707f721c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php
@@ -7,7 +7,9 @@
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
+use Doctrine\Deprecations\Deprecation;
+use function func_num_args;
use function is_int;
use function oci_bind_by_name;
use function oci_execute;
@@ -30,10 +32,9 @@ final class Statement implements StatementInterface
private $statement;
/** @var array */
- private $parameterMap;
+ private array $parameterMap;
- /** @var ExecutionMode */
- private $executionMode;
+ private ExecutionMode $executionMode;
/**
* @internal The statement can be only instantiated by its driver connection.
@@ -55,14 +56,41 @@ public function __construct($connection, $statement, array $parameterMap, Execut
*/
public function bindValue($param, $value, $type = ParameterType::STRING): bool
{
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
return $this->bindParam($param, $value, $type);
}
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
if (is_int($param)) {
if (! isset($this->parameterMap[$param])) {
throw UnknownParameterIndex::new($param);
@@ -72,10 +100,14 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le
}
if ($type === ParameterType::LARGE_OBJECT) {
- $lob = oci_new_descriptor($this->connection, OCI_D_LOB);
- $lob->writeTemporary($variable, OCI_TEMP_BLOB);
+ if ($variable !== null) {
+ $lob = oci_new_descriptor($this->connection, OCI_D_LOB);
+ $lob->writeTemporary($variable, OCI_TEMP_BLOB);
- $variable =& $lob;
+ $variable =& $lob;
+ } else {
+ $type = ParameterType::STRING;
+ }
}
return oci_bind_by_name(
@@ -83,7 +115,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le
$param,
$variable,
$length ?? -1,
- $this->convertParameterType($type)
+ $this->convertParameterType($type),
);
}
@@ -110,11 +142,18 @@ private function convertParameterType(int $type): int
public function execute($params = null): ResultInterface
{
if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+
foreach ($params as $key => $val) {
if (is_int($key)) {
- $this->bindValue($key + 1, $val);
+ $this->bindValue($key + 1, $val, ParameterType::STRING);
} else {
- $this->bindValue($key, $val);
+ $this->bindValue($key, $val, ParameterType::STRING);
}
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/Connection.php b/app/vendor/doctrine/dbal/src/Driver/PDO/Connection.php
index 505acba5f..e0b6221f4 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/Connection.php
@@ -15,12 +15,9 @@
final class Connection implements ServerInfoAwareConnection
{
- /** @var PDO */
- private $connection;
+ private PDO $connection;
- /**
- * @internal The connection can be only instantiated by its driver.
- */
+ /** @internal The connection can be only instantiated by its driver. */
public function __construct(PDO $connection)
{
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
@@ -99,7 +96,7 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
return $this->connection->lastInsertId($name);
@@ -128,16 +125,14 @@ public function getNativeConnection(): PDO
return $this->connection;
}
- /**
- * @deprecated Call {@see getNativeConnection()} instead.
- */
+ /** @deprecated Call {@see getNativeConnection()} instead. */
public function getWrappedConnection(): PDO
{
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5037',
'%s is deprecated, call getNativeConnection() instead.',
- __METHOD__
+ __METHOD__,
);
return $this->getNativeConnection();
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/Exception.php b/app/vendor/doctrine/dbal/src/Driver/PDO/Exception.php
index 7036a0e43..fbb81253b 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/Exception.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/Exception.php
@@ -19,9 +19,7 @@ public static function new(PDOException $exception): self
if ($exception->errorInfo !== null) {
[$sqlState, $code] = $exception->errorInfo;
- if ($code === null) {
- $code = 0;
- }
+ $code ??= 0;
} else {
$code = $exception->getCode();
$sqlState = null;
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php b/app/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php
index 8aeb26964..505b0fa69 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php
@@ -28,7 +28,7 @@ public function connect(array $params)
$this->constructPdoDsn($params),
$params['user'] ?? '',
$params['password'] ?? '',
- $driverOptions
+ $driverOptions,
);
} catch (PDOException $exception) {
throw Exception::new($exception);
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php b/app/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php
index 705db6118..fb9944bb8 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php
@@ -28,7 +28,7 @@ public function connect(array $params)
$this->constructPdoDsn($params),
$params['user'] ?? '',
$params['password'] ?? '',
- $driverOptions
+ $driverOptions,
);
} catch (PDOException $exception) {
throw Exception::new($exception);
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php b/app/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
index b90e47262..caa9cd606 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
@@ -5,6 +5,7 @@
use Doctrine\DBAL\Driver\AbstractPostgreSQLDriver;
use Doctrine\DBAL\Driver\PDO\Connection;
use Doctrine\DBAL\Driver\PDO\Exception;
+use Doctrine\Deprecations\Deprecation;
use PDO;
use PDOException;
@@ -28,7 +29,7 @@ public function connect(array $params)
$this->constructPdoDsn($params),
$params['user'] ?? '',
$params['password'] ?? '',
- $driverOptions
+ $driverOptions,
);
} catch (PDOException $exception) {
throw Exception::new($exception);
@@ -73,11 +74,25 @@ private function constructPdoDsn(array $params): string
if (isset($params['dbname'])) {
$dsn .= 'dbname=' . $params['dbname'] . ';';
} elseif (isset($params['default_dbname'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5705',
+ 'The "default_dbname" connection parameter is deprecated. Use "dbname" instead.',
+ );
+
$dsn .= 'dbname=' . $params['default_dbname'] . ';';
} else {
+ if (isset($params['user']) && $params['user'] !== 'postgres') {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5705',
+ 'Relying on the DBAL connecting to the "postgres" database by default is deprecated.'
+ . ' Unless you want to have the server determine the default database for the connection,'
+ . ' specify the database name explicitly.',
+ );
+ }
+
// Used for temporary connections to allow operations like dropping the database currently connected to.
- // Connecting without an explicit database does not work, therefore "postgres" database is used
- // as it is mostly present in every server setup.
$dsn .= 'dbname=postgres;';
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/Result.php b/app/vendor/doctrine/dbal/src/Driver/PDO/Result.php
index b0efdf2e1..88957d23c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/Result.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/Result.php
@@ -11,12 +11,9 @@
final class Result implements ResultInterface
{
- /** @var PDOStatement */
- private $statement;
+ private PDOStatement $statement;
- /**
- * @internal The result can be only instantiated by its driver connection or statement.
- */
+ /** @internal The result can be only instantiated by its driver connection or statement. */
public function __construct(PDOStatement $statement)
{
$this->statement = $statement;
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php
index 0c34d4b9b..9015f5558 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php
@@ -10,8 +10,7 @@
final class Connection extends AbstractConnectionMiddleware
{
- /** @var PDOConnection */
- private $connection;
+ private PDOConnection $connection;
public function __construct(PDOConnection $connection)
{
@@ -23,7 +22,7 @@ public function __construct(PDOConnection $connection)
public function prepare(string $sql): StatementInterface
{
return new Statement(
- $this->connection->prepare($sql)
+ $this->connection->prepare($sql),
);
}
@@ -39,11 +38,15 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
- return $this->prepare('SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?')
- ->execute([$name])
+ $statement = $this->prepare(
+ 'SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?',
+ );
+ $statement->bindValue(1, $name);
+
+ return $statement->execute()
->fetchOne();
}
@@ -52,16 +55,14 @@ public function getNativeConnection(): PDO
return $this->connection->getNativeConnection();
}
- /**
- * @deprecated Call {@see getNativeConnection()} instead.
- */
+ /** @deprecated Call {@see getNativeConnection()} instead. */
public function getWrappedConnection(): PDO
{
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5037',
'%s is deprecated, call getNativeConnection() instead.',
- __METHOD__
+ __METHOD__,
);
return $this->connection->getWrappedConnection();
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php
index b664950f2..eba640e6e 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php
@@ -42,7 +42,7 @@ public function connect(array $params)
$this->constructDsn($params, $dsnOptions),
$params['user'] ?? '',
$params['password'] ?? '',
- $driverOptions
+ $driverOptions,
);
} catch (\PDOException $exception) {
throw PDOException::new($exception);
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php
index 43b07a3ab..edabd410a 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php
@@ -12,12 +12,9 @@
final class Statement extends AbstractStatementMiddleware
{
- /** @var PDOStatement */
- private $statement;
+ private PDOStatement $statement;
- /**
- * @internal The statement can be only instantiated by its driver connection.
- */
+ /** @internal The statement can be only instantiated by its driver connection. */
public function __construct(PDOStatement $statement)
{
parent::__construct($statement);
@@ -28,6 +25,8 @@ public function __construct(PDOStatement $statement)
/**
* {@inheritdoc}
*
+ * @deprecated Use {@see bindValue()} instead.
+ *
* @param string|int $param
* @param mixed $variable
* @param int $type
@@ -41,20 +40,34 @@ public function bindParam(
$length = null,
$driverOptions = null
): bool {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
if (func_num_args() > 4) {
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4533',
- 'The $driverOptions argument of Statement::bindParam() is deprecated.'
+ 'The $driverOptions argument of Statement::bindParam() is deprecated.',
);
}
switch ($type) {
case ParameterType::LARGE_OBJECT:
case ParameterType::BINARY:
- if ($driverOptions === null) {
- $driverOptions = PDO::SQLSRV_ENCODING_BINARY;
- }
+ $driverOptions ??= PDO::SQLSRV_ENCODING_BINARY;
break;
@@ -73,6 +86,15 @@ public function bindParam(
*/
public function bindValue($param, $value, $type = ParameterType::STRING): bool
{
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
return $this->bindParam($param, $value, $type);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php
index 5e72de08b..4840b6788 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php
@@ -3,23 +3,15 @@
namespace Doctrine\DBAL\Driver\PDO\SQLite;
use Doctrine\DBAL\Driver\AbstractSQLiteDriver;
+use Doctrine\DBAL\Driver\API\SQLite\UserDefinedFunctions;
use Doctrine\DBAL\Driver\PDO\Connection;
use Doctrine\DBAL\Driver\PDO\Exception;
-use Doctrine\DBAL\Platforms\SqlitePlatform;
+use Doctrine\Deprecations\Deprecation;
use PDO;
use PDOException;
-use function array_merge;
-
final class Driver extends AbstractSQLiteDriver
{
- /** @var mixed[] */
- private $userDefinedFunctions = [
- 'sqrt' => ['callback' => [SqlitePlatform::class, 'udfSqrt'], 'numArgs' => 1],
- 'mod' => ['callback' => [SqlitePlatform::class, 'udfMod'], 'numArgs' => 2],
- 'locate' => ['callback' => [SqlitePlatform::class, 'udfLocate'], 'numArgs' => -1],
- ];
-
/**
* {@inheritdoc}
*
@@ -27,13 +19,18 @@ final class Driver extends AbstractSQLiteDriver
*/
public function connect(array $params)
{
- $driverOptions = $params['driverOptions'] ?? [];
+ $driverOptions = $params['driverOptions'] ?? [];
+ $userDefinedFunctions = [];
if (isset($driverOptions['userDefinedFunctions'])) {
- $this->userDefinedFunctions = array_merge(
- $this->userDefinedFunctions,
- $driverOptions['userDefinedFunctions']
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5742',
+ 'The SQLite-specific driver option "userDefinedFunctions" is deprecated.'
+ . ' Register function directly on the native connection instead.',
);
+
+ $userDefinedFunctions = $driverOptions['userDefinedFunctions'];
unset($driverOptions['userDefinedFunctions']);
}
@@ -42,15 +39,16 @@ public function connect(array $params)
$this->constructPdoDsn($params),
$params['user'] ?? '',
$params['password'] ?? '',
- $driverOptions
+ $driverOptions,
);
} catch (PDOException $exception) {
throw Exception::new($exception);
}
- foreach ($this->userDefinedFunctions as $fn => $data) {
- $pdo->sqliteCreateFunction($fn, $data['callback'], $data['numArgs']);
- }
+ UserDefinedFunctions::register(
+ [$pdo, 'sqliteCreateFunction'],
+ $userDefinedFunctions,
+ );
return new Connection($pdo);
}
diff --git a/app/vendor/doctrine/dbal/src/Driver/PDO/Statement.php b/app/vendor/doctrine/dbal/src/Driver/PDO/Statement.php
index bb137708a..aaf494ccb 100644
--- a/app/vendor/doctrine/dbal/src/Driver/PDO/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/PDO/Statement.php
@@ -28,12 +28,9 @@ final class Statement implements StatementInterface
ParameterType::BOOLEAN => PDO::PARAM_BOOL,
];
- /** @var PDOStatement */
- private $stmt;
+ private PDOStatement $stmt;
- /**
- * @internal The statement can be only instantiated by its driver connection.
- */
+ /** @internal The statement can be only instantiated by its driver connection. */
public function __construct(PDOStatement $stmt)
{
$this->stmt = $stmt;
@@ -44,6 +41,15 @@ public function __construct(PDOStatement $stmt)
*/
public function bindValue($param, $value, $type = ParameterType::STRING)
{
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
$type = $this->convertParamType($type);
try {
@@ -56,6 +62,8 @@ public function bindValue($param, $value, $type = ParameterType::STRING)
/**
* {@inheritDoc}
*
+ * @deprecated Use {@see bindValue()} instead.
+ *
* @param mixed $param
* @param mixed $variable
* @param int $type
@@ -69,11 +77,27 @@ public function bindParam(
$length = null,
$driverOptions = null
): bool {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
if (func_num_args() > 4) {
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4533',
- 'The $driverOptions argument of Statement::bindParam() is deprecated.'
+ 'The $driverOptions argument of Statement::bindParam() is deprecated.',
);
}
@@ -85,7 +109,7 @@ public function bindParam(
$variable,
$type,
$length ?? 0,
- ...array_slice(func_get_args(), 4)
+ ...array_slice(func_get_args(), 4),
);
} catch (PDOException $exception) {
throw Exception::new($exception);
@@ -97,6 +121,15 @@ public function bindParam(
*/
public function execute($params = null): ResultInterface
{
+ if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+ }
+
try {
$this->stmt->execute($params);
} catch (PDOException $exception) {
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php
index 0295db7e5..ba1c58c17 100644
--- a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php
@@ -97,7 +97,7 @@ public function lastInsertId($name = null)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4687',
- 'The usage of Connection::lastInsertId() with a sequence name is deprecated.'
+ 'The usage of Connection::lastInsertId() with a sequence name is deprecated.',
);
$result = $this->prepare('SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?')
@@ -136,9 +136,7 @@ public function rollBack(): bool
return true;
}
- /**
- * @return resource
- */
+ /** @return resource */
public function getNativeConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Exception/Error.php b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Exception/Error.php
index d3e633b5d..f39d5fc4c 100644
--- a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Exception/Error.php
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Exception/Error.php
@@ -25,11 +25,8 @@ public static function new(): self
$code = 0;
foreach ((array) sqlsrv_errors(SQLSRV_ERR_ERRORS) as $error) {
- $message .= 'SQLSTATE [' . $error['SQLSTATE'] . ', ' . $error['code'] . ']: ' . $error['message'] . "\n";
-
- if ($sqlState === null) {
- $sqlState = $error['SQLSTATE'];
- }
+ $message .= 'SQLSTATE [' . $error['SQLSTATE'] . ', ' . $error['code'] . ']: ' . $error['message'] . "\n";
+ $sqlState ??= $error['SQLSTATE'];
if ($code !== 0) {
continue;
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Result.php b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Result.php
index 0e24002cc..db17e928d 100644
--- a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Result.php
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Result.php
@@ -110,9 +110,7 @@ public function free(): void
}
}
- /**
- * @return mixed|false
- */
+ /** @return mixed|false */
private function fetch(int $fetchType)
{
return sqlsrv_fetch_array($this->statement, $fetchType) ?? false;
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php
index 035567a35..1244ba51a 100644
--- a/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php
@@ -7,8 +7,10 @@
use Doctrine\DBAL\Driver\SQLSrv\Exception\Error;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
+use Doctrine\Deprecations\Deprecation;
use function assert;
+use function func_num_args;
use function is_int;
use function sqlsrv_execute;
use function SQLSRV_PHPTYPE_STREAM;
@@ -32,10 +34,8 @@ final class Statement implements StatementInterface
/**
* The SQL statement to execute.
- *
- * @var string
*/
- private $sql;
+ private string $sql;
/**
* The SQLSRV statement resource.
@@ -49,14 +49,14 @@ final class Statement implements StatementInterface
*
* @var array
*/
- private $variables = [];
+ private array $variables = [];
/**
* Bound parameter types.
*
* @var array
*/
- private $types = [];
+ private array $types = [];
/**
* Append to any INSERT query to retrieve the last insert id.
@@ -88,6 +88,15 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool
{
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
$this->variables[$param] = $value;
$this->types[$param] = $type;
@@ -96,11 +105,29 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
assert(is_int($param));
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
$this->variables[$param] =& $variable;
$this->types[$param] = $type;
@@ -116,18 +143,23 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le
public function execute($params = null): ResultInterface
{
if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+
foreach ($params as $key => $val) {
if (is_int($key)) {
- $this->bindValue($key + 1, $val);
+ $this->bindValue($key + 1, $val, ParameterType::STRING);
} else {
- $this->bindValue($key, $val);
+ $this->bindValue($key, $val, ParameterType::STRING);
}
}
}
- if ($this->stmt === null) {
- $this->stmt = $this->prepare();
- }
+ $this->stmt ??= $this->prepare();
if (! sqlsrv_execute($this->stmt)) {
throw Error::new();
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php
new file mode 100644
index 000000000..de9a8e031
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php
@@ -0,0 +1,107 @@
+connection = $connection;
+ }
+
+ public function prepare(string $sql): Statement
+ {
+ try {
+ $statement = $this->connection->prepare($sql);
+ } catch (\Exception $e) {
+ throw Exception::new($e);
+ }
+
+ assert($statement !== false);
+
+ return new Statement($this->connection, $statement);
+ }
+
+ public function query(string $sql): Result
+ {
+ try {
+ $result = $this->connection->query($sql);
+ } catch (\Exception $e) {
+ throw Exception::new($e);
+ }
+
+ assert($result !== false);
+
+ return new Result($result, $this->connection->changes());
+ }
+
+ /** @inheritdoc */
+ public function quote($value, $type = ParameterType::STRING): string
+ {
+ return sprintf('\'%s\'', SQLite3::escapeString($value));
+ }
+
+ public function exec(string $sql): int
+ {
+ try {
+ $this->connection->exec($sql);
+ } catch (\Exception $e) {
+ throw Exception::new($e);
+ }
+
+ return $this->connection->changes();
+ }
+
+ /** @inheritdoc */
+ public function lastInsertId($name = null): int
+ {
+ return $this->connection->lastInsertRowID();
+ }
+
+ public function beginTransaction(): bool
+ {
+ try {
+ return $this->connection->exec('BEGIN');
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function commit(): bool
+ {
+ try {
+ return $this->connection->exec('COMMIT');
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function rollBack(): bool
+ {
+ try {
+ return $this->connection->exec('ROLLBACK');
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function getNativeConnection(): SQLite3
+ {
+ return $this->connection;
+ }
+
+ public function getServerVersion(): string
+ {
+ return SQLite3::version()['versionString'];
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php
new file mode 100644
index 000000000..a2276d528
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php
@@ -0,0 +1,46 @@
+enableExceptions(true);
+
+ UserDefinedFunctions::register([$connection, 'createFunction']);
+
+ return new Connection($connection);
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php
new file mode 100644
index 000000000..3ca1190bc
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php
@@ -0,0 +1,18 @@
+getMessage(), null, (int) $exception->getCode(), $exception);
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php
new file mode 100644
index 000000000..a51bd4e8b
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php
@@ -0,0 +1,91 @@
+result = $result;
+ $this->changes = $changes;
+ }
+
+ /** @inheritdoc */
+ public function fetchNumeric()
+ {
+ if ($this->result === null) {
+ return false;
+ }
+
+ return $this->result->fetchArray(SQLITE3_NUM);
+ }
+
+ /** @inheritdoc */
+ public function fetchAssociative()
+ {
+ if ($this->result === null) {
+ return false;
+ }
+
+ return $this->result->fetchArray(SQLITE3_ASSOC);
+ }
+
+ /** @inheritdoc */
+ public function fetchOne()
+ {
+ return FetchUtils::fetchOne($this);
+ }
+
+ /** @inheritdoc */
+ public function fetchAllNumeric(): array
+ {
+ return FetchUtils::fetchAllNumeric($this);
+ }
+
+ /** @inheritdoc */
+ public function fetchAllAssociative(): array
+ {
+ return FetchUtils::fetchAllAssociative($this);
+ }
+
+ /** @inheritdoc */
+ public function fetchFirstColumn(): array
+ {
+ return FetchUtils::fetchFirstColumn($this);
+ }
+
+ public function rowCount(): int
+ {
+ return $this->changes;
+ }
+
+ public function columnCount(): int
+ {
+ if ($this->result === null) {
+ return 0;
+ }
+
+ return $this->result->numColumns();
+ }
+
+ public function free(): void
+ {
+ if ($this->result === null) {
+ return;
+ }
+
+ $this->result->finalize();
+ $this->result = null;
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php
new file mode 100644
index 000000000..878627a6a
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php
@@ -0,0 +1,119 @@
+ SQLITE3_NULL,
+ ParameterType::INTEGER => SQLITE3_INTEGER,
+ ParameterType::STRING => SQLITE3_TEXT,
+ ParameterType::ASCII => SQLITE3_TEXT,
+ ParameterType::BINARY => SQLITE3_BLOB,
+ ParameterType::LARGE_OBJECT => SQLITE3_BLOB,
+ ParameterType::BOOLEAN => SQLITE3_INTEGER,
+ ];
+
+ private SQLite3 $connection;
+ private SQLite3Stmt $statement;
+
+ /** @internal The statement can be only instantiated by its driver connection. */
+ public function __construct(SQLite3 $connection, SQLite3Stmt $statement)
+ {
+ $this->connection = $connection;
+ $this->statement = $statement;
+ }
+
+ /** @inheritdoc */
+ public function bindValue($param, $value, $type = ParameterType::STRING): bool
+ {
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
+ return $this->statement->bindValue($param, $value, $this->convertParamType($type));
+ }
+
+ /** @inheritdoc */
+ public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
+ return $this->statement->bindParam($param, $variable, $this->convertParamType($type));
+ }
+
+ /** @inheritdoc */
+ public function execute($params = null): Result
+ {
+ if ($params !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+
+ foreach ($params as $param => $value) {
+ if (is_int($param)) {
+ $this->bindValue($param + 1, $value, ParameterType::STRING);
+ } else {
+ $this->bindValue($param, $value, ParameterType::STRING);
+ }
+ }
+ }
+
+ try {
+ $result = $this->statement->execute();
+ } catch (\Exception $e) {
+ throw Exception::new($e);
+ }
+
+ assert($result !== false);
+
+ return new Result($result, $this->connection->changes());
+ }
+
+ private function convertParamType(int $type): int
+ {
+ if (! isset(self::PARAM_TYPE_MAP[$type])) {
+ throw UnknownParameterType::new($type);
+ }
+
+ return self::PARAM_TYPE_MAP[$type];
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Driver/Statement.php b/app/vendor/doctrine/dbal/src/Driver/Statement.php
index 50fac842d..b273128f1 100644
--- a/app/vendor/doctrine/dbal/src/Driver/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Driver/Statement.php
@@ -43,6 +43,8 @@ public function bindValue($param, $value, $type = ParameterType::STRING);
* of stored procedures that return data as output parameters, and some also as input/output
* parameters that both send in data and are updated to receive it.
*
+ * @deprecated Use {@see bindValue()} instead.
+ *
* @param string|int $param Parameter identifier. For a prepared statement using named placeholders,
* this will be a parameter name of the form :name. For a prepared statement using
* question mark placeholders, this will be the 1-indexed position of the parameter.
diff --git a/app/vendor/doctrine/dbal/src/DriverManager.php b/app/vendor/doctrine/dbal/src/DriverManager.php
index 37fd0b45d..5c30088ec 100644
--- a/app/vendor/doctrine/dbal/src/DriverManager.php
+++ b/app/vendor/doctrine/dbal/src/DriverManager.php
@@ -7,7 +7,9 @@
use Doctrine\DBAL\Driver\Mysqli;
use Doctrine\DBAL\Driver\OCI8;
use Doctrine\DBAL\Driver\PDO;
+use Doctrine\DBAL\Driver\SQLite3;
use Doctrine\DBAL\Driver\SQLSrv;
+use Doctrine\Deprecations\Deprecation;
use function array_keys;
use function array_merge;
@@ -87,14 +89,17 @@ final class DriverManager
'pdo_sqlsrv' => PDO\SQLSrv\Driver::class,
'mysqli' => Mysqli\Driver::class,
'sqlsrv' => SQLSrv\Driver::class,
+ 'sqlite3' => SQLite3\Driver::class,
];
/**
* List of URL schemes from a database URL and their mappings to driver.
*
+ * @deprecated Use actual driver names instead.
+ *
* @var string[]
*/
- private static $driverSchemeAliases = [
+ private static array $driverSchemeAliases = [
'db2' => 'ibm_db2',
'mssql' => 'pdo_sqlsrv',
'mysql' => 'pdo_mysql',
@@ -145,9 +150,8 @@ private function __construct()
* driverClass:
* The driver class to use.
*
- * @param array $params
- * @param Configuration|null $config The configuration to use.
- * @param EventManager|null $eventManager The event manager to use.
+ * @param Configuration|null $config The configuration to use.
+ * @param EventManager|null $eventManager The event manager to use.
* @psalm-param array{
* charset?: string,
* dbname?: string,
@@ -172,7 +176,6 @@ private function __construct()
* user?: string,
* wrapperClass?: class-string,
* } $params
- * @phpstan-param array $params
*
* @psalm-return ($params is array{wrapperClass:mixed} ? T : Connection)
*
@@ -186,15 +189,9 @@ public static function getConnection(
?EventManager $eventManager = null
): Connection {
// create default config and event manager, if not set
- if ($config === null) {
- $config = new Configuration();
- }
-
- if ($eventManager === null) {
- $eventManager = new EventManager();
- }
-
- $params = self::parseDatabaseUrl($params);
+ $config ??= new Configuration();
+ $eventManager ??= new EventManager();
+ $params = self::parseDatabaseUrl($params);
// URL support for PrimaryReplicaConnection
if (isset($params['primary'])) {
@@ -459,11 +456,25 @@ private static function parseDatabaseUrlScheme(?string $scheme, array $params):
// URL schemes must not contain underscores, but dashes are ok
$driver = str_replace('-', '_', $scheme);
- // The requested driver from the URL scheme takes precedence over the
- // default driver from the connection parameters. If the driver is
- // an alias (e.g. "postgres"), map it to the actual name ("pdo-pgsql").
+ // If the driver is an alias (e.g. "postgres"), map it to the actual name ("pdo-pgsql").
// Otherwise, let checkParams decide later if the driver exists.
- $params['driver'] = self::$driverSchemeAliases[$driver] ?? $driver;
+ if (isset(self::$driverSchemeAliases[$driver])) {
+ $actualDriver = self::$driverSchemeAliases[$driver];
+
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5697',
+ 'Relying on driver name aliases is deprecated. Use %s instead of %s.',
+ str_replace('_', '-', $actualDriver),
+ $driver,
+ );
+
+ $driver = $actualDriver;
+ }
+
+ // The requested driver from the URL scheme takes precedence over the
+ // default driver from the connection parameters.
+ $params['driver'] = $driver;
return $params;
}
diff --git a/app/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php b/app/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php
index eeddb91a5..9a69c2541 100644
--- a/app/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php
@@ -7,20 +7,19 @@
/**
* Event Arguments used when a Driver connection is established inside Doctrine\DBAL\Connection.
+ *
+ * @deprecated
*/
class ConnectionEventArgs extends EventArgs
{
- /** @var Connection */
- private $connection;
+ private Connection $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
- /**
- * @return Connection
- */
+ /** @return Connection */
public function getConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php b/app/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php
index d6d1fd9d1..6256cdb5b 100644
--- a/app/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php
+++ b/app/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php
@@ -23,6 +23,8 @@
* NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
* NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"
* NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS TZH:TZM"
+ *
+ * @deprecated Use {@see \Doctrine\DBAL\Driver\OCI8\Middleware\InitializeSession} instead.
*/
class OracleSessionInit implements EventSubscriber
{
@@ -35,9 +37,7 @@ class OracleSessionInit implements EventSubscriber
'NLS_NUMERIC_CHARACTERS' => '.,',
];
- /**
- * @param string[] $oracleSessionVars
- */
+ /** @param string[] $oracleSessionVars */
public function __construct(array $oracleSessionVars = [])
{
$this->_defaultSessionVars = array_merge($this->_defaultSessionVars, $oracleSessionVars);
diff --git a/app/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php b/app/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php
index f7a4e9129..0f77e9ffc 100644
--- a/app/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php
+++ b/app/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php
@@ -9,15 +9,15 @@
/**
* Session init listener for executing a single SQL statement right after a connection is opened.
+ *
+ * @deprecated Implement a middleware instead.
*/
class SQLSessionInit implements EventSubscriber
{
/** @var string */
protected $sql;
- /**
- * @param string $sql
- */
+ /** @param string $sql */
public function __construct($sql)
{
$this->sql = $sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php b/app/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php
new file mode 100644
index 000000000..f2ee05a32
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php
@@ -0,0 +1,30 @@
+getConnection()->executeStatement('PRAGMA foreign_keys=ON');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSubscribedEvents()
+ {
+ return [Events::postConnect];
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php
index 5a1160a95..9f3ff6ea7 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php
@@ -13,20 +13,17 @@
/**
* Event Arguments used when SQL queries for adding table columns are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaAlterTableAddColumnEventArgs extends SchemaEventArgs
{
- /** @var Column */
- private $column;
-
- /** @var TableDiff */
- private $tableDiff;
-
- /** @var AbstractPlatform */
- private $platform;
+ private Column $column;
+ private TableDiff $tableDiff;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
public function __construct(Column $column, TableDiff $tableDiff, AbstractPlatform $platform)
{
@@ -35,25 +32,19 @@ public function __construct(Column $column, TableDiff $tableDiff, AbstractPlatfo
$this->platform = $platform;
}
- /**
- * @return Column
- */
+ /** @return Column */
public function getColumn()
{
return $this->column;
}
- /**
- * @return TableDiff
- */
+ /** @return TableDiff */
public function getTableDiff()
{
return $this->tableDiff;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -73,7 +64,7 @@ public function addSql($sql)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3580',
'Passing multiple SQL statements as an array to SchemaAlterTableAddColumnEventaArrgs::addSql() ' .
- 'is deprecated. Pass each statement as an individual argument instead.'
+ 'is deprecated. Pass each statement as an individual argument instead.',
);
}
@@ -82,9 +73,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php
index e3fe778dc..9ba37aade 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php
@@ -12,20 +12,17 @@
/**
* Event Arguments used when SQL queries for changing table columns are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaAlterTableChangeColumnEventArgs extends SchemaEventArgs
{
- /** @var ColumnDiff */
- private $columnDiff;
-
- /** @var TableDiff */
- private $tableDiff;
-
- /** @var AbstractPlatform */
- private $platform;
+ private ColumnDiff $columnDiff;
+ private TableDiff $tableDiff;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
public function __construct(ColumnDiff $columnDiff, TableDiff $tableDiff, AbstractPlatform $platform)
{
@@ -34,25 +31,19 @@ public function __construct(ColumnDiff $columnDiff, TableDiff $tableDiff, Abstra
$this->platform = $platform;
}
- /**
- * @return ColumnDiff
- */
+ /** @return ColumnDiff */
public function getColumnDiff()
{
return $this->columnDiff;
}
- /**
- * @return TableDiff
- */
+ /** @return TableDiff */
public function getTableDiff()
{
return $this->tableDiff;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -72,9 +63,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php
index d51b4a204..07c065a9a 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php
@@ -11,17 +11,16 @@
/**
* Event Arguments used when SQL queries for creating tables are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaAlterTableEventArgs extends SchemaEventArgs
{
- /** @var TableDiff */
- private $tableDiff;
-
- /** @var AbstractPlatform */
- private $platform;
+ private TableDiff $tableDiff;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
public function __construct(TableDiff $tableDiff, AbstractPlatform $platform)
{
@@ -29,17 +28,13 @@ public function __construct(TableDiff $tableDiff, AbstractPlatform $platform)
$this->platform = $platform;
}
- /**
- * @return TableDiff
- */
+ /** @return TableDiff */
public function getTableDiff()
{
return $this->tableDiff;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -59,9 +54,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php
index 47ed242bc..4122b418c 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php
@@ -12,20 +12,17 @@
/**
* Event Arguments used when SQL queries for removing table columns are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaAlterTableRemoveColumnEventArgs extends SchemaEventArgs
{
- /** @var Column */
- private $column;
-
- /** @var TableDiff */
- private $tableDiff;
-
- /** @var AbstractPlatform */
- private $platform;
+ private Column $column;
+ private TableDiff $tableDiff;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
public function __construct(Column $column, TableDiff $tableDiff, AbstractPlatform $platform)
{
@@ -34,25 +31,19 @@ public function __construct(Column $column, TableDiff $tableDiff, AbstractPlatfo
$this->platform = $platform;
}
- /**
- * @return Column
- */
+ /** @return Column */
public function getColumn()
{
return $this->column;
}
- /**
- * @return TableDiff
- */
+ /** @return TableDiff */
public function getTableDiff()
{
return $this->tableDiff;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -72,9 +63,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php
index 2b2cb2201..21d3c1645 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php
@@ -12,27 +12,22 @@
/**
* Event Arguments used when SQL queries for renaming table columns are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaAlterTableRenameColumnEventArgs extends SchemaEventArgs
{
/** @var string */
private $oldColumnName;
- /** @var Column */
- private $column;
-
- /** @var TableDiff */
- private $tableDiff;
-
- /** @var AbstractPlatform */
- private $platform;
+ private Column $column;
+ private TableDiff $tableDiff;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
- /**
- * @param string $oldColumnName
- */
+ /** @param string $oldColumnName */
public function __construct($oldColumnName, Column $column, TableDiff $tableDiff, AbstractPlatform $platform)
{
$this->oldColumnName = $oldColumnName;
@@ -41,33 +36,25 @@ public function __construct($oldColumnName, Column $column, TableDiff $tableDiff
$this->platform = $platform;
}
- /**
- * @return string
- */
+ /** @return string */
public function getOldColumnName()
{
return $this->oldColumnName;
}
- /**
- * @return Column
- */
+ /** @return Column */
public function getColumn()
{
return $this->column;
}
- /**
- * @return TableDiff
- */
+ /** @return TableDiff */
public function getTableDiff()
{
return $this->tableDiff;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -87,9 +74,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php
index 997a90d1f..04fcbde9c 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php
@@ -7,11 +7,12 @@
/**
* Event Arguments used when the portable column definition is generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaColumnDefinitionEventArgs extends SchemaEventArgs
{
- /** @var Column|null */
- private $column;
+ private ?Column $column = null;
/**
* Raw column data as fetched from the database.
@@ -26,8 +27,7 @@ class SchemaColumnDefinitionEventArgs extends SchemaEventArgs
/** @var string */
private $database;
- /** @var Connection */
- private $connection;
+ private Connection $connection;
/**
* @param mixed[] $tableColumn
@@ -55,41 +55,31 @@ public function setColumn(?Column $column = null)
return $this;
}
- /**
- * @return Column|null
- */
+ /** @return Column|null */
public function getColumn()
{
return $this->column;
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getTableColumn()
{
return $this->tableColumn;
}
- /**
- * @return string
- */
+ /** @return string */
public function getTable()
{
return $this->table;
}
- /**
- * @return string
- */
+ /** @return string */
public function getDatabase()
{
return $this->database;
}
- /**
- * @return Connection
- */
+ /** @return Connection */
public function getConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php
index 6ba1bc708..54f134d14 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php
@@ -12,20 +12,17 @@
/**
* Event Arguments used when SQL queries for creating table columns are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaCreateTableColumnEventArgs extends SchemaEventArgs
{
- /** @var Column */
- private $column;
-
- /** @var Table */
- private $table;
-
- /** @var AbstractPlatform */
- private $platform;
+ private Column $column;
+ private Table $table;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
public function __construct(Column $column, Table $table, AbstractPlatform $platform)
{
@@ -34,25 +31,19 @@ public function __construct(Column $column, Table $table, AbstractPlatform $plat
$this->platform = $platform;
}
- /**
- * @return Column
- */
+ /** @return Column */
public function getColumn()
{
return $this->column;
}
- /**
- * @return Table
- */
+ /** @return Table */
public function getTable()
{
return $this->table;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -72,9 +63,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php
index d83f7a264..a7d548deb 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php
@@ -11,23 +11,23 @@
/**
* Event Arguments used when SQL queries for creating tables are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaCreateTableEventArgs extends SchemaEventArgs
{
- /** @var Table */
- private $table;
+ private Table $table;
/** @var mixed[][] */
- private $columns;
+ private array $columns;
/** @var mixed[] */
- private $options;
+ private array $options;
- /** @var AbstractPlatform */
- private $platform;
+ private AbstractPlatform $platform;
/** @var string[] */
- private $sql = [];
+ private array $sql = [];
/**
* @param mixed[][] $columns
@@ -41,33 +41,25 @@ public function __construct(Table $table, array $columns, array $options, Abstra
$this->platform = $platform;
}
- /**
- * @return Table
- */
+ /** @return Table */
public function getTable()
{
return $this->table;
}
- /**
- * @return mixed[][]
- */
+ /** @return mixed[][] */
public function getColumns()
{
return $this->columns;
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getOptions()
{
return $this->options;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -87,9 +79,7 @@ public function addSql($sql)
return $this;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php
index 3d5dd3c01..f45e3a15a 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php
@@ -8,14 +8,15 @@
/**
* Event Arguments used when the SQL query for dropping tables are generated inside {@see AbstractPlatform}.
+ *
+ * @deprecated
*/
class SchemaDropTableEventArgs extends SchemaEventArgs
{
/** @var string|Table */
private $table;
- /** @var AbstractPlatform */
- private $platform;
+ private AbstractPlatform $platform;
/** @var string|null */
private $sql;
@@ -31,17 +32,13 @@ public function __construct($table, AbstractPlatform $platform)
$this->platform = $platform;
}
- /**
- * @return string|Table
- */
+ /** @return string|Table */
public function getTable()
{
return $this->table;
}
- /**
- * @return AbstractPlatform
- */
+ /** @return AbstractPlatform */
public function getPlatform()
{
return $this->platform;
@@ -59,9 +56,7 @@ public function setSql($sql)
return $this;
}
- /**
- * @return string|null
- */
+ /** @return string|null */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php
index df2bdae09..77d1d3908 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php
@@ -6,15 +6,14 @@
/**
* Base class for schema related events.
+ *
+ * @deprecated
*/
class SchemaEventArgs extends EventArgs
{
- /** @var bool */
- private $preventDefault = false;
+ private bool $preventDefault = false;
- /**
- * @return SchemaEventArgs
- */
+ /** @return SchemaEventArgs */
public function preventDefault()
{
$this->preventDefault = true;
@@ -22,9 +21,7 @@ public function preventDefault()
return $this;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function isDefaultPrevented()
{
return $this->preventDefault;
diff --git a/app/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php b/app/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php
index 7e9f0db6d..dbee55a0e 100644
--- a/app/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php
@@ -7,24 +7,24 @@
/**
* Event Arguments used when the portable index definition is generated inside {@see AbstractSchemaManager}.
+ *
+ * @deprecated
*/
class SchemaIndexDefinitionEventArgs extends SchemaEventArgs
{
- /** @var Index|null */
- private $index;
+ private ?Index $index = null;
/**
* Raw index data as fetched from the database.
*
* @var mixed[]
*/
- private $tableIndex;
+ private array $tableIndex;
/** @var string */
private $table;
- /** @var Connection */
- private $connection;
+ private Connection $connection;
/**
* @param mixed[] $tableIndex
@@ -49,33 +49,25 @@ public function setIndex(?Index $index = null)
return $this;
}
- /**
- * @return Index|null
- */
+ /** @return Index|null */
public function getIndex()
{
return $this->index;
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getTableIndex()
{
return $this->tableIndex;
}
- /**
- * @return string
- */
+ /** @return string */
public function getTable()
{
return $this->table;
}
- /**
- * @return Connection
- */
+ /** @return Connection */
public function getConnection()
{
return $this->connection;
diff --git a/app/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php b/app/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php
index 946e8f2eb..be4ccdf15 100644
--- a/app/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php
@@ -4,6 +4,7 @@
namespace Doctrine\DBAL\Event;
+/** @deprecated */
class TransactionBeginEventArgs extends TransactionEventArgs
{
}
diff --git a/app/vendor/doctrine/dbal/src/Event/TransactionCommitEventArgs.php b/app/vendor/doctrine/dbal/src/Event/TransactionCommitEventArgs.php
index c87d05751..75766b6ff 100644
--- a/app/vendor/doctrine/dbal/src/Event/TransactionCommitEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/TransactionCommitEventArgs.php
@@ -4,6 +4,7 @@
namespace Doctrine\DBAL\Event;
+/** @deprecated */
class TransactionCommitEventArgs extends TransactionEventArgs
{
}
diff --git a/app/vendor/doctrine/dbal/src/Event/TransactionEventArgs.php b/app/vendor/doctrine/dbal/src/Event/TransactionEventArgs.php
index e56e214cd..73dc995ec 100644
--- a/app/vendor/doctrine/dbal/src/Event/TransactionEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/TransactionEventArgs.php
@@ -7,10 +7,10 @@
use Doctrine\Common\EventArgs;
use Doctrine\DBAL\Connection;
+/** @deprecated */
abstract class TransactionEventArgs extends EventArgs
{
- /** @var Connection */
- private $connection;
+ private Connection $connection;
public function __construct(Connection $connection)
{
diff --git a/app/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php b/app/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php
index 607a5f94a..9e6e650d8 100644
--- a/app/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php
+++ b/app/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php
@@ -4,6 +4,7 @@
namespace Doctrine\DBAL\Event;
+/** @deprecated */
class TransactionRollBackEventArgs extends TransactionEventArgs
{
}
diff --git a/app/vendor/doctrine/dbal/src/Events.php b/app/vendor/doctrine/dbal/src/Events.php
index 1c0b95590..37125df53 100644
--- a/app/vendor/doctrine/dbal/src/Events.php
+++ b/app/vendor/doctrine/dbal/src/Events.php
@@ -6,6 +6,8 @@
* Container for all DBAL events.
*
* This class cannot be instantiated.
+ *
+ * @deprecated
*/
final class Events
{
@@ -18,19 +20,45 @@ private function __construct()
{
}
+ /** @deprecated */
public const postConnect = 'postConnect';
- public const onSchemaCreateTable = 'onSchemaCreateTable';
- public const onSchemaCreateTableColumn = 'onSchemaCreateTableColumn';
- public const onSchemaDropTable = 'onSchemaDropTable';
- public const onSchemaAlterTable = 'onSchemaAlterTable';
- public const onSchemaAlterTableAddColumn = 'onSchemaAlterTableAddColumn';
+ /** @deprecated */
+ public const onSchemaCreateTable = 'onSchemaCreateTable';
+
+ /** @deprecated */
+ public const onSchemaCreateTableColumn = 'onSchemaCreateTableColumn';
+
+ /** @deprecated */
+ public const onSchemaDropTable = 'onSchemaDropTable';
+
+ /** @deprecated */
+ public const onSchemaAlterTable = 'onSchemaAlterTable';
+
+ /** @deprecated */
+ public const onSchemaAlterTableAddColumn = 'onSchemaAlterTableAddColumn';
+
+ /** @deprecated */
public const onSchemaAlterTableRemoveColumn = 'onSchemaAlterTableRemoveColumn';
+
+ /** @deprecated */
public const onSchemaAlterTableChangeColumn = 'onSchemaAlterTableChangeColumn';
+
+ /** @deprecated */
public const onSchemaAlterTableRenameColumn = 'onSchemaAlterTableRenameColumn';
- public const onSchemaColumnDefinition = 'onSchemaColumnDefinition';
- public const onSchemaIndexDefinition = 'onSchemaIndexDefinition';
- public const onTransactionBegin = 'onTransactionBegin';
- public const onTransactionCommit = 'onTransactionCommit';
- public const onTransactionRollBack = 'onTransactionRollBack';
+
+ /** @deprecated */
+ public const onSchemaColumnDefinition = 'onSchemaColumnDefinition';
+
+ /** @deprecated */
+ public const onSchemaIndexDefinition = 'onSchemaIndexDefinition';
+
+ /** @deprecated */
+ public const onTransactionBegin = 'onTransactionBegin';
+
+ /** @deprecated */
+ public const onTransactionCommit = 'onTransactionCommit';
+
+ /** @deprecated */
+ public const onTransactionRollBack = 'onTransactionRollBack';
}
diff --git a/app/vendor/doctrine/dbal/src/Exception.php b/app/vendor/doctrine/dbal/src/Exception.php
index b8d7804d5..6e3b22557 100644
--- a/app/vendor/doctrine/dbal/src/Exception.php
+++ b/app/vendor/doctrine/dbal/src/Exception.php
@@ -12,9 +12,7 @@
use function spl_object_hash;
use function sprintf;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class Exception extends \Exception
{
public static function notSupported(string $method): self
@@ -22,9 +20,7 @@ public static function notSupported(string $method): self
return new self(sprintf("Operation '%s' is not supported by platform.", $method));
}
- /**
- * @param mixed $invalidPlatform
- */
+ /** @param mixed $invalidPlatform */
public static function invalidPlatformType($invalidPlatform): self
{
if (is_object($invalidPlatform)) {
@@ -32,8 +28,8 @@ public static function invalidPlatformType($invalidPlatform): self
sprintf(
"Option 'platform' must be a subtype of '%s', instance of '%s' given",
AbstractPlatform::class,
- get_class($invalidPlatform)
- )
+ get_class($invalidPlatform),
+ ),
);
}
@@ -41,8 +37,8 @@ public static function invalidPlatformType($invalidPlatform): self
sprintf(
"Option 'platform' must be an object and subtype of '%s'. Got '%s'",
AbstractPlatform::class,
- gettype($invalidPlatform)
- )
+ gettype($invalidPlatform),
+ ),
);
}
@@ -59,14 +55,12 @@ public static function invalidPlatformVersionSpecified(string $version, string $
'Invalid platform version "%s" specified. ' .
'The platform version has to be specified in the format: "%s".',
$version,
- $expectedFormat
- )
+ $expectedFormat,
+ ),
);
}
- /**
- * @param string|null $url The URL that was provided in the connection parameters (if any).
- */
+ /** @param string|null $url The URL that was provided in the connection parameters (if any). */
public static function driverRequired(?string $url = null): self
{
if ($url !== null) {
@@ -74,8 +68,8 @@ public static function driverRequired(?string $url = null): self
sprintf(
"The options 'driver' or 'driverClass' are mandatory if a connection URL without scheme " .
'is given to DriverManager::getConnection(). Given URL: %s',
- $url
- )
+ $url,
+ ),
);
}
@@ -83,9 +77,7 @@ public static function driverRequired(?string $url = null): self
'instance is given to DriverManager::getConnection().');
}
- /**
- * @param string[] $knownDrivers
- */
+ /** @param string[] $knownDrivers */
public static function unknownDriver(string $unknownDriverName, array $knownDrivers): self
{
return new self("The given 'driver' " . $unknownDriverName . ' is unknown, ' .
@@ -101,7 +93,7 @@ public static function invalidWrapperClass(string $wrapperClass): self
public static function invalidDriverClass(string $driverClass): self
{
return new self(
- "The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.'
+ "The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.',
);
}
@@ -134,14 +126,14 @@ public static function typeNotFound(string $name): self
public static function typeNotRegistered(Type $type): self
{
return new self(
- sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type))
+ sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type)),
);
}
public static function typeAlreadyRegistered(Type $type): self
{
return new self(
- sprintf('Type of the class %s@%s is already registered.', get_class($type), spl_object_hash($type))
+ sprintf('Type of the class %s@%s is already registered.', get_class($type), spl_object_hash($type)),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Exception/ConnectionLost.php b/app/vendor/doctrine/dbal/src/Exception/ConnectionLost.php
index 46a424757..c45085839 100644
--- a/app/vendor/doctrine/dbal/src/Exception/ConnectionLost.php
+++ b/app/vendor/doctrine/dbal/src/Exception/ConnectionLost.php
@@ -2,9 +2,7 @@
namespace Doctrine\DBAL\Exception;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
final class ConnectionLost extends ConnectionException
{
}
diff --git a/app/vendor/doctrine/dbal/src/Exception/DatabaseDoesNotExist.php b/app/vendor/doctrine/dbal/src/Exception/DatabaseDoesNotExist.php
index 87eb1381a..dc71c82cb 100644
--- a/app/vendor/doctrine/dbal/src/Exception/DatabaseDoesNotExist.php
+++ b/app/vendor/doctrine/dbal/src/Exception/DatabaseDoesNotExist.php
@@ -2,9 +2,7 @@
namespace Doctrine\DBAL\Exception;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class DatabaseDoesNotExist extends DatabaseObjectNotFoundException
{
}
diff --git a/app/vendor/doctrine/dbal/src/Exception/DatabaseRequired.php b/app/vendor/doctrine/dbal/src/Exception/DatabaseRequired.php
new file mode 100644
index 000000000..49b7326cd
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Exception/DatabaseRequired.php
@@ -0,0 +1,18 @@
+|array */
- private $originalParameters;
+ private array $originalParameters;
/** @var array|array */
- private $originalTypes;
+ private array $originalTypes;
- /** @var int */
- private $originalParameterIndex = 0;
+ private int $originalParameterIndex = 0;
/** @var list */
- private $convertedSQL = [];
+ private array $convertedSQL = [];
/** @var list */
- private $convertedParameteres = [];
+ private array $convertedParameters = [];
/** @var array */
- private $convertedTypes = [];
+ private array $convertedTypes = [];
/**
* @param array|array $parameters
@@ -77,12 +76,10 @@ public function getSQL(): string
return implode('', $this->convertedSQL);
}
- /**
- * @return list
- */
+ /** @return list */
public function getParameters(): array
{
- return $this->convertedParameteres;
+ return $this->convertedParameters;
}
/**
@@ -92,8 +89,8 @@ public function getParameters(): array
private function acceptParameter($key, $value): void
{
if (! isset($this->originalTypes[$key])) {
- $this->convertedSQL[] = '?';
- $this->convertedParameteres[] = $value;
+ $this->convertedSQL[] = '?';
+ $this->convertedParameters[] = $value;
return;
}
@@ -119,9 +116,7 @@ private function acceptParameter($key, $value): void
$this->appendTypedParameter($value, $type - Connection::ARRAY_PARAM_OFFSET);
}
- /**
- * @return array
- */
+ /** @return array */
public function getTypes(): array
{
return $this->convertedTypes;
@@ -135,10 +130,10 @@ private function appendTypedParameter(array $values, $type): void
{
$this->convertedSQL[] = implode(', ', array_fill(0, count($values), '?'));
- $index = count($this->convertedParameteres);
+ $index = count($this->convertedParameters);
foreach ($values as $value) {
- $this->convertedParameteres[] = $value;
+ $this->convertedParameters[] = $value;
$this->convertedTypes[$index] = $type;
$index++;
diff --git a/app/vendor/doctrine/dbal/src/FetchMode.php b/app/vendor/doctrine/dbal/src/FetchMode.php
index 79fa6a3f3..4909bc623 100644
--- a/app/vendor/doctrine/dbal/src/FetchMode.php
+++ b/app/vendor/doctrine/dbal/src/FetchMode.php
@@ -9,8 +9,10 @@ class FetchMode
{
/** @link PDO::FETCH_ASSOC */
public const ASSOCIATIVE = 2;
+
/** @link PDO::FETCH_NUM */
public const NUMERIC = 3;
+
/** @link PDO::FETCH_COLUMN */
public const COLUMN = 7;
}
diff --git a/app/vendor/doctrine/dbal/src/Id/TableGenerator.php b/app/vendor/doctrine/dbal/src/Id/TableGenerator.php
index d4f97fce4..7d7f210e2 100644
--- a/app/vendor/doctrine/dbal/src/Id/TableGenerator.php
+++ b/app/vendor/doctrine/dbal/src/Id/TableGenerator.php
@@ -57,14 +57,13 @@
*/
class TableGenerator
{
- /** @var Connection */
- private $conn;
+ private Connection $conn;
/** @var string */
private $generatorTableName;
/** @var mixed[][] */
- private $sequences = [];
+ private array $sequences = [];
/**
* @param string $generatorTableName
@@ -86,7 +85,7 @@ public function __construct(Connection $conn, $generatorTableName = 'sequences')
$this->conn = DriverManager::getConnection(
$conn->getParams(),
$conn->getConfiguration(),
- $conn->getEventManager()
+ $conn->getEventManager(),
);
$this->generatorTableName = $generatorTableName;
@@ -148,7 +147,7 @@ public function nextValue($sequence)
} else {
$this->conn->insert(
$this->generatorTableName,
- ['sequence_name' => $sequence, 'sequence_value' => 1, 'sequence_increment_by' => 1]
+ ['sequence_name' => $sequence, 'sequence_value' => 1, 'sequence_increment_by' => 1],
);
$value = 1;
}
@@ -160,7 +159,7 @@ public function nextValue($sequence)
throw new Exception(
'Error occurred while generating ID with TableGenerator, aborted generation: ' . $e->getMessage(),
0,
- $e
+ $e,
);
}
diff --git a/app/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php b/app/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php
index f47c9a914..9b4724ddf 100644
--- a/app/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php
+++ b/app/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php
@@ -11,17 +11,13 @@
use Doctrine\DBAL\Schema\Visitor\Visitor;
use Doctrine\Deprecations\Deprecation;
-/**
- * @deprecated
- */
+/** @deprecated */
class TableGeneratorSchemaVisitor implements Visitor
{
/** @var string */
private $generatorTableName;
- /**
- * @param string $generatorTableName
- */
+ /** @param string $generatorTableName */
public function __construct($generatorTableName = 'sequences')
{
Deprecation::trigger(
diff --git a/app/vendor/doctrine/dbal/src/Logging/Connection.php b/app/vendor/doctrine/dbal/src/Logging/Connection.php
index 2175dc467..5ab111ec2 100644
--- a/app/vendor/doctrine/dbal/src/Logging/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Logging/Connection.php
@@ -12,12 +12,9 @@
final class Connection extends AbstractConnectionMiddleware
{
- /** @var LoggerInterface */
- private $logger;
+ private LoggerInterface $logger;
- /**
- * @internal This connection can be only instantiated by its driver.
- */
+ /** @internal This connection can be only instantiated by its driver. */
public function __construct(ConnectionInterface $connection, LoggerInterface $logger)
{
parent::__construct($connection);
@@ -35,7 +32,7 @@ public function prepare(string $sql): DriverStatement
return new Statement(
parent::prepare($sql),
$this->logger,
- $sql
+ $sql,
);
}
diff --git a/app/vendor/doctrine/dbal/src/Logging/DebugStack.php b/app/vendor/doctrine/dbal/src/Logging/DebugStack.php
index 24a2d68cf..e8539e584 100644
--- a/app/vendor/doctrine/dbal/src/Logging/DebugStack.php
+++ b/app/vendor/doctrine/dbal/src/Logging/DebugStack.php
@@ -38,7 +38,7 @@ public function __construct()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4967',
- 'DebugStack is deprecated.'
+ 'DebugStack is deprecated.',
);
}
diff --git a/app/vendor/doctrine/dbal/src/Logging/Driver.php b/app/vendor/doctrine/dbal/src/Logging/Driver.php
index 533dcc05c..10cea8f03 100644
--- a/app/vendor/doctrine/dbal/src/Logging/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Logging/Driver.php
@@ -10,12 +10,9 @@
final class Driver extends AbstractDriverMiddleware
{
- /** @var LoggerInterface */
- private $logger;
+ private LoggerInterface $logger;
- /**
- * @internal This driver can be only instantiated by its middleware.
- */
+ /** @internal This driver can be only instantiated by its middleware. */
public function __construct(DriverInterface $driver, LoggerInterface $logger)
{
parent::__construct($driver);
@@ -32,7 +29,7 @@ public function connect(array $params)
return new Connection(
parent::connect($params),
- $this->logger
+ $this->logger,
);
}
diff --git a/app/vendor/doctrine/dbal/src/Logging/LoggerChain.php b/app/vendor/doctrine/dbal/src/Logging/LoggerChain.php
index c256dd72c..3c62a1d8e 100644
--- a/app/vendor/doctrine/dbal/src/Logging/LoggerChain.php
+++ b/app/vendor/doctrine/dbal/src/Logging/LoggerChain.php
@@ -12,17 +12,15 @@
class LoggerChain implements SQLLogger
{
/** @var iterable */
- private $loggers;
+ private iterable $loggers;
- /**
- * @param iterable $loggers
- */
+ /** @param iterable $loggers */
public function __construct(iterable $loggers = [])
{
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4967',
- 'LoggerChain is deprecated'
+ 'LoggerChain is deprecated',
);
$this->loggers = $loggers;
diff --git a/app/vendor/doctrine/dbal/src/Logging/Middleware.php b/app/vendor/doctrine/dbal/src/Logging/Middleware.php
index 4d5c6b061..da0c1b90f 100644
--- a/app/vendor/doctrine/dbal/src/Logging/Middleware.php
+++ b/app/vendor/doctrine/dbal/src/Logging/Middleware.php
@@ -10,8 +10,7 @@
final class Middleware implements MiddlewareInterface
{
- /** @var LoggerInterface */
- private $logger;
+ private LoggerInterface $logger;
public function __construct(LoggerInterface $logger)
{
diff --git a/app/vendor/doctrine/dbal/src/Logging/Statement.php b/app/vendor/doctrine/dbal/src/Logging/Statement.php
index e993767aa..95d603586 100644
--- a/app/vendor/doctrine/dbal/src/Logging/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Logging/Statement.php
@@ -8,28 +8,25 @@
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
+use Doctrine\Deprecations\Deprecation;
use Psr\Log\LoggerInterface;
use function array_slice;
use function func_get_args;
+use function func_num_args;
final class Statement extends AbstractStatementMiddleware
{
- /** @var LoggerInterface */
- private $logger;
-
- /** @var string */
- private $sql;
+ private LoggerInterface $logger;
+ private string $sql;
/** @var array|array */
- private $params = [];
+ private array $params = [];
/** @var array|array */
- private $types = [];
+ private array $types = [];
- /**
- * @internal This statement can be only instantiated by its connection.
- */
+ /** @internal This statement can be only instantiated by its connection. */
public function __construct(StatementInterface $statement, LoggerInterface $logger, string $sql)
{
parent::__construct($statement);
@@ -40,9 +37,27 @@ public function __construct(StatementInterface $statement, LoggerInterface $logg
/**
* {@inheritdoc}
+ *
+ * @deprecated Use {@see bindValue()} instead.
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5563',
+ '%s is deprecated. Use bindValue() instead.',
+ __METHOD__,
+ );
+
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindParam() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
$this->params[$param] = &$variable;
$this->types[$param] = $type;
@@ -54,6 +69,15 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le
*/
public function bindValue($param, $value, $type = ParameterType::STRING)
{
+ if (func_num_args() < 3) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5558',
+ 'Not passing $type to Statement::bindValue() is deprecated.'
+ . ' Pass the type corresponding to the parameter being bound.',
+ );
+ }
+
$this->params[$param] = $value;
$this->types[$param] = $type;
diff --git a/app/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php b/app/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php
index b80291492..cdbdbec78 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php
@@ -2,10 +2,13 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception;
+use Doctrine\DBAL\Schema\AbstractAsset;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
+use Doctrine\DBAL\Schema\MySQLSchemaManager;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\TableDiff;
use Doctrine\DBAL\TransactionIsolationLevel;
@@ -19,13 +22,17 @@
use function array_unique;
use function array_values;
use function count;
+use function func_get_arg;
use function func_get_args;
+use function func_num_args;
use function implode;
use function in_array;
use function is_numeric;
use function is_string;
use function sprintf;
use function str_replace;
+use function strcasecmp;
+use function strtolower;
use function strtoupper;
use function trim;
@@ -63,9 +70,17 @@ protected function doModifyLimitQuery($query, $limit, $offset)
/**
* {@inheritDoc}
+ *
+ * @deprecated Use {@see quoteIdentifier()} to quote identifiers instead.
*/
public function getIdentifierQuoteCharacter()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5388',
+ 'AbstractMySQLPlatform::getIdentifierQuoteCharacter() is deprecated. Use quoteIdentifier() instead.',
+ );
+
return '`';
}
@@ -130,6 +145,8 @@ public function getLengthExpression($column)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListDatabasesSQL()
{
@@ -137,6 +154,8 @@ public function getListDatabasesSQL()
}
/**
+ * @deprecated
+ *
* {@inheritDoc}
*/
public function getListTableConstraintsSQL($table)
@@ -145,6 +164,8 @@ public function getListTableConstraintsSQL($table)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*
* Two approaches to listing the table indexes. The information_schema is
@@ -165,6 +186,8 @@ public function getListTableIndexesSQL($table, $database = null)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -172,6 +195,8 @@ public function getListViewsSQL($database)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
* @param string|null $database
*
@@ -197,8 +222,17 @@ public function getListTableForeignKeysSQL($table, $database = null)
/**
* {@inheritDoc}
*/
- protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
- {
+ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
+ {
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default string column length on MySQL is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(255)')
: ($length > 0 ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)');
}
@@ -206,8 +240,17 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
/**
* {@inheritdoc}
*/
- protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
- {
+ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
+ {
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length on MySQL is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed
? 'BINARY(' . ($length > 0 ? $length : 255) . ')'
: 'VARBINARY(' . ($length > 0 ? $length : 255) . ')';
@@ -291,8 +334,8 @@ public function prefersIdentityColumns()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/1519',
- 'AbstractMySQLPlatform::prefersIdentityColumns() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/1519',
+ 'AbstractMySQLPlatform::prefersIdentityColumns() is deprecated.',
);
return true;
@@ -310,6 +353,8 @@ public function supportsIdentityColumns()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsInlineColumnComments()
{
@@ -318,6 +363,8 @@ public function supportsInlineColumnComments()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsColumnCollation()
{
@@ -325,6 +372,8 @@ public function supportsColumnCollation()
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
@@ -333,6 +382,8 @@ public function getListTablesSQL()
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
@@ -345,6 +396,7 @@ public function getListTableColumnsSQL($table, $database = null)
' ORDER BY ORDINAL_POSITION ASC';
}
+ /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */
public function getListTableMetadataSQL(string $table, ?string $database = null): string
{
return sprintf(
@@ -362,10 +414,43 @@ public function getListTableMetadataSQL(string $table, ?string $database = null)
SQL
,
$this->getDatabaseNameSQL($database),
- $this->quoteStringLiteral($table)
+ $this->quoteStringLiteral($table),
);
}
+ /**
+ * {@inheritDoc}
+ */
+ public function getCreateTablesSQL(array $tables): array
+ {
+ $sql = [];
+
+ foreach ($tables as $table) {
+ $sql = array_merge($sql, $this->getCreateTableWithoutForeignKeysSQL($table));
+ }
+
+ foreach ($tables as $table) {
+ if (! $table->hasOption('engine') || $this->engineSupportsForeignKeys($table->getOption('engine'))) {
+ foreach ($table->getForeignKeys() as $foreignKey) {
+ $sql[] = $this->getCreateForeignKeySQL(
+ $foreignKey,
+ $table->getQuotedName($this),
+ );
+ }
+ } elseif (count($table->getForeignKeys()) > 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5414',
+ 'Relying on the DBAL not generating DDL for foreign keys on MySQL engines'
+ . ' other than InnoDB is deprecated.'
+ . ' Define foreign key constraints only if they are necessary.',
+ );
+ }
+ }
+
+ return $sql;
+ }
+
/**
* {@inheritDoc}
*/
@@ -402,17 +487,22 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
$query .= $this->buildTableOptions($options);
$query .= $this->buildPartitionOptions($options);
- $sql = [$query];
- $engine = 'INNODB';
-
- if (isset($options['engine'])) {
- $engine = strtoupper(trim($options['engine']));
- }
+ $sql = [$query];
// Propagate foreign key constraints only for InnoDB.
- if (isset($options['foreignKeys']) && $engine === 'INNODB') {
- foreach ((array) $options['foreignKeys'] as $definition) {
- $sql[] = $this->getCreateForeignKeySQL($definition, $name);
+ if (isset($options['foreignKeys'])) {
+ if (! isset($options['engine']) || $this->engineSupportsForeignKeys($options['engine'])) {
+ foreach ($options['foreignKeys'] as $definition) {
+ $sql[] = $this->getCreateForeignKeySQL($definition, $name);
+ }
+ } elseif (count($options['foreignKeys']) > 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5414',
+ 'Relying on the DBAL not generating DDL for foreign keys on MySQL engines'
+ . ' other than InnoDB is deprecated.'
+ . ' Define foreign key constraints only if they are necessary.',
+ );
}
}
@@ -421,6 +511,8 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getDefaultValueDeclarationSQL($column)
{
@@ -453,6 +545,11 @@ private function buildTableOptions(array $options): string
$tableOptions[] = sprintf('DEFAULT CHARACTER SET %s', $options['charset']);
if (isset($options['collate'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5214',
+ 'The "collate" option is deprecated in favor of "collation" and will be removed in 4.0.',
+ );
$options['collation'] = $options['collate'];
}
@@ -500,6 +597,11 @@ private function buildPartitionOptions(array $options): string
: '';
}
+ private function engineSupportsForeignKeys(string $engine): bool
+ {
+ return strcasecmp(trim($engine), 'InnoDB') === 0;
+ }
+
/**
* {@inheritDoc}
*/
@@ -510,22 +612,32 @@ public function getAlterTableSQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of SQL that renames a table using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$queryParts[] = 'RENAME TO ' . $newName->getQuotedName($this);
}
- foreach ($diff->addedColumns as $column) {
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
- $columnArray = array_merge($column->toArray(), [
+ $columnProperties = array_merge($column->toArray(), [
'comment' => $this->getColumnComment($column),
]);
- $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray);
+ $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL(
+ $column->getQuotedName($this),
+ $columnProperties,
+ );
}
- foreach ($diff->removedColumns as $column) {
+ foreach ($diff->getDroppedColumns() as $column) {
if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
continue;
}
@@ -533,70 +645,94 @@ public function getAlterTableSQL(TableDiff $diff)
$queryParts[] = 'DROP ' . $column->getQuotedName($this);
}
- foreach ($diff->changedColumns as $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
- $column = $columnDiff->column;
- $columnArray = $column->toArray();
+ $newColumn = $columnDiff->getNewColumn();
- // Don't propagate default value changes for unsupported column types.
- if (
- $columnDiff->hasChanged('default') &&
- count($columnDiff->changedProperties) === 1 &&
- ($columnArray['type'] instanceof TextType || $columnArray['type'] instanceof BlobType)
- ) {
- continue;
- }
+ $newColumnProperties = array_merge($newColumn->toArray(), [
+ 'comment' => $this->getColumnComment($newColumn),
+ ]);
+
+ $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName();
- $columnArray['comment'] = $this->getColumnComment($column);
- $queryParts[] = 'CHANGE ' . ($columnDiff->getOldColumnName()->getQuotedName($this)) . ' '
- . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray);
+ $queryParts[] = 'CHANGE ' . $oldColumn->getQuotedName($this) . ' '
+ . $this->getColumnDeclarationSQL($newColumn->getQuotedName($this), $newColumnProperties);
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
continue;
}
- $oldColumnName = new Identifier($oldColumnName);
- $columnArray = $column->toArray();
- $columnArray['comment'] = $this->getColumnComment($column);
- $queryParts[] = 'CHANGE ' . $oldColumnName->getQuotedName($this) . ' '
- . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray);
+ $oldColumnName = new Identifier($oldColumnName);
+
+ $columnProperties = array_merge($column->toArray(), [
+ 'comment' => $this->getColumnComment($column),
+ ]);
+
+ $queryParts[] = 'CHANGE ' . $oldColumnName->getQuotedName($this) . ' '
+ . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnProperties);
}
- if (isset($diff->addedIndexes['primary'])) {
- $keyColumns = array_unique(array_values($diff->addedIndexes['primary']->getColumns()));
+ $addedIndexes = $this->indexAssetsByLowerCaseName($diff->getAddedIndexes());
+ $modifiedIndexes = $this->indexAssetsByLowerCaseName($diff->getModifiedIndexes());
+ $diffModified = false;
+
+ if (isset($addedIndexes['primary'])) {
+ $keyColumns = array_unique(array_values($addedIndexes['primary']->getColumns()));
$queryParts[] = 'ADD PRIMARY KEY (' . implode(', ', $keyColumns) . ')';
- unset($diff->addedIndexes['primary']);
- } elseif (isset($diff->changedIndexes['primary'])) {
+ unset($addedIndexes['primary']);
+ $diffModified = true;
+ } elseif (isset($modifiedIndexes['primary'])) {
+ $addedColumns = $this->indexAssetsByLowerCaseName($diff->getAddedColumns());
+
// Necessary in case the new primary key includes a new auto_increment column
- foreach ($diff->changedIndexes['primary']->getColumns() as $columnName) {
- if (isset($diff->addedColumns[$columnName]) && $diff->addedColumns[$columnName]->getAutoincrement()) {
- $keyColumns = array_unique(array_values($diff->changedIndexes['primary']->getColumns()));
+ foreach ($modifiedIndexes['primary']->getColumns() as $columnName) {
+ if (isset($addedColumns[$columnName]) && $addedColumns[$columnName]->getAutoincrement()) {
+ $keyColumns = array_unique(array_values($modifiedIndexes['primary']->getColumns()));
$queryParts[] = 'DROP PRIMARY KEY';
$queryParts[] = 'ADD PRIMARY KEY (' . implode(', ', $keyColumns) . ')';
- unset($diff->changedIndexes['primary']);
+ unset($modifiedIndexes['primary']);
+ $diffModified = true;
break;
}
}
}
+ if ($diffModified) {
+ $diff = new TableDiff(
+ $diff->name,
+ $diff->getAddedColumns(),
+ $diff->getModifiedColumns(),
+ $diff->getDroppedColumns(),
+ array_values($addedIndexes),
+ array_values($modifiedIndexes),
+ $diff->getDroppedIndexes(),
+ $diff->getOldTable(),
+ $diff->getAddedForeignKeys(),
+ $diff->getModifiedForeignKeys(),
+ $diff->getDroppedForeignKeys(),
+ $diff->getRenamedColumns(),
+ $diff->getRenamedIndexes(),
+ );
+ }
+
$sql = [];
$tableSql = [];
if (! $this->onSchemaAlterTable($diff, $tableSql)) {
if (count($queryParts) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' '
+ $sql[] = 'ALTER TABLE ' . ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this) . ' '
. implode(', ', $queryParts);
}
$sql = array_merge(
$this->getPreAlterTableIndexForeignKeySQL($diff),
$sql,
- $this->getPostAlterTableIndexForeignKeySQL($diff)
+ $this->getPostAlterTableIndexForeignKeySQL($diff),
);
}
@@ -608,36 +744,38 @@ public function getAlterTableSQL(TableDiff $diff)
*/
protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
{
- $sql = [];
- $table = $diff->getName($this)->getQuotedName($this);
+ $sql = [];
+
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
- foreach ($diff->changedIndexes as $changedIndex) {
+ foreach ($diff->getModifiedIndexes() as $changedIndex) {
$sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $changedIndex));
}
- foreach ($diff->removedIndexes as $remKey => $remIndex) {
- $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $remIndex));
+ foreach ($diff->getDroppedIndexes() as $droppedIndex) {
+ $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $droppedIndex));
- foreach ($diff->addedIndexes as $addKey => $addIndex) {
- if ($remIndex->getColumns() !== $addIndex->getColumns()) {
+ foreach ($diff->getAddedIndexes() as $addedIndex) {
+ if ($droppedIndex->getColumns() !== $addedIndex->getColumns()) {
continue;
}
- $indexClause = 'INDEX ' . $addIndex->getName();
+ $indexClause = 'INDEX ' . $addedIndex->getName();
- if ($addIndex->isPrimary()) {
+ if ($addedIndex->isPrimary()) {
$indexClause = 'PRIMARY KEY';
- } elseif ($addIndex->isUnique()) {
- $indexClause = 'UNIQUE INDEX ' . $addIndex->getName();
+ } elseif ($addedIndex->isUnique()) {
+ $indexClause = 'UNIQUE INDEX ' . $addedIndex->getName();
}
- $query = 'ALTER TABLE ' . $table . ' DROP INDEX ' . $remIndex->getName() . ', ';
+ $query = 'ALTER TABLE ' . $tableNameSQL . ' DROP INDEX ' . $droppedIndex->getName() . ', ';
$query .= 'ADD ' . $indexClause;
- $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addIndex) . ')';
+ $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addedIndex) . ')';
$sql[] = $query;
- unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]);
+ $diff->unsetAddedIndex($addedIndex);
+ $diff->unsetDroppedIndex($droppedIndex);
break;
}
@@ -645,8 +783,10 @@ protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
$engine = 'INNODB';
- if ($diff->fromTable instanceof Table && $diff->fromTable->hasOption('engine')) {
- $engine = strtoupper(trim($diff->fromTable->getOption('engine')));
+ $table = $diff->getOldTable();
+
+ if ($table !== null && $table->hasOption('engine')) {
+ $engine = strtoupper(trim($table->getOption('engine')));
}
// Suppress foreign key constraint propagation on non-supporting engines.
@@ -660,7 +800,7 @@ protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
$sql,
$this->getPreAlterTableAlterIndexForeignKeySQL($diff),
parent::getPreAlterTableIndexForeignKeySQL($diff),
- $this->getPreAlterTableRenameIndexForeignKeySQL($diff)
+ $this->getPreAlterTableRenameIndexForeignKeySQL($diff),
);
return $sql;
@@ -673,21 +813,27 @@ protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
*/
private function getPreAlterTableAlterPrimaryKeySQL(TableDiff $diff, Index $index): array
{
- $sql = [];
+ if (! $index->isPrimary()) {
+ return [];
+ }
- if (! $index->isPrimary() || ! $diff->fromTable instanceof Table) {
- return $sql;
+ $table = $diff->getOldTable();
+
+ if ($table === null) {
+ return [];
}
- $tableName = $diff->getName($this)->getQuotedName($this);
+ $sql = [];
+
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
// Dropping primary keys requires to unset autoincrement attribute on the particular column first.
foreach ($index->getColumns() as $columnName) {
- if (! $diff->fromTable->hasColumn($columnName)) {
+ if (! $table->hasColumn($columnName)) {
continue;
}
- $column = $diff->fromTable->getColumn($columnName);
+ $column = $table->getColumn($columnName);
if ($column->getAutoincrement() !== true) {
continue;
@@ -695,7 +841,7 @@ private function getPreAlterTableAlterPrimaryKeySQL(TableDiff $diff, Index $inde
$column->setAutoincrement(false);
- $sql[] = 'ALTER TABLE ' . $tableName . ' MODIFY ' .
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY ' .
$this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray());
// original autoincrement information might be needed later on by other parts of the table alteration
@@ -714,18 +860,45 @@ private function getPreAlterTableAlterPrimaryKeySQL(TableDiff $diff, Index $inde
*/
private function getPreAlterTableAlterIndexForeignKeySQL(TableDiff $diff): array
{
- $sql = [];
- $table = $diff->getName($this)->getQuotedName($this);
+ $table = $diff->getOldTable();
+
+ if ($table === null) {
+ return [];
+ }
+
+ $primaryKey = $table->getPrimaryKey();
+
+ if ($primaryKey === null) {
+ return [];
+ }
+
+ $primaryKeyColumns = [];
+
+ foreach ($primaryKey->getColumns() as $columnName) {
+ if (! $table->hasColumn($columnName)) {
+ continue;
+ }
+
+ $primaryKeyColumns[] = $table->getColumn($columnName);
+ }
- foreach ($diff->changedIndexes as $changedIndex) {
+ if (count($primaryKeyColumns) === 0) {
+ return [];
+ }
+
+ $sql = [];
+
+ $tableNameSQL = $table->getQuotedName($this);
+
+ foreach ($diff->getModifiedIndexes() as $changedIndex) {
// Changed primary key
- if (! $changedIndex->isPrimary() || ! ($diff->fromTable instanceof Table)) {
+ if (! $changedIndex->isPrimary()) {
continue;
}
- foreach ($diff->fromTable->getPrimaryKeyColumns() as $columnName => $column) {
+ foreach ($primaryKeyColumns as $column) {
// Check if an autoincrement column was dropped from the primary key.
- if (! $column->getAutoincrement() || in_array($columnName, $changedIndex->getColumns(), true)) {
+ if (! $column->getAutoincrement() || in_array($column->getName(), $changedIndex->getColumns(), true)) {
continue;
}
@@ -733,7 +906,7 @@ private function getPreAlterTableAlterIndexForeignKeySQL(TableDiff $diff): array
// before we can drop and recreate the primary key.
$column->setAutoincrement(false);
- $sql[] = 'ALTER TABLE ' . $table . ' MODIFY ' .
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY ' .
$this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray());
// Restore the autoincrement attribute as it might be needed later on
@@ -752,15 +925,16 @@ private function getPreAlterTableAlterIndexForeignKeySQL(TableDiff $diff): array
*/
protected function getPreAlterTableRenameIndexForeignKeySQL(TableDiff $diff)
{
- $sql = [];
- $tableName = $diff->getName($this)->getQuotedName($this);
+ $sql = [];
+
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
foreach ($this->getRemainingForeignKeyConstraintsRequiringRenamedIndexes($diff) as $foreignKey) {
- if (in_array($foreignKey, $diff->changedForeignKeys, true)) {
+ if (in_array($foreignKey, $diff->getModifiedForeignKeys(), true)) {
continue;
}
- $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
+ $sql[] = $this->getDropForeignKeySQL($foreignKey->getQuotedName($this), $tableNameSQL);
}
return $sql;
@@ -778,19 +952,25 @@ protected function getPreAlterTableRenameIndexForeignKeySQL(TableDiff $diff)
*/
private function getRemainingForeignKeyConstraintsRequiringRenamedIndexes(TableDiff $diff): array
{
- if (empty($diff->renamedIndexes) || ! $diff->fromTable instanceof Table) {
+ if (count($diff->getRenamedIndexes()) === 0) {
+ return [];
+ }
+
+ $table = $diff->getOldTable();
+
+ if ($table === null) {
return [];
}
$foreignKeys = [];
/** @var ForeignKeyConstraint[] $remainingForeignKeys */
$remainingForeignKeys = array_diff_key(
- $diff->fromTable->getForeignKeys(),
- $diff->removedForeignKeys
+ $table->getForeignKeys(),
+ $diff->getDroppedForeignKeys(),
);
foreach ($remainingForeignKeys as $foreignKey) {
- foreach ($diff->renamedIndexes as $index) {
+ foreach ($diff->getRenamedIndexes() as $index) {
if ($foreignKey->intersectsIndexColumns($index)) {
$foreignKeys[] = $foreignKey;
@@ -809,7 +989,7 @@ protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
{
return array_merge(
parent::getPostAlterTableIndexForeignKeySQL($diff),
- $this->getPostAlterTableRenameIndexForeignKeySQL($diff)
+ $this->getPostAlterTableRenameIndexForeignKeySQL($diff),
);
}
@@ -824,17 +1004,17 @@ protected function getPostAlterTableRenameIndexForeignKeySQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
- $tableName = $newName->getQuotedName($this);
+ $tableNameSQL = $newName->getQuotedName($this);
} else {
- $tableName = $diff->getName($this)->getQuotedName($this);
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
}
foreach ($this->getRemainingForeignKeyConstraintsRequiringRenamedIndexes($diff) as $foreignKey) {
- if (in_array($foreignKey, $diff->changedForeignKeys, true)) {
+ if (in_array($foreignKey, $diff->getModifiedForeignKeys(), true)) {
continue;
}
- $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
+ $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL);
}
return $sql;
@@ -922,6 +1102,8 @@ protected function _getCommonIntegerTypeDeclarationSQL(array $column)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getColumnCharsetDeclarationSQL($charset)
{
@@ -930,14 +1112,8 @@ public function getColumnCharsetDeclarationSQL($charset)
/**
* {@inheritDoc}
- */
- public function getColumnCollationDeclarationSQL($collation)
- {
- return 'COLLATE ' . $this->quoteSingleIdentifier($collation);
- }
-
- /**
- * {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
{
@@ -957,20 +1133,34 @@ public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey
public function getDropIndexSQL($index, $table = null)
{
if ($index instanceof Index) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$indexName = $index->getQuotedName($this);
} elseif (is_string($index)) {
$indexName = $index;
} else {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.'
+ __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.',
);
}
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
} elseif (! is_string($table)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'
+ __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.',
);
}
@@ -1019,7 +1209,7 @@ public function getName()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4749',
- 'AbstractMySQLPlatform::getName() is deprecated. Identify platforms by their class.'
+ 'AbstractMySQLPlatform::getName() is deprecated. Identify platforms by their class.',
);
return 'mysql';
@@ -1074,17 +1264,33 @@ protected function initializeDoctrineTypeMappings()
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function getVarcharMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'AbstractMySQLPlatform::getVarcharMaxLength() is deprecated.',
+ );
+
return 65535;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'AbstractMySQLPlatform::getBinaryMaxLength() is deprecated.',
+ );
+
return 65535;
}
@@ -1099,7 +1305,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'AbstractMySQLPlatform::getReservedKeywordsClass() is deprecated,'
- . ' use AbstractMySQLPlatform::createReservedKeywordsList() instead.'
+ . ' use AbstractMySQLPlatform::createReservedKeywordsList() instead.',
);
return Keywords\MySQLKeywords::class;
@@ -1114,10 +1320,17 @@ protected function getReservedKeywordsClass()
public function getDropTemporaryTableSQL($table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
} elseif (! is_string($table)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'
+ __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.',
);
}
@@ -1159,7 +1372,7 @@ public function getBlobTypeDeclarationSQL(array $column)
*/
public function quoteStringLiteral($str)
{
- $str = str_replace('\\', '\\\\', $str); // MySQL requires backslashes to be escaped aswell.
+ $str = str_replace('\\', '\\\\', $str); // MySQL requires backslashes to be escaped
return parent::quoteStringLiteral($str);
}
@@ -1185,4 +1398,27 @@ private function getDatabaseNameSQL(?string $databaseName): string
return $this->getCurrentDatabaseExpression();
}
+
+ public function createSchemaManager(Connection $connection): MySQLSchemaManager
+ {
+ return new MySQLSchemaManager($connection, $this);
+ }
+
+ /**
+ * @param list $assets
+ *
+ * @return array
+ *
+ * @template T of AbstractAsset
+ */
+ private function indexAssetsByLowerCaseName(array $assets): array
+ {
+ $result = [];
+
+ foreach ($assets as $asset) {
+ $result[strtolower($asset->getName())] = $asset;
+ }
+
+ return $result;
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php b/app/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php
index e143c6dc5..28a0eb580 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Platforms;
use Doctrine\Common\EventManager;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Event\SchemaAlterTableAddColumnEventArgs;
use Doctrine\DBAL\Event\SchemaAlterTableChangeColumnEventArgs;
use Doctrine\DBAL\Event\SchemaAlterTableEventArgs;
@@ -16,12 +17,14 @@
use Doctrine\DBAL\Exception\InvalidLockMode;
use Doctrine\DBAL\LockMode;
use Doctrine\DBAL\Platforms\Keywords\KeywordList;
+use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\Column;
use Doctrine\DBAL\Schema\ColumnDiff;
use Doctrine\DBAL\Schema\Constraint;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
+use Doctrine\DBAL\Schema\SchemaDiff;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\TableDiff;
@@ -86,7 +89,11 @@ abstract class AbstractPlatform
*/
protected $doctrineTypeComments;
- /** @var EventManager|null */
+ /**
+ * @deprecated
+ *
+ * @var EventManager|null
+ */
protected $_eventManager;
/**
@@ -99,20 +106,38 @@ abstract class AbstractPlatform
/**
* Sets the EventManager used by the Platform.
*
+ * @deprecated
+ *
* @return void
*/
public function setEventManager(EventManager $eventManager)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
$this->_eventManager = $eventManager;
}
/**
* Gets the EventManager used by the Platform.
*
+ * @deprecated
+ *
* @return EventManager|null
*/
public function getEventManager()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $this->_eventManager;
}
@@ -191,20 +216,25 @@ private function initializeAllDoctrineTypeMappings(): void
*/
public function getAsciiStringTypeDeclarationSQL(array $column): string
{
- return $this->getVarcharTypeDeclarationSQL($column);
+ return $this->getStringTypeDeclarationSQL($column);
}
/**
* Returns the SQL snippet used to declare a VARCHAR column type.
*
+ * @deprecated Use {@link getStringTypeDeclarationSQL()} instead.
+ *
* @param mixed[] $column
*
* @return string
*/
public function getVarcharTypeDeclarationSQL(array $column)
{
- if (! isset($column['length'])) {
+ if (isset($column['length'])) {
+ $lengthOmitted = false;
+ } else {
$column['length'] = $this->getVarcharDefaultLength();
+ $lengthOmitted = true;
}
$fixed = $column['fixed'] ?? false;
@@ -217,7 +247,19 @@ public function getVarcharTypeDeclarationSQL(array $column)
return $this->getClobTypeDeclarationSQL($column);
}
- return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed);
+ return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed, $lengthOmitted);
+ }
+
+ /**
+ * Returns the SQL snippet used to declare a string column type.
+ *
+ * @param mixed[] $column
+ *
+ * @return string
+ */
+ public function getStringTypeDeclarationSQL(array $column)
+ {
+ return $this->getVarcharTypeDeclarationSQL($column);
}
/**
@@ -229,8 +271,11 @@ public function getVarcharTypeDeclarationSQL(array $column)
*/
public function getBinaryTypeDeclarationSQL(array $column)
{
- if (! isset($column['length'])) {
+ if (isset($column['length'])) {
+ $lengthOmitted = false;
+ } else {
$column['length'] = $this->getBinaryDefaultLength();
+ $lengthOmitted = true;
}
$fixed = $column['fixed'] ?? false;
@@ -245,14 +290,14 @@ public function getBinaryTypeDeclarationSQL(array $column)
'Binary column length %d is greater than supported by the platform (%d).'
. ' Reduce the column length or use a BLOB column instead.',
$column['length'],
- $maxLength
+ $maxLength,
);
}
return $this->getBlobTypeDeclarationSQL($column);
}
- return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed);
+ return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed, $lengthOmitted);
}
/**
@@ -270,7 +315,7 @@ public function getGuidTypeDeclarationSQL(array $column)
$column['length'] = 36;
$column['fixed'] = true;
- return $this->getVarcharTypeDeclarationSQL($column);
+ return $this->getStringTypeDeclarationSQL($column);
}
/**
@@ -296,7 +341,7 @@ public function getJsonTypeDeclarationSQL(array $column)
*
* @throws Exception If not supported on this platform.
*/
- protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
throw Exception::notSupported('VARCHARs not supported by Platform.');
}
@@ -311,7 +356,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
*
* @throws Exception If not supported on this platform.
*/
- protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
throw Exception::notSupported('BINARY/VARBINARY column types are not supported by this platform.');
}
@@ -394,7 +439,7 @@ public function getDoctrineTypeMapping($dbType)
if (! isset($this->doctrineTypeMapping[$dbType])) {
throw new Exception(
- 'Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.'
+ 'Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.',
);
}
@@ -432,7 +477,7 @@ protected function initializeCommentedDoctrineTypes()
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5058',
'%s is deprecated and will be removed in Doctrine DBAL 4.0.',
- __METHOD__
+ __METHOD__,
);
$this->doctrineTypeComments = [];
@@ -461,7 +506,7 @@ public function isCommentedDoctrineType(Type $doctrineType)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5058',
'%s is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.',
- __METHOD__
+ __METHOD__,
);
if ($this->doctrineTypeComments === null) {
@@ -484,7 +529,7 @@ public function markDoctrineTypeCommented($doctrineType)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5058',
'%s is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.',
- __METHOD__
+ __METHOD__,
);
if ($this->doctrineTypeComments === null) {
@@ -499,20 +544,38 @@ public function markDoctrineTypeCommented($doctrineType)
/**
* Gets the comment to append to a column comment that helps parsing this type in reverse engineering.
*
+ * @deprecated This method will be removed without replacement.
+ *
* @return string
*/
public function getDoctrineTypeComment(Type $doctrineType)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5107',
+ '%s is deprecated and will be removed in Doctrine DBAL 4.0.',
+ __METHOD__,
+ );
+
return '(DC2Type:' . $doctrineType->getName() . ')';
}
/**
* Gets the comment of a passed column modified by potential doctrine type comment hints.
*
+ * @deprecated This method will be removed without replacement.
+ *
* @return string|null
*/
protected function getColumnComment(Column $column)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5107',
+ '%s is deprecated and will be removed in Doctrine DBAL 4.0.',
+ __METHOD__,
+ );
+
$comment = $column->getComment();
if ($column->getType()->requiresSQLCommentHint($this)) {
@@ -525,10 +588,18 @@ protected function getColumnComment(Column $column)
/**
* Gets the character used for identifier quoting.
*
+ * @deprecated Use {@see quoteIdentifier()} to quote identifiers instead.
+ *
* @return string
*/
public function getIdentifierQuoteCharacter()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5388',
+ 'AbstractPlatform::getIdentifierQuoteCharacter() is deprecated. Use quoteIdentifier() instead.',
+ );
+
return '"';
}
@@ -543,8 +614,8 @@ public function getSqlCommentStartString()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getSqlCommentStartString() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getSqlCommentStartString() is deprecated.',
);
return '--';
@@ -561,8 +632,8 @@ public function getSqlCommentEndString()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getSqlCommentEndString() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getSqlCommentEndString() is deprecated.',
);
return "\n";
@@ -578,7 +649,7 @@ public function getCharMaxLength(): int
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3263',
- 'AbstractPlatform::getCharMaxLength() is deprecated.'
+ 'AbstractPlatform::getCharMaxLength() is deprecated.',
);
return $this->getVarcharMaxLength();
@@ -596,7 +667,7 @@ public function getVarcharMaxLength()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3263',
- 'AbstractPlatform::getVarcharMaxLength() is deprecated.'
+ 'AbstractPlatform::getVarcharMaxLength() is deprecated.',
);
return 4000;
@@ -614,7 +685,7 @@ public function getVarcharDefaultLength()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3263',
- 'Relying on the default varchar column length is deprecated, specify the length explicitly.'
+ 'Relying on the default varchar column length is deprecated, specify the length explicitly.',
);
return 255;
@@ -632,7 +703,7 @@ public function getBinaryMaxLength()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3263',
- 'AbstractPlatform::getBinaryMaxLength() is deprecated.'
+ 'AbstractPlatform::getBinaryMaxLength() is deprecated.',
);
return 4000;
@@ -650,7 +721,7 @@ public function getBinaryDefaultLength()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3263',
- 'Relying on the default binary column length is deprecated, specify the length explicitly.'
+ 'Relying on the default binary column length is deprecated, specify the length explicitly.',
);
return 255;
@@ -667,9 +738,9 @@ public function getWildcards()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
+ 'https://github.com/doctrine/dbal/pull/4724',
'AbstractPlatform::getWildcards() is deprecated.'
- . ' Use AbstractPlatform::getLikeWildcardCharacters() instead.'
+ . ' Use AbstractPlatform::getLikeWildcardCharacters() instead.',
);
return ['%', '_'];
@@ -700,8 +771,8 @@ public function getAvgExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getAvgExpression() is deprecated. Use AVG() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getAvgExpression() is deprecated. Use AVG() in SQL instead.',
);
return 'AVG(' . $column . ')';
@@ -722,8 +793,8 @@ public function getCountExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getCountExpression() is deprecated. Use COUNT() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getCountExpression() is deprecated. Use COUNT() in SQL instead.',
);
return 'COUNT(' . $column . ')';
@@ -742,8 +813,8 @@ public function getMaxExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getMaxExpression() is deprecated. Use MAX() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getMaxExpression() is deprecated. Use MAX() in SQL instead.',
);
return 'MAX(' . $column . ')';
@@ -762,8 +833,8 @@ public function getMinExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getMinExpression() is deprecated. Use MIN() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getMinExpression() is deprecated. Use MIN() in SQL instead.',
);
return 'MIN(' . $column . ')';
@@ -782,8 +853,8 @@ public function getSumExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getSumExpression() is deprecated. Use SUM() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getSumExpression() is deprecated. Use SUM() in SQL instead.',
);
return 'SUM(' . $column . ')';
@@ -806,8 +877,8 @@ public function getMd5Expression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getMd5Expression() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getMd5Expression() is deprecated.',
);
return 'MD5(' . $column . ')';
@@ -838,8 +909,8 @@ public function getSqrtExpression($column)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getSqrtExpression() is deprecated. Use SQRT() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getSqrtExpression() is deprecated. Use SQRT() in SQL instead.',
);
return 'SQRT(' . $column . ')';
@@ -859,8 +930,8 @@ public function getRoundExpression($column, $decimals = 0)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getRoundExpression() is deprecated. Use ROUND() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getRoundExpression() is deprecated. Use ROUND() in SQL instead.',
);
return 'ROUND(' . $column . ', ' . $decimals . ')';
@@ -930,8 +1001,8 @@ public function getRtrimExpression($str)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getRtrimExpression() is deprecated. Use RTRIM() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getRtrimExpression() is deprecated. Use RTRIM() in SQL instead.',
);
return 'RTRIM(' . $str . ')';
@@ -950,8 +1021,8 @@ public function getLtrimExpression($str)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getLtrimExpression() is deprecated. Use LTRIM() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getLtrimExpression() is deprecated. Use LTRIM() in SQL instead.',
);
return 'LTRIM(' . $str . ')';
@@ -971,8 +1042,8 @@ public function getUpperExpression($str)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getUpperExpression() is deprecated. Use UPPER() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getUpperExpression() is deprecated. Use UPPER() in SQL instead.',
);
return 'UPPER(' . $str . ')';
@@ -992,8 +1063,8 @@ public function getLowerExpression($str)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getLowerExpression() is deprecated. Use LOWER() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getLowerExpression() is deprecated. Use LOWER() in SQL instead.',
);
return 'LOWER(' . $str . ')';
@@ -1027,7 +1098,7 @@ public function getNowExpression()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4753',
- 'AbstractPlatform::getNowExpression() is deprecated. Generate dates within the application.'
+ 'AbstractPlatform::getNowExpression() is deprecated. Generate dates within the application.',
);
return 'NOW()';
@@ -1088,8 +1159,8 @@ public function getNotExpression($expression)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getNotExpression() is deprecated. Use NOT() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getNotExpression() is deprecated. Use NOT() in SQL instead.',
);
return 'NOT(' . $expression . ')';
@@ -1108,8 +1179,8 @@ public function getIsNullExpression($expression)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getIsNullExpression() is deprecated. Use IS NULL in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getIsNullExpression() is deprecated. Use IS NULL in SQL instead.',
);
return $expression . ' IS NULL';
@@ -1128,8 +1199,8 @@ public function getIsNotNullExpression($expression)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getIsNotNullExpression() is deprecated. Use IS NOT NULL in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getIsNotNullExpression() is deprecated. Use IS NOT NULL in SQL instead.',
);
return $expression . ' IS NOT NULL';
@@ -1156,8 +1227,8 @@ public function getBetweenExpression($expression, $value1, $value2)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getBetweenExpression() is deprecated. Use BETWEEN in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getBetweenExpression() is deprecated. Use BETWEEN in SQL instead.',
);
return $expression . ' BETWEEN ' . $value1 . ' AND ' . $value2;
@@ -1176,8 +1247,8 @@ public function getAcosExpression($value)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getAcosExpression() is deprecated. Use ACOS() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getAcosExpression() is deprecated. Use ACOS() in SQL instead.',
);
return 'ACOS(' . $value . ')';
@@ -1196,8 +1267,8 @@ public function getSinExpression($value)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getSinExpression() is deprecated. Use SIN() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getSinExpression() is deprecated. Use SIN() in SQL instead.',
);
return 'SIN(' . $value . ')';
@@ -1214,8 +1285,8 @@ public function getPiExpression()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getPiExpression() is deprecated. Use PI() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getPiExpression() is deprecated. Use PI() in SQL instead.',
);
return 'PI()';
@@ -1234,8 +1305,8 @@ public function getCosExpression($value)
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getCosExpression() is deprecated. Use COS() in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getCosExpression() is deprecated. Use COS() in SQL instead.',
);
return 'COS(' . $value . ')';
@@ -1261,8 +1332,8 @@ public function getDateDiffExpression($date1, $date2)
/**
* Returns the SQL to add the number of given seconds to a date.
*
- * @param string $date
- * @param int $seconds
+ * @param string $date
+ * @param int|numeric-string $seconds
*
* @return string
*
@@ -1270,14 +1341,22 @@ public function getDateDiffExpression($date1, $date2)
*/
public function getDateAddSecondsExpression($date, $seconds)
{
+ if (is_int($seconds)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $seconds as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $seconds, DateIntervalUnit::SECOND);
}
/**
* Returns the SQL to subtract the number of given seconds from a date.
*
- * @param string $date
- * @param int $seconds
+ * @param string $date
+ * @param int|numeric-string $seconds
*
* @return string
*
@@ -1285,14 +1364,22 @@ public function getDateAddSecondsExpression($date, $seconds)
*/
public function getDateSubSecondsExpression($date, $seconds)
{
+ if (is_int($seconds)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $seconds as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $seconds, DateIntervalUnit::SECOND);
}
/**
* Returns the SQL to add the number of given minutes to a date.
*
- * @param string $date
- * @param int $minutes
+ * @param string $date
+ * @param int|numeric-string $minutes
*
* @return string
*
@@ -1300,14 +1387,22 @@ public function getDateSubSecondsExpression($date, $seconds)
*/
public function getDateAddMinutesExpression($date, $minutes)
{
+ if (is_int($minutes)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $minutes as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $minutes, DateIntervalUnit::MINUTE);
}
/**
* Returns the SQL to subtract the number of given minutes from a date.
*
- * @param string $date
- * @param int $minutes
+ * @param string $date
+ * @param int|numeric-string $minutes
*
* @return string
*
@@ -1315,14 +1410,22 @@ public function getDateAddMinutesExpression($date, $minutes)
*/
public function getDateSubMinutesExpression($date, $minutes)
{
+ if (is_int($minutes)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $minutes as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $minutes, DateIntervalUnit::MINUTE);
}
/**
* Returns the SQL to add the number of given hours to a date.
*
- * @param string $date
- * @param int $hours
+ * @param string $date
+ * @param int|numeric-string $hours
*
* @return string
*
@@ -1330,14 +1433,22 @@ public function getDateSubMinutesExpression($date, $minutes)
*/
public function getDateAddHourExpression($date, $hours)
{
+ if (is_int($hours)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $hours as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $hours, DateIntervalUnit::HOUR);
}
/**
* Returns the SQL to subtract the number of given hours to a date.
*
- * @param string $date
- * @param int $hours
+ * @param string $date
+ * @param int|numeric-string $hours
*
* @return string
*
@@ -1345,14 +1456,22 @@ public function getDateAddHourExpression($date, $hours)
*/
public function getDateSubHourExpression($date, $hours)
{
+ if (is_int($hours)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $hours as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $hours, DateIntervalUnit::HOUR);
}
/**
* Returns the SQL to add the number of given days to a date.
*
- * @param string $date
- * @param int $days
+ * @param string $date
+ * @param int|numeric-string $days
*
* @return string
*
@@ -1360,14 +1479,22 @@ public function getDateSubHourExpression($date, $hours)
*/
public function getDateAddDaysExpression($date, $days)
{
+ if (is_int($days)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $days as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $days, DateIntervalUnit::DAY);
}
/**
* Returns the SQL to subtract the number of given days to a date.
*
- * @param string $date
- * @param int $days
+ * @param string $date
+ * @param int|numeric-string $days
*
* @return string
*
@@ -1375,14 +1502,22 @@ public function getDateAddDaysExpression($date, $days)
*/
public function getDateSubDaysExpression($date, $days)
{
+ if (is_int($days)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $days as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $days, DateIntervalUnit::DAY);
}
/**
* Returns the SQL to add the number of given weeks to a date.
*
- * @param string $date
- * @param int $weeks
+ * @param string $date
+ * @param int|numeric-string $weeks
*
* @return string
*
@@ -1390,14 +1525,22 @@ public function getDateSubDaysExpression($date, $days)
*/
public function getDateAddWeeksExpression($date, $weeks)
{
+ if (is_int($weeks)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $weeks as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $weeks, DateIntervalUnit::WEEK);
}
/**
* Returns the SQL to subtract the number of given weeks from a date.
*
- * @param string $date
- * @param int $weeks
+ * @param string $date
+ * @param int|numeric-string $weeks
*
* @return string
*
@@ -1405,14 +1548,22 @@ public function getDateAddWeeksExpression($date, $weeks)
*/
public function getDateSubWeeksExpression($date, $weeks)
{
+ if (is_int($weeks)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $weeks as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $weeks, DateIntervalUnit::WEEK);
}
/**
* Returns the SQL to add the number of given months to a date.
*
- * @param string $date
- * @param int $months
+ * @param string $date
+ * @param int|numeric-string $months
*
* @return string
*
@@ -1420,14 +1571,22 @@ public function getDateSubWeeksExpression($date, $weeks)
*/
public function getDateAddMonthExpression($date, $months)
{
+ if (is_int($months)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $months as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $months, DateIntervalUnit::MONTH);
}
/**
* Returns the SQL to subtract the number of given months to a date.
*
- * @param string $date
- * @param int $months
+ * @param string $date
+ * @param int|numeric-string $months
*
* @return string
*
@@ -1435,14 +1594,22 @@ public function getDateAddMonthExpression($date, $months)
*/
public function getDateSubMonthExpression($date, $months)
{
+ if (is_int($months)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $months as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $months, DateIntervalUnit::MONTH);
}
/**
* Returns the SQL to add the number of given quarters to a date.
*
- * @param string $date
- * @param int $quarters
+ * @param string $date
+ * @param int|numeric-string $quarters
*
* @return string
*
@@ -1450,14 +1617,22 @@ public function getDateSubMonthExpression($date, $months)
*/
public function getDateAddQuartersExpression($date, $quarters)
{
+ if (is_int($quarters)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $quarters as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $quarters, DateIntervalUnit::QUARTER);
}
/**
* Returns the SQL to subtract the number of given quarters from a date.
*
- * @param string $date
- * @param int $quarters
+ * @param string $date
+ * @param int|numeric-string $quarters
*
* @return string
*
@@ -1465,14 +1640,22 @@ public function getDateAddQuartersExpression($date, $quarters)
*/
public function getDateSubQuartersExpression($date, $quarters)
{
+ if (is_int($quarters)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $quarters as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $quarters, DateIntervalUnit::QUARTER);
}
/**
* Returns the SQL to add the number of given years to a date.
*
- * @param string $date
- * @param int $years
+ * @param string $date
+ * @param int|numeric-string $years
*
* @return string
*
@@ -1480,14 +1663,22 @@ public function getDateSubQuartersExpression($date, $quarters)
*/
public function getDateAddYearsExpression($date, $years)
{
+ if (is_int($years)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $years as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '+', $years, DateIntervalUnit::YEAR);
}
/**
* Returns the SQL to subtract the number of given years from a date.
*
- * @param string $date
- * @param int $years
+ * @param string $date
+ * @param int|numeric-string $years
*
* @return string
*
@@ -1495,17 +1686,26 @@ public function getDateAddYearsExpression($date, $years)
*/
public function getDateSubYearsExpression($date, $years)
{
+ if (is_int($years)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/3498',
+ 'Passing $years as an integer is deprecated. Pass it as a numeric string instead.',
+ );
+ }
+
return $this->getDateArithmeticIntervalExpression($date, '-', $years, DateIntervalUnit::YEAR);
}
/**
* Returns the SQL for a date arithmetic expression.
*
- * @param string $date The column or literal representing a date to perform the arithmetic operation on.
- * @param string $operator The arithmetic operator (+ or -).
- * @param int $interval The interval that shall be calculated into the date.
- * @param string $unit The unit of the interval that shall be calculated into the date.
- * One of the DATE_INTERVAL_UNIT_* constants.
+ * @param string $date The column or literal representing a date
+ * to perform the arithmetic operation on.
+ * @param string $operator The arithmetic operator (+ or -).
+ * @param int|numeric-string $interval The interval that shall be calculated into the date.
+ * @param string $unit The unit of the interval that shall be calculated into the date.
+ * One of the DATE_INTERVAL_UNIT_* constants.
*
* @return string
*
@@ -1618,16 +1818,30 @@ public function getDropTableSQL($table)
$tableArg = $table;
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
if (! is_string($table)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'
+ __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.',
);
}
if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaDropTable)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaDropTable,
+ );
+
$eventArgs = new SchemaDropTableEventArgs($tableArg, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaDropTable, $eventArgs);
@@ -1654,6 +1868,17 @@ public function getDropTableSQL($table)
*/
public function getDropTemporaryTableSQL($table)
{
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
+ $table = $table->getQuotedName($this);
+ }
+
return $this->getDropTableSQL($table);
}
@@ -1670,10 +1895,17 @@ public function getDropTemporaryTableSQL($table)
public function getDropIndexSQL($index, $table = null)
{
if ($index instanceof Index) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$index = $index->getQuotedName($this);
} elseif (! is_string($index)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.'
+ __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.',
);
}
@@ -1692,11 +1924,25 @@ public function getDropIndexSQL($index, $table = null)
*/
public function getDropConstraintSQL($constraint, $table)
{
- if (! $constraint instanceof Constraint) {
+ if ($constraint instanceof Constraint) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $constraint as a Constraint object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$constraint = new Identifier($constraint);
}
- if (! $table instanceof Table) {
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$table = new Identifier($table);
}
@@ -1716,11 +1962,26 @@ public function getDropConstraintSQL($constraint, $table)
*/
public function getDropForeignKeySQL($foreignKey, $table)
{
- if (! $foreignKey instanceof ForeignKeyConstraint) {
+ if ($foreignKey instanceof ForeignKeyConstraint) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.'
+ . ' Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$foreignKey = new Identifier($foreignKey);
}
- if (! $table instanceof Table) {
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$table = new Identifier($table);
}
@@ -1743,8 +2004,9 @@ public function getDropUniqueConstraintSQL(string $name, string $tableName): str
* on this platform.
*
* @param int $createFlags
+ * @psalm-param int-mask-of $createFlags
*
- * @return string[] The sequence of SQL statements.
+ * @return list The list of SQL statements.
*
* @throws Exception
* @throws InvalidArgumentException
@@ -1753,10 +2015,54 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
{
if (! is_int($createFlags)) {
throw new InvalidArgumentException(
- 'Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.'
+ 'Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.',
);
}
+ if (($createFlags & self::CREATE_INDEXES) === 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5416',
+ 'Unsetting the CREATE_INDEXES flag in AbstractPlatform::getCreateTableSQL() is deprecated.',
+ );
+ }
+
+ if (($createFlags & self::CREATE_FOREIGNKEYS) === 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5416',
+ 'Not setting the CREATE_FOREIGNKEYS flag in AbstractPlatform::getCreateTableSQL()'
+ . ' is deprecated. In order to build the statements that create multiple tables'
+ . ' referencing each other via foreign keys, use AbstractPlatform::getCreateTablesSQL().',
+ );
+ }
+
+ return $this->buildCreateTableSQL(
+ $table,
+ ($createFlags & self::CREATE_INDEXES) > 0,
+ ($createFlags & self::CREATE_FOREIGNKEYS) > 0,
+ );
+ }
+
+ /**
+ * @internal
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ final protected function getCreateTableWithoutForeignKeysSQL(Table $table): array
+ {
+ return $this->buildCreateTableSQL($table, true, false);
+ }
+
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function buildCreateTableSQL(Table $table, bool $createIndexes, bool $createForeignKeys): array
+ {
if (count($table->getColumns()) === 0) {
throw Exception::noColumnsSpecifiedForTable($table->getName());
}
@@ -1767,7 +2073,7 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
$options['indexes'] = [];
$options['primary'] = [];
- if (($createFlags & self::CREATE_INDEXES) > 0) {
+ if ($createIndexes) {
foreach ($table->getIndexes() as $index) {
if (! $index->isPrimary()) {
$options['indexes'][$index->getQuotedName($this)] = $index;
@@ -1784,7 +2090,7 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
}
}
- if (($createFlags & self::CREATE_FOREIGNKEYS) > 0) {
+ if ($createForeignKeys) {
$options['foreignKeys'] = [];
foreach ($table->getForeignKeys() as $fkConstraint) {
@@ -1800,6 +2106,13 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
$this->_eventManager !== null
&& $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn)
) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaCreateTableColumn,
+ );
+
$eventArgs = new SchemaCreateTableColumnEventArgs($column, $table, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaCreateTableColumn, $eventArgs);
@@ -1821,6 +2134,13 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
}
if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTable)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaCreateTable,
+ );
+
$eventArgs = new SchemaCreateTableEventArgs($table, $columns, $options, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaCreateTable, $eventArgs);
@@ -1851,6 +2171,58 @@ public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDE
return array_merge($sql, $columnSql);
}
+ /**
+ * @param list $tables
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ public function getCreateTablesSQL(array $tables): array
+ {
+ $sql = [];
+
+ foreach ($tables as $table) {
+ $sql = array_merge($sql, $this->getCreateTableWithoutForeignKeysSQL($table));
+ }
+
+ foreach ($tables as $table) {
+ foreach ($table->getForeignKeys() as $foreignKey) {
+ $sql[] = $this->getCreateForeignKeySQL(
+ $foreignKey,
+ $table->getQuotedName($this),
+ );
+ }
+ }
+
+ return $sql;
+ }
+
+ /**
+ * @param list $tables
+ *
+ * @return list
+ */
+ public function getDropTablesSQL(array $tables): array
+ {
+ $sql = [];
+
+ foreach ($tables as $table) {
+ foreach ($table->getForeignKeys() as $foreignKey) {
+ $sql[] = $this->getDropForeignKeySQL(
+ $foreignKey->getQuotedName($this),
+ $table->getQuotedName($this),
+ );
+ }
+ }
+
+ foreach ($tables as $table) {
+ $sql[] = $this->getDropTableSQL($table->getQuotedName($this));
+ }
+
+ return $sql;
+ }
+
protected function getCommentOnTableSQL(string $tableName, ?string $comment): string
{
$tableName = new Identifier($tableName);
@@ -1858,7 +2230,7 @@ protected function getCommentOnTableSQL(string $tableName, ?string $comment): st
return sprintf(
'COMMENT ON TABLE %s IS %s',
$tableName->getQuotedName($this),
- $this->quoteStringLiteral((string) $comment)
+ $this->quoteStringLiteral((string) $comment),
);
}
@@ -1878,7 +2250,7 @@ public function getCommentOnColumnSQL($tableName, $columnName, $comment)
'COMMENT ON COLUMN %s.%s IS %s',
$tableName->getQuotedName($this),
$columnName->getQuotedName($this),
- $this->quoteStringLiteral((string) $comment)
+ $this->quoteStringLiteral((string) $comment),
);
}
@@ -1941,7 +2313,7 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
$sql = [$query];
if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] as $definition) {
+ foreach ($options['foreignKeys'] as $definition) {
$sql[] = $this->getCreateForeignKeySQL($definition, $name);
}
}
@@ -1949,14 +2321,22 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
return $sql;
}
- /**
- * @return string
- */
+ /** @return string */
public function getCreateTemporaryTableSnippetSQL()
{
return 'CREATE TEMPORARY TABLE';
}
+ /**
+ * Generates SQL statements that can be used to apply the diff.
+ *
+ * @return list
+ */
+ public function getAlterSchemaSQL(SchemaDiff $diff): array
+ {
+ return $diff->toSql($this);
+ }
+
/**
* Returns the SQL to create a sequence on this platform.
*
@@ -1997,6 +2377,13 @@ public function getDropSequenceSQL($sequence)
}
if ($sequence instanceof Sequence) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $sequence as a Sequence object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$sequence = $sequence->getQuotedName($this);
}
@@ -2018,6 +2405,13 @@ public function getDropSequenceSQL($sequence)
public function getCreateConstraintSQL(Constraint $constraint, $table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
@@ -2033,7 +2427,7 @@ public function getCreateConstraintSQL(Constraint $constraint, $table)
$query .= ' UNIQUE';
} else {
throw new InvalidArgumentException(
- 'Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().'
+ 'Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().',
);
}
} elseif ($constraint instanceof UniqueConstraint) {
@@ -2062,6 +2456,13 @@ public function getCreateConstraintSQL(Constraint $constraint, $table)
public function getCreateIndexSQL(Index $index, $table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
@@ -2069,7 +2470,11 @@ public function getCreateIndexSQL(Index $index, $table)
$columns = $index->getColumns();
if (count($columns) === 0) {
- throw new InvalidArgumentException("Incomplete definition. 'columns' required.");
+ throw new InvalidArgumentException(sprintf(
+ 'Incomplete or invalid index definition %s on table %s',
+ $name,
+ $table,
+ ));
}
if ($index->isPrimary()) {
@@ -2116,6 +2521,13 @@ protected function getCreateIndexSQLFlags(Index $index)
public function getCreatePrimaryKeySQL(Index $index, $table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
@@ -2211,6 +2623,13 @@ public function quoteSingleIdentifier($str)
public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
@@ -2222,7 +2641,7 @@ public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table)
*
* This method returns an array of SQL statements, since some platforms need several statements.
*
- * @return string[]
+ * @return list
*
* @throws Exception If not supported on this platform.
*/
@@ -2231,6 +2650,14 @@ public function getAlterTableSQL(TableDiff $diff)
throw Exception::notSupported(__METHOD__);
}
+ /** @return list */
+ public function getRenameTableSQL(string $oldName, string $newName): array
+ {
+ return [
+ sprintf('ALTER TABLE %s RENAME TO %s', $oldName, $newName),
+ ];
+ }
+
/**
* @param mixed[] $columnSql
*
@@ -2246,6 +2673,13 @@ protected function onSchemaAlterTableAddColumn(Column $column, TableDiff $diff,
return false;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaAlterTableAddColumn,
+ );
+
$eventArgs = new SchemaAlterTableAddColumnEventArgs($column, $diff, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaAlterTableAddColumn, $eventArgs);
@@ -2269,6 +2703,13 @@ protected function onSchemaAlterTableRemoveColumn(Column $column, TableDiff $dif
return false;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaAlterTableRemoveColumn,
+ );
+
$eventArgs = new SchemaAlterTableRemoveColumnEventArgs($column, $diff, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRemoveColumn, $eventArgs);
@@ -2292,6 +2733,13 @@ protected function onSchemaAlterTableChangeColumn(ColumnDiff $columnDiff, TableD
return false;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaAlterTableChangeColumn,
+ );
+
$eventArgs = new SchemaAlterTableChangeColumnEventArgs($columnDiff, $diff, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaAlterTableChangeColumn, $eventArgs);
@@ -2316,6 +2764,13 @@ protected function onSchemaAlterTableRenameColumn($oldColumnName, Column $column
return false;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaAlterTableRenameColumn,
+ );
+
$eventArgs = new SchemaAlterTableRenameColumnEventArgs($oldColumnName, $column, $diff, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRenameColumn, $eventArgs);
@@ -2339,6 +2794,13 @@ protected function onSchemaAlterTable(TableDiff $diff, &$sql)
return false;
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated.',
+ Events::onSchemaAlterTable,
+ );
+
$eventArgs = new SchemaAlterTableEventArgs($diff, $this);
$this->_eventManager->dispatchEvent(Events::onSchemaAlterTable, $eventArgs);
@@ -2347,72 +2809,72 @@ protected function onSchemaAlterTable(TableDiff $diff, &$sql)
return $eventArgs->isDefaultPrevented();
}
- /**
- * @return string[]
- */
+ /** @return string[] */
protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
{
- $tableName = $diff->getName($this)->getQuotedName($this);
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
$sql = [];
if ($this->supportsForeignKeyConstraints()) {
- foreach ($diff->removedForeignKeys as $foreignKey) {
- $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
+ foreach ($diff->getDroppedForeignKeys() as $foreignKey) {
+ if ($foreignKey instanceof ForeignKeyConstraint) {
+ $foreignKey = $foreignKey->getQuotedName($this);
+ }
+
+ $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableNameSQL);
}
- foreach ($diff->changedForeignKeys as $foreignKey) {
- $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
+ foreach ($diff->getModifiedForeignKeys() as $foreignKey) {
+ $sql[] = $this->getDropForeignKeySQL($foreignKey->getQuotedName($this), $tableNameSQL);
}
}
- foreach ($diff->removedIndexes as $index) {
- $sql[] = $this->getDropIndexSQL($index, $tableName);
+ foreach ($diff->getDroppedIndexes() as $index) {
+ $sql[] = $this->getDropIndexSQL($index->getQuotedName($this), $tableNameSQL);
}
- foreach ($diff->changedIndexes as $index) {
- $sql[] = $this->getDropIndexSQL($index, $tableName);
+ foreach ($diff->getModifiedIndexes() as $index) {
+ $sql[] = $this->getDropIndexSQL($index->getQuotedName($this), $tableNameSQL);
}
return $sql;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
{
$sql = [];
$newName = $diff->getNewName();
if ($newName !== false) {
- $tableName = $newName->getQuotedName($this);
+ $tableNameSQL = $newName->getQuotedName($this);
} else {
- $tableName = $diff->getName($this)->getQuotedName($this);
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
}
if ($this->supportsForeignKeyConstraints()) {
- foreach ($diff->addedForeignKeys as $foreignKey) {
- $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
+ foreach ($diff->getAddedForeignKeys() as $foreignKey) {
+ $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL);
}
- foreach ($diff->changedForeignKeys as $foreignKey) {
- $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
+ foreach ($diff->getModifiedForeignKeys() as $foreignKey) {
+ $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL);
}
}
- foreach ($diff->addedIndexes as $index) {
- $sql[] = $this->getCreateIndexSQL($index, $tableName);
+ foreach ($diff->getAddedIndexes() as $index) {
+ $sql[] = $this->getCreateIndexSQL($index, $tableNameSQL);
}
- foreach ($diff->changedIndexes as $index) {
- $sql[] = $this->getCreateIndexSQL($index, $tableName);
+ foreach ($diff->getModifiedIndexes() as $index) {
+ $sql[] = $this->getCreateIndexSQL($index, $tableNameSQL);
}
- foreach ($diff->renamedIndexes as $oldIndexName => $index) {
+ foreach ($diff->getRenamedIndexes() as $oldIndexName => $index) {
$oldIndexName = new Identifier($oldIndexName);
$sql = array_merge(
$sql,
- $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableName)
+ $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableNameSQL),
);
}
@@ -2526,10 +2988,29 @@ public function getColumnDeclarationSQL($name, array $column)
$notnull = ! empty($column['notnull']) ? ' NOT NULL' : '';
- $unique = ! empty($column['unique']) ?
- ' ' . $this->getUniqueFieldDeclarationSQL() : '';
+ if (! empty($column['unique'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "unique" column property is deprecated. Use unique constraints instead.',
+ );
- $check = ! empty($column['check']) ? ' ' . $column['check'] : '';
+ $unique = ' ' . $this->getUniqueFieldDeclarationSQL();
+ } else {
+ $unique = '';
+ }
+
+ if (! empty($column['check'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "check" column property is deprecated.',
+ );
+
+ $check = ' ' . $column['check'];
+ } else {
+ $check = '';
+ }
$typeDecl = $column['type']->getSQLDeclaration($column, $this);
$declaration = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation;
@@ -2551,12 +3032,37 @@ public function getColumnDeclarationSQL($name, array $column)
*/
public function getDecimalTypeDeclarationSQL(array $column)
{
- $column['precision'] = ! isset($column['precision']) || empty($column['precision'])
- ? 10 : $column['precision'];
- $column['scale'] = ! isset($column['scale']) || empty($column['scale'])
- ? 0 : $column['scale'];
+ if (empty($column['precision'])) {
+ if (! isset($column['precision'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5637',
+ 'Relying on the default decimal column precision is deprecated'
+ . ', specify the precision explicitly.',
+ );
+ }
+
+ $precision = 10;
+ } else {
+ $precision = $column['precision'];
+ }
+
+ if (empty($column['scale'])) {
+ if (! isset($column['scale'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5637',
+ 'Relying on the default decimal column scale is deprecated'
+ . ', specify the scale explicitly.',
+ );
+ }
- return 'NUMERIC(' . $column['precision'] . ', ' . $column['scale'] . ')';
+ $scale = 0;
+ } else {
+ $scale = $column['scale'];
+ }
+
+ return 'NUMERIC(' . $precision . ', ' . $scale . ')';
}
/**
@@ -2688,21 +3194,39 @@ public function getIndexDeclarationSQL($name, Index $index)
* e.g. when a column has the "columnDefinition" keyword.
* Only "AUTOINCREMENT" and "PRIMARY KEY" are added if appropriate.
*
+ * @deprecated
+ *
* @param mixed[] $column
*
* @return string
*/
public function getCustomTypeDeclarationSQL(array $column)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5527',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $column['columnDefinition'];
}
/**
* Obtains DBMS specific SQL code portion needed to set an index
* declaration to be used in statements like CREATE TABLE.
+ *
+ * @deprecated
*/
public function getIndexFieldDeclarationListSQL(Index $index): string
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5527',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return implode(', ', $index->getQuotedColumns($this));
}
@@ -2710,10 +3234,19 @@ public function getIndexFieldDeclarationListSQL(Index $index): string
* Obtains DBMS specific SQL code portion needed to set an index
* declaration to be used in statements like CREATE TABLE.
*
+ * @deprecated
+ *
* @param mixed[] $columns
*/
public function getColumnsFieldDeclarationListSQL(array $columns): string
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5527',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
$ret = [];
foreach ($columns as $column => $definition) {
@@ -2747,8 +3280,8 @@ public function getTemporaryTableSQL()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getTemporaryTableSQL() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getTemporaryTableSQL() is deprecated.',
);
return 'TEMPORARY';
@@ -2876,8 +3409,8 @@ public function getUniqueFieldDeclarationSQL()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getUniqueFieldDeclarationSQL() is deprecated. Use UNIQUE in SQL instead.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getUniqueFieldDeclarationSQL() is deprecated. Use UNIQUE in SQL instead.',
);
return 'UNIQUE';
@@ -2908,7 +3441,7 @@ public function getColumnCharsetDeclarationSQL($charset)
*/
public function getColumnCollationDeclarationSQL($collation)
{
- return $this->supportsColumnCollation() ? 'COLLATE ' . $collation : '';
+ return $this->supportsColumnCollation() ? 'COLLATE ' . $this->quoteSingleIdentifier($collation) : '';
}
/**
@@ -2923,8 +3456,8 @@ public function prefersIdentityColumns()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/1519',
- 'AbstractPlatform::prefersIdentityColumns() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/1519',
+ 'AbstractPlatform::prefersIdentityColumns() is deprecated.',
);
return false;
@@ -3050,6 +3583,8 @@ protected function _getTransactionIsolationLevelSQL($level)
}
/**
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
+ *
* @return string
*
* @throws Exception If not supported on this platform.
@@ -3074,13 +3609,15 @@ public function getListNamespacesSQL()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'AbstractPlatform::getListNamespacesSQL() is deprecated,'
- . ' use AbstractSchemaManager::listSchemaNames() instead.'
+ . ' use AbstractSchemaManager::listSchemaNames() instead.',
);
throw Exception::notSupported(__METHOD__);
}
/**
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
+ *
* @param string $database
*
* @return string
@@ -3093,6 +3630,8 @@ public function getListSequencesSQL($database)
}
/**
+ * @deprecated
+ *
* @param string $table
*
* @return string
@@ -3105,6 +3644,8 @@ public function getListTableConstraintsSQL($table)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
* @param string $database
*
@@ -3118,6 +3659,8 @@ public function getListTableColumnsSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @return string
*
* @throws Exception If not supported on this platform.
@@ -3138,8 +3681,8 @@ public function getListUsersSQL()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::getListUsersSQL() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::getListUsersSQL() is deprecated.',
);
throw Exception::notSupported(__METHOD__);
@@ -3148,6 +3691,8 @@ public function getListUsersSQL()
/**
* Returns the SQL to list all views of a database or user.
*
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
+ *
* @param string $database
*
* @return string
@@ -3160,6 +3705,8 @@ public function getListViewsSQL($database)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* Returns the list of indexes for the current database.
*
* The current database parameter is optional but will always be passed
@@ -3182,6 +3729,8 @@ public function getListTableIndexesSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
*
* @return string
@@ -3346,7 +3895,7 @@ public function getFloatDeclarationSQL(array $column)
*
* @see TransactionIsolationLevel
*
- * @return int The default isolation level.
+ * @return TransactionIsolationLevel::* The default isolation level.
*/
public function getDefaultTransactionIsolationLevel()
{
@@ -3385,16 +3934,27 @@ public function supportsIdentityColumns()
* but support sequences can emulate identity columns by using
* sequences.
*
+ * @deprecated
+ *
* @return bool
*/
public function usesSequenceEmulatedIdentityColumns()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
/**
* Returns the name of the sequence for a particular identity column in a particular table.
*
+ * @deprecated
+ *
* @see usesSequenceEmulatedIdentityColumns
*
* @param string $tableName The name of the table to return the sequence name for.
@@ -3420,8 +3980,8 @@ public function supportsIndexes()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsIndexes() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsIndexes() is deprecated.',
);
return true;
@@ -3456,8 +4016,8 @@ public function supportsAlterTable()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsAlterTable() is deprecated. All platforms must implement altering tables.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsAlterTable() is deprecated. All platforms must implement altering tables.',
);
return true;
@@ -3474,8 +4034,8 @@ public function supportsTransactions()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsTransactions() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsTransactions() is deprecated.',
);
return true;
@@ -3512,8 +4072,8 @@ public function supportsPrimaryConstraints()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsPrimaryConstraints() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsPrimaryConstraints() is deprecated.',
);
return true;
@@ -3522,10 +4082,18 @@ public function supportsPrimaryConstraints()
/**
* Whether the platform supports foreign key constraints.
*
+ * @deprecated All platforms should support foreign key constraints.
+ *
* @return bool
*/
public function supportsForeignKeyConstraints()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5409',
+ 'AbstractPlatform::supportsForeignKeyConstraints() is deprecated.',
+ );
+
return true;
}
@@ -3545,7 +4113,7 @@ public function supportsSchemas()
* @deprecated
*
* Platforms that either support or emulate schemas don't automatically
- * filter a schema for the namespaced elements in {@see AbstractManager::createSchema()}.
+ * filter a schema for the namespaced elements in {@see AbstractManager::introspectSchema()}.
*
* @return bool
*/
@@ -3554,7 +4122,7 @@ public function canEmulateSchemas()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4805',
- 'AbstractPlatform::canEmulateSchemas() is deprecated.'
+ 'AbstractPlatform::canEmulateSchemas() is deprecated.',
);
return false;
@@ -3563,6 +4131,8 @@ public function canEmulateSchemas()
/**
* Returns the default schema name.
*
+ * @deprecated
+ *
* @return string
*
* @throws Exception If not supported on this platform.
@@ -3577,10 +4147,19 @@ public function getDefaultSchemaName()
*
* Some databases don't allow to create and drop databases at all or only with certain tools.
*
+ * @deprecated
+ *
* @return bool
*/
public function supportsCreateDropDatabase()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
@@ -3595,8 +4174,8 @@ public function supportsGettingAffectedRows()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsGettingAffectedRows() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsGettingAffectedRows() is deprecated.',
);
return true;
@@ -3625,20 +4204,38 @@ public function supportsCommentOnStatement()
/**
* Does this platform have native guid type.
*
+ * @deprecated
+ *
* @return bool
*/
public function hasNativeGuidType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
/**
* Does this platform have native JSON type.
*
+ * @deprecated
+ *
* @return bool
*/
public function hasNativeJsonType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
@@ -3653,8 +4250,8 @@ public function supportsViews()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
- 'AbstractPlatform::supportsViews() is deprecated. All platforms must implement support for views.'
+ 'https://github.com/doctrine/dbal/pull/4724',
+ 'AbstractPlatform::supportsViews() is deprecated. All platforms must implement support for views.',
);
return true;
@@ -3728,14 +4325,14 @@ final public function modifyLimitQuery($query, $limit, $offset = 0): string
if ($offset < 0) {
throw new Exception(sprintf(
'Offset must be a positive integer or zero, %d given',
- $offset
+ $offset,
));
}
if ($offset > 0 && ! $this->supportsLimitOffset()) {
throw new Exception(sprintf(
'Platform %s does not support offset values in limit queries.',
- $this->getName()
+ $this->getName(),
));
}
@@ -3779,9 +4376,9 @@ public function supportsLimitOffset()
{
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/4724',
+ 'https://github.com/doctrine/dbal/pull/4724',
'AbstractPlatform::supportsViews() is deprecated.'
- . ' All platforms must implement support for offsets in modify limit clauses.'
+ . ' All platforms must implement support for offsets in modify limit clauses.',
);
return true;
@@ -3883,13 +4480,8 @@ public function rollbackSavePoint($savepoint)
*/
final public function getReservedKeywordsList(): KeywordList
{
- // Check for an existing instantiation of the keywords class.
- if ($this->_keywords === null) {
- // Store the instance so it doesn't need to be generated on every request.
- $this->_keywords = $this->createReservedKeywordsList();
- }
-
- return $this->_keywords;
+ // Store the instance so it doesn't need to be generated on every request.
+ return $this->_keywords ??= $this->createReservedKeywordsList();
}
/**
@@ -3926,7 +4518,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'AbstractPlatform::getReservedKeywordsClass() is deprecated,'
- . ' use AbstractPlatform::createReservedKeywordsList() instead.'
+ . ' use AbstractPlatform::createReservedKeywordsList() instead.',
);
throw Exception::notSupported(__METHOD__);
@@ -3952,10 +4544,19 @@ public function quoteStringLiteral($str)
/**
* Gets the character used for string literal quoting.
*
+ * @deprecated Use {@see quoteStringLiteral()} to quote string literals instead.
+ *
* @return string
*/
public function getStringLiteralQuoteCharacter()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5388',
+ 'AbstractPlatform::getStringLiteralQuoteCharacter() is deprecated.'
+ . ' Use quoteStringLiteral() instead.',
+ );
+
return "'";
}
@@ -3972,7 +4573,7 @@ final public function escapeStringForLike(string $inputString, string $escapeCha
return preg_replace(
'~([' . preg_quote($this->getLikeWildcardCharacters() . $escapeChar, '~') . '])~u',
addcslashes($escapeChar, '\\') . '$1',
- $inputString
+ $inputString,
);
}
@@ -3984,22 +4585,14 @@ private function columnToArray(Column $column): array
{
$name = $column->getQuotedName($this);
- $columnData = array_merge($column->toArray(), [
+ return array_merge($column->toArray(), [
'name' => $name,
'version' => $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : false,
'comment' => $this->getColumnComment($column),
]);
-
- if ($columnData['type'] instanceof Types\StringType && $columnData['length'] === null) {
- $columnData['length'] = $this->getVarcharDefaultLength();
- }
-
- return $columnData;
}
- /**
- * @internal
- */
+ /** @internal */
public function createSQLParser(): Parser
{
return new Parser(false);
@@ -4042,4 +4635,17 @@ public function columnsEqual(Column $column1, Column $column2): bool
return $column1->getType() === $column2->getType();
}
+
+ /**
+ * Creates the schema manager that can be used to inspect and change the underlying
+ * database schema according to the dialect of the platform.
+ *
+ * @throws Exception
+ *
+ * @abstract
+ */
+ public function createSchemaManager(Connection $connection): AbstractSchemaManager
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/DB2Platform.php b/app/vendor/doctrine/dbal/src/Platforms/DB2Platform.php
index 979bb2c8f..c40a03e6d 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/DB2Platform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/DB2Platform.php
@@ -2,8 +2,10 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Schema\ColumnDiff;
+use Doctrine\DBAL\Schema\DB2SchemaManager;
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\TableDiff;
@@ -23,24 +25,51 @@
class DB2Platform extends AbstractPlatform
{
+ /**
+ * {@inheritdoc}
+ *
+ * @deprecated
+ */
public function getCharMaxLength(): int
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'DB2Platform::getCharMaxLength() is deprecated.',
+ );
+
return 254;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'DB2Platform::getBinaryMaxLength() is deprecated.',
+ );
+
return 32704;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryDefaultLength()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length is deprecated, specify the length explicitly.',
+ );
+
return 1;
}
@@ -99,7 +128,7 @@ public function isCommentedDoctrineType(Type $doctrineType)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5058',
'%s is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.',
- __METHOD__
+ __METHOD__,
);
if ($doctrineType->getName() === Types::BOOLEAN) {
@@ -114,8 +143,17 @@ public function isCommentedDoctrineType(Type $doctrineType)
/**
* {@inheritDoc}
*/
- protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default string column length on IBM DB2 is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(254)')
: ($length > 0 ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)');
}
@@ -123,8 +161,17 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
/**
* {@inheritdoc}
*/
- protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length on IBM DB2 is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $this->getVarcharTypeDeclarationSQLSnippet($length, $fixed) . ' FOR BIT DATA';
}
@@ -145,7 +192,7 @@ public function getName()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4749',
- 'DB2Platform::getName() is deprecated. Identify platforms by their class.'
+ 'DB2Platform::getName() is deprecated. Identify platforms by their class.',
);
return 'db2';
@@ -279,6 +326,8 @@ public function getTruncateTableSQL($tableName, $cascade = false)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* This code fragment is originally from the Zend_Db_Adapter_Db2 class, but has been edited.
*
* @param string $table
@@ -336,15 +385,19 @@ public function getListTableColumnsSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
{
- return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T'";
+ return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T' AND CREATOR = CURRENT_USER";
}
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -352,6 +405,8 @@ public function getListViewsSQL($database)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableIndexesSQL($table, $database = null)
@@ -376,6 +431,8 @@ public function getListTableIndexesSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableForeignKeysSQL($table)
@@ -411,14 +468,25 @@ public function getListTableForeignKeysSQL($table)
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function supportsCreateDropDatabase()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsCommentOnStatement()
{
@@ -451,6 +519,8 @@ public function getCurrentTimestampSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getIndexDeclarationSQL($name, Index $index)
{
@@ -488,8 +558,10 @@ public function getAlterTableSQL(TableDiff $diff)
$columnSql = [];
$commentsSQL = [];
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
+
$queryParts = [];
- foreach ($diff->addedColumns as $column) {
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
@@ -515,13 +587,13 @@ public function getAlterTableSQL(TableDiff $diff)
}
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
+ $tableNameSQL,
$column->getQuotedName($this),
- $comment
+ $comment,
);
}
- foreach ($diff->removedColumns as $column) {
+ foreach ($diff->getDroppedColumns() as $column) {
if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
continue;
}
@@ -529,27 +601,28 @@ public function getAlterTableSQL(TableDiff $diff)
$queryParts[] = 'DROP COLUMN ' . $column->getQuotedName($this);
}
- foreach ($diff->changedColumns as $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
- if ($columnDiff->hasChanged('comment')) {
+ if ($columnDiff->hasCommentChanged()) {
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
- $columnDiff->column->getQuotedName($this),
- $this->getColumnComment($columnDiff->column)
+ $tableNameSQL,
+ $columnDiff->getNewColumn()->getQuotedName($this),
+ $this->getColumnComment($columnDiff->getNewColumn()),
);
-
- if (count($columnDiff->changedProperties) === 1) {
- continue;
- }
}
- $this->gatherAlterColumnSQL($diff->getName($this), $columnDiff, $sql, $queryParts);
+ $this->gatherAlterColumnSQL(
+ $tableNameSQL,
+ $columnDiff,
+ $sql,
+ $queryParts,
+ );
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
continue;
}
@@ -564,12 +637,12 @@ public function getAlterTableSQL(TableDiff $diff)
if (! $this->onSchemaAlterTable($diff, $tableSql)) {
if (count($queryParts) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . implode(' ', $queryParts);
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . implode(' ', $queryParts);
}
// Some table alteration operations require a table reorganization.
- if (! empty($diff->removedColumns) || ! empty($diff->changedColumns)) {
- $sql[] = "CALL SYSPROC.ADMIN_CMD ('REORG TABLE " . $diff->getName($this)->getQuotedName($this) . "')";
+ if (count($diff->getDroppedColumns()) > 0 || count($diff->getModifiedColumns()) > 0) {
+ $sql[] = "CALL SYSPROC.ADMIN_CMD ('REORG TABLE " . $tableNameSQL . "')";
}
$sql = array_merge($sql, $commentsSQL);
@@ -577,33 +650,50 @@ public function getAlterTableSQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$sql[] = sprintf(
'RENAME TABLE %s TO %s',
- $diff->getName($this)->getQuotedName($this),
- $newName->getQuotedName($this)
+ $tableNameSQL,
+ $newName->getQuotedName($this),
);
}
$sql = array_merge(
$this->getPreAlterTableIndexForeignKeySQL($diff),
$sql,
- $this->getPostAlterTableIndexForeignKeySQL($diff)
+ $this->getPostAlterTableIndexForeignKeySQL($diff),
);
}
return array_merge($sql, $tableSql, $columnSql);
}
+ /**
+ * {@inheritDoc}
+ */
+ public function getRenameTableSQL(string $oldName, string $newName): array
+ {
+ return [
+ sprintf('RENAME TABLE %s TO %s', $oldName, $newName),
+ ];
+ }
+
/**
* Gathers the table alteration SQL for a given column diff.
*
- * @param Identifier $table The table to gather the SQL for.
+ * @param string $table The table to gather the SQL for.
* @param ColumnDiff $columnDiff The column diff to evaluate.
* @param string[] $sql The sequence of table alteration statements to fill.
* @param mixed[] $queryParts The sequence of column alteration clauses to fill.
*/
private function gatherAlterColumnSQL(
- Identifier $table,
+ string $table,
ColumnDiff $columnDiff,
array &$sql,
array &$queryParts
@@ -625,7 +715,7 @@ private function gatherAlterColumnSQL(
// so we need to trigger a complete ALTER TABLE statement
// for each ALTER COLUMN clause.
foreach ($alterColumnClauses as $alterColumnClause) {
- $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' ' . $alterColumnClause;
+ $sql[] = 'ALTER TABLE ' . $table . ' ' . $alterColumnClause;
}
}
@@ -636,33 +726,33 @@ private function gatherAlterColumnSQL(
*/
private function getAlterColumnClausesSQL(ColumnDiff $columnDiff): array
{
- $column = $columnDiff->column->toArray();
+ $newColumn = $columnDiff->getNewColumn()->toArray();
- $alterClause = 'ALTER COLUMN ' . $columnDiff->column->getQuotedName($this);
+ $alterClause = 'ALTER COLUMN ' . $columnDiff->getNewColumn()->getQuotedName($this);
- if ($column['columnDefinition'] !== null) {
- return [$alterClause . ' ' . $column['columnDefinition']];
+ if ($newColumn['columnDefinition'] !== null) {
+ return [$alterClause . ' ' . $newColumn['columnDefinition']];
}
$clauses = [];
if (
- $columnDiff->hasChanged('type') ||
- $columnDiff->hasChanged('length') ||
- $columnDiff->hasChanged('precision') ||
- $columnDiff->hasChanged('scale') ||
- $columnDiff->hasChanged('fixed')
+ $columnDiff->hasTypeChanged() ||
+ $columnDiff->hasLengthChanged() ||
+ $columnDiff->hasPrecisionChanged() ||
+ $columnDiff->hasScaleChanged() ||
+ $columnDiff->hasFixedChanged()
) {
- $clauses[] = $alterClause . ' SET DATA TYPE ' . $column['type']->getSQLDeclaration($column, $this);
+ $clauses[] = $alterClause . ' SET DATA TYPE ' . $newColumn['type']->getSQLDeclaration($newColumn, $this);
}
- if ($columnDiff->hasChanged('notnull')) {
- $clauses[] = $column['notnull'] ? $alterClause . ' SET NOT NULL' : $alterClause . ' DROP NOT NULL';
+ if ($columnDiff->hasNotNullChanged()) {
+ $clauses[] = $newColumn['notnull'] ? $alterClause . ' SET NOT NULL' : $alterClause . ' DROP NOT NULL';
}
- if ($columnDiff->hasChanged('default')) {
- if (isset($column['default'])) {
- $defaultClause = $this->getDefaultValueDeclarationSQL($column);
+ if ($columnDiff->hasDefaultChanged()) {
+ if (isset($newColumn['default'])) {
+ $defaultClause = $this->getDefaultValueDeclarationSQL($newColumn);
if ($defaultClause !== '') {
$clauses[] = $alterClause . ' SET' . $defaultClause;
@@ -680,34 +770,34 @@ private function getAlterColumnClausesSQL(ColumnDiff $columnDiff): array
*/
protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
{
- $sql = [];
- $table = $diff->getName($this)->getQuotedName($this);
+ $sql = [];
+
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
- foreach ($diff->removedIndexes as $remKey => $remIndex) {
- foreach ($diff->addedIndexes as $addKey => $addIndex) {
- if ($remIndex->getColumns() !== $addIndex->getColumns()) {
+ foreach ($diff->getDroppedIndexes() as $droppedIndex) {
+ foreach ($diff->getAddedIndexes() as $addedIndex) {
+ if ($droppedIndex->getColumns() !== $addedIndex->getColumns()) {
continue;
}
- if ($remIndex->isPrimary()) {
- $sql[] = 'ALTER TABLE ' . $table . ' DROP PRIMARY KEY';
- } elseif ($remIndex->isUnique()) {
- $sql[] = 'ALTER TABLE ' . $table . ' DROP UNIQUE ' . $remIndex->getQuotedName($this);
+ if ($droppedIndex->isPrimary()) {
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP PRIMARY KEY';
+ } elseif ($droppedIndex->isUnique()) {
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP UNIQUE ' . $droppedIndex->getQuotedName($this);
} else {
- $sql[] = $this->getDropIndexSQL($remIndex, $table);
+ $sql[] = $this->getDropIndexSQL($droppedIndex, $tableNameSQL);
}
- $sql[] = $this->getCreateIndexSQL($addIndex, $table);
+ $sql[] = $this->getCreateIndexSQL($addedIndex, $tableNameSQL);
- unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]);
+ $diff->unsetAddedIndex($addedIndex);
+ $diff->unsetDroppedIndex($droppedIndex);
break;
}
}
- $sql = array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
-
- return $sql;
+ return array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
}
/**
@@ -725,6 +815,8 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getDefaultValueDeclarationSQL($column)
{
@@ -788,7 +880,7 @@ protected function doModifyLimitQuery($query, $limit, $offset)
return sprintf(
'SELECT db22.* FROM (SELECT db21.*, ROW_NUMBER() OVER() AS DC_ROWNUM FROM (%s) db21) db22 WHERE %s',
$query,
- implode(' AND ', $where)
+ implode(' AND ', $where),
);
}
@@ -846,8 +938,8 @@ public function prefersIdentityColumns()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/1519',
- 'DB2Platform::prefersIdentityColumns() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/1519',
+ 'DB2Platform::prefersIdentityColumns() is deprecated.',
);
return true;
@@ -894,12 +986,13 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'DB2Platform::getReservedKeywordsClass() is deprecated,'
- . ' use DB2Platform::createReservedKeywordsList() instead.'
+ . ' use DB2Platform::createReservedKeywordsList() instead.',
);
return Keywords\DB2Keywords::class;
}
+ /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */
public function getListTableCommentsSQL(string $table): string
{
return sprintf(
@@ -909,7 +1002,12 @@ public function getListTableCommentsSQL(string $table): string
WHERE NAME = UPPER( %s )
SQL
,
- $this->quoteStringLiteral($table)
+ $this->quoteStringLiteral($table),
);
}
+
+ public function createSchemaManager(Connection $connection): DB2SchemaManager
+ {
+ return new DB2SchemaManager($connection, $this);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php b/app/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php
index c1f3ca592..a95c4e28b 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php
@@ -22,9 +22,7 @@ final class DateIntervalUnit
public const YEAR = 'YEAR';
- /**
- * @codeCoverageIgnore
- */
+ /** @codeCoverageIgnore */
private function __construct()
{
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php
index db577d302..ee8cb1d67 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* DB2 Keywords.
*/
@@ -9,9 +11,17 @@ class DB2Keywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'DB2Keywords::getName() is deprecated.',
+ );
+
return 'DB2';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/KeywordList.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/KeywordList.php
index 34b703f3e..584277395 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/KeywordList.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/KeywordList.php
@@ -14,7 +14,7 @@
abstract class KeywordList
{
/** @var string[]|null */
- private $keywords;
+ private ?array $keywords = null;
/**
* Checks if the given word is a keyword of this dialect/vendor platform.
@@ -32,9 +32,7 @@ public function isKeyword($word)
return isset($this->keywords[strtoupper($word)]);
}
- /**
- * @return void
- */
+ /** @return void */
protected function initializeKeywords()
{
$this->keywords = array_flip(array_map('strtoupper', $this->getKeywords()));
@@ -50,6 +48,8 @@ abstract protected function getKeywords();
/**
* Returns the name of this keyword list.
*
+ * @deprecated
+ *
* @return string
*/
abstract public function getName();
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php
index 93c595f28..06c561254 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php
@@ -2,10 +2,19 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
class MariaDBKeywords extends MySQLKeywords
{
+ /** @deprecated */
public function getName(): string
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'MariaDBKeywords::getName() is deprecated.',
+ );
+
return 'MariaDB';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDb102Keywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDb102Keywords.php
index aaa746b85..f9b50de54 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDb102Keywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDb102Keywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* MariaDb reserved keywords list.
*
@@ -11,8 +13,15 @@
*/
final class MariaDb102Keywords extends MariaDBKeywords
{
+ /** @deprecated */
public function getName(): string
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'MariaDb102Keywords::getName() is deprecated.',
+ );
+
return 'MariaDb102';
}
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php
index 19b49fb93..65dcea500 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* MySQL 5.7 reserved keywords list.
*
@@ -11,9 +13,17 @@ class MySQL57Keywords extends MySQLKeywords
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'MySQL57Keywords::getName() is deprecated.',
+ );
+
return 'MySQL57';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php
index ec1562d24..1ed030afa 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
use function array_merge;
/**
@@ -11,9 +13,17 @@ class MySQL80Keywords extends MySQL57Keywords
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'MySQL80Keywords::getName() is deprecated.',
+ );
+
return 'MySQL80';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php
index 84ca1446a..4f7fe998d 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* MySQL Keywordlist.
*/
@@ -9,9 +11,17 @@ class MySQLKeywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'MySQLKeywords::getName() is deprecated.',
+ );
+
return 'MySQL';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php
index a73a93d60..d49ddd58e 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* Oracle Keywordlist.
*/
@@ -9,9 +11,17 @@ class OracleKeywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'OracleKeywords::getName() is deprecated.',
+ );
+
return 'Oracle';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL100Keywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL100Keywords.php
index fab018645..5153d2c8a 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL100Keywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL100Keywords.php
@@ -4,6 +4,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* PostgreSQL 10.0 reserved keywords list.
*
@@ -11,8 +13,15 @@
*/
class PostgreSQL100Keywords extends PostgreSQL94Keywords
{
+ /** @deprecated */
public function getName(): string
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'PostgreSQL100Keywords::getName() is deprecated.',
+ );
+
return 'PostgreSQL100';
}
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php
index 47ccfdfb4..8714c6db6 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* Reserved keywords list corresponding to the PostgreSQL database platform of the oldest supported version.
*/
@@ -9,9 +11,17 @@ class PostgreSQLKeywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'PostgreSQLKeywords::getName() is deprecated.',
+ );
+
return 'PostgreSQL';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php
index bd4faf50f..e168e8b1c 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php
@@ -9,30 +9,34 @@
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\Visitor\Visitor;
+use Doctrine\Deprecations\Deprecation;
use function count;
use function implode;
use function str_replace;
+/** @deprecated Use database documentation instead. */
class ReservedKeywordsValidator implements Visitor
{
/** @var KeywordList[] */
- private $keywordLists;
+ private array $keywordLists;
/** @var string[] */
- private $violations = [];
+ private array $violations = [];
- /**
- * @param KeywordList[] $keywordLists
- */
+ /** @param KeywordList[] $keywordLists */
public function __construct(array $keywordLists)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5431',
+ 'ReservedKeywordsValidator is deprecated. Use database documentation instead.',
+ );
+
$this->keywordLists = $keywordLists;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getViolations()
{
return $this->violations;
@@ -81,7 +85,7 @@ public function acceptColumn(Table $table, Column $column)
{
$this->addViolation(
'Table ' . $table->getName() . ' column ' . $column->getName(),
- $this->isReservedWord($column->getName())
+ $this->isReservedWord($column->getName()),
);
}
@@ -120,7 +124,7 @@ public function acceptTable(Table $table)
{
$this->addViolation(
'Table ' . $table->getName(),
- $this->isReservedWord($table->getName())
+ $this->isReservedWord($table->getName()),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php
index 0ea413ce7..48953baa2 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* Microsoft SQL Server 2012 reserved keyword dictionary.
* Reserved keywords list corresponding to the Microsoft SQL Server database platform of the oldest supported version.
@@ -10,9 +12,17 @@ class SQLServerKeywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'SQLServerKeywords::getName() is deprecated.',
+ );
+
return 'SQLServer';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php b/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php
index a0c9c797e..65351078e 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php
@@ -2,6 +2,8 @@
namespace Doctrine\DBAL\Platforms\Keywords;
+use Doctrine\Deprecations\Deprecation;
+
/**
* SQLite Keywordlist.
*/
@@ -9,9 +11,17 @@ class SQLiteKeywords extends KeywordList
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5433',
+ 'SQLiteKeywords::getName() is deprecated.',
+ );
+
return 'SQLite';
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php b/app/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php
index e877b70fe..9e3d3ddb9 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php
@@ -10,6 +10,19 @@
*/
class MariaDBPlatform extends MySQLPlatform
{
+ /**
+ * {@inheritDoc}
+ *
+ * Hop over the {@see AbstractMySQLPlatform} implementation until 4.0.x
+ * where {@see MariaDBPlatform} no longer extends {@see MySQLPlatform}.
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
+ */
+ public function getDefaultValueDeclarationSQL($column)
+ {
+ return AbstractPlatform::getDefaultValueDeclarationSQL($column);
+ }
+
/**
* {@inheritdoc}
*
@@ -20,16 +33,14 @@ public function getJsonTypeDeclarationSQL(array $column): string
return 'LONGTEXT';
}
- /**
- * @deprecated Implement {@see createReservedKeywordsList()} instead.
- */
+ /** @deprecated Implement {@see createReservedKeywordsList()} instead. */
protected function getReservedKeywordsClass(): string
{
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'MariaDb1027Platform::getReservedKeywordsClass() is deprecated,'
- . ' use MariaDb1027Platform::createReservedKeywordsList() instead.'
+ . ' use MariaDb1027Platform::createReservedKeywordsList() instead.',
);
return Keywords\MariaDb102Keywords::class;
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider.php b/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider.php
new file mode 100644
index 000000000..d52ca74a2
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider.php
@@ -0,0 +1,11 @@
+ */
+ private $cache = [];
+
+ public function __construct(CollationMetadataProvider $collationMetadataProvider)
+ {
+ $this->collationMetadataProvider = $collationMetadataProvider;
+ }
+
+ public function getCollationCharset(string $collation): ?string
+ {
+ if (array_key_exists($collation, $this->cache)) {
+ return $this->cache[$collation];
+ }
+
+ return $this->cache[$collation] = $this->collationMetadataProvider->getCollationCharset($collation);
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php b/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php
new file mode 100644
index 000000000..8dc2421a0
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php
@@ -0,0 +1,41 @@
+connection = $connection;
+ }
+
+ /** @throws Exception */
+ public function getCollationCharset(string $collation): ?string
+ {
+ $charset = $this->connection->fetchOne(
+ <<<'SQL'
+SELECT CHARACTER_SET_NAME
+FROM information_schema.COLLATIONS
+WHERE COLLATION_NAME = ?;
+SQL
+ ,
+ [$collation],
+ );
+
+ if ($charset !== false) {
+ return $charset;
+ }
+
+ return null;
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php b/app/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php
index 81c54dbc4..5951a5744 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php
@@ -18,12 +18,15 @@
*/
class Comparator extends BaseComparator
{
- /**
- * @internal The comparator can be only instantiated by a schema manager.
- */
- public function __construct(AbstractMySQLPlatform $platform)
+ /** @var CollationMetadataProvider */
+ private $collationMetadataProvider;
+
+ /** @internal The comparator can be only instantiated by a schema manager. */
+ public function __construct(AbstractMySQLPlatform $platform, CollationMetadataProvider $collationMetadataProvider)
{
parent::__construct($platform);
+
+ $this->collationMetadataProvider = $collationMetadataProvider;
}
/**
@@ -33,34 +36,50 @@ public function diffTable(Table $fromTable, Table $toTable)
{
return parent::diffTable(
$this->normalizeColumns($fromTable),
- $this->normalizeColumns($toTable)
+ $this->normalizeColumns($toTable),
);
}
private function normalizeColumns(Table $table): Table
{
- $defaults = array_intersect_key($table->getOptions(), [
+ $tableOptions = array_intersect_key($table->getOptions(), [
'charset' => null,
'collation' => null,
]);
- if ($defaults === []) {
- return $table;
- }
-
$table = clone $table;
foreach ($table->getColumns() as $column) {
- $options = $column->getPlatformOptions();
- $diff = array_diff_assoc($options, $defaults);
+ $originalOptions = $column->getPlatformOptions();
+ $normalizedOptions = $this->normalizeOptions($originalOptions);
- if ($diff === $options) {
+ $overrideOptions = array_diff_assoc($normalizedOptions, $tableOptions);
+
+ if ($overrideOptions === $originalOptions) {
continue;
}
- $column->setPlatformOptions($diff);
+ $column->setPlatformOptions($overrideOptions);
}
return $table;
}
+
+ /**
+ * @param array $options
+ *
+ * @return array
+ */
+ private function normalizeOptions(array $options): array
+ {
+ if (isset($options['collation']) && ! isset($options['charset'])) {
+ $charset = $this->collationMetadataProvider->getCollationCharset($options['collation']);
+
+ if ($charset !== null) {
+ $options['charset'] = $charset;
+ }
+ }
+
+ return $options;
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php b/app/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php
index 3975bf2ca..ea11ee636 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php
@@ -18,9 +18,18 @@ class MySQL57Platform extends MySQLPlatform
{
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function hasNativeJsonType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
@@ -72,7 +81,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'MySQL57Platform::getReservedKeywordsClass() is deprecated,'
- . ' use MySQL57Platform::createReservedKeywordsList() instead.'
+ . ' use MySQL57Platform::createReservedKeywordsList() instead.',
);
return Keywords\MySQL57Keywords::class;
diff --git a/app/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php b/app/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php
index 536a79f4b..dd6599de1 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php
@@ -20,7 +20,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'MySQL80Platform::getReservedKeywordsClass() is deprecated,'
- . ' use MySQL80Platform::createReservedKeywordsList() instead.'
+ . ' use MySQL80Platform::createReservedKeywordsList() instead.',
);
return Keywords\MySQL80Keywords::class;
diff --git a/app/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php b/app/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php
index 7eabb7fa3..306173e99 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php
@@ -2,10 +2,12 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
+use Doctrine\DBAL\Schema\OracleSchemaManager;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\TableDiff;
@@ -76,7 +78,7 @@ public function getNowExpression($type = 'timestamp')
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4753',
- 'OraclePlatform::getNowExpression() is deprecated. Generate dates within the application.'
+ 'OraclePlatform::getNowExpression() is deprecated. Generate dates within the application.',
);
switch ($type) {
@@ -183,6 +185,13 @@ public function getBitOrComparisonExpression($value1, $value2)
public function getCreatePrimaryKeySQL(Index $index, $table): string
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
}
@@ -348,8 +357,17 @@ protected function _getCommonIntegerTypeDeclarationSQL(array $column)
/**
* {@inheritDoc}
*/
- protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default string column length on Oracle is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(2000)')
: ($length > 0 ? 'VARCHAR2(' . $length . ')' : 'VARCHAR2(4000)');
}
@@ -357,16 +375,33 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
/**
* {@inheritdoc}
*/
- protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length on Oracle is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return 'RAW(' . ($length > 0 ? $length : $this->getBinaryMaxLength()) . ')';
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'OraclePlatform::getBinaryMaxLength() is deprecated.',
+ );
+
return 2000;
}
@@ -380,6 +415,8 @@ public function getClobTypeDeclarationSQL(array $column)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListDatabasesSQL()
{
@@ -388,6 +425,8 @@ public function getListDatabasesSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListSequencesSQL($database)
{
@@ -430,6 +469,8 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*
* @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html
@@ -470,6 +511,8 @@ public function getListTableIndexesSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
@@ -479,6 +522,8 @@ public function getListTablesSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -524,7 +569,7 @@ public function getCreateAutoincrementSql($name, $table, $start = 1)
$sequenceName = $this->getIdentitySequenceName(
$tableIdentifier->isQuoted() ? $quotedTableName : $unquotedTableName,
- $nameIdentifier->isQuoted() ? $quotedName : $unquotedName
+ $nameIdentifier->isQuoted() ? $quotedName : $unquotedName,
);
$sequence = new Sequence($sequenceName, $start);
$sql[] = $this->getCreateSequenceSQL($sequence);
@@ -569,7 +614,7 @@ public function getDropAutoincrementSql($table)
$autoincrementIdentifierName = $this->getAutoincrementIdentifierName($table);
$identitySequenceName = $this->getIdentitySequenceName(
$table->isQuoted() ? $table->getQuotedName($this) : $table->getName(),
- ''
+ '',
);
return [
@@ -626,6 +671,8 @@ private function getAutoincrementIdentifierName(Identifier $table): string
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableForeignKeysSQL($table)
@@ -658,6 +705,8 @@ public function getListTableForeignKeysSQL($table)
}
/**
+ * @deprecated
+ *
* {@inheritDoc}
*/
public function getListTableConstraintsSQL($table)
@@ -669,6 +718,8 @@ public function getListTableConstraintsSQL($table)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
@@ -708,7 +759,7 @@ public function getListTableColumnsSQL($table, $database = null)
$colCommentsOwnerCondition,
$tabColumnsTableName,
$table,
- $tabColumnsOwnerCondition
+ $tabColumnsOwnerCondition,
);
}
@@ -717,11 +768,26 @@ public function getListTableColumnsSQL($table, $database = null)
*/
public function getDropForeignKeySQL($foreignKey, $table)
{
- if (! $foreignKey instanceof ForeignKeyConstraint) {
+ if ($foreignKey instanceof ForeignKeyConstraint) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.'
+ . ' Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$foreignKey = new Identifier($foreignKey);
}
- if (! $table instanceof Table) {
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+ } else {
$table = new Identifier($table);
}
@@ -733,6 +799,8 @@ public function getDropForeignKeySQL($foreignKey, $table)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
{
@@ -751,6 +819,8 @@ public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getForeignKeyReferentialActionSQL($action)
{
@@ -800,7 +870,9 @@ public function getAlterTableSQL(TableDiff $diff)
$fields = [];
- foreach ($diff->addedColumns as $column) {
+ $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this);
+
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
@@ -813,49 +885,48 @@ public function getAlterTableSQL(TableDiff $diff)
}
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
+ $tableNameSQL,
$column->getQuotedName($this),
- $comment
+ $comment,
);
}
if (count($fields) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this)
- . ' ADD (' . implode(', ', $fields) . ')';
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ADD (' . implode(', ', $fields) . ')';
}
$fields = [];
- foreach ($diff->changedColumns as $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
- $column = $columnDiff->column;
+ $newColumn = $columnDiff->getNewColumn();
// Do not generate column alteration clause if type is binary and only fixed property has changed.
// Oracle only supports binary type columns with variable length.
// Avoids unnecessary table alteration statements.
if (
- $column->getType() instanceof BinaryType &&
- $columnDiff->hasChanged('fixed') &&
+ $newColumn->getType() instanceof BinaryType &&
+ $columnDiff->hasFixedChanged() &&
count($columnDiff->changedProperties) === 1
) {
continue;
}
- $columnHasChangedComment = $columnDiff->hasChanged('comment');
+ $columnHasChangedComment = $columnDiff->hasCommentChanged();
/**
* Do not add query part if only comment has changed
*/
if (! ($columnHasChangedComment && count($columnDiff->changedProperties) === 1)) {
- $columnInfo = $column->toArray();
+ $newColumnProperties = $newColumn->toArray();
- if (! $columnDiff->hasChanged('notnull')) {
- unset($columnInfo['notnull']);
+ if (! $columnDiff->hasNotNullChanged()) {
+ unset($newColumnProperties['notnull']);
}
- $fields[] = $column->getQuotedName($this) . $this->getColumnDeclarationSQL('', $columnInfo);
+ $fields[] = $newColumn->getQuotedName($this) . $this->getColumnDeclarationSQL('', $newColumnProperties);
}
if (! $columnHasChangedComment) {
@@ -863,30 +934,29 @@ public function getAlterTableSQL(TableDiff $diff)
}
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
- $column->getQuotedName($this),
- $this->getColumnComment($column)
+ $tableNameSQL,
+ $newColumn->getQuotedName($this),
+ $this->getColumnComment($newColumn),
);
}
if (count($fields) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this)
- . ' MODIFY (' . implode(', ', $fields) . ')';
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY (' . implode(', ', $fields) . ')';
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
continue;
}
$oldColumnName = new Identifier($oldColumnName);
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) .
- ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this) . ' TO ' . $column->getQuotedName($this);
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this)
+ . ' TO ' . $column->getQuotedName($this);
}
$fields = [];
- foreach ($diff->removedColumns as $column) {
+ foreach ($diff->getDroppedColumns() as $column) {
if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
continue;
}
@@ -895,8 +965,7 @@ public function getAlterTableSQL(TableDiff $diff)
}
if (count($fields) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this)
- . ' DROP (' . implode(', ', $fields) . ')';
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP (' . implode(', ', $fields) . ')';
}
$tableSql = [];
@@ -907,17 +976,24 @@ public function getAlterTableSQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$sql[] = sprintf(
'ALTER TABLE %s RENAME TO %s',
- $diff->getName($this)->getQuotedName($this),
- $newName->getQuotedName($this)
+ $tableNameSQL,
+ $newName->getQuotedName($this),
);
}
$sql = array_merge(
$this->getPreAlterTableIndexForeignKeySQL($diff),
$sql,
- $this->getPostAlterTableIndexForeignKeySQL($diff)
+ $this->getPostAlterTableIndexForeignKeySQL($diff),
);
}
@@ -926,6 +1002,8 @@ public function getAlterTableSQL(TableDiff $diff)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getColumnDeclarationSQL($name, array $column)
{
@@ -940,11 +1018,29 @@ public function getColumnDeclarationSQL($name, array $column)
$notnull = $column['notnull'] ? ' NOT NULL' : ' NULL';
}
- $unique = ! empty($column['unique']) ?
- ' ' . $this->getUniqueFieldDeclarationSQL() : '';
+ if (! empty($column['unique'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "unique" column property is deprecated. Use unique constraints instead.',
+ );
+
+ $unique = ' ' . $this->getUniqueFieldDeclarationSQL();
+ } else {
+ $unique = '';
+ }
+
+ if (! empty($column['check'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "check" column property is deprecated.',
+ );
- $check = ! empty($column['check']) ?
- ' ' . $column['check'] : '';
+ $check = ' ' . $column['check'];
+ } else {
+ $check = '';
+ }
$typeDecl = $column['type']->getSQLDeclaration($column, $this);
$columnDef = $typeDecl . $default . $notnull . $unique . $check;
@@ -968,14 +1064,25 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function usesSequenceEmulatedIdentityColumns()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the OraclePlatform class hierarchy.
*/
public function getIdentitySequenceName($tableName, $columnName)
{
@@ -995,6 +1102,8 @@ public function getIdentitySequenceName($tableName, $columnName)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsCommentOnStatement()
{
@@ -1009,7 +1118,7 @@ public function getName()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4749',
- 'OraclePlatform::getName() is deprecated. Identify platforms by their class.'
+ 'OraclePlatform::getName() is deprecated. Identify platforms by their class.',
);
return 'oracle';
@@ -1176,7 +1285,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'OraclePlatform::getReservedKeywordsClass() is deprecated,'
- . ' use OraclePlatform::createReservedKeywordsList() instead.'
+ . ' use OraclePlatform::createReservedKeywordsList() instead.',
);
return Keywords\OracleKeywords::class;
@@ -1190,6 +1299,7 @@ public function getBlobTypeDeclarationSQL(array $column)
return 'BLOB';
}
+ /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */
public function getListTableCommentsSQL(string $table, ?string $database = null): string
{
$tableCommentsName = 'user_tab_comments';
@@ -1198,7 +1308,7 @@ public function getListTableCommentsSQL(string $table, ?string $database = null)
if ($database !== null && $database !== '/') {
$tableCommentsName = 'all_tab_comments';
$ownerCondition = ' AND owner = ' . $this->quoteStringLiteral(
- $this->normalizeIdentifier($database)->getName()
+ $this->normalizeIdentifier($database)->getName(),
);
}
@@ -1209,7 +1319,12 @@ public function getListTableCommentsSQL(string $table, ?string $database = null)
,
$tableCommentsName,
$this->quoteStringLiteral($this->normalizeIdentifier($table)->getName()),
- $ownerCondition
+ $ownerCondition,
);
}
+
+ public function createSchemaManager(Connection $connection): OracleSchemaManager
+ {
+ return new OracleSchemaManager($connection, $this);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php b/app/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php
index a9419817a..aa023ba79 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php
@@ -15,33 +15,16 @@
*/
class PostgreSQL100Platform extends PostgreSQL94Platform
{
- /**
- * @deprecated Implement {@see createReservedKeywordsList()} instead.
- */
+ /** @deprecated Implement {@see createReservedKeywordsList()} instead. */
protected function getReservedKeywordsClass(): string
{
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'PostgreSQL100Platform::getReservedKeywordsClass() is deprecated,'
- . ' use PostgreSQL100Platform::createReservedKeywordsList() instead.'
+ . ' use PostgreSQL100Platform::createReservedKeywordsList() instead.',
);
return PostgreSQL100Keywords::class;
}
-
- /**
- * {@inheritDoc}
- */
- public function getListSequencesSQL($database): string
- {
- return 'SELECT sequence_name AS relname,
- sequence_schema AS schemaname,
- minimum_value AS min_value,
- increment AS increment_by
- FROM information_schema.sequences
- WHERE sequence_catalog = ' . $this->quoteStringLiteral($database) . "
- AND sequence_schema NOT LIKE 'pg\_%'
- AND sequence_schema != 'information_schema'";
- }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php b/app/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php
index 945cc7afa..c3e41d730 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php
@@ -2,18 +2,17 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Schema\Column;
use Doctrine\DBAL\Schema\ColumnDiff;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
+use Doctrine\DBAL\Schema\PostgreSQLSchemaManager;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\TableDiff;
-use Doctrine\DBAL\Types\BigIntType;
use Doctrine\DBAL\Types\BinaryType;
use Doctrine\DBAL\Types\BlobType;
-use Doctrine\DBAL\Types\IntegerType;
-use Doctrine\DBAL\Types\Type;
use Doctrine\Deprecations\Deprecation;
use UnexpectedValueException;
@@ -39,11 +38,10 @@
*/
class PostgreSQLPlatform extends AbstractPlatform
{
- /** @var bool */
- private $useBooleanTrueFalseStrings = true;
+ private bool $useBooleanTrueFalseStrings = true;
/** @var string[][] PostgreSQL booleans literals */
- private $booleanLiterals = [
+ private array $booleanLiterals = [
'true' => [
't',
'true',
@@ -99,7 +97,7 @@ public function getNowExpression()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4753',
- 'PostgreSQLPlatform::getNowExpression() is deprecated. Generate dates within the application.'
+ 'PostgreSQLPlatform::getNowExpression() is deprecated. Generate dates within the application.',
);
return 'LOCALTIMESTAMP(0)';
@@ -172,9 +170,18 @@ public function supportsSchemas()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getDefaultSchemaName()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return 'public';
}
@@ -188,6 +195,8 @@ public function supportsIdentityColumns()
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsPartialIndexes()
{
@@ -196,22 +205,42 @@ public function supportsPartialIndexes()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function usesSequenceEmulatedIdentityColumns()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getIdentitySequenceName($tableName, $columnName)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $tableName . '_' . $columnName . '_seq';
}
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsCommentOnStatement()
{
@@ -220,14 +249,25 @@ public function supportsCommentOnStatement()
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function hasNativeGuidType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListDatabasesSQL()
{
@@ -245,7 +285,7 @@ public function getListNamespacesSQL()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'PostgreSQLPlatform::getListNamespacesSQL() is deprecated,'
- . ' use PostgreSQLSchemaManager::listSchemaNames() instead.'
+ . ' use PostgreSQLSchemaManager::listSchemaNames() instead.',
);
return "SELECT schema_name AS nspname
@@ -256,17 +296,24 @@ public function getListNamespacesSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListSequencesSQL($database)
{
- return "SELECT sequence_name AS relname,
- sequence_schema AS schemaname
+ return 'SELECT sequence_name AS relname,
+ sequence_schema AS schemaname,
+ minimum_value AS min_value,
+ increment AS increment_by
FROM information_schema.sequences
- WHERE sequence_schema NOT LIKE 'pg\_%'
+ WHERE sequence_catalog = ' . $this->quoteStringLiteral($database) . "
+ AND sequence_schema NOT LIKE 'pg\_%'
AND sequence_schema != 'information_schema'";
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
@@ -283,6 +330,8 @@ public function getListTablesSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -294,6 +343,8 @@ public function getListViewsSQL($database)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
* @param string|null $database
*
@@ -313,6 +364,8 @@ public function getListTableForeignKeysSQL($table, $database = null)
}
/**
+ * @deprecated
+ *
* {@inheritDoc}
*/
public function getListTableConstraintsSQL($table)
@@ -335,11 +388,13 @@ public function getListTableConstraintsSQL($table)
)
SQL
,
- $table
+ $table,
);
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*
* @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
@@ -381,11 +436,13 @@ private function getTableWhereClause($table, $classAlias = 'c', $namespaceAlias
$classAlias,
$table,
$namespaceAlias,
- $schema
+ $schema,
);
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
@@ -425,6 +482,8 @@ public function getListTableColumnsSQL($table, $database = null)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
{
@@ -463,37 +522,45 @@ public function getAlterTableSQL(TableDiff $diff)
$commentsSQL = [];
$columnSql = [];
- foreach ($diff->addedColumns as $column) {
- if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
+ $table = $diff->getOldTable() ?? $diff->getName($this);
+
+ $tableNameSQL = $table->getQuotedName($this);
+
+ foreach ($diff->getAddedColumns() as $addedColumn) {
+ if ($this->onSchemaAlterTableAddColumn($addedColumn, $diff, $columnSql)) {
continue;
}
- $query = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray());
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ $query = 'ADD ' . $this->getColumnDeclarationSQL(
+ $addedColumn->getQuotedName($this),
+ $addedColumn->toArray(),
+ );
+
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
- $comment = $this->getColumnComment($column);
+ $comment = $this->getColumnComment($addedColumn);
if ($comment === null || $comment === '') {
continue;
}
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
- $column->getQuotedName($this),
- $comment
+ $tableNameSQL,
+ $addedColumn->getQuotedName($this),
+ $comment,
);
}
- foreach ($diff->removedColumns as $column) {
- if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
+ foreach ($diff->getDroppedColumns() as $droppedColumn) {
+ if ($this->onSchemaAlterTableRemoveColumn($droppedColumn, $diff, $columnSql)) {
continue;
}
- $query = 'DROP ' . $column->getQuotedName($this);
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ $query = 'DROP ' . $droppedColumn->getQuotedName($this);
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- foreach ($diff->changedColumns as $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
@@ -502,88 +569,94 @@ public function getAlterTableSQL(TableDiff $diff)
continue;
}
- $oldColumnName = $columnDiff->getOldColumnName()->getQuotedName($this);
- $column = $columnDiff->column;
+ $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName();
+ $newColumn = $columnDiff->getNewColumn();
+
+ $oldColumnName = $oldColumn->getQuotedName($this);
if (
- $columnDiff->hasChanged('type')
- || $columnDiff->hasChanged('precision')
- || $columnDiff->hasChanged('scale')
- || $columnDiff->hasChanged('fixed')
+ $columnDiff->hasTypeChanged()
+ || $columnDiff->hasPrecisionChanged()
+ || $columnDiff->hasScaleChanged()
+ || $columnDiff->hasFixedChanged()
) {
- $type = $column->getType();
+ $type = $newColumn->getType();
// SERIAL/BIGSERIAL are not "real" types and we can't alter a column to that type
- $columnDefinition = $column->toArray();
+ $columnDefinition = $newColumn->toArray();
$columnDefinition['autoincrement'] = false;
// here was a server version check before, but DBAL API does not support this anymore.
$query = 'ALTER ' . $oldColumnName . ' TYPE ' . $type->getSQLDeclaration($columnDefinition, $this);
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- if ($columnDiff->hasChanged('default') || $this->typeChangeBreaksDefaultValue($columnDiff)) {
- $defaultClause = $column->getDefault() === null
+ if ($columnDiff->hasDefaultChanged()) {
+ $defaultClause = $newColumn->getDefault() === null
? ' DROP DEFAULT'
- : ' SET' . $this->getDefaultValueDeclarationSQL($column->toArray());
- $query = 'ALTER ' . $oldColumnName . $defaultClause;
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ : ' SET' . $this->getDefaultValueDeclarationSQL($newColumn->toArray());
+
+ $query = 'ALTER ' . $oldColumnName . $defaultClause;
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- if ($columnDiff->hasChanged('notnull')) {
- $query = 'ALTER ' . $oldColumnName . ' ' . ($column->getNotnull() ? 'SET' : 'DROP') . ' NOT NULL';
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ if ($columnDiff->hasNotNullChanged()) {
+ $query = 'ALTER ' . $oldColumnName . ' ' . ($newColumn->getNotnull() ? 'SET' : 'DROP') . ' NOT NULL';
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- if ($columnDiff->hasChanged('autoincrement')) {
- if ($column->getAutoincrement()) {
+ if ($columnDiff->hasAutoIncrementChanged()) {
+ if ($newColumn->getAutoincrement()) {
// add autoincrement
- $seqName = $this->getIdentitySequenceName($diff->name, $oldColumnName);
+ $seqName = $this->getIdentitySequenceName(
+ $table->getName(),
+ $oldColumnName,
+ );
$sql[] = 'CREATE SEQUENCE ' . $seqName;
$sql[] = "SELECT setval('" . $seqName . "', (SELECT MAX(" . $oldColumnName . ') FROM '
- . $diff->getName($this)->getQuotedName($this) . '))';
+ . $tableNameSQL . '))';
$query = 'ALTER ' . $oldColumnName . " SET DEFAULT nextval('" . $seqName . "')";
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
} else {
// Drop autoincrement, but do NOT drop the sequence. It might be re-used by other tables or have
$query = 'ALTER ' . $oldColumnName . ' DROP DEFAULT';
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
}
+
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- $newComment = $this->getColumnComment($column);
$oldComment = $this->getOldColumnComment($columnDiff);
+ $newComment = $this->getColumnComment($newColumn);
if (
- $columnDiff->hasChanged('comment')
- || ($columnDiff->fromColumn !== null && $oldComment !== $newComment)
+ $columnDiff->hasCommentChanged()
+ || ($columnDiff->getOldColumn() !== null && $oldComment !== $newComment)
) {
$commentsSQL[] = $this->getCommentOnColumnSQL(
- $diff->getName($this)->getQuotedName($this),
- $column->getQuotedName($this),
- $newComment
+ $tableNameSQL,
+ $newColumn->getQuotedName($this),
+ $newComment,
);
}
- if (! $columnDiff->hasChanged('length')) {
+ if (! $columnDiff->hasLengthChanged()) {
continue;
}
$query = 'ALTER ' . $oldColumnName . ' TYPE '
- . $column->getType()->getSQLDeclaration($column->toArray(), $this);
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ . $newColumn->getType()->getSQLDeclaration($newColumn->toArray(), $this);
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
continue;
}
$oldColumnName = new Identifier($oldColumnName);
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) .
- ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this) . ' TO ' . $column->getQuotedName($this);
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this)
+ . ' TO ' . $column->getQuotedName($this);
}
$tableSql = [];
@@ -594,17 +667,24 @@ public function getAlterTableSQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$sql[] = sprintf(
'ALTER TABLE %s RENAME TO %s',
- $diff->getName($this)->getQuotedName($this),
- $newName->getQuotedName($this)
+ $tableNameSQL,
+ $newName->getQuotedName($this),
);
}
$sql = array_merge(
$this->getPreAlterTableIndexForeignKeySQL($diff),
$sql,
- $this->getPostAlterTableIndexForeignKeySQL($diff)
+ $this->getPostAlterTableIndexForeignKeySQL($diff),
);
}
@@ -622,25 +702,25 @@ public function getAlterTableSQL(TableDiff $diff)
*/
private function isUnchangedBinaryColumn(ColumnDiff $columnDiff): bool
{
- $columnType = $columnDiff->column->getType();
+ $newColumnType = $columnDiff->getNewColumn()->getType();
- if (! $columnType instanceof BinaryType && ! $columnType instanceof BlobType) {
+ if (! $newColumnType instanceof BinaryType && ! $newColumnType instanceof BlobType) {
return false;
}
- $fromColumn = $columnDiff->fromColumn instanceof Column ? $columnDiff->fromColumn : null;
+ $oldColumn = $columnDiff->getOldColumn() instanceof Column ? $columnDiff->getOldColumn() : null;
- if ($fromColumn !== null) {
- $fromColumnType = $fromColumn->getType();
+ if ($oldColumn !== null) {
+ $oldColumnType = $oldColumn->getType();
- if (! $fromColumnType instanceof BinaryType && ! $fromColumnType instanceof BlobType) {
+ if (! $oldColumnType instanceof BinaryType && ! $oldColumnType instanceof BlobType) {
return false;
}
return count(array_diff($columnDiff->changedProperties, ['type', 'length', 'fixed'])) === 0;
}
- if ($columnDiff->hasChanged('type')) {
+ if ($columnDiff->hasTypeChanged()) {
return false;
}
@@ -662,6 +742,8 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getCommentOnColumnSQL($tableName, $columnName, $comment)
{
@@ -673,7 +755,7 @@ public function getCommentOnColumnSQL($tableName, $columnName, $comment)
'COMMENT ON COLUMN %s.%s IS %s',
$tableName->getQuotedName($this),
$columnName->getQuotedName($this),
- $comment
+ $comment,
);
}
@@ -756,7 +838,7 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
}
if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] as $definition) {
+ foreach ($options['foreignKeys'] as $definition) {
$sql[] = $this->getCreateForeignKeySQL($definition, $name);
}
}
@@ -803,7 +885,7 @@ private function convertSingleBooleanValue($value, $callback)
return $callback(true);
}
- throw new UnexpectedValueException("Unrecognized boolean literal '${value}'");
+ throw new UnexpectedValueException(sprintf("Unrecognized boolean literal '%s'", $value));
}
/**
@@ -844,16 +926,14 @@ public function convertBooleans($item)
return $this->doConvertBooleans(
$item,
- /**
- * @param mixed $value
- */
+ /** @param mixed $value */
static function ($value) {
if ($value === null) {
return 'NULL';
}
return $value === true ? 'true' : 'false';
- }
+ },
);
}
@@ -868,12 +948,10 @@ public function convertBooleansToDatabaseValue($item)
return $this->doConvertBooleans(
$item,
- /**
- * @param mixed $value
- */
+ /** @param mixed $value */
static function ($value): ?int {
return $value === null ? null : (int) $value;
- }
+ },
);
}
@@ -1031,7 +1109,7 @@ public function getName()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4749',
- 'PostgreSQLPlatform::getName() is deprecated. Identify platforms by their class.'
+ 'PostgreSQLPlatform::getName() is deprecated. Identify platforms by their class.',
);
return 'postgresql';
@@ -1128,9 +1206,17 @@ protected function initializeDoctrineTypeMappings()
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function getVarcharMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'PostgreSQLPlatform::getVarcharMaxLength() is deprecated.',
+ );
+
return 65535;
}
@@ -1139,22 +1225,45 @@ public function getVarcharMaxLength()
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'PostgreSQLPlatform::getBinaryMaxLength() is deprecated.',
+ );
+
return 0;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryDefaultLength()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length is deprecated, specify the length explicitly.',
+ );
+
return 0;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function hasNativeJsonType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
@@ -1169,7 +1278,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'PostgreSQLPlatform::getReservedKeywordsClass() is deprecated,'
- . ' use PostgreSQLPlatform::createReservedKeywordsList() instead.'
+ . ' use PostgreSQLPlatform::createReservedKeywordsList() instead.',
);
return Keywords\PostgreSQL94Keywords::class;
@@ -1185,10 +1294,12 @@ public function getBlobTypeDeclarationSQL(array $column)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getDefaultValueDeclarationSQL($column)
{
- if ($this->isSerialColumn($column)) {
+ if (isset($column['autoincrement']) && $column['autoincrement'] === true) {
return '';
}
@@ -1197,20 +1308,14 @@ public function getDefaultValueDeclarationSQL($column)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsColumnCollation()
{
return true;
}
- /**
- * {@inheritdoc}
- */
- public function getColumnCollationDeclarationSQL($collation)
- {
- return 'COLLATE ' . $this->quoteSingleIdentifier($collation);
- }
-
/**
* {@inheritdoc}
*/
@@ -1223,43 +1328,18 @@ public function getJsonTypeDeclarationSQL(array $column)
return 'JSON';
}
- /**
- * @param mixed[] $column
- */
- private function isSerialColumn(array $column): bool
+ private function getOldColumnComment(ColumnDiff $columnDiff): ?string
{
- return isset($column['type'], $column['autoincrement'])
- && $column['autoincrement'] === true
- && $this->isNumericType($column['type']);
- }
+ $oldColumn = $columnDiff->getOldColumn();
- /**
- * Check whether the type of a column is changed in a way that invalidates the default value for the column
- */
- private function typeChangeBreaksDefaultValue(ColumnDiff $columnDiff): bool
- {
- if ($columnDiff->fromColumn === null) {
- return $columnDiff->hasChanged('type');
+ if ($oldColumn !== null) {
+ return $this->getColumnComment($oldColumn);
}
- $oldTypeIsNumeric = $this->isNumericType($columnDiff->fromColumn->getType());
- $newTypeIsNumeric = $this->isNumericType($columnDiff->column->getType());
-
- // default should not be changed when switching between numeric types and the default comes from a sequence
- return $columnDiff->hasChanged('type')
- && ! ($oldTypeIsNumeric && $newTypeIsNumeric && $columnDiff->column->getAutoincrement());
- }
-
- private function isNumericType(Type $type): bool
- {
- return $type instanceof IntegerType || $type instanceof BigIntType;
- }
-
- private function getOldColumnComment(ColumnDiff $columnDiff): ?string
- {
- return $columnDiff->fromColumn !== null ? $this->getColumnComment($columnDiff->fromColumn) : null;
+ return null;
}
+ /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */
public function getListTableMetadataSQL(string $table, ?string $schema = null): string
{
if ($schema !== null) {
@@ -1271,7 +1351,12 @@ public function getListTableMetadataSQL(string $table, ?string $schema = null):
SELECT obj_description(%s::regclass) AS table_comment;
SQL
,
- $this->quoteStringLiteral($table)
+ $this->quoteStringLiteral($table),
);
}
+
+ public function createSchemaManager(Connection $connection): PostgreSQLSchemaManager
+ {
+ return new PostgreSQLSchemaManager($connection, $this);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php b/app/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php
index 0db1a6a57..e231e8083 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php
@@ -13,12 +13,9 @@
*/
class Comparator extends BaseComparator
{
- /** @var string */
- private $databaseCollation;
+ private string $databaseCollation;
- /**
- * @internal The comparator can be only instantiated by a schema manager.
- */
+ /** @internal The comparator can be only instantiated by a schema manager. */
public function __construct(SQLServerPlatform $platform, string $databaseCollation)
{
parent::__construct($platform);
diff --git a/app/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php b/app/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php
index 732cb6363..027f7239c 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php
@@ -2,6 +2,7 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception\InvalidLockMode;
use Doctrine\DBAL\LockMode;
use Doctrine\DBAL\Schema\Column;
@@ -10,6 +11,7 @@
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\Sequence;
+use Doctrine\DBAL\Schema\SQLServerSchemaManager;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\TableDiff;
use Doctrine\Deprecations\Deprecation;
@@ -22,7 +24,9 @@
use function crc32;
use function dechex;
use function explode;
+use function func_get_arg;
use function func_get_args;
+use function func_num_args;
use function implode;
use function is_array;
use function is_bool;
@@ -105,8 +109,8 @@ public function prefersIdentityColumns()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/1519',
- 'SQLServerPlatform::prefersIdentityColumns() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/1519',
+ 'SQLServerPlatform::prefersIdentityColumns() is deprecated.',
);
return true;
@@ -140,14 +144,25 @@ public function supportsSchemas()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getDefaultSchemaName()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return 'dbo';
}
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsColumnCollation()
{
@@ -175,6 +190,8 @@ public function getCreateSequenceSQL(Sequence $sequence): string
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListSequencesSQL($database)
{
@@ -198,9 +215,18 @@ public function getSequenceNextValSQL($sequence)
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function hasNativeGuidType()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
@@ -229,18 +255,32 @@ public function getDropForeignKeySQL($foreignKey, $table)
public function getDropIndexSQL($index, $table = null)
{
if ($index instanceof Index) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$index = $index->getQuotedName($this);
} elseif (! is_string($index)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.'
+ __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.',
);
}
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as an Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$table = $table->getQuotedName($this);
} elseif (! is_string($table)) {
throw new InvalidArgumentException(
- __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'
+ __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.',
);
}
@@ -316,7 +356,7 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
}
if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] as $definition) {
+ foreach ($options['foreignKeys'] as $definition) {
$sql[] = $this->getCreateForeignKeySQL($definition, $name);
}
}
@@ -330,6 +370,13 @@ protected function _getCreateTableSQL($name, array $columns, array $options = []
public function getCreatePrimaryKeySQL(Index $index, $table)
{
if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$identifier = $table->getQuotedName($this);
} else {
$identifier = $table;
@@ -380,7 +427,7 @@ protected function getCreateColumnCommentSQL($tableName, $columnName, $comment)
'TABLE',
$tableSQL,
'COLUMN',
- $columnName
+ $columnName,
);
}
@@ -469,17 +516,24 @@ public function getAlterTableSQL(TableDiff $diff)
$columnSql = [];
$commentsSql = [];
- foreach ($diff->addedColumns as $column) {
+ $table = $diff->getOldTable() ?? $diff->getName($this);
+
+ $tableName = $table->getName();
+
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
- $columnDef = $column->toArray();
- $addColumnSql = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef);
- if (isset($columnDef['default'])) {
- $addColumnSql .= ' CONSTRAINT ' .
- $this->generateDefaultConstraintName($diff->name, $column->getQuotedName($this)) .
- $this->getDefaultValueDeclarationSQL($columnDef);
+ $columnProperties = $column->toArray();
+
+ $addColumnSql = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnProperties);
+
+ if (isset($columnProperties['default'])) {
+ $addColumnSql .= ' CONSTRAINT ' . $this->generateDefaultConstraintName(
+ $tableName,
+ $column->getQuotedName($this),
+ ) . $this->getDefaultValueDeclarationSQL($columnProperties);
}
$queryParts[] = $addColumnSql;
@@ -491,13 +545,13 @@ public function getAlterTableSQL(TableDiff $diff)
}
$commentsSql[] = $this->getCreateColumnCommentSQL(
- $diff->name,
+ $tableName,
$column->getQuotedName($this),
- $comment
+ $comment,
);
}
- foreach ($diff->removedColumns as $column) {
+ foreach ($diff->getDroppedColumns() as $column) {
if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
continue;
}
@@ -505,86 +559,97 @@ public function getAlterTableSQL(TableDiff $diff)
$queryParts[] = 'DROP COLUMN ' . $column->getQuotedName($this);
}
- foreach ($diff->changedColumns as $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
- $column = $columnDiff->column;
- $comment = $this->getColumnComment($column);
- $hasComment = ! empty($comment) || is_numeric($comment);
+ $newColumn = $columnDiff->getNewColumn();
+ $newComment = $this->getColumnComment($newColumn);
+ $hasNewComment = ! empty($newComment) || is_numeric($newComment);
+
+ $oldColumn = $columnDiff->getOldColumn();
- if ($columnDiff->fromColumn instanceof Column) {
- $fromComment = $this->getColumnComment($columnDiff->fromColumn);
- $hasFromComment = ! empty($fromComment) || is_numeric($fromComment);
+ if ($oldColumn instanceof Column) {
+ $oldComment = $this->getColumnComment($oldColumn);
+ $hasOldComment = ! empty($oldComment) || is_numeric($oldComment);
- if ($hasFromComment && $hasComment && $fromComment !== $comment) {
+ if ($hasOldComment && $hasNewComment && $oldComment !== $newComment) {
$commentsSql[] = $this->getAlterColumnCommentSQL(
- $diff->name,
- $column->getQuotedName($this),
- $comment
+ $tableName,
+ $newColumn->getQuotedName($this),
+ $newComment,
);
- } elseif ($hasFromComment && ! $hasComment) {
- $commentsSql[] = $this->getDropColumnCommentSQL($diff->name, $column->getQuotedName($this));
- } elseif (! $hasFromComment && $hasComment) {
+ } elseif ($hasOldComment && ! $hasNewComment) {
+ $commentsSql[] = $this->getDropColumnCommentSQL(
+ $tableName,
+ $newColumn->getQuotedName($this),
+ );
+ } elseif (! $hasOldComment && $hasNewComment) {
$commentsSql[] = $this->getCreateColumnCommentSQL(
- $diff->name,
- $column->getQuotedName($this),
- $comment
+ $tableName,
+ $newColumn->getQuotedName($this),
+ $newComment,
);
}
}
// Do not add query part if only comment has changed.
- if ($columnDiff->hasChanged('comment') && count($columnDiff->changedProperties) === 1) {
+ if ($columnDiff->hasCommentChanged() && count($columnDiff->changedProperties) === 1) {
continue;
}
$requireDropDefaultConstraint = $this->alterColumnRequiresDropDefaultConstraint($columnDiff);
if ($requireDropDefaultConstraint) {
- $queryParts[] = $this->getAlterTableDropDefaultConstraintClause(
- $diff->name,
- $columnDiff->oldColumnName
- );
+ $oldColumn = $columnDiff->getOldColumn();
+
+ if ($oldColumn !== null) {
+ $oldColumnName = $oldColumn->getName();
+ } else {
+ $oldColumnName = $columnDiff->oldColumnName;
+ }
+
+ $queryParts[] = $this->getAlterTableDropDefaultConstraintClause($tableName, $oldColumnName);
}
- $columnDef = $column->toArray();
+ $columnProperties = $newColumn->toArray();
$queryParts[] = 'ALTER COLUMN ' .
- $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef);
+ $this->getColumnDeclarationSQL($newColumn->getQuotedName($this), $columnProperties);
if (
- ! isset($columnDef['default'])
- || (! $requireDropDefaultConstraint && ! $columnDiff->hasChanged('default'))
+ ! isset($columnProperties['default'])
+ || (! $requireDropDefaultConstraint && ! $columnDiff->hasDefaultChanged())
) {
continue;
}
- $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($diff->name, $column);
+ $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($tableName, $newColumn);
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
- if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
+ $tableNameSQL = $table->getQuotedName($this);
+
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $newColumn) {
+ if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $newColumn, $diff, $columnSql)) {
continue;
}
$oldColumnName = new Identifier($oldColumnName);
- $sql[] = "sp_rename '" .
- $diff->getName($this)->getQuotedName($this) . '.' . $oldColumnName->getQuotedName($this) .
- "', '" . $column->getQuotedName($this) . "', 'COLUMN'";
+ $sql[] = "sp_rename '" . $tableNameSQL . '.' . $oldColumnName->getQuotedName($this) .
+ "', '" . $newColumn->getQuotedName($this) . "', 'COLUMN'";
// Recreate default constraint with new column name if necessary (for future reference).
- if ($column->getDefault() === null) {
+ if ($newColumn->getDefault() === null) {
continue;
}
$queryParts[] = $this->getAlterTableDropDefaultConstraintClause(
- $diff->name,
- $oldColumnName->getQuotedName($this)
+ $tableName,
+ $oldColumnName->getQuotedName($this),
);
- $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($diff->name, $column);
+ $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($tableName, $newColumn);
}
$tableSql = [];
@@ -594,7 +659,7 @@ public function getAlterTableSQL(TableDiff $diff)
}
foreach ($queryParts as $query) {
- $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query;
+ $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query;
}
$sql = array_merge($sql, $commentsSql);
@@ -602,35 +667,57 @@ public function getAlterTableSQL(TableDiff $diff)
$newName = $diff->getNewName();
if ($newName !== false) {
- $sql[] = "sp_rename '" . $diff->getName($this)->getQuotedName($this) . "', '" . $newName->getName() . "'";
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
- /**
- * Rename table's default constraints names
- * to match the new table name.
- * This is necessary to ensure that the default
- * constraints can be referenced in future table
- * alterations as the table name is encoded in
- * default constraints' names.
- */
- $sql[] = "DECLARE @sql NVARCHAR(MAX) = N''; " .
- "SELECT @sql += N'EXEC sp_rename N''' + dc.name + ''', N''' " .
- "+ REPLACE(dc.name, '" . $this->generateIdentifierName($diff->name) . "', " .
- "'" . $this->generateIdentifierName($newName->getName()) . "') + ''', ''OBJECT'';' " .
- 'FROM sys.default_constraints dc ' .
- 'JOIN sys.tables tbl ON dc.parent_object_id = tbl.object_id ' .
- "WHERE tbl.name = '" . $newName->getName() . "';" .
- 'EXEC sp_executesql @sql';
+ $sql = array_merge($sql, $this->getRenameTableSQL($tableName, $newName->getName()));
}
$sql = array_merge(
$this->getPreAlterTableIndexForeignKeySQL($diff),
$sql,
- $this->getPostAlterTableIndexForeignKeySQL($diff)
+ $this->getPostAlterTableIndexForeignKeySQL($diff),
);
return array_merge($sql, $tableSql, $columnSql);
}
+ /**
+ * {@inheritDoc}
+ */
+ public function getRenameTableSQL(string $oldName, string $newName): array
+ {
+ return [
+ sprintf('sp_rename %s, %s', $this->quoteStringLiteral($oldName), $this->quoteStringLiteral($newName)),
+
+ /* Rename table's default constraints names
+ * to match the new table name.
+ * This is necessary to ensure that the default
+ * constraints can be referenced in future table
+ * alterations as the table name is encoded in
+ * default constraints' names. */
+ sprintf(
+ <<<'SQL'
+ DECLARE @sql NVARCHAR(MAX) = N'';
+ SELECT @sql += N'EXEC sp_rename N''' + dc.name + ''', N'''
+ + REPLACE(dc.name, '%s', '%s') + ''', ''OBJECT'';'
+ FROM sys.default_constraints dc
+ JOIN sys.tables tbl
+ ON dc.parent_object_id = tbl.object_id
+ WHERE tbl.name = %s;
+ EXEC sp_executesql @sql
+ SQL,
+ $this->generateIdentifierName($oldName),
+ $this->generateIdentifierName($newName),
+ $this->quoteStringLiteral($newName),
+ ),
+ ];
+ }
+
/**
* Returns the SQL clause for adding a default constraint in an ALTER TABLE statement.
*
@@ -666,27 +753,29 @@ private function getAlterTableDropDefaultConstraintClause($tableName, $columnNam
*/
private function alterColumnRequiresDropDefaultConstraint(ColumnDiff $columnDiff): bool
{
+ $oldColumn = $columnDiff->getOldColumn();
+
// We can only decide whether to drop an existing default constraint
// if we know the original default value.
- if (! $columnDiff->fromColumn instanceof Column) {
+ if (! $oldColumn instanceof Column) {
return false;
}
// We only need to drop an existing default constraint if we know the
// column was defined with a default value before.
- if ($columnDiff->fromColumn->getDefault() === null) {
+ if ($oldColumn->getDefault() === null) {
return false;
}
// We need to drop an existing default constraint if the column was
// defined with a default value before and it has changed.
- if ($columnDiff->hasChanged('default')) {
+ if ($columnDiff->hasDefaultChanged()) {
return true;
}
// We need to drop an existing default constraint if the column was
// defined with a default value before and the native column type has changed.
- return $columnDiff->hasChanged('type') || $columnDiff->hasChanged('fixed');
+ return $columnDiff->hasTypeChanged() || $columnDiff->hasFixedChanged();
}
/**
@@ -725,7 +814,7 @@ protected function getAlterColumnCommentSQL($tableName, $columnName, $comment)
'TABLE',
$tableSQL,
'COLUMN',
- $columnName
+ $columnName,
);
}
@@ -763,7 +852,7 @@ protected function getDropColumnCommentSQL($tableName, $columnName)
'TABLE',
$tableSQL,
'COLUMN',
- $columnName
+ $columnName,
);
}
@@ -776,7 +865,7 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName)
"EXEC sp_rename N'%s.%s', N'%s', N'INDEX'",
$tableName,
$oldIndexName,
- $index->getQuotedName($this)
+ $index->getQuotedName($this),
),
];
}
@@ -893,6 +982,8 @@ public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierCol
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
@@ -904,6 +995,8 @@ public function getListTablesSQL()
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
@@ -937,6 +1030,8 @@ public function getListTableColumnsSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
* @param string|null $database
*
@@ -963,6 +1058,8 @@ public function getListTableForeignKeysSQL($table, $database = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableIndexesSQL($table, $database = null)
@@ -987,6 +1084,8 @@ public function getListTableIndexesSQL($table, $database = null)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -1084,6 +1183,8 @@ public function getConcatExpression()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListDatabasesSQL()
{
@@ -1101,7 +1202,7 @@ public function getListNamespacesSQL()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'SQLServerPlatform::getListNamespacesSQL() is deprecated,'
- . ' use SQLServerSchemaManager::listSchemaNames() instead.'
+ . ' use SQLServerSchemaManager::listSchemaNames() instead.',
);
return "SELECT name FROM sys.schemas WHERE name NOT IN('guest', 'INFORMATION_SCHEMA', 'sys')";
@@ -1197,18 +1298,36 @@ public function getAsciiStringTypeDeclarationSQL(array $column): string
/**
* {@inheritDoc}
*/
- protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default string column length on SQL Server is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed
- ? ($length > 0 ? 'NCHAR(' . $length . ')' : 'CHAR(255)')
- : ($length > 0 ? 'NVARCHAR(' . $length . ')' : 'NVARCHAR(255)');
+ ? 'NCHAR(' . ($length > 0 ? $length : 255) . ')'
+ : 'NVARCHAR(' . ($length > 0 ? $length : 255) . ')';
}
/**
* {@inheritdoc}
*/
- protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
+ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/)
{
+ if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length on SQL Server is deprecated'
+ . ', specify the length explicitly.',
+ );
+ }
+
return $fixed
? 'BINARY(' . ($length > 0 ? $length : 255) . ')'
: 'VARBINARY(' . ($length > 0 ? $length : 255) . ')';
@@ -1216,9 +1335,17 @@ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'SQLServerPlatform::getBinaryMaxLength() is deprecated.',
+ );
+
return 8000;
}
@@ -1449,6 +1576,8 @@ public function rollbackSavePoint($savepoint)
/**
* {@inheritdoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getForeignKeyReferentialActionSQL($action)
{
@@ -1497,7 +1626,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'SQLServerPlatform::getReservedKeywordsClass() is deprecated,'
- . ' use SQLServerPlatform::createReservedKeywordsList() instead.'
+ . ' use SQLServerPlatform::createReservedKeywordsList() instead.',
);
return Keywords\SQLServer2012Keywords::class;
@@ -1532,7 +1661,7 @@ public function getBlobTypeDeclarationSQL(array $column)
/**
* {@inheritdoc}
*
- * Modifies column declaration order as it differs in Microsoft SQL Server.
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getColumnDeclarationSQL($name, array $column)
{
@@ -1544,11 +1673,29 @@ public function getColumnDeclarationSQL($name, array $column)
$notnull = ! empty($column['notnull']) ? ' NOT NULL' : '';
- $unique = ! empty($column['unique']) ?
- ' ' . $this->getUniqueFieldDeclarationSQL() : '';
+ if (! empty($column['unique'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "unique" column property is deprecated. Use unique constraints instead.',
+ );
- $check = ! empty($column['check']) ?
- ' ' . $column['check'] : '';
+ $unique = ' ' . $this->getUniqueFieldDeclarationSQL();
+ } else {
+ $unique = '';
+ }
+
+ if (! empty($column['check'])) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5656',
+ 'The usage of the "check" column property is deprecated.',
+ );
+
+ $check = ' ' . $column['check'];
+ } else {
+ $check = '';
+ }
$typeDecl = $column['type']->getSQLDeclaration($column, $this);
$columnDef = $typeDecl . $collation . $notnull . $unique . $check;
@@ -1557,6 +1704,16 @@ public function getColumnDeclarationSQL($name, array $column)
return $name . ' ' . $columnDef;
}
+ /**
+ * {@inheritDoc}
+ *
+ * SQL Server does not support quoting collation identifiers.
+ */
+ public function getColumnCollationDeclarationSQL($collation)
+ {
+ return 'COLLATE ' . $collation;
+ }
+
public function columnsEqual(Column $column1, Column $column2): bool
{
if (! parent::columnsEqual($column1, $column2)) {
@@ -1606,10 +1763,11 @@ protected function getCommentOnTableSQL(string $tableName, ?string $comment): st
SQL
,
$this->quoteStringLiteral((string) $comment),
- $this->quoteStringLiteral($tableName)
+ $this->quoteStringLiteral($tableName),
);
}
+ /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */
public function getListTableMetadataSQL(string $table): string
{
return sprintf(
@@ -1623,13 +1781,11 @@ public function getListTableMetadataSQL(string $table): string
(tbl.name=N%s and SCHEMA_NAME(tbl.schema_id)=N'dbo' and p.name=N'MS_Description')
SQL
,
- $this->quoteStringLiteral($table)
+ $this->quoteStringLiteral($table),
);
}
- /**
- * @param string $query
- */
+ /** @param string $query */
private function shouldAddOrderBy($query): bool
{
// Find the position of the last instance of ORDER BY and ensure it is not within a parenthetical statement
@@ -1657,4 +1813,9 @@ private function shouldAddOrderBy($query): bool
return true;
}
+
+ public function createSchemaManager(Connection $connection): SQLServerSchemaManager
+ {
+ return new SQLServerSchemaManager($connection, $this);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php b/app/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php
index d27ee86d7..263f3561e 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php
@@ -15,9 +15,7 @@
*/
class Comparator extends BaseComparator
{
- /**
- * @internal The comparator can be only instantiated by a schema manager.
- */
+ /** @internal The comparator can be only instantiated by a schema manager. */
public function __construct(SqlitePlatform $platform)
{
parent::__construct($platform);
diff --git a/app/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php b/app/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php
index 6d5adda49..71c29f38a 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php
@@ -2,6 +2,7 @@
namespace Doctrine\DBAL\Platforms;
+use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\API\SQLite\UserDefinedFunctions;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Schema\Column;
@@ -10,10 +11,12 @@
use Doctrine\DBAL\Schema\Identifier;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\SchemaException;
+use Doctrine\DBAL\Schema\SqliteSchemaManager;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\TableDiff;
use Doctrine\DBAL\TransactionIsolationLevel;
use Doctrine\DBAL\Types;
+use Doctrine\DBAL\Types\IntegerType;
use Doctrine\Deprecations\Deprecation;
use function array_combine;
@@ -22,6 +25,7 @@
use function array_search;
use function array_unique;
use function array_values;
+use function count;
use function implode;
use function is_numeric;
use function sprintf;
@@ -39,6 +43,8 @@
*/
class SqlitePlatform extends AbstractPlatform
{
+ private bool $schemaEmulationEnabled = true;
+
/**
* {@inheritDoc}
*/
@@ -59,7 +65,7 @@ public function getNowExpression($type = 'timestamp')
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4753',
- 'SqlitePlatform::getNowExpression() is deprecated. Generate dates within the application.'
+ 'SqlitePlatform::getNowExpression() is deprecated. Generate dates within the application.',
);
switch ($type) {
@@ -75,6 +81,14 @@ public function getNowExpression($type = 'timestamp')
}
}
+ /**
+ * {@inheritDoc}
+ */
+ public function getModExpression($expression1, $expression2)
+ {
+ return $expression1 . ' % ' . $expression2;
+ }
+
/**
* {@inheritDoc}
*/
@@ -117,11 +131,13 @@ public function getSubstringExpression($string, $start, $length = null)
*/
public function getLocateExpression($str, $substr, $startPos = false)
{
- if ($startPos === false) {
- return 'LOCATE(' . $str . ', ' . $substr . ')';
+ if ($startPos === false || $startPos === 1 || $startPos === '1') {
+ return 'INSTR(' . $str . ', ' . $substr . ')';
}
- return 'LOCATE(' . $str . ', ' . $substr . ', ' . $startPos . ')';
+ return 'CASE WHEN INSTR(SUBSTR(' . $str . ', ' . $startPos . '), ' . $substr
+ . ') > 0 THEN INSTR(SUBSTR(' . $str . ', ' . $startPos . '), ' . $substr . ') + ' . $startPos
+ . ' - 1 ELSE 0 END';
}
/**
@@ -166,14 +182,15 @@ public function getDateDiffExpression($date1, $date2)
/**
* {@inheritDoc}
*
- * The SQLite platform doesn't support the concept of a database, therefore, it always returns an empty string
+ * The DBAL doesn't support databases on the SQLite platform. The expression here always returns a fixed string
* as an indicator of an implicitly selected database.
*
- * @see \Doctrine\DBAL\Connection::getDatabase()
+ * @link https://www.sqlite.org/lang_select.html
+ * @see Connection::getDatabase()
*/
public function getCurrentDatabaseExpression(): string
{
- return "''";
+ return "'main'";
}
/**
@@ -212,8 +229,8 @@ public function prefersIdentityColumns()
{
Deprecation::trigger(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pulls/1519',
- 'SqlitePlatform::prefersIdentityColumns() is deprecated.'
+ 'https://github.com/doctrine/dbal/pull/1519',
+ 'SqlitePlatform::prefersIdentityColumns() is deprecated.',
);
return true;
@@ -249,12 +266,21 @@ public function getBigIntTypeDeclarationSQL(array $column)
}
/**
+ * @deprecated Use {@see getSmallIntTypeDeclarationSQL()} instead.
+ *
* @param array $column
*
* @return string
*/
public function getTinyIntTypeDeclarationSQL(array $column)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5511',
+ '%s is deprecated. Use getSmallIntTypeDeclarationSQL() instead.',
+ __METHOD__,
+ );
+
// SQLite autoincrement is implicit for INTEGER PKs, but not for TINYINT columns
if (! empty($column['autoincrement'])) {
return $this->getIntegerTypeDeclarationSQL($column);
@@ -277,12 +303,21 @@ public function getSmallIntTypeDeclarationSQL(array $column)
}
/**
+ * @deprecated Use {@see getIntegerTypeDeclarationSQL()} instead.
+ *
* @param array $column
*
* @return string
*/
public function getMediumIntTypeDeclarationSQL(array $column)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5511',
+ '%s is deprecated. Use getIntegerTypeDeclarationSQL() instead.',
+ __METHOD__,
+ );
+
// SQLite autoincrement is implicit for INTEGER PKs, but not for MEDIUMINT columns
if (! empty($column['autoincrement'])) {
return $this->getIntegerTypeDeclarationSQL($column);
@@ -328,17 +363,39 @@ protected function _getCommonIntegerTypeDeclarationSQL(array $column)
return ! empty($column['unsigned']) ? ' UNSIGNED' : '';
}
+ /**
+ * Disables schema emulation.
+ *
+ * Schema emulation is enabled by default to maintain backwards compatibility.
+ * Disable it to opt-in to the behavior of DBAL 4.
+ *
+ * @deprecated Will be removed in DBAL 4.0.
+ */
+ public function disableSchemaEmulation(): void
+ {
+ $this->schemaEmulationEnabled = false;
+ }
+
+ private function emulateSchemaNamespacing(string $tableName): string
+ {
+ return $this->schemaEmulationEnabled
+ ? str_replace('.', '__', $tableName)
+ : $tableName;
+ }
+
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey)
{
return parent::getForeignKeyDeclarationSQL(new ForeignKeyConstraint(
$foreignKey->getQuotedLocalColumns($this),
- str_replace('.', '__', $foreignKey->getQuotedForeignTableName($this)),
+ $this->emulateSchemaNamespacing($foreignKey->getQuotedForeignTableName($this)),
$foreignKey->getQuotedForeignColumns($this),
$foreignKey->getName(),
- $foreignKey->getOptions()
+ $foreignKey->getOptions(),
));
}
@@ -347,7 +404,7 @@ public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey)
*/
protected function _getCreateTableSQL($name, array $columns, array $options = [])
{
- $name = str_replace('.', '__', $name);
+ $name = $this->emulateSchemaNamespacing($name);
$queryFields = $this->getColumnDeclarationListSQL($columns);
if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) {
@@ -434,17 +491,33 @@ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryMaxLength()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'SqlitePlatform::getBinaryMaxLength() is deprecated.',
+ );
+
return 0;
}
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function getBinaryDefaultLength()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/3263',
+ 'Relying on the default binary column length is deprecated, specify the length explicitly.',
+ );
+
return 0;
}
@@ -457,39 +530,47 @@ public function getClobTypeDeclarationSQL(array $column)
}
/**
+ * @deprecated
+ *
* {@inheritDoc}
*/
public function getListTableConstraintsSQL($table)
{
- $table = str_replace('.', '__', $table);
+ $table = $this->emulateSchemaNamespacing($table);
return sprintf(
"SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name = %s AND sql NOT NULL ORDER BY name",
- $this->quoteStringLiteral($table)
+ $this->quoteStringLiteral($table),
);
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
{
- $table = str_replace('.', '__', $table);
+ $table = $this->emulateSchemaNamespacing($table);
return sprintf('PRAGMA table_info(%s)', $this->quoteStringLiteral($table));
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTableIndexesSQL($table, $database = null)
{
- $table = str_replace('.', '__', $table);
+ $table = $this->emulateSchemaNamespacing($table);
return sprintf('PRAGMA index_list(%s)', $this->quoteStringLiteral($table));
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* {@inheritDoc}
*/
public function getListTablesSQL()
@@ -505,6 +586,8 @@ public function getListTablesSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy.
*/
public function getListViewsSQL($database)
{
@@ -513,6 +596,8 @@ public function getListViewsSQL($database)
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
{
@@ -536,9 +621,18 @@ public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey
/**
* {@inheritDoc}
+ *
+ * @deprecated
*/
public function supportsCreateDropDatabase()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5513',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
@@ -552,6 +646,8 @@ public function supportsIdentityColumns()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsColumnCollation()
{
@@ -560,6 +656,8 @@ public function supportsColumnCollation()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function supportsInlineColumnComments()
{
@@ -574,7 +672,7 @@ public function getName()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4749',
- 'SqlitePlatform::getName() is deprecated. Identify platforms by their class.'
+ 'SqlitePlatform::getName() is deprecated. Identify platforms by their class.',
);
return 'sqlite';
@@ -586,7 +684,7 @@ public function getName()
public function getTruncateTableSQL($tableName, $cascade = false)
{
$tableIdentifier = new Identifier($tableName);
- $tableName = str_replace('.', '__', $tableIdentifier->getQuotedName($this));
+ $tableName = $this->emulateSchemaNamespacing($tableIdentifier->getQuotedName($this));
return 'DELETE FROM ' . $tableName;
}
@@ -644,6 +742,8 @@ public function getForUpdateSQL()
/**
* {@inheritDoc}
+ *
+ * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy.
*/
public function getInlineColumnCommentSQL($comment)
{
@@ -707,7 +807,7 @@ protected function getReservedKeywordsClass()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'SqlitePlatform::getReservedKeywordsClass() is deprecated,'
- . ' use SqlitePlatform::createReservedKeywordsList() instead.'
+ . ' use SqlitePlatform::createReservedKeywordsList() instead.',
);
return Keywords\SQLiteKeywords::class;
@@ -718,22 +818,7 @@ protected function getReservedKeywordsClass()
*/
protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
{
- if (! $diff->fromTable instanceof Table) {
- throw new Exception(
- 'Sqlite platform requires for alter table the table diff with reference to original table schema'
- );
- }
-
- $sql = [];
- foreach ($diff->fromTable->getIndexes() as $index) {
- if ($index->isPrimary()) {
- continue;
- }
-
- $sql[] = $this->getDropIndexSQL($index, $diff->name);
- }
-
- return $sql;
+ return [];
}
/**
@@ -741,11 +826,11 @@ protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
*/
protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
{
- $fromTable = $diff->fromTable;
+ $table = $diff->getOldTable();
- if (! $fromTable instanceof Table) {
+ if (! $table instanceof Table) {
throw new Exception(
- 'Sqlite platform requires for alter table the table diff with reference to original table schema'
+ 'Sqlite platform requires for alter table the table diff with reference to original table schema',
);
}
@@ -756,7 +841,7 @@ protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
$tableName = $diff->getName($this);
}
- foreach ($this->getIndexesInAlteredTable($diff, $fromTable) as $index) {
+ foreach ($this->getIndexesInAlteredTable($diff, $table) as $index) {
if ($index->isPrimary()) {
continue;
}
@@ -792,7 +877,7 @@ public function getBlobTypeDeclarationSQL(array $column)
*/
public function getTemporaryTableName($tableName)
{
- $tableName = str_replace('.', '__', $tableName);
+ $tableName = $this->emulateSchemaNamespacing($tableName);
return $tableName;
}
@@ -813,18 +898,38 @@ public function canEmulateSchemas()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4805',
- 'SqlitePlatform::canEmulateSchemas() is deprecated.'
+ 'SqlitePlatform::canEmulateSchemas() is deprecated.',
);
- return true;
+ return $this->schemaEmulationEnabled;
}
/**
* {@inheritDoc}
*/
- public function supportsForeignKeyConstraints()
+ public function getCreateTablesSQL(array $tables): array
{
- return false;
+ $sql = [];
+
+ foreach ($tables as $table) {
+ $sql = array_merge($sql, $this->getCreateTableSQL($table));
+ }
+
+ return $sql;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getDropTablesSQL(array $tables): array
+ {
+ $sql = [];
+
+ foreach ($tables as $table) {
+ $sql[] = $this->getDropTableSQL($table->getQuotedName($this));
+ }
+
+ return $sql;
}
/**
@@ -865,6 +970,7 @@ public function getCreateConstraintSQL(Constraint $constraint, $table)
* {@inheritDoc}
*
* @param int|null $createFlags
+ * @psalm-param int-mask-of|null $createFlags
*/
public function getCreateTableSQL(Table $table, $createFlags = null)
{
@@ -874,6 +980,8 @@ public function getCreateTableSQL(Table $table, $createFlags = null)
}
/**
+ * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon.
+ *
* @param string $table
* @param string|null $database
*
@@ -881,7 +989,7 @@ public function getCreateTableSQL(Table $table, $createFlags = null)
*/
public function getListTableForeignKeysSQL($table, $database = null)
{
- $table = str_replace('.', '__', $table);
+ $table = $this->emulateSchemaNamespacing($table);
return sprintf('PRAGMA foreign_key_list(%s)', $this->quoteStringLiteral($table));
}
@@ -896,15 +1004,14 @@ public function getAlterTableSQL(TableDiff $diff)
return $sql;
}
- $fromTable = $diff->fromTable;
- if (! $fromTable instanceof Table) {
+ $table = $diff->getOldTable();
+
+ if (! $table instanceof Table) {
throw new Exception(
- 'Sqlite platform requires for alter table the table diff with reference to original table schema'
+ 'Sqlite platform requires for alter table the table diff with reference to original table schema',
);
}
- $table = clone $fromTable;
-
$columns = [];
$oldColumnNames = [];
$newColumnNames = [];
@@ -916,12 +1023,12 @@ public function getAlterTableSQL(TableDiff $diff)
$oldColumnNames[$columnName] = $newColumnNames[$columnName] = $column->getQuotedName($this);
}
- foreach ($diff->removedColumns as $columnName => $column) {
+ foreach ($diff->getDroppedColumns() as $column) {
if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) {
continue;
}
- $columnName = strtolower($columnName);
+ $columnName = strtolower($column->getName());
if (! isset($columns[$columnName])) {
continue;
}
@@ -929,17 +1036,23 @@ public function getAlterTableSQL(TableDiff $diff)
unset(
$columns[$columnName],
$oldColumnNames[$columnName],
- $newColumnNames[$columnName]
+ $newColumnNames[$columnName],
);
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) {
continue;
}
$oldColumnName = strtolower($oldColumnName);
- $columns = $this->replaceColumn($diff->name, $columns, $oldColumnName, $column);
+
+ $columns = $this->replaceColumn(
+ $table->getName(),
+ $columns,
+ $oldColumnName,
+ $column,
+ );
if (! isset($newColumnNames[$oldColumnName])) {
continue;
@@ -948,27 +1061,35 @@ public function getAlterTableSQL(TableDiff $diff)
$newColumnNames[$oldColumnName] = $column->getQuotedName($this);
}
- foreach ($diff->changedColumns as $oldColumnName => $columnDiff) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) {
continue;
}
- $oldColumnName = strtolower($oldColumnName);
- $columns = $this->replaceColumn($diff->name, $columns, $oldColumnName, $columnDiff->column);
+ $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName();
+
+ $oldColumnName = strtolower($oldColumn->getName());
+
+ $columns = $this->replaceColumn(
+ $table->getName(),
+ $columns,
+ $oldColumnName,
+ $columnDiff->getNewColumn(),
+ );
if (! isset($newColumnNames[$oldColumnName])) {
continue;
}
- $newColumnNames[$oldColumnName] = $columnDiff->column->getQuotedName($this);
+ $newColumnNames[$oldColumnName] = $columnDiff->getNewColumn()->getQuotedName($this);
}
- foreach ($diff->addedColumns as $columnName => $column) {
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
- $columns[strtolower($columnName)] = $column;
+ $columns[strtolower($column->getName())] = $column;
}
$sql = [];
@@ -979,10 +1100,10 @@ public function getAlterTableSQL(TableDiff $diff)
$newTable = new Table(
$table->getQuotedName($this),
$columns,
- $this->getPrimaryIndexInAlteredTable($diff, $fromTable),
+ $this->getPrimaryIndexInAlteredTable($diff, $table),
[],
- $this->getForeignKeysInAlteredTable($diff, $fromTable),
- $table->getOptions()
+ $this->getForeignKeysInAlteredTable($diff, $table),
+ $table->getOptions(),
);
$newTable->addOption('alter', true);
@@ -992,9 +1113,9 @@ public function getAlterTableSQL(TableDiff $diff)
'CREATE TEMPORARY TABLE %s AS SELECT %s FROM %s',
$dataTable->getQuotedName($this),
implode(', ', $oldColumnNames),
- $table->getQuotedName($this)
+ $table->getQuotedName($this),
);
- $sql[] = $this->getDropTableSQL($fromTable);
+ $sql[] = $this->getDropTableSQL($table);
$sql = array_merge($sql, $this->getCreateTableSQL($newTable));
$sql[] = sprintf(
@@ -1002,17 +1123,24 @@ public function getAlterTableSQL(TableDiff $diff)
$newTable->getQuotedName($this),
implode(', ', $newColumnNames),
implode(', ', $oldColumnNames),
- $dataTable->getQuotedName($this)
+ $dataTable->getQuotedName($this),
);
- $sql[] = $this->getDropTableSQL($dataTable);
+ $sql[] = $this->getDropTableSQL($dataTable->getQuotedName($this));
$newName = $diff->getNewName();
if ($newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$sql[] = sprintf(
'ALTER TABLE %s RENAME TO %s',
$newTable->getQuotedName($this),
- $newName->getQuotedName($this)
+ $newName->getQuotedName($this),
);
}
@@ -1058,22 +1186,28 @@ private function replaceColumn($tableName, array $columns, $columnName, Column $
private function getSimpleAlterTableSQL(TableDiff $diff)
{
// Suppress changes on integer type autoincrement columns.
- foreach ($diff->changedColumns as $oldColumnName => $columnDiff) {
- if (
- $columnDiff->fromColumn === null ||
- ! $columnDiff->column->getAutoincrement() ||
- ! $columnDiff->column->getType() instanceof Types\IntegerType
- ) {
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
+ $oldColumn = $columnDiff->getOldColumn();
+
+ if ($oldColumn === null) {
+ continue;
+ }
+
+ $newColumn = $columnDiff->getNewColumn();
+
+ if (! $newColumn->getAutoincrement() || ! $newColumn->getType() instanceof IntegerType) {
continue;
}
- if (! $columnDiff->hasChanged('type') && $columnDiff->hasChanged('unsigned')) {
+ $oldColumnName = $oldColumn->getName();
+
+ if (! $columnDiff->hasTypeChanged() && $columnDiff->hasUnsignedChanged()) {
unset($diff->changedColumns[$oldColumnName]);
continue;
}
- $fromColumnType = $columnDiff->fromColumn->getType();
+ $fromColumnType = $oldColumn->getType();
if (! ($fromColumnType instanceof Types\SmallIntType) && ! ($fromColumnType instanceof Types\BigIntType)) {
continue;
@@ -1083,27 +1217,27 @@ private function getSimpleAlterTableSQL(TableDiff $diff)
}
if (
- ! empty($diff->renamedColumns)
- || ! empty($diff->addedForeignKeys)
- || ! empty($diff->addedIndexes)
- || ! empty($diff->changedColumns)
- || ! empty($diff->changedForeignKeys)
- || ! empty($diff->changedIndexes)
- || ! empty($diff->removedColumns)
- || ! empty($diff->removedForeignKeys)
- || ! empty($diff->removedIndexes)
- || ! empty($diff->renamedIndexes)
+ count($diff->getModifiedColumns()) > 0
+ || count($diff->getDroppedColumns()) > 0
+ || count($diff->getRenamedColumns()) > 0
+ || count($diff->getAddedIndexes()) > 0
+ || count($diff->getModifiedIndexes()) > 0
+ || count($diff->getDroppedIndexes()) > 0
+ || count($diff->getRenamedIndexes()) > 0
+ || count($diff->getAddedForeignKeys()) > 0
+ || count($diff->getModifiedForeignKeys()) > 0
+ || count($diff->getDroppedForeignKeys()) > 0
) {
return false;
}
- $table = new Table($diff->name);
+ $table = $diff->getOldTable() ?? $diff->getName($this);
$sql = [];
$tableSql = [];
$columnSql = [];
- foreach ($diff->addedColumns as $column) {
+ foreach ($diff->getAddedColumns() as $column) {
if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) {
continue;
}
@@ -1125,8 +1259,8 @@ private function getSimpleAlterTableSQL(TableDiff $diff)
}
$definition['name'] = $column->getQuotedName($this);
- if ($type instanceof Types\StringType && $definition['length'] === null) {
- $definition['length'] = 255;
+ if ($type instanceof Types\StringType) {
+ $definition['length'] ??= 255;
}
$sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' ADD COLUMN '
@@ -1135,6 +1269,14 @@ private function getSimpleAlterTableSQL(TableDiff $diff)
if (! $this->onSchemaAlterTable($diff, $tableSql)) {
if ($diff->newName !== false) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ 'Generation of SQL that renames a table using %s is deprecated.'
+ . ' Use getRenameTableSQL() instead.',
+ __METHOD__,
+ );
+
$newTable = new Identifier($diff->newName);
$sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' RENAME TO '
@@ -1145,9 +1287,7 @@ private function getSimpleAlterTableSQL(TableDiff $diff)
return array_merge($sql, $tableSql, $columnSql);
}
- /**
- * @return string[]
- */
+ /** @return string[] */
private function getColumnNamesInAlteredTable(TableDiff $diff, Table $fromTable): array
{
$columns = [];
@@ -1156,8 +1296,8 @@ private function getColumnNamesInAlteredTable(TableDiff $diff, Table $fromTable)
$columns[strtolower($columnName)] = $column->getName();
}
- foreach ($diff->removedColumns as $columnName => $column) {
- $columnName = strtolower($columnName);
+ foreach ($diff->getDroppedColumns() as $column) {
+ $columnName = strtolower($column->getName());
if (! isset($columns[$columnName])) {
continue;
}
@@ -1165,19 +1305,22 @@ private function getColumnNamesInAlteredTable(TableDiff $diff, Table $fromTable)
unset($columns[$columnName]);
}
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
+ foreach ($diff->getRenamedColumns() as $oldColumnName => $column) {
$columnName = $column->getName();
$columns[strtolower($oldColumnName)] = $columnName;
$columns[strtolower($columnName)] = $columnName;
}
- foreach ($diff->changedColumns as $oldColumnName => $columnDiff) {
- $columnName = $columnDiff->column->getName();
- $columns[strtolower($oldColumnName)] = $columnName;
- $columns[strtolower($columnName)] = $columnName;
+ foreach ($diff->getModifiedColumns() as $columnDiff) {
+ $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName();
+
+ $oldColumnName = $oldColumn->getName();
+ $newColumnName = $columnDiff->getNewColumn()->getName();
+ $columns[strtolower($oldColumnName)] = $newColumnName;
+ $columns[strtolower($newColumnName)] = $newColumnName;
}
- foreach ($diff->addedColumns as $column) {
+ foreach ($diff->getAddedColumns() as $column) {
$columnName = $column->getName();
$columns[strtolower($columnName)] = $columnName;
}
@@ -1185,16 +1328,14 @@ private function getColumnNamesInAlteredTable(TableDiff $diff, Table $fromTable)
return $columns;
}
- /**
- * @return Index[]
- */
+ /** @return Index[] */
private function getIndexesInAlteredTable(TableDiff $diff, Table $fromTable): array
{
$indexes = $fromTable->getIndexes();
$columnNames = $this->getColumnNamesInAlteredTable($diff, $fromTable);
foreach ($indexes as $key => $index) {
- foreach ($diff->renamedIndexes as $oldIndexName => $renamedIndex) {
+ foreach ($diff->getRenamedIndexes() as $oldIndexName => $renamedIndex) {
if (strtolower($key) !== strtolower($oldIndexName)) {
continue;
}
@@ -1228,11 +1369,11 @@ private function getIndexesInAlteredTable(TableDiff $diff, Table $fromTable): ar
$indexColumns,
$index->isUnique(),
$index->isPrimary(),
- $index->getFlags()
+ $index->getFlags(),
);
}
- foreach ($diff->removedIndexes as $index) {
+ foreach ($diff->getDroppedIndexes() as $index) {
$indexName = strtolower($index->getName());
if (strlen($indexName) === 0 || ! isset($indexes[$indexName])) {
continue;
@@ -1241,7 +1382,13 @@ private function getIndexesInAlteredTable(TableDiff $diff, Table $fromTable): ar
unset($indexes[$indexName]);
}
- foreach (array_merge($diff->changedIndexes, $diff->addedIndexes, $diff->renamedIndexes) as $index) {
+ foreach (
+ array_merge(
+ $diff->getModifiedIndexes(),
+ $diff->getAddedIndexes(),
+ $diff->getRenamedIndexes(),
+ ) as $index
+ ) {
$indexName = strtolower($index->getName());
if (strlen($indexName) > 0) {
$indexes[$indexName] = $index;
@@ -1253,9 +1400,7 @@ private function getIndexesInAlteredTable(TableDiff $diff, Table $fromTable): ar
return $indexes;
}
- /**
- * @return ForeignKeyConstraint[]
- */
+ /** @return ForeignKeyConstraint[] */
private function getForeignKeysInAlteredTable(TableDiff $diff, Table $fromTable): array
{
$foreignKeys = $fromTable->getForeignKeys();
@@ -1288,11 +1433,11 @@ private function getForeignKeysInAlteredTable(TableDiff $diff, Table $fromTable)
$constraint->getForeignTableName(),
$constraint->getForeignColumns(),
$constraint->getName(),
- $constraint->getOptions()
+ $constraint->getOptions(),
);
}
- foreach ($diff->removedForeignKeys as $constraint) {
+ foreach ($diff->getDroppedForeignKeys() as $constraint) {
if (! $constraint instanceof ForeignKeyConstraint) {
$constraint = new Identifier($constraint);
}
@@ -1305,7 +1450,7 @@ private function getForeignKeysInAlteredTable(TableDiff $diff, Table $fromTable)
unset($foreignKeys[$constraintName]);
}
- foreach (array_merge($diff->changedForeignKeys, $diff->addedForeignKeys) as $constraint) {
+ foreach (array_merge($diff->getModifiedForeignKeys(), $diff->getAddedForeignKeys()) as $constraint) {
$constraintName = strtolower($constraint->getName());
if (strlen($constraintName) > 0) {
$foreignKeys[$constraintName] = $constraint;
@@ -1317,9 +1462,7 @@ private function getForeignKeysInAlteredTable(TableDiff $diff, Table $fromTable)
return $foreignKeys;
}
- /**
- * @return Index[]
- */
+ /** @return Index[] */
private function getPrimaryIndexInAlteredTable(TableDiff $diff, Table $fromTable): array
{
$primaryIndex = [];
@@ -1334,4 +1477,9 @@ private function getPrimaryIndexInAlteredTable(TableDiff $diff, Table $fromTable
return $primaryIndex;
}
+
+ public function createSchemaManager(Connection $connection): SqliteSchemaManager
+ {
+ return new SqliteSchemaManager($connection, $this);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Platforms/TrimMode.php b/app/vendor/doctrine/dbal/src/Platforms/TrimMode.php
index eb499ee46..01356c0d3 100644
--- a/app/vendor/doctrine/dbal/src/Platforms/TrimMode.php
+++ b/app/vendor/doctrine/dbal/src/Platforms/TrimMode.php
@@ -14,9 +14,7 @@ final class TrimMode
public const BOTH = 3;
- /**
- * @codeCoverageIgnore
- */
+ /** @codeCoverageIgnore */
private function __construct()
{
}
diff --git a/app/vendor/doctrine/dbal/src/Portability/Connection.php b/app/vendor/doctrine/dbal/src/Portability/Connection.php
index a22ab92ff..fc1bdd9ad 100644
--- a/app/vendor/doctrine/dbal/src/Portability/Connection.php
+++ b/app/vendor/doctrine/dbal/src/Portability/Connection.php
@@ -18,8 +18,7 @@ final class Connection extends AbstractConnectionMiddleware
public const PORTABILITY_EMPTY_TO_NULL = 4;
public const PORTABILITY_FIX_CASE = 8;
- /** @var Converter */
- private $converter;
+ private Converter $converter;
public function __construct(ConnectionInterface $connection, Converter $converter)
{
@@ -32,7 +31,7 @@ public function prepare(string $sql): DriverStatement
{
return new Statement(
parent::prepare($sql),
- $this->converter
+ $this->converter,
);
}
@@ -40,7 +39,7 @@ public function query(string $sql): DriverResult
{
return new Result(
parent::query($sql),
- $this->converter
+ $this->converter,
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Portability/Driver.php b/app/vendor/doctrine/dbal/src/Portability/Driver.php
index 6d4484f9f..2425dde03 100644
--- a/app/vendor/doctrine/dbal/src/Portability/Driver.php
+++ b/app/vendor/doctrine/dbal/src/Portability/Driver.php
@@ -15,11 +15,9 @@
final class Driver extends AbstractDriverMiddleware
{
- /** @var int */
- private $mode;
+ private int $mode;
- /** @var int */
- private $case;
+ private int $case;
public function __construct(DriverInterface $driver, int $mode, int $case)
{
@@ -38,7 +36,7 @@ public function connect(array $params)
$portability = (new OptimizeFlags())(
$this->getDatabasePlatform(),
- $this->mode
+ $this->mode,
);
$case = null;
@@ -69,7 +67,7 @@ public function connect(array $params)
return new Connection(
$connection,
- new Converter($convertEmptyStringToNull, $rightTrimString, $case)
+ new Converter($convertEmptyStringToNull, $rightTrimString, $case),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Portability/Middleware.php b/app/vendor/doctrine/dbal/src/Portability/Middleware.php
index b00147062..6e4bea2f2 100644
--- a/app/vendor/doctrine/dbal/src/Portability/Middleware.php
+++ b/app/vendor/doctrine/dbal/src/Portability/Middleware.php
@@ -9,11 +9,9 @@
final class Middleware implements MiddlewareInterface
{
- /** @var int */
- private $mode;
+ private int $mode;
- /** @var int */
- private $case;
+ private int $case;
public function __construct(int $mode, int $case)
{
diff --git a/app/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php b/app/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php
index 13367c92a..09f528310 100644
--- a/app/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php
+++ b/app/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php
@@ -19,7 +19,7 @@ final class OptimizeFlags
*
* @var array
*/
- private static $platforms = [
+ private static array $platforms = [
DB2Platform::class => 0,
OraclePlatform::class => Connection::PORTABILITY_EMPTY_TO_NULL,
PostgreSQLPlatform::class => 0,
diff --git a/app/vendor/doctrine/dbal/src/Portability/Result.php b/app/vendor/doctrine/dbal/src/Portability/Result.php
index d8440b663..da1eca985 100644
--- a/app/vendor/doctrine/dbal/src/Portability/Result.php
+++ b/app/vendor/doctrine/dbal/src/Portability/Result.php
@@ -9,12 +9,9 @@
final class Result extends AbstractResultMiddleware
{
- /** @var Converter */
- private $converter;
+ private Converter $converter;
- /**
- * @internal The result can be only instantiated by the portability connection or statement.
- */
+ /** @internal The result can be only instantiated by the portability connection or statement. */
public function __construct(ResultInterface $result, Converter $converter)
{
parent::__construct($result);
@@ -28,7 +25,7 @@ public function __construct(ResultInterface $result, Converter $converter)
public function fetchNumeric()
{
return $this->converter->convertNumeric(
- parent::fetchNumeric()
+ parent::fetchNumeric(),
);
}
@@ -38,7 +35,7 @@ public function fetchNumeric()
public function fetchAssociative()
{
return $this->converter->convertAssociative(
- parent::fetchAssociative()
+ parent::fetchAssociative(),
);
}
@@ -48,7 +45,7 @@ public function fetchAssociative()
public function fetchOne()
{
return $this->converter->convertOne(
- parent::fetchOne()
+ parent::fetchOne(),
);
}
@@ -58,7 +55,7 @@ public function fetchOne()
public function fetchAllNumeric(): array
{
return $this->converter->convertAllNumeric(
- parent::fetchAllNumeric()
+ parent::fetchAllNumeric(),
);
}
@@ -68,7 +65,7 @@ public function fetchAllNumeric(): array
public function fetchAllAssociative(): array
{
return $this->converter->convertAllAssociative(
- parent::fetchAllAssociative()
+ parent::fetchAllAssociative(),
);
}
@@ -78,7 +75,7 @@ public function fetchAllAssociative(): array
public function fetchFirstColumn(): array
{
return $this->converter->convertFirstColumn(
- parent::fetchFirstColumn()
+ parent::fetchFirstColumn(),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Portability/Statement.php b/app/vendor/doctrine/dbal/src/Portability/Statement.php
index b104cf78a..9b3e74f58 100644
--- a/app/vendor/doctrine/dbal/src/Portability/Statement.php
+++ b/app/vendor/doctrine/dbal/src/Portability/Statement.php
@@ -11,8 +11,7 @@
*/
final class Statement extends AbstractStatementMiddleware
{
- /** @var Converter */
- private $converter;
+ private Converter $converter;
/**
* Wraps Statement and applies portability measures.
@@ -31,7 +30,7 @@ public function execute($params = null): ResultInterface
{
return new Result(
parent::execute($params),
- $this->converter
+ $this->converter,
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Query.php b/app/vendor/doctrine/dbal/src/Query.php
index ea6024cd8..bfc9b14e2 100644
--- a/app/vendor/doctrine/dbal/src/Query.php
+++ b/app/vendor/doctrine/dbal/src/Query.php
@@ -15,24 +15,22 @@ final class Query
{
/**
* The SQL query.
- *
- * @var string
*/
- private $sql;
+ private string $sql;
/**
* The parameters bound to the query.
*
* @var array
*/
- private $params;
+ private array $params;
/**
* The types of the parameters bound to the query.
*
* @var array
*/
- private $types;
+ private array $types;
/**
* @param array $params
@@ -52,17 +50,13 @@ public function getSQL(): string
return $this->sql;
}
- /**
- * @return array
- */
+ /** @return array */
public function getParams(): array
{
return $this->params;
}
- /**
- * @return array
- */
+ /** @return array */
public function getTypes(): array
{
return $this->types;
diff --git a/app/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php b/app/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php
index 85de9ae93..de1d929a0 100644
--- a/app/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php
+++ b/app/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php
@@ -37,7 +37,7 @@ class CompositeExpression implements Countable
*
* @var self[]|string[]
*/
- private $parts = [];
+ private array $parts = [];
/**
* @internal Use the and() / or() factory methods.
@@ -54,7 +54,7 @@ public function __construct($type, array $parts = [])
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/3864',
- 'Do not use CompositeExpression constructor directly, use static and() and or() factory methods.'
+ 'Do not use CompositeExpression constructor directly, use static and() and or() factory methods.',
);
}
@@ -90,7 +90,7 @@ public function addMultiple(array $parts = [])
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3844',
- 'CompositeExpression::addMultiple() is deprecated, use CompositeExpression::with() instead.'
+ 'CompositeExpression::addMultiple() is deprecated, use CompositeExpression::with() instead.',
);
foreach ($parts as $part) {
@@ -114,7 +114,7 @@ public function add($part)
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3844',
- 'CompositeExpression::add() is deprecated, use CompositeExpression::with() instead.'
+ 'CompositeExpression::add() is deprecated, use CompositeExpression::with() instead.',
);
if ($part === null) {
diff --git a/app/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php b/app/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php
index 1ce11b7b9..d532b2894 100644
--- a/app/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php
+++ b/app/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php
@@ -25,10 +25,8 @@ class ExpressionBuilder
/**
* The DBAL Connection.
- *
- * @var Connection
*/
- private $connection;
+ private Connection $connection;
/**
* Initializes a new ExpressionBuilder.
@@ -75,7 +73,7 @@ public function andX($x = null)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/3851',
- 'ExpressionBuilder::andX() is deprecated, use ExpressionBuilder::and() instead.'
+ 'ExpressionBuilder::andX() is deprecated, use ExpressionBuilder::and() instead.',
);
return new CompositeExpression(CompositeExpression::TYPE_AND, func_get_args());
@@ -94,7 +92,7 @@ public function orX($x = null)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/3851',
- 'ExpressionBuilder::orX() is deprecated, use ExpressionBuilder::or() instead.'
+ 'ExpressionBuilder::orX() is deprecated, use ExpressionBuilder::or() instead.',
);
return new CompositeExpression(CompositeExpression::TYPE_OR, func_get_args());
diff --git a/app/vendor/doctrine/dbal/src/Query/QueryBuilder.php b/app/vendor/doctrine/dbal/src/Query/QueryBuilder.php
index 7f30a1287..5fa722d6d 100644
--- a/app/vendor/doctrine/dbal/src/Query/QueryBuilder.php
+++ b/app/vendor/doctrine/dbal/src/Query/QueryBuilder.php
@@ -2,6 +2,7 @@
namespace Doctrine\DBAL\Query;
+use Doctrine\DBAL\Cache\QueryCacheProfile;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\ParameterType;
@@ -37,26 +38,28 @@
*/
class QueryBuilder
{
- /*
- * The query types.
- */
+ /** @deprecated */
public const SELECT = 0;
+
+ /** @deprecated */
public const DELETE = 1;
+
+ /** @deprecated */
public const UPDATE = 2;
+
+ /** @deprecated */
public const INSERT = 3;
- /*
- * The builder states.
- */
+ /** @deprecated */
public const STATE_DIRTY = 0;
+
+ /** @deprecated */
public const STATE_CLEAN = 1;
/**
* The DBAL Connection.
- *
- * @var Connection
*/
- private $connection;
+ private Connection $connection;
/*
* The default values of SQL parts collection
@@ -79,14 +82,12 @@ class QueryBuilder
*
* @var mixed[]
*/
- private $sqlParts = self::SQL_PARTS_DEFAULTS;
+ private array $sqlParts = self::SQL_PARTS_DEFAULTS;
/**
* The complete SQL string for this query.
- *
- * @var string|null
*/
- private $sql;
+ private ?string $sql = null;
/**
* The query parameters.
@@ -100,42 +101,37 @@ class QueryBuilder
*
* @var array|array
*/
- private $paramTypes = [];
+ private array $paramTypes = [];
/**
* The type of query this is. Can be select, update or delete.
- *
- * @var int
*/
- private $type = self::SELECT;
+ private int $type = self::SELECT;
/**
* The state of the query object. Can be dirty or clean.
- *
- * @var int
*/
- private $state = self::STATE_CLEAN;
+ private int $state = self::STATE_CLEAN;
/**
* The index of the first result to retrieve.
- *
- * @var int
*/
- private $firstResult = 0;
+ private int $firstResult = 0;
/**
* The maximum number of results to retrieve or NULL to retrieve all results.
- *
- * @var int|null
*/
- private $maxResults;
+ private ?int $maxResults = null;
/**
* The counter of bound parameters used with {@see bindValue).
- *
- * @var int
*/
- private $boundCounter = 0;
+ private int $boundCounter = 0;
+
+ /**
+ * The query cache profile used for caching results.
+ */
+ private ?QueryCacheProfile $resultCacheProfile = null;
/**
* Initializes a new QueryBuilder.
@@ -171,30 +167,56 @@ public function expr()
/**
* Gets the type of the currently built query.
*
+ * @deprecated If necessary, track the type of the query being built outside of the builder.
+ *
* @return int
*/
public function getType()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5551',
+ 'Relying on the type of the query being built is deprecated.'
+ . ' If necessary, track the type of the query being built outside of the builder.',
+ );
+
return $this->type;
}
/**
* Gets the associated DBAL Connection for this query builder.
*
+ * @deprecated Use the connection used to instantiate the builder instead.
+ *
* @return Connection
*/
public function getConnection()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5780',
+ '%s is deprecated. Use the connection used to instantiate the builder instead.',
+ __METHOD__,
+ );
+
return $this->connection;
}
/**
* Gets the state of this query builder instance.
*
+ * @deprecated The builder state is an internal concern.
+ *
* @return int Either QueryBuilder::STATE_DIRTY or QueryBuilder::STATE_CLEAN.
*/
public function getState()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5551',
+ 'Relying on the query builder state is deprecated as it is an internal concern.',
+ );
+
return $this->state;
}
@@ -208,7 +230,7 @@ public function getState()
*/
public function fetchAssociative()
{
- return $this->connection->fetchAssociative($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchAssociative();
}
/**
@@ -221,7 +243,7 @@ public function fetchAssociative()
*/
public function fetchNumeric()
{
- return $this->connection->fetchNumeric($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchNumeric();
}
/**
@@ -234,7 +256,7 @@ public function fetchNumeric()
*/
public function fetchOne()
{
- return $this->connection->fetchOne($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchOne();
}
/**
@@ -246,7 +268,7 @@ public function fetchOne()
*/
public function fetchAllNumeric(): array
{
- return $this->connection->fetchAllNumeric($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchAllNumeric();
}
/**
@@ -258,7 +280,7 @@ public function fetchAllNumeric(): array
*/
public function fetchAllAssociative(): array
{
- return $this->connection->fetchAllAssociative($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchAllAssociative();
}
/**
@@ -271,7 +293,7 @@ public function fetchAllAssociative(): array
*/
public function fetchAllKeyValue(): array
{
- return $this->connection->fetchAllKeyValue($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchAllKeyValue();
}
/**
@@ -285,7 +307,7 @@ public function fetchAllKeyValue(): array
*/
public function fetchAllAssociativeIndexed(): array
{
- return $this->connection->fetchAllAssociativeIndexed($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchAllAssociativeIndexed();
}
/**
@@ -297,7 +319,7 @@ public function fetchAllAssociativeIndexed(): array
*/
public function fetchFirstColumn(): array
{
- return $this->connection->fetchFirstColumn($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery()->fetchFirstColumn();
}
/**
@@ -307,7 +329,12 @@ public function fetchFirstColumn(): array
*/
public function executeQuery(): Result
{
- return $this->connection->executeQuery($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->connection->executeQuery(
+ $this->getSQL(),
+ $this->params,
+ $this->paramTypes,
+ $this->resultCacheProfile,
+ );
}
/**
@@ -339,16 +366,16 @@ public function execute()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4578',
- 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeQuery() for SQL queries instead.'
+ 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeQuery() for SQL queries instead.',
);
- return $this->connection->executeQuery($this->getSQL(), $this->params, $this->paramTypes);
+ return $this->executeQuery();
}
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4578',
- 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeStatement() for SQL statements instead.'
+ 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeStatement() for SQL statements instead.',
);
return $this->connection->executeStatement($this->getSQL(), $this->params, $this->paramTypes);
@@ -414,10 +441,17 @@ public function getSQL()
*
* @return $this This QueryBuilder instance.
*/
- public function setParameter($key, $value, $type = null)
+ public function setParameter($key, $value, $type = ParameterType::STRING)
{
if ($type !== null) {
$this->paramTypes[$key] = $type;
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5550',
+ 'Using NULL as prepared statement parameter type is deprecated.'
+ . 'Omit or use Parameter::STRING instead',
+ );
}
$this->params[$key] = $value;
@@ -490,11 +524,11 @@ public function getParameterTypes()
*
* @param int|string $key The key of the bound parameter type
*
- * @return int|string|Type|null The value of the bound parameter type
+ * @return int|string|Type The value of the bound parameter type
*/
public function getParameterType($key)
{
- return $this->paramTypes[$key] ?? null;
+ return $this->paramTypes[$key] ?? ParameterType::STRING;
}
/**
@@ -629,7 +663,7 @@ public function select($select = null/*, string ...$selects*/)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3837',
'Passing an array for the first argument to QueryBuilder::select() is deprecated, ' .
- 'pass each value as an individual variadic argument instead.'
+ 'pass each value as an individual variadic argument instead.',
);
}
@@ -688,7 +722,7 @@ public function addSelect($select = null/*, string ...$selects*/)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3837',
'Passing an array for the first argument to QueryBuilder::addSelect() is deprecated, ' .
- 'pass each value as an individual variadic argument instead.'
+ 'pass each value as an individual variadic argument instead.',
);
}
@@ -949,7 +983,7 @@ public function set($key, $value)
* ->from('counters', 'c')
* ->where('c.id = ?');
*
- * // You can optionally programatically build and/or expressions
+ * // You can optionally programmatically build and/or expressions
* $qb = $conn->createQueryBuilder();
*
* $or = $qb->expr()->orx();
@@ -1069,7 +1103,7 @@ public function groupBy($groupBy/*, string ...$groupBys*/)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3837',
'Passing an array for the first argument to QueryBuilder::groupBy() is deprecated, ' .
- 'pass each value as an individual variadic argument instead.'
+ 'pass each value as an individual variadic argument instead.',
);
}
@@ -1107,7 +1141,7 @@ public function addGroupBy($groupBy/*, string ...$groupBys*/)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3837',
'Passing an array for the first argument to QueryBuilder::addGroupBy() is deprecated, ' .
- 'pass each value as an individual variadic argument instead.'
+ 'pass each value as an individual variadic argument instead.',
);
}
@@ -1287,9 +1321,7 @@ public function getQueryParts()
*/
public function resetQueryParts($queryPartNames = null)
{
- if ($queryPartNames === null) {
- $queryPartNames = array_keys($this->sqlParts);
- }
+ $queryPartNames ??= array_keys($this->sqlParts);
foreach ($queryPartNames as $queryPartName) {
$this->resetQueryPart($queryPartName);
@@ -1314,9 +1346,7 @@ public function resetQueryPart($queryPartName)
return $this;
}
- /**
- * @throws QueryException
- */
+ /** @throws QueryException */
private function getSQLForSelect(): string
{
$query = 'SELECT ' . ($this->sqlParts['distinct'] ? 'DISTINCT ' : '') .
@@ -1332,7 +1362,7 @@ private function getSQLForSelect(): string
return $this->connection->getDatabasePlatform()->modifyLimitQuery(
$query,
$this->maxResults,
- $this->firstResult
+ $this->firstResult,
);
}
@@ -1441,14 +1471,14 @@ public function __toString()
* when using prepared statements.
*
* The parameter $value specifies the value that you want to bind. If
- * $placeholder is not provided bindValue() will automatically create a
- * placeholder for you. An automatic placeholder will be of the name
- * ':dcValue1', ':dcValue2' etc.
+ * $placeholder is not provided createNamedParameter() will automatically
+ * create a placeholder for you. An automatic placeholder will be of the
+ * name ':dcValue1', ':dcValue2' etc.
*
* Example:
*
* $value = 2;
- * $q->eq( 'id', $q->bindValue( $value ) );
+ * $q->eq( 'id', $q->createNamedParameter( $value ) );
* $stmt = $q->executeQuery(); // executed with 'id = 2'
*
*
@@ -1564,4 +1594,29 @@ public function __clone()
$this->params[$name] = clone $param;
}
}
+
+ /**
+ * Enables caching of the results of this query, for given amount of seconds
+ * and optionally specified witch key to use for the cache entry.
+ *
+ * @return $this
+ */
+ public function enableResultCache(QueryCacheProfile $cacheProfile): self
+ {
+ $this->resultCacheProfile = $cacheProfile;
+
+ return $this;
+ }
+
+ /**
+ * Disables caching of the results of this query.
+ *
+ * @return $this
+ */
+ public function disableResultCache(): self
+ {
+ $this->resultCacheProfile = null;
+
+ return $this;
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Query/QueryException.php b/app/vendor/doctrine/dbal/src/Query/QueryException.php
index 58e941e98..90d1f47d9 100644
--- a/app/vendor/doctrine/dbal/src/Query/QueryException.php
+++ b/app/vendor/doctrine/dbal/src/Query/QueryException.php
@@ -6,9 +6,7 @@
use function implode;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class QueryException extends Exception
{
/**
diff --git a/app/vendor/doctrine/dbal/src/Result.php b/app/vendor/doctrine/dbal/src/Result.php
index dce821c6e..0426fd48f 100644
--- a/app/vendor/doctrine/dbal/src/Result.php
+++ b/app/vendor/doctrine/dbal/src/Result.php
@@ -15,15 +15,10 @@
class Result
{
- /** @var DriverResult */
- private $result;
+ private DriverResult $result;
+ private Connection $connection;
- /** @var Connection */
- private $connection;
-
- /**
- * @internal The result can be only instantiated by {@see Connection} or {@see Statement}.
- */
+ /** @internal The result can be only instantiated by {@see Connection} or {@see Statement}. */
public function __construct(DriverResult $result, Connection $connection)
{
$this->result = $result;
@@ -228,9 +223,7 @@ public function iterateColumn(): Traversable
}
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
public function rowCount(): int
{
try {
@@ -240,9 +233,7 @@ public function rowCount(): int
}
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
public function columnCount(): int
{
try {
@@ -257,9 +248,7 @@ public function free(): void
$this->result->free();
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
private function ensureHasKeyValue(): void
{
$columnCount = $this->columnCount();
diff --git a/app/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php b/app/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php
new file mode 100644
index 000000000..2e392e661
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php
@@ -0,0 +1,85 @@
+platform = $platform;
+ }
+
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ public function buildSQL(Schema $schema): array
+ {
+ return array_merge(
+ $this->buildNamespaceStatements($schema->getNamespaces()),
+ $this->buildSequenceStatements($schema->getSequences()),
+ $this->buildTableStatements($schema->getTables()),
+ );
+ }
+
+ /**
+ * @param list $namespaces
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function buildNamespaceStatements(array $namespaces): array
+ {
+ $statements = [];
+
+ if ($this->platform->supportsSchemas()) {
+ foreach ($namespaces as $namespace) {
+ $statements[] = $this->platform->getCreateSchemaSQL($namespace);
+ }
+ }
+
+ return $statements;
+ }
+
+ /**
+ * @param list $tables
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function buildTableStatements(array $tables): array
+ {
+ return $this->platform->getCreateTablesSQL($tables);
+ }
+
+ /**
+ * @param list $sequences
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function buildSequenceStatements(array $sequences): array
+ {
+ $statements = [];
+
+ foreach ($sequences as $sequence) {
+ $statements[] = $this->platform->getCreateSequenceSQL($sequence);
+ }
+
+ return $statements;
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php b/app/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php
new file mode 100644
index 000000000..8de742a31
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php
@@ -0,0 +1,62 @@
+platform = $platform;
+ }
+
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ public function buildSQL(Schema $schema): array
+ {
+ return array_merge(
+ $this->buildSequenceStatements($schema->getSequences()),
+ $this->buildTableStatements($schema->getTables()),
+ );
+ }
+
+ /**
+ * @param list $tables
+ *
+ * @return list
+ */
+ private function buildTableStatements(array $tables): array
+ {
+ return $this->platform->getDropTablesSQL($tables);
+ }
+
+ /**
+ * @param list $sequences
+ *
+ * @return list
+ *
+ * @throws Exception
+ */
+ private function buildSequenceStatements(array $sequences): array
+ {
+ $statements = [];
+
+ foreach ($sequences as $sequence) {
+ $statements[] = $this->platform->getDropSequenceSQL($sequence);
+ }
+
+ return $statements;
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/SQL/Parser.php b/app/vendor/doctrine/dbal/src/SQL/Parser.php
index b3747e0c0..ae0d4428f 100644
--- a/app/vendor/doctrine/dbal/src/SQL/Parser.php
+++ b/app/vendor/doctrine/dbal/src/SQL/Parser.php
@@ -44,8 +44,7 @@ final class Parser
private const SPECIAL = '[' . self::SPECIAL_CHARS . ']';
private const OTHER = '[^' . self::SPECIAL_CHARS . ']+';
- /** @var string */
- private $sqlPattern;
+ private string $sqlPattern;
public function __construct(bool $mySQLStringEscaping)
{
diff --git a/app/vendor/doctrine/dbal/src/Schema/AbstractAsset.php b/app/vendor/doctrine/dbal/src/Schema/AbstractAsset.php
index 69e337602..ab8fdec03 100644
--- a/app/vendor/doctrine/dbal/src/Schema/AbstractAsset.php
+++ b/app/vendor/doctrine/dbal/src/Schema/AbstractAsset.php
@@ -123,7 +123,7 @@ public function getFullQualifiedName($defaultNamespaceName)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4814',
'AbstractAsset::getFullQualifiedName() is deprecated.'
- . ' Use AbstractAsset::getNamespaceName() and ::getName() instead.'
+ . ' Use AbstractAsset::getNamespaceName() and ::getName() instead.',
);
$name = $this->getName();
diff --git a/app/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php
index e44580b54..445c9ff2f 100644
--- a/app/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php
@@ -7,7 +7,9 @@
use Doctrine\DBAL\Event\SchemaIndexDefinitionEventArgs;
use Doctrine\DBAL\Events;
use Doctrine\DBAL\Exception;
+use Doctrine\DBAL\Exception\DatabaseRequired;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\DBAL\Result;
use Doctrine\Deprecations\Deprecation;
use Throwable;
@@ -47,9 +49,7 @@ abstract class AbstractSchemaManager
*/
protected $_platform;
- /**
- * @param T $platform
- */
+ /** @param T $platform */
public function __construct(Connection $connection, AbstractPlatform $platform)
{
$this->_conn = $connection;
@@ -59,10 +59,19 @@ public function __construct(Connection $connection, AbstractPlatform $platform)
/**
* Returns the associated platform.
*
+ * @deprecated Use {@link Connection::getDatabasePlatform()} instead.
+ *
* @return T
*/
public function getDatabasePlatform()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5387',
+ 'AbstractSchemaManager::getDatabasePlatform() is deprecated.'
+ . ' Use Connection::getDatabasePlatform() instead.',
+ );
+
return $this->_platform;
}
@@ -85,7 +94,7 @@ public function tryMethod()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
- 'AbstractSchemaManager::tryMethod() is deprecated.'
+ 'AbstractSchemaManager::tryMethod() is deprecated.',
);
$args = func_get_args();
@@ -134,7 +143,7 @@ public function listNamespaceNames()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'AbstractSchemaManager::listNamespaceNames() is deprecated,'
- . ' use AbstractSchemaManager::listSchemaNames() instead.'
+ . ' use AbstractSchemaManager::listSchemaNames() instead.',
);
$sql = $this->_platform->getListNamespacesSQL();
@@ -168,7 +177,13 @@ public function listSchemaNames(): array
public function listSequences($database = null)
{
if ($database === null) {
- $database = $this->_conn->getDatabase();
+ $database = $this->getDatabase(__METHOD__);
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5284',
+ 'Passing $database to AbstractSchemaManager::listSequences() is deprecated.',
+ );
}
$sql = $this->_platform->getListSequencesSQL($database);
@@ -198,7 +213,13 @@ public function listSequences($database = null)
public function listTableColumns($table, $database = null)
{
if ($database === null) {
- $database = $this->_conn->getDatabase();
+ $database = $this->getDatabase(__METHOD__);
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5284',
+ 'Passing $database to AbstractSchemaManager::listTableColumns() is deprecated.',
+ );
}
$sql = $this->_platform->getListTableColumnsSQL($table, $database);
@@ -208,6 +229,34 @@ public function listTableColumns($table, $database = null)
return $this->_getPortableTableColumnList($table, $database, $tableColumns);
}
+ /**
+ * @param string $table
+ * @param string|null $database
+ *
+ * @return Column[]
+ *
+ * @throws Exception
+ */
+ protected function doListTableColumns($table, $database = null): array
+ {
+ if ($database === null) {
+ $database = $this->getDatabase(__METHOD__);
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5284',
+ 'Passing $database to AbstractSchemaManager::listTableColumns() is deprecated.',
+ );
+ }
+
+ return $this->_getPortableTableColumnList(
+ $table,
+ $database,
+ $this->selectTableColumns($database, $this->normalizeName($table))
+ ->fetchAllAssociative(),
+ );
+ }
+
/**
* Lists the indexes for a given table returning an array of Index instances.
*
@@ -228,6 +277,27 @@ public function listTableIndexes($table)
return $this->_getPortableTableIndexesList($tableIndexes, $table);
}
+ /**
+ * @param string $table
+ *
+ * @return Index[]
+ *
+ * @throws Exception
+ */
+ protected function doListTableIndexes($table): array
+ {
+ $database = $this->getDatabase(__METHOD__);
+ $table = $this->normalizeName($table);
+
+ return $this->_getPortableTableIndexesList(
+ $this->selectIndexColumns(
+ $database,
+ $table,
+ )->fetchAllAssociative(),
+ $table,
+ );
+ }
+
/**
* Returns true if all the given tables exist.
*
@@ -246,7 +316,7 @@ public function tablesExist($names)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/3580',
'The usage of a string $tableNames in AbstractSchemaManager::tablesExist() is deprecated. ' .
- 'Pass a one-element array instead.'
+ 'Pass a one-element array instead.',
);
}
@@ -272,6 +342,23 @@ public function listTableNames()
return $this->filterAssetNames($tableNames);
}
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ protected function doListTableNames(): array
+ {
+ $database = $this->getDatabase(__METHOD__);
+
+ return $this->filterAssetNames(
+ $this->_getPortableTablesList(
+ $this->selectTableNames($database)
+ ->fetchAllAssociative(),
+ ),
+ );
+ }
+
/**
* Filters asset names if they are configured to return only a subset of all
* the found elements.
@@ -293,7 +380,7 @@ protected function filterAssetNames($assetNames)
/**
* Lists the tables for this connection.
*
- * @return Table[]
+ * @return list
*
* @throws Exception
*/
@@ -303,13 +390,50 @@ public function listTables()
$tables = [];
foreach ($tableNames as $tableName) {
- $tables[] = $this->listTableDetails($tableName);
+ $tables[] = $this->introspectTable($tableName);
+ }
+
+ return $tables;
+ }
+
+ /**
+ * @return list
+ *
+ * @throws Exception
+ */
+ protected function doListTables(): array
+ {
+ $database = $this->getDatabase(__METHOD__);
+
+ $tableColumnsByTable = $this->fetchTableColumnsByTable($database);
+ $indexColumnsByTable = $this->fetchIndexColumnsByTable($database);
+ $foreignKeyColumnsByTable = $this->fetchForeignKeyColumnsByTable($database);
+ $tableOptionsByTable = $this->fetchTableOptionsByTable($database);
+
+ $filter = $this->_conn->getConfiguration()->getSchemaAssetsFilter();
+ $tables = [];
+
+ foreach ($tableColumnsByTable as $tableName => $tableColumns) {
+ if ($filter !== null && ! $filter($tableName)) {
+ continue;
+ }
+
+ $tables[] = new Table(
+ $tableName,
+ $this->_getPortableTableColumnList($tableName, $database, $tableColumns),
+ $this->_getPortableTableIndexesList($indexColumnsByTable[$tableName] ?? [], $tableName),
+ [],
+ $this->_getPortableTableForeignKeysList($foreignKeyColumnsByTable[$tableName] ?? []),
+ $tableOptionsByTable[$tableName] ?? [],
+ );
}
return $tables;
}
/**
+ * @deprecated Use {@see introspectTable()} instead.
+ *
* @param string $name
*
* @return Table
@@ -318,6 +442,13 @@ public function listTables()
*/
public function listTableDetails($name)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
$columns = $this->listTableColumns($name);
$foreignKeys = [];
@@ -330,6 +461,165 @@ public function listTableDetails($name)
return new Table($name, $columns, $indexes, [], $foreignKeys);
}
+ /**
+ * @param string $name
+ *
+ * @throws Exception
+ */
+ protected function doListTableDetails($name): Table
+ {
+ $database = $this->getDatabase(__METHOD__);
+
+ $normalizedName = $this->normalizeName($name);
+
+ $tableOptionsByTable = $this->fetchTableOptionsByTable($database, $normalizedName);
+
+ if ($this->_platform->supportsForeignKeyConstraints()) {
+ $foreignKeys = $this->listTableForeignKeys($name);
+ } else {
+ $foreignKeys = [];
+ }
+
+ return new Table(
+ $name,
+ $this->listTableColumns($name, $database),
+ $this->listTableIndexes($name),
+ [],
+ $foreignKeys,
+ $tableOptionsByTable[$normalizedName] ?? [],
+ );
+ }
+
+ /**
+ * An extension point for those platforms where case sensitivity of the object name depends on whether it's quoted.
+ *
+ * Such platforms should convert a possibly quoted name into a value of the corresponding case.
+ */
+ protected function normalizeName(string $name): string
+ {
+ $identifier = new Identifier($name);
+
+ return $identifier->getName();
+ }
+
+ /**
+ * Selects names of tables in the specified database.
+ *
+ * @throws Exception
+ *
+ * @abstract
+ */
+ protected function selectTableNames(string $databaseName): Result
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
+
+ /**
+ * Selects definitions of table columns in the specified database. If the table name is specified, narrows down
+ * the selection to this table.
+ *
+ * @throws Exception
+ *
+ * @abstract
+ */
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
+
+ /**
+ * Selects definitions of index columns in the specified database. If the table name is specified, narrows down
+ * the selection to this table.
+ *
+ * @throws Exception
+ */
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
+
+ /**
+ * Selects definitions of foreign key columns in the specified database. If the table name is specified,
+ * narrows down the selection to this table.
+ *
+ * @throws Exception
+ */
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
+
+ /**
+ * Fetches definitions of table columns in the specified database and returns them grouped by table name.
+ *
+ * @return array>>
+ *
+ * @throws Exception
+ */
+ protected function fetchTableColumnsByTable(string $databaseName): array
+ {
+ return $this->fetchAllAssociativeGrouped($this->selectTableColumns($databaseName));
+ }
+
+ /**
+ * Fetches definitions of index columns in the specified database and returns them grouped by table name.
+ *
+ * @return array>>
+ *
+ * @throws Exception
+ */
+ protected function fetchIndexColumnsByTable(string $databaseName): array
+ {
+ return $this->fetchAllAssociativeGrouped($this->selectIndexColumns($databaseName));
+ }
+
+ /**
+ * Fetches definitions of foreign key columns in the specified database and returns them grouped by table name.
+ *
+ * @return array>>
+ *
+ * @throws Exception
+ */
+ protected function fetchForeignKeyColumnsByTable(string $databaseName): array
+ {
+ if (! $this->_platform->supportsForeignKeyConstraints()) {
+ return [];
+ }
+
+ return $this->fetchAllAssociativeGrouped(
+ $this->selectForeignKeyColumns($databaseName),
+ );
+ }
+
+ /**
+ * Fetches table options for the tables in the specified database and returns them grouped by table name.
+ * If the table name is specified, narrows down the selection to this table.
+ *
+ * @return array>
+ *
+ * @throws Exception
+ */
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
+ {
+ throw Exception::notSupported(__METHOD__);
+ }
+
+ /**
+ * Introspects the table with the given name.
+ *
+ * @throws Exception
+ */
+ public function introspectTable(string $name): Table
+ {
+ $table = $this->listTableDetails($name);
+
+ if ($table->getColumns() === []) {
+ throw SchemaException::tableDoesNotExist($name);
+ }
+
+ return $table;
+ }
+
/**
* Lists the views this connection has.
*
@@ -359,7 +649,13 @@ public function listViews()
public function listTableForeignKeys($table, $database = null)
{
if ($database === null) {
- $database = $this->_conn->getDatabase();
+ $database = $this->getDatabase(__METHOD__);
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5284',
+ 'Passing $database to AbstractSchemaManager::listTableForeignKeys() is deprecated.',
+ );
}
$sql = $this->_platform->getListTableForeignKeysSQL($table, $database);
@@ -368,6 +664,34 @@ public function listTableForeignKeys($table, $database = null)
return $this->_getPortableTableForeignKeysList($tableForeignKeys);
}
+ /**
+ * @param string $table
+ * @param string|null $database
+ *
+ * @return ForeignKeyConstraint[]
+ *
+ * @throws Exception
+ */
+ protected function doListTableForeignKeys($table, $database = null): array
+ {
+ if ($database === null) {
+ $database = $this->getDatabase(__METHOD__);
+ } else {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5284',
+ 'Passing $database to AbstractSchemaManager::listTableForeignKeys() is deprecated.',
+ );
+ }
+
+ return $this->_getPortableTableForeignKeysList(
+ $this->selectForeignKeyColumns(
+ $database,
+ $this->normalizeName($table),
+ )->fetchAllAssociative(),
+ );
+ }
+
/* drop*() Methods */
/**
@@ -383,7 +707,9 @@ public function listTableForeignKeys($table, $database = null)
*/
public function dropDatabase($database)
{
- $this->_execSql($this->_platform->getDropDatabaseSQL($database));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropDatabaseSQL($database),
+ );
}
/**
@@ -393,7 +719,9 @@ public function dropDatabase($database)
*/
public function dropSchema(string $schemaName): void
{
- $this->_execSql($this->_platform->getDropSchemaSQL($schemaName));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropSchemaSQL($schemaName),
+ );
}
/**
@@ -407,7 +735,9 @@ public function dropSchema(string $schemaName): void
*/
public function dropTable($name)
{
- $this->_execSql($this->_platform->getDropTableSQL($name));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropTableSQL($name),
+ );
}
/**
@@ -423,10 +753,30 @@ public function dropTable($name)
public function dropIndex($index, $table)
{
if ($index instanceof Index) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
$index = $index->getQuotedName($this->_platform);
}
- $this->_execSql($this->_platform->getDropIndexSQL($index, $table));
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as an Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
+ $table = $table->getQuotedName($this->_platform);
+ }
+
+ $this->_conn->executeStatement(
+ $this->_platform->getDropIndexSQL($index, $table),
+ );
}
/**
@@ -442,7 +792,21 @@ public function dropIndex($index, $table)
*/
public function dropConstraint(Constraint $constraint, $table)
{
- $this->_execSql($this->_platform->getDropConstraintSQL($constraint, $table));
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
+ $table = $table->getQuotedName($this->_platform);
+ }
+
+ $this->_conn->executeStatement($this->_platform->getDropConstraintSQL(
+ $constraint->getQuotedName($this->_platform),
+ $table,
+ ));
}
/**
@@ -457,7 +821,32 @@ public function dropConstraint(Constraint $constraint, $table)
*/
public function dropForeignKey($foreignKey, $table)
{
- $this->_execSql($this->_platform->getDropForeignKeySQL($foreignKey, $table));
+ if ($foreignKey instanceof ForeignKeyConstraint) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.'
+ . ' Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
+ $foreignKey = $foreignKey->getQuotedName($this->_platform);
+ }
+
+ if ($table instanceof Table) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/4798',
+ 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.',
+ __METHOD__,
+ );
+
+ $table = $table->getQuotedName($this->_platform);
+ }
+
+ $this->_conn->executeStatement(
+ $this->_platform->getDropForeignKeySQL($foreignKey, $table),
+ );
}
/**
@@ -471,7 +860,9 @@ public function dropForeignKey($foreignKey, $table)
*/
public function dropSequence($name)
{
- $this->_execSql($this->_platform->getDropSequenceSQL($name));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropSequenceSQL($name),
+ );
}
/**
@@ -481,7 +872,9 @@ public function dropSequence($name)
*/
public function dropUniqueConstraint(string $name, string $tableName): void
{
- $this->_execSql($this->_platform->getDropUniqueConstraintSQL($name, $tableName));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropUniqueConstraintSQL($name, $tableName),
+ );
}
/**
@@ -495,11 +888,19 @@ public function dropUniqueConstraint(string $name, string $tableName): void
*/
public function dropView($name)
{
- $this->_execSql($this->_platform->getDropViewSQL($name));
+ $this->_conn->executeStatement(
+ $this->_platform->getDropViewSQL($name),
+ );
}
/* create*() Methods */
+ /** @throws Exception */
+ public function createSchemaObjects(Schema $schema): void
+ {
+ $this->_execSql($schema->toSql($this->_platform));
+ }
+
/**
* Creates a new database.
*
@@ -511,7 +912,9 @@ public function dropView($name)
*/
public function createDatabase($database)
{
- $this->_execSql($this->_platform->getCreateDatabaseSQL($database));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateDatabaseSQL($database),
+ );
}
/**
@@ -538,7 +941,9 @@ public function createTable(Table $table)
*/
public function createSequence($sequence)
{
- $this->_execSql($this->_platform->getCreateSequenceSQL($sequence));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateSequenceSQL($sequence),
+ );
}
/**
@@ -554,7 +959,9 @@ public function createSequence($sequence)
*/
public function createConstraint(Constraint $constraint, $table)
{
- $this->_execSql($this->_platform->getCreateConstraintSQL($constraint, $table));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateConstraintSQL($constraint, $table),
+ );
}
/**
@@ -568,7 +975,9 @@ public function createConstraint(Constraint $constraint, $table)
*/
public function createIndex(Index $index, $table)
{
- $this->_execSql($this->_platform->getCreateIndexSQL($index, $table));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateIndexSQL($index, $table),
+ );
}
/**
@@ -583,7 +992,9 @@ public function createIndex(Index $index, $table)
*/
public function createForeignKey(ForeignKeyConstraint $foreignKey, $table)
{
- $this->_execSql($this->_platform->getCreateForeignKeySQL($foreignKey, $table));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateForeignKeySQL($foreignKey, $table),
+ );
}
/**
@@ -593,7 +1004,9 @@ public function createForeignKey(ForeignKeyConstraint $foreignKey, $table)
*/
public function createUniqueConstraint(UniqueConstraint $uniqueConstraint, string $tableName): void
{
- $this->_execSql($this->_platform->getCreateUniqueConstraintSQL($uniqueConstraint, $tableName));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateUniqueConstraintSQL($uniqueConstraint, $tableName),
+ );
}
/**
@@ -605,11 +1018,22 @@ public function createUniqueConstraint(UniqueConstraint $uniqueConstraint, strin
*/
public function createView(View $view)
{
- $this->_execSql($this->_platform->getCreateViewSQL($view->getQuotedName($this->_platform), $view->getSql()));
+ $this->_conn->executeStatement(
+ $this->_platform->getCreateViewSQL(
+ $view->getQuotedName($this->_platform),
+ $view->getSql(),
+ ),
+ );
}
/* dropAndCreate*() Methods */
+ /** @throws Exception */
+ public function dropSchemaObjects(Schema $schema): void
+ {
+ $this->_execSql($schema->toDropSql($this->_platform));
+ }
+
/**
* Drops and creates a constraint.
*
@@ -635,7 +1059,7 @@ public function dropAndCreateConstraint(Constraint $constraint, $table)
. ' Use AbstractSchemaManager::dropIndex() and AbstractSchemaManager::createIndex(),'
. ' AbstractSchemaManager::dropForeignKey() and AbstractSchemaManager::createForeignKey()'
. ' or AbstractSchemaManager::dropUniqueConstraint()'
- . ' and AbstractSchemaManager::createUniqueConstraint() instead.'
+ . ' and AbstractSchemaManager::createUniqueConstraint() instead.',
);
$this->tryMethod('dropConstraint', $constraint, $table);
@@ -659,7 +1083,7 @@ public function dropAndCreateIndex(Index $index, $table)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateIndex() is deprecated.'
- . ' Use AbstractSchemaManager::dropIndex() and AbstractSchemaManager::createIndex() instead.'
+ . ' Use AbstractSchemaManager::dropIndex() and AbstractSchemaManager::createIndex() instead.',
);
$this->tryMethod('dropIndex', $index->getQuotedName($this->_platform), $table);
@@ -685,7 +1109,7 @@ public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateForeignKey() is deprecated.'
- . ' Use AbstractSchemaManager::dropForeignKey() and AbstractSchemaManager::createForeignKey() instead.'
+ . ' Use AbstractSchemaManager::dropForeignKey() and AbstractSchemaManager::createForeignKey() instead.',
);
$this->tryMethod('dropForeignKey', $foreignKey, $table);
@@ -707,7 +1131,7 @@ public function dropAndCreateSequence(Sequence $sequence)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateSequence() is deprecated.'
- . ' Use AbstractSchemaManager::dropSequence() and AbstractSchemaManager::createSequence() instead.'
+ . ' Use AbstractSchemaManager::dropSequence() and AbstractSchemaManager::createSequence() instead.',
);
$this->tryMethod('dropSequence', $sequence->getQuotedName($this->_platform));
@@ -729,7 +1153,7 @@ public function dropAndCreateTable(Table $table)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateTable() is deprecated.'
- . ' Use AbstractSchemaManager::dropTable() and AbstractSchemaManager::createTable() instead.'
+ . ' Use AbstractSchemaManager::dropTable() and AbstractSchemaManager::createTable() instead.',
);
$this->tryMethod('dropTable', $table->getQuotedName($this->_platform));
@@ -753,7 +1177,7 @@ public function dropAndCreateDatabase($database)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateDatabase() is deprecated.'
- . ' Use AbstractSchemaManager::dropDatabase() and AbstractSchemaManager::createDatabase() instead.'
+ . ' Use AbstractSchemaManager::dropDatabase() and AbstractSchemaManager::createDatabase() instead.',
);
$this->tryMethod('dropDatabase', $database);
@@ -775,7 +1199,7 @@ public function dropAndCreateView(View $view)
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'AbstractSchemaManager::dropAndCreateView() is deprecated.'
- . ' Use AbstractSchemaManager::dropView() and AbstractSchemaManager::createView() instead.'
+ . ' Use AbstractSchemaManager::dropView() and AbstractSchemaManager::createView() instead.',
);
$this->tryMethod('dropView', $view->getQuotedName($this->_platform));
@@ -789,7 +1213,7 @@ public function dropAndCreateView(View $view)
*/
public function alterSchema(SchemaDiff $schemaDiff): void
{
- $this->_execSql($schemaDiff->toSql($this->_platform));
+ $this->_execSql($this->_platform->getAlterSchemaSQL($schemaDiff));
}
/**
@@ -800,7 +1224,7 @@ public function alterSchema(SchemaDiff $schemaDiff): void
public function migrateSchema(Schema $toSchema): void
{
$schemaDiff = $this->createComparator()
- ->compareSchemas($this->createSchema(), $toSchema);
+ ->compareSchemas($this->introspectSchema(), $toSchema);
$this->alterSchema($schemaDiff);
}
@@ -816,9 +1240,7 @@ public function migrateSchema(Schema $toSchema): void
*/
public function alterTable(TableDiff $tableDiff)
{
- foreach ($this->_platform->getAlterTableSQL($tableDiff) as $ddlQuery) {
- $this->_execSql($ddlQuery);
- }
+ $this->_execSql($this->_platform->getAlterTableSQL($tableDiff));
}
/**
@@ -833,9 +1255,7 @@ public function alterTable(TableDiff $tableDiff)
*/
public function renameTable($name, $newName)
{
- $tableDiff = new TableDiff($name);
- $tableDiff->newName = $newName;
- $this->alterTable($tableDiff);
+ $this->_execSql($this->_platform->getRenameTableSQL($name, $newName));
}
/**
@@ -874,7 +1294,7 @@ protected function getPortableNamespacesList(array $namespaces)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'AbstractSchemaManager::getPortableNamespacesList() is deprecated,'
- . ' use AbstractSchemaManager::listSchemaNames() instead.'
+ . ' use AbstractSchemaManager::listSchemaNames() instead.',
);
$namespacesList = [];
@@ -911,7 +1331,7 @@ protected function getPortableNamespaceDefinition(array $namespace)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'AbstractSchemaManager::getPortableNamespaceDefinition() is deprecated,'
- . ' use AbstractSchemaManager::listSchemaNames() instead.'
+ . ' use AbstractSchemaManager::listSchemaNames() instead.',
);
return $namespace;
@@ -970,6 +1390,13 @@ protected function _getPortableTableColumnList($table, $database, $tableColumns)
$defaultPrevented = false;
if ($eventManager !== null && $eventManager->hasListeners(Events::onSchemaColumnDefinition)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated. Use a custom schema manager instead.',
+ Events::onSchemaColumnDefinition,
+ );
+
$eventArgs = new SchemaColumnDefinitionEventArgs($tableColumn, $table, $database, $this->_conn);
$eventManager->dispatchEvent(Events::onSchemaColumnDefinition, $eventArgs);
@@ -1055,6 +1482,13 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null
$defaultPrevented = false;
if ($eventManager !== null && $eventManager->hasListeners(Events::onSchemaIndexDefinition)) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/issues/5784',
+ 'Subscribing to %s events is deprecated. Use a custom schema manager instead.',
+ Events::onSchemaColumnDefinition,
+ );
+
$eventArgs = new SchemaIndexDefinitionEventArgs($data, $tableName, $this->_conn);
$eventManager->dispatchEvent(Events::onSchemaIndexDefinition, $eventArgs);
@@ -1069,7 +1503,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null
$data['unique'],
$data['primary'],
$data['flags'],
- $data['options']
+ $data['options'],
);
}
@@ -1108,31 +1542,6 @@ protected function _getPortableTableDefinition($table)
return $table;
}
- /**
- * @param mixed[][] $users
- *
- * @return string[][]
- */
- protected function _getPortableUsersList($users)
- {
- $list = [];
- foreach ($users as $value) {
- $list[] = $this->_getPortableUserDefinition($value);
- }
-
- return $list;
- }
-
- /**
- * @param string[] $user
- *
- * @return string[]
- */
- protected function _getPortableUserDefinition($user)
- {
- return $user;
- }
-
/**
* @param mixed[][] $views
*
@@ -1185,6 +1594,8 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
* @param mixed $tableForeignKey
*
* @return ForeignKeyConstraint
+ *
+ * @abstract
*/
protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
{
@@ -1192,6 +1603,8 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
}
/**
+ * @internal
+ *
* @param string[]|string $sql
*
* @return void
@@ -1208,12 +1621,21 @@ protected function _execSql($sql)
/**
* Creates a schema instance for the current database.
*
+ * @deprecated Use {@link introspectSchema()} instead.
+ *
* @return Schema
*
* @throws Exception
*/
public function createSchema()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5613',
+ '%s is deprecated. Use introspectSchema() instead.',
+ __METHOD__,
+ );
+
$schemaNames = [];
if ($this->_platform->supportsSchemas()) {
@@ -1231,6 +1653,16 @@ public function createSchema()
return new Schema($tables, $sequences, $this->createSchemaConfig(), $schemaNames);
}
+ /**
+ * Returns a {@see Schema} instance representing the current database schema.
+ *
+ * @throws Exception
+ */
+ public function introspectSchema(): Schema
+ {
+ return $this->createSchema();
+ }
+
/**
* Creates the configuration for this schema.
*
@@ -1283,7 +1715,7 @@ public function getSchemaSearchPaths()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4821',
- 'AbstractSchemaManager::getSchemaSearchPaths() is deprecated.'
+ 'AbstractSchemaManager::getSchemaSearchPaths() is deprecated.',
);
$database = $this->_conn->getDatabase();
@@ -1332,8 +1764,37 @@ public function removeDoctrineTypeFromComment($comment, $type)
return str_replace('(DC2Type:' . $type . ')', '', $comment);
}
+ /** @throws Exception */
+ private function getDatabase(string $methodName): string
+ {
+ $database = $this->_conn->getDatabase();
+
+ if ($database === null) {
+ throw DatabaseRequired::new($methodName);
+ }
+
+ return $database;
+ }
+
public function createComparator(): Comparator
{
- return new Comparator($this->getDatabasePlatform());
+ return new Comparator($this->_platform);
+ }
+
+ /**
+ * @return array>>
+ *
+ * @throws Exception
+ */
+ private function fetchAllAssociativeGrouped(Result $result): array
+ {
+ $data = [];
+
+ foreach ($result->fetchAllAssociative() as $row) {
+ $tableName = $this->_getPortableTableDefinition($row);
+ $data[$tableName][] = $row;
+ }
+
+ return $data;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Column.php b/app/vendor/doctrine/dbal/src/Schema/Column.php
index 714bbc428..8a5703c0a 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Column.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Column.php
@@ -4,6 +4,7 @@
use Doctrine\DBAL\Schema\Exception\UnknownColumnOption;
use Doctrine\DBAL\Types\Type;
+use Doctrine\Deprecations\Deprecation;
use function array_merge;
use function is_numeric;
@@ -50,7 +51,11 @@ class Column extends AbstractAsset
/** @var string|null */
protected $_comment;
- /** @var mixed[] */
+ /**
+ * @deprecated Use {@link $_platformOptions instead}
+ *
+ * @var mixed[]
+ */
protected $_customSchemaOptions = [];
/**
@@ -90,9 +95,7 @@ public function setOptions(array $options)
return $this;
}
- /**
- * @return Column
- */
+ /** @return Column */
public function setType(Type $type)
{
$this->_type = $type;
@@ -222,7 +225,7 @@ public function setPlatformOption($name, $value)
}
/**
- * @param string $value
+ * @param string|null $value
*
* @return Column
*/
@@ -233,73 +236,55 @@ public function setColumnDefinition($value)
return $this;
}
- /**
- * @return Type
- */
+ /** @return Type */
public function getType()
{
return $this->_type;
}
- /**
- * @return int|null
- */
+ /** @return int|null */
public function getLength()
{
return $this->_length;
}
- /**
- * @return int
- */
+ /** @return int */
public function getPrecision()
{
return $this->_precision;
}
- /**
- * @return int
- */
+ /** @return int */
public function getScale()
{
return $this->_scale;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function getUnsigned()
{
return $this->_unsigned;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function getFixed()
{
return $this->_fixed;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function getNotnull()
{
return $this->_notnull;
}
- /**
- * @return string|null
- */
+ /** @return string|null */
public function getDefault()
{
return $this->_default;
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getPlatformOptions()
{
return $this->_platformOptions;
@@ -325,17 +310,13 @@ public function getPlatformOption($name)
return $this->_platformOptions[$name];
}
- /**
- * @return string|null
- */
+ /** @return string|null */
public function getColumnDefinition()
{
return $this->_columnDefinition;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function getAutoincrement()
{
return $this->_autoincrement;
@@ -365,15 +346,15 @@ public function setComment($comment)
return $this;
}
- /**
- * @return string|null
- */
+ /** @return string|null */
public function getComment()
{
return $this->_comment;
}
/**
+ * @deprecated Use {@link setPlatformOption() instead}
+ *
* @param string $name
* @param mixed $value
*
@@ -381,54 +362,90 @@ public function getComment()
*/
public function setCustomSchemaOption($name, $value)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5476',
+ 'Column::setCustomSchemaOption() is deprecated. Use setPlatformOption() instead.',
+ );
+
$this->_customSchemaOptions[$name] = $value;
return $this;
}
/**
+ * @deprecated Use {@link hasPlatformOption() instead}
+ *
* @param string $name
*
* @return bool
*/
public function hasCustomSchemaOption($name)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5476',
+ 'Column::hasCustomSchemaOption() is deprecated. Use hasPlatformOption() instead.',
+ );
+
return isset($this->_customSchemaOptions[$name]);
}
/**
+ * @deprecated Use {@link getPlatformOption() instead}
+ *
* @param string $name
*
* @return mixed
*/
public function getCustomSchemaOption($name)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5476',
+ 'Column::getCustomSchemaOption() is deprecated. Use getPlatformOption() instead.',
+ );
+
return $this->_customSchemaOptions[$name];
}
/**
+ * @deprecated Use {@link setPlatformOptions() instead}
+ *
* @param mixed[] $customSchemaOptions
*
* @return Column
*/
public function setCustomSchemaOptions(array $customSchemaOptions)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5476',
+ 'Column::setCustomSchemaOptions() is deprecated. Use setPlatformOptions() instead.',
+ );
+
$this->_customSchemaOptions = $customSchemaOptions;
return $this;
}
/**
+ * @deprecated Use {@link getPlatformOptions() instead}
+ *
* @return mixed[]
*/
public function getCustomSchemaOptions()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5476',
+ 'Column::getCustomSchemaOptions() is deprecated. Use getPlatformOptions() instead.',
+ );
+
return $this->_customSchemaOptions;
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function toArray()
{
return array_merge([
diff --git a/app/vendor/doctrine/dbal/src/Schema/ColumnDiff.php b/app/vendor/doctrine/dbal/src/Schema/ColumnDiff.php
index 83402fd0f..bd1b0eee0 100644
--- a/app/vendor/doctrine/dbal/src/Schema/ColumnDiff.php
+++ b/app/vendor/doctrine/dbal/src/Schema/ColumnDiff.php
@@ -11,19 +11,39 @@
*/
class ColumnDiff
{
- /** @var string */
+ /**
+ * @deprecated Use {@see $fromColumn} and {@see Column::getName()} instead.
+ *
+ * @var string
+ */
public $oldColumnName;
- /** @var Column */
+ /**
+ * @internal Use {@see getNewColumn()} instead.
+ *
+ * @var Column
+ */
public $column;
- /** @var string[] */
+ /**
+ * @deprecated Use {@see hasTypeChanged()}, {@see hasLengthChanged()}, {@see hasPrecisionChanged()},
+ * {@see hasScaleChanged()}, {@see hasUnsignedChanged()}, {@see hasFixedChanged()}, {@see hasNotNullChanged()},
+ * {@see hasDefaultChanged()}, {@see hasAutoIncrementChanged()} or {@see hasCommentChanged()} instead.
+ *
+ * @var string[]
+ */
public $changedProperties = [];
- /** @var Column|null */
+ /**
+ * @internal Use {@see getOldColumn()} instead.
+ *
+ * @var Column|null
+ */
public $fromColumn;
/**
+ * @internal The diff can be only instantiated by a {@see Comparator}.
+ *
* @param string $oldColumnName
* @param string[] $changedProperties
*/
@@ -38,7 +58,7 @@ public function __construct(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4785',
'Not passing the $fromColumn to %s is deprecated.',
- __METHOD__
+ __METHOD__,
);
}
@@ -48,7 +68,71 @@ public function __construct(
$this->fromColumn = $fromColumn;
}
+ public function getOldColumn(): ?Column
+ {
+ return $this->fromColumn;
+ }
+
+ public function getNewColumn(): Column
+ {
+ return $this->column;
+ }
+
+ public function hasTypeChanged(): bool
+ {
+ return $this->hasChanged('type');
+ }
+
+ public function hasLengthChanged(): bool
+ {
+ return $this->hasChanged('length');
+ }
+
+ public function hasPrecisionChanged(): bool
+ {
+ return $this->hasChanged('precision');
+ }
+
+ public function hasScaleChanged(): bool
+ {
+ return $this->hasChanged('scale');
+ }
+
+ public function hasUnsignedChanged(): bool
+ {
+ return $this->hasChanged('unsigned');
+ }
+
+ public function hasFixedChanged(): bool
+ {
+ return $this->hasChanged('fixed');
+ }
+
+ public function hasNotNullChanged(): bool
+ {
+ return $this->hasChanged('notnull');
+ }
+
+ public function hasDefaultChanged(): bool
+ {
+ return $this->hasChanged('default');
+ }
+
+ public function hasAutoIncrementChanged(): bool
+ {
+ return $this->hasChanged('autoincrement');
+ }
+
+ public function hasCommentChanged(): bool
+ {
+ return $this->hasChanged('comment');
+ }
+
/**
+ * @deprecated Use {@see hasTypeChanged()}, {@see hasLengthChanged()}, {@see hasPrecisionChanged()},
+ * {@see hasScaleChanged()}, {@see hasUnsignedChanged()}, {@see hasFixedChanged()}, {@see hasNotNullChanged()},
+ * {@see hasDefaultChanged()}, {@see hasAutoIncrementChanged()} or {@see hasCommentChanged()} instead.
+ *
* @param string $propertyName
*
* @return bool
@@ -59,12 +143,27 @@ public function hasChanged($propertyName)
}
/**
+ * @deprecated Use {@see $fromColumn} instead.
+ *
* @return Identifier
*/
public function getOldColumnName()
{
- $quote = $this->fromColumn !== null && $this->fromColumn->isQuoted();
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5622',
+ '%s is deprecated. Use $fromColumn instead.',
+ __METHOD__,
+ );
+
+ if ($this->fromColumn !== null) {
+ $name = $this->fromColumn->getName();
+ $quote = $this->fromColumn->isQuoted();
+ } else {
+ $name = $this->oldColumnName;
+ $quote = false;
+ }
- return new Identifier($this->oldColumnName, $quote);
+ return new Identifier($name, $quote);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Comparator.php b/app/vendor/doctrine/dbal/src/Schema/Comparator.php
index 7791b29bc..01c0abcdd 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Comparator.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Comparator.php
@@ -27,30 +27,25 @@
*/
class Comparator
{
- /** @var AbstractPlatform|null */
- private $platform;
+ private ?AbstractPlatform $platform;
- /**
- * @internal The comparator can be only instantiated by a schema manager.
- */
+ /** @internal The comparator can be only instantiated by a schema manager. */
public function __construct(?AbstractPlatform $platform = null)
{
if ($platform === null) {
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
- 'https://github.com/doctrine/dbal/pull/4659',
+ 'https://github.com/doctrine/dbal/pull/4746',
'Not passing a $platform to %s is deprecated.'
. ' Use AbstractSchemaManager::createComparator() to instantiate the comparator.',
- __METHOD__
+ __METHOD__,
);
}
$this->platform = $platform;
}
- /**
- * @param list $args
- */
+ /** @param list $args */
public function __call(string $method, array $args): SchemaDiff
{
if ($method !== 'compareSchemas') {
@@ -60,15 +55,21 @@ public function __call(string $method, array $args): SchemaDiff
return $this->doCompareSchemas(...$args);
}
- /**
- * @param list $args
- */
+ /** @param list $args */
public static function __callStatic(string $method, array $args): SchemaDiff
{
if ($method !== 'compareSchemas') {
throw new BadMethodCallException(sprintf('Unknown method "%s"', $method));
}
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/4707',
+ 'Calling %s::%s() statically is deprecated.',
+ self::class,
+ $method,
+ );
+
$comparator = new self();
return $comparator->doCompareSchemas(...$args);
@@ -87,8 +88,16 @@ private function doCompareSchemas(
Schema $fromSchema,
Schema $toSchema
) {
- $diff = new SchemaDiff();
- $diff->fromSchema = $fromSchema;
+ $createdSchemas = [];
+ $droppedSchemas = [];
+ $createdTables = [];
+ $alteredTables = [];
+ $droppedTables = [];
+ $createdSequences = [];
+ $alteredSequences = [];
+ $droppedSequences = [];
+
+ $orphanedForeignKeys = [];
$foreignKeysToTable = [];
@@ -97,7 +106,7 @@ private function doCompareSchemas(
continue;
}
- $diff->newNamespaces[$namespace] = $namespace;
+ $createdSchemas[$namespace] = $namespace;
}
foreach ($fromSchema->getNamespaces() as $namespace) {
@@ -105,21 +114,21 @@ private function doCompareSchemas(
continue;
}
- $diff->removedNamespaces[$namespace] = $namespace;
+ $droppedSchemas[$namespace] = $namespace;
}
foreach ($toSchema->getTables() as $table) {
$tableName = $table->getShortestName($toSchema->getName());
if (! $fromSchema->hasTable($tableName)) {
- $diff->newTables[$tableName] = $toSchema->getTable($tableName);
+ $createdTables[$tableName] = $toSchema->getTable($tableName);
} else {
$tableDifferences = $this->diffTable(
$fromSchema->getTable($tableName),
- $toSchema->getTable($tableName)
+ $toSchema->getTable($tableName),
);
if ($tableDifferences !== false) {
- $diff->changedTables[$tableName] = $tableDifferences;
+ $alteredTables[$tableName] = $tableDifferences;
}
}
}
@@ -130,7 +139,7 @@ private function doCompareSchemas(
$table = $fromSchema->getTable($tableName);
if (! $toSchema->hasTable($tableName)) {
- $diff->removedTables[$tableName] = $table;
+ $droppedTables[$tableName] = $table;
}
// also remember all foreign keys that point to a specific table
@@ -144,31 +153,37 @@ private function doCompareSchemas(
}
}
- foreach ($diff->removedTables as $tableName => $table) {
+ foreach ($droppedTables as $tableName => $table) {
if (! isset($foreignKeysToTable[$tableName])) {
continue;
}
- $diff->orphanedForeignKeys = array_merge($diff->orphanedForeignKeys, $foreignKeysToTable[$tableName]);
+ foreach ($foreignKeysToTable[$tableName] as $foreignKey) {
+ if (isset($droppedTables[strtolower($foreignKey->getLocalTableName())])) {
+ continue;
+ }
+
+ $orphanedForeignKeys[] = $foreignKey;
+ }
// deleting duplicated foreign keys present on both on the orphanedForeignKey
// and the removedForeignKeys from changedTables
foreach ($foreignKeysToTable[$tableName] as $foreignKey) {
// strtolower the table name to make if compatible with getShortestName
$localTableName = strtolower($foreignKey->getLocalTableName());
- if (! isset($diff->changedTables[$localTableName])) {
+ if (! isset($alteredTables[$localTableName])) {
continue;
}
- foreach ($diff->changedTables[$localTableName]->removedForeignKeys as $key => $removedForeignKey) {
- assert($removedForeignKey instanceof ForeignKeyConstraint);
+ foreach ($alteredTables[$localTableName]->getDroppedForeignKeys() as $droppedForeignKey) {
+ assert($droppedForeignKey instanceof ForeignKeyConstraint);
// We check if the key is from the removed table if not we skip.
- if ($tableName !== strtolower($removedForeignKey->getForeignTableName())) {
+ if ($tableName !== strtolower($droppedForeignKey->getForeignTableName())) {
continue;
}
- unset($diff->changedTables[$localTableName]->removedForeignKeys[$key]);
+ $alteredTables[$localTableName]->unsetDroppedForeignKey($droppedForeignKey);
}
}
}
@@ -177,11 +192,11 @@ private function doCompareSchemas(
$sequenceName = $sequence->getShortestName($toSchema->getName());
if (! $fromSchema->hasSequence($sequenceName)) {
if (! $this->isAutoIncrementSequenceInSchema($fromSchema, $sequence)) {
- $diff->newSequences[] = $sequence;
+ $createdSequences[] = $sequence;
}
} else {
if ($this->diffSequence($sequence, $fromSchema->getSequence($sequenceName))) {
- $diff->changedSequences[] = $toSchema->getSequence($sequenceName);
+ $alteredSequences[] = $toSchema->getSequence($sequenceName);
}
}
}
@@ -197,9 +212,23 @@ private function doCompareSchemas(
continue;
}
- $diff->removedSequences[] = $sequence;
+ $droppedSequences[] = $sequence;
}
+ $diff = new SchemaDiff(
+ $createdTables,
+ $alteredTables,
+ $droppedTables,
+ $fromSchema,
+ $createdSchemas,
+ $droppedSchemas,
+ $createdSequences,
+ $alteredSequences,
+ $droppedSequences,
+ );
+
+ $diff->orphanedForeignKeys = $orphanedForeignKeys;
+
return $diff;
}
@@ -215,7 +244,7 @@ public function compare(Schema $fromSchema, Schema $toSchema)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4707',
- 'Method compare() is deprecated. Use a non-static call to compareSchemas() instead.'
+ 'Method compare() is deprecated. Use a non-static call to compareSchemas() instead.',
);
return $this->compareSchemas($fromSchema, $toSchema);
@@ -236,9 +265,7 @@ private function isAutoIncrementSequenceInSchema($schema, $sequence): bool
return false;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function diffSequence(Sequence $sequence1, Sequence $sequence2)
{
if ($sequence1->getAllocationSize() !== $sequence2->getAllocationSize()) {
@@ -253,15 +280,46 @@ public function diffSequence(Sequence $sequence1, Sequence $sequence2)
*
* If there are no differences this method returns the boolean false.
*
+ * @deprecated Use {@see compareTables()} and, optionally, {@see TableDiff::isEmpty()} instead.
+ *
* @return TableDiff|false
*
* @throws Exception
*/
public function diffTable(Table $fromTable, Table $toTable)
{
- $changes = 0;
- $tableDifferences = new TableDiff($fromTable->getName());
- $tableDifferences->fromTable = $fromTable;
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5770',
+ '%s is deprecated. Use compareTables() instead.',
+ __METHOD__,
+ );
+
+ $diff = $this->compareTables($fromTable, $toTable);
+
+ if ($diff->isEmpty()) {
+ return false;
+ }
+
+ return $diff;
+ }
+
+ /**
+ * Compares the tables and returns the difference between them.
+ *
+ * @throws Exception
+ */
+ public function compareTables(Table $fromTable, Table $toTable): TableDiff
+ {
+ $addedColumns = [];
+ $modifiedColumns = [];
+ $droppedColumns = [];
+ $addedIndexes = [];
+ $modifiedIndexes = [];
+ $droppedIndexes = [];
+ $addedForeignKeys = [];
+ $modifiedForeignKeys = [];
+ $droppedForeignKeys = [];
$fromTableColumns = $fromTable->getColumns();
$toTableColumns = $toTable->getColumns();
@@ -272,16 +330,15 @@ public function diffTable(Table $fromTable, Table $toTable)
continue;
}
- $tableDifferences->addedColumns[$columnName] = $column;
- $changes++;
+ $addedColumns[$columnName] = $column;
}
/* See if there are any removed columns in "to" table */
foreach ($fromTableColumns as $columnName => $column) {
// See if column is removed in "to" table.
if (! $toTable->hasColumn($columnName)) {
- $tableDifferences->removedColumns[$columnName] = $column;
- $changes++;
+ $droppedColumns[$columnName] = $column;
+
continue;
}
@@ -298,40 +355,37 @@ public function diffTable(Table $fromTable, Table $toTable)
continue;
}
- $tableDifferences->changedColumns[$column->getName()] = new ColumnDiff(
+ $modifiedColumns[$column->getName()] = new ColumnDiff(
$column->getName(),
$toColumn,
$changedProperties,
- $column
+ $column,
);
-
- $changes++;
}
- $this->detectColumnRenamings($tableDifferences);
+ $renamedColumns = $this->detectRenamedColumns($addedColumns, $droppedColumns);
$fromTableIndexes = $fromTable->getIndexes();
$toTableIndexes = $toTable->getIndexes();
/* See if all the indexes in "from" table exist in "to" table */
foreach ($toTableIndexes as $indexName => $index) {
- if (($index->isPrimary() && $fromTable->hasPrimaryKey()) || $fromTable->hasIndex($indexName)) {
+ if (($index->isPrimary() && $fromTable->getPrimaryKey() !== null) || $fromTable->hasIndex($indexName)) {
continue;
}
- $tableDifferences->addedIndexes[$indexName] = $index;
- $changes++;
+ $addedIndexes[$indexName] = $index;
}
/* See if there are any removed indexes in "to" table */
foreach ($fromTableIndexes as $indexName => $index) {
// See if index is removed in "to" table.
if (
- ($index->isPrimary() && ! $toTable->hasPrimaryKey()) ||
+ ($index->isPrimary() && $toTable->getPrimaryKey() === null) ||
! $index->isPrimary() && ! $toTable->hasIndex($indexName)
) {
- $tableDifferences->removedIndexes[$indexName] = $index;
- $changes++;
+ $droppedIndexes[$indexName] = $index;
+
continue;
}
@@ -343,11 +397,10 @@ public function diffTable(Table $fromTable, Table $toTable)
continue;
}
- $tableDifferences->changedIndexes[$indexName] = $toTableIndex;
- $changes++;
+ $modifiedIndexes[$indexName] = $toTableIndex;
}
- $this->detectIndexRenamings($tableDifferences);
+ $renamedIndexes = $this->detectRenamedIndexes($addedIndexes, $droppedIndexes);
$fromForeignKeys = $fromTable->getForeignKeys();
$toForeignKeys = $toTable->getForeignKeys();
@@ -358,8 +411,8 @@ public function diffTable(Table $fromTable, Table $toTable)
unset($fromForeignKeys[$fromKey], $toForeignKeys[$toKey]);
} else {
if (strtolower($fromConstraint->getName()) === strtolower($toConstraint->getName())) {
- $tableDifferences->changedForeignKeys[] = $toConstraint;
- $changes++;
+ $modifiedForeignKeys[] = $toConstraint;
+
unset($fromForeignKeys[$fromKey], $toForeignKeys[$toKey]);
}
}
@@ -367,102 +420,137 @@ public function diffTable(Table $fromTable, Table $toTable)
}
foreach ($fromForeignKeys as $fromConstraint) {
- $tableDifferences->removedForeignKeys[] = $fromConstraint;
- $changes++;
+ $droppedForeignKeys[] = $fromConstraint;
}
foreach ($toForeignKeys as $toConstraint) {
- $tableDifferences->addedForeignKeys[] = $toConstraint;
- $changes++;
- }
-
- return $changes > 0 ? $tableDifferences : false;
+ $addedForeignKeys[] = $toConstraint;
+ }
+
+ return new TableDiff(
+ $toTable->getName(),
+ $addedColumns,
+ $modifiedColumns,
+ $droppedColumns,
+ $addedIndexes,
+ $modifiedIndexes,
+ $droppedIndexes,
+ $fromTable,
+ $addedForeignKeys,
+ $modifiedForeignKeys,
+ $droppedForeignKeys,
+ $renamedColumns,
+ $renamedIndexes,
+ );
}
/**
* Try to find columns that only changed their name, rename operations maybe cheaper than add/drop
* however ambiguities between different possibilities should not lead to renaming at all.
+ *
+ * @param array $addedColumns
+ * @param array $removedColumns
+ *
+ * @return array
+ *
+ * @throws Exception
*/
- private function detectColumnRenamings(TableDiff $tableDifferences): void
+ private function detectRenamedColumns(array &$addedColumns, array &$removedColumns): array
{
- $renameCandidates = [];
- foreach ($tableDifferences->addedColumns as $addedColumnName => $addedColumn) {
- foreach ($tableDifferences->removedColumns as $removedColumn) {
+ $candidatesByName = [];
+
+ foreach ($addedColumns as $addedColumnName => $addedColumn) {
+ foreach ($removedColumns as $removedColumn) {
if (! $this->columnsEqual($addedColumn, $removedColumn)) {
continue;
}
- $renameCandidates[$addedColumn->getName()][] = [$removedColumn, $addedColumn, $addedColumnName];
+ $candidatesByName[$addedColumn->getName()][] = [$removedColumn, $addedColumn, $addedColumnName];
}
}
- foreach ($renameCandidates as $candidateColumns) {
- if (count($candidateColumns) !== 1) {
+ $renamedColumns = [];
+
+ foreach ($candidatesByName as $candidates) {
+ if (count($candidates) !== 1) {
continue;
}
- [$removedColumn, $addedColumn] = $candidateColumns[0];
+ [$removedColumn, $addedColumn] = $candidates[0];
$removedColumnName = $removedColumn->getName();
$addedColumnName = strtolower($addedColumn->getName());
- if (isset($tableDifferences->renamedColumns[$removedColumnName])) {
+ if (isset($renamedColumns[$removedColumnName])) {
continue;
}
- $tableDifferences->renamedColumns[$removedColumnName] = $addedColumn;
+ $renamedColumns[$removedColumnName] = $addedColumn;
unset(
- $tableDifferences->addedColumns[$addedColumnName],
- $tableDifferences->removedColumns[strtolower($removedColumnName)]
+ $addedColumns[$addedColumnName],
+ $removedColumns[strtolower($removedColumnName)],
);
}
+
+ return $renamedColumns;
}
/**
* Try to find indexes that only changed their name, rename operations maybe cheaper than add/drop
* however ambiguities between different possibilities should not lead to renaming at all.
+ *
+ * @param array $addedIndexes
+ * @param array $removedIndexes
+ *
+ * @return array
*/
- private function detectIndexRenamings(TableDiff $tableDifferences): void
+ private function detectRenamedIndexes(array &$addedIndexes, array &$removedIndexes): array
{
- $renameCandidates = [];
+ $candidatesByName = [];
// Gather possible rename candidates by comparing each added and removed index based on semantics.
- foreach ($tableDifferences->addedIndexes as $addedIndexName => $addedIndex) {
- foreach ($tableDifferences->removedIndexes as $removedIndex) {
+ foreach ($addedIndexes as $addedIndexName => $addedIndex) {
+ foreach ($removedIndexes as $removedIndex) {
if ($this->diffIndex($addedIndex, $removedIndex)) {
continue;
}
- $renameCandidates[$addedIndex->getName()][] = [$removedIndex, $addedIndex, $addedIndexName];
+ $candidatesByName[$addedIndex->getName()][] = [$removedIndex, $addedIndex, $addedIndexName];
}
}
- foreach ($renameCandidates as $candidateIndexes) {
+ $renamedIndexes = [];
+
+ foreach ($candidatesByName as $candidates) {
// If the current rename candidate contains exactly one semantically equal index,
// we can safely rename it.
- // Otherwise it is unclear if a rename action is really intended,
+ // Otherwise, it is unclear if a rename action is really intended,
// therefore we let those ambiguous indexes be added/dropped.
- if (count($candidateIndexes) !== 1) {
+ if (count($candidates) !== 1) {
continue;
}
- [$removedIndex, $addedIndex] = $candidateIndexes[0];
+ [$removedIndex, $addedIndex] = $candidates[0];
$removedIndexName = strtolower($removedIndex->getName());
$addedIndexName = strtolower($addedIndex->getName());
- if (isset($tableDifferences->renamedIndexes[$removedIndexName])) {
+ if (isset($renamedIndexes[$removedIndexName])) {
continue;
}
- $tableDifferences->renamedIndexes[$removedIndexName] = $addedIndex;
+ $renamedIndexes[$removedIndexName] = $addedIndex;
unset(
- $tableDifferences->addedIndexes[$addedIndexName],
- $tableDifferences->removedIndexes[$removedIndexName]
+ $addedIndexes[$addedIndexName],
+ $removedIndexes[$removedIndexName],
);
}
+
+ return $renamedIndexes;
}
/**
+ * @internal The method should be only used from within the {@see Comparator} class hierarchy.
+ *
* @return bool
*/
public function diffForeignKey(ForeignKeyConstraint $key1, ForeignKeyConstraint $key2)
@@ -495,6 +583,8 @@ public function diffForeignKey(ForeignKeyConstraint $key1, ForeignKeyConstraint
/**
* Compares the definitions of the given columns
*
+ * @internal The method should be only used from within the {@see Comparator} class hierarchy.
+ *
* @throws Exception
*/
public function columnsEqual(Column $column1, Column $column2): bool
@@ -512,10 +602,19 @@ public function columnsEqual(Column $column1, Column $column2): bool
* If there are differences this method returns the changed properties as a
* string array, otherwise an empty array gets returned.
*
+ * @deprecated Use {@see columnsEqual()} instead.
+ *
* @return string[]
*/
public function diffColumn(Column $column1, Column $column2)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5650',
+ '%s is deprecated. Use diffTable() instead.',
+ __METHOD__,
+ );
+
$properties1 = $column1->toArray();
$properties2 = $column2->toArray();
@@ -606,10 +705,12 @@ public function diffColumn(Column $column1, Column $column2)
* Compares $index1 with $index2 and returns $index2 if there are any
* differences or false in case there are no differences.
*
+ * @internal The method should be only used from within the {@see Comparator} class hierarchy.
+ *
* @return bool
*/
public function diffIndex(Index $index1, Index $index2)
{
- return ! ($index1->isFullfilledBy($index2) && $index2->isFullfilledBy($index1));
+ return ! ($index1->isFulfilledBy($index2) && $index2->isFulfilledBy($index1));
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Constraint.php b/app/vendor/doctrine/dbal/src/Schema/Constraint.php
index 85338c783..f47ee1fd1 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Constraint.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Constraint.php
@@ -11,14 +11,10 @@
*/
interface Constraint
{
- /**
- * @return string
- */
+ /** @return string */
public function getName();
- /**
- * @return string
- */
+ /** @return string */
public function getQuotedName(AbstractPlatform $platform);
/**
diff --git a/app/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php
index e06baf36e..0308d69b5 100644
--- a/app/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php
@@ -4,14 +4,18 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\DB2Platform;
+use Doctrine\DBAL\Result;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Types\Types;
+use Doctrine\Deprecations\Deprecation;
use function array_change_key_case;
+use function implode;
use function preg_match;
use function str_replace;
use function strpos;
use function strtolower;
+use function strtoupper;
use function substr;
use const CASE_LOWER;
@@ -24,18 +28,60 @@
class DB2SchemaManager extends AbstractSchemaManager
{
/**
- * {@inheritdoc}
- *
- * Apparently creator is the schema not the user who created it:
- * {@link http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_sysibmsystablestable.htm}
+ * {@inheritDoc}
*/
public function listTableNames()
{
- $sql = $this->_platform->getListTablesSQL() . ' AND CREATOR = CURRENT_USER';
+ return $this->doListTableNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
- $tables = $this->_conn->fetchAllAssociative($sql);
+ return $this->doListTableDetails($name);
+ }
- return $this->filterAssetNames($this->_getPortableTablesList($tables));
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableForeignKeys($table, $database = null)
+ {
+ return $this->doListTableForeignKeys($table, $database);
}
/**
@@ -126,15 +172,11 @@ protected function _getPortableTableColumnDefinition($tableColumn)
/**
* {@inheritdoc}
*/
- protected function _getPortableTablesList($tables)
+ protected function _getPortableTableDefinition($table)
{
- $tableNames = [];
- foreach ($tables as $tableRow) {
- $tableRow = array_change_key_case($tableRow, CASE_LOWER);
- $tableNames[] = $tableRow['name'];
- }
+ $table = array_change_key_case($table, CASE_LOWER);
- return $tableNames;
+ return $table['name'];
}
/**
@@ -160,7 +202,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
$tableForeignKey['foreign_table'],
$tableForeignKey['foreign_columns'],
$tableForeignKey['name'],
- $tableForeignKey['options']
+ $tableForeignKey['options'],
);
}
@@ -229,21 +271,185 @@ protected function _getPortableViewDefinition($view)
return new View($view['name'], $sql);
}
+ protected function normalizeName(string $name): string
+ {
+ $identifier = new Identifier($name);
+
+ return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name);
+ }
+
+ protected function selectTableNames(string $databaseName): Result
+ {
+ $sql = <<<'SQL'
+SELECT NAME
+FROM SYSIBM.SYSTABLES
+WHERE TYPE = 'T'
+ AND CREATOR = ?
+SQL;
+
+ return $this->_conn->executeQuery($sql, [$databaseName]);
+ }
+
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' C.TABNAME AS NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ C.COLNAME,
+ C.TYPENAME,
+ C.CODEPAGE,
+ C.NULLS,
+ C.LENGTH,
+ C.SCALE,
+ C.REMARKS AS COMMENT,
+ CASE
+ WHEN C.GENERATED = 'D' THEN 1
+ ELSE 0
+ END AS AUTOINCREMENT,
+ C.DEFAULT
+FROM SYSCAT.COLUMNS C
+ JOIN SYSCAT.TABLES AS T
+ ON T.TABSCHEMA = C.TABSCHEMA
+ AND T.TABNAME = C.TABNAME
+SQL;
+
+ $conditions = ['C.TABSCHEMA = ?', "T.TYPE = 'T'"];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'C.TABNAME = ?';
+ $params[] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.TABNAME, C.COLNO';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' IDX.TABNAME AS NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ IDX.INDNAME AS KEY_NAME,
+ IDXCOL.COLNAME AS COLUMN_NAME,
+ CASE
+ WHEN IDX.UNIQUERULE = 'P' THEN 1
+ ELSE 0
+ END AS PRIMARY,
+ CASE
+ WHEN IDX.UNIQUERULE = 'D' THEN 1
+ ELSE 0
+ END AS NON_UNIQUE
+ FROM SYSCAT.INDEXES AS IDX
+ JOIN SYSCAT.TABLES AS T
+ ON IDX.TABSCHEMA = T.TABSCHEMA AND IDX.TABNAME = T.TABNAME
+ JOIN SYSCAT.INDEXCOLUSE AS IDXCOL
+ ON IDX.INDSCHEMA = IDXCOL.INDSCHEMA AND IDX.INDNAME = IDXCOL.INDNAME
+SQL;
+
+ $conditions = ['IDX.TABSCHEMA = ?', "T.TYPE = 'T'"];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'IDX.TABNAME = ?';
+ $params[] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IDX.INDNAME, IDXCOL.COLSEQ';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' R.TABNAME AS NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ FKCOL.COLNAME AS LOCAL_COLUMN,
+ R.REFTABNAME AS FOREIGN_TABLE,
+ PKCOL.COLNAME AS FOREIGN_COLUMN,
+ R.CONSTNAME AS INDEX_NAME,
+ CASE
+ WHEN R.UPDATERULE = 'R' THEN 'RESTRICT'
+ END AS ON_UPDATE,
+ CASE
+ WHEN R.DELETERULE = 'C' THEN 'CASCADE'
+ WHEN R.DELETERULE = 'N' THEN 'SET NULL'
+ WHEN R.DELETERULE = 'R' THEN 'RESTRICT'
+ END AS ON_DELETE
+ FROM SYSCAT.REFERENCES AS R
+ JOIN SYSCAT.TABLES AS T
+ ON T.TABSCHEMA = R.TABSCHEMA
+ AND T.TABNAME = R.TABNAME
+ JOIN SYSCAT.KEYCOLUSE AS FKCOL
+ ON FKCOL.CONSTNAME = R.CONSTNAME
+ AND FKCOL.TABSCHEMA = R.TABSCHEMA
+ AND FKCOL.TABNAME = R.TABNAME
+ JOIN SYSCAT.KEYCOLUSE AS PKCOL
+ ON PKCOL.CONSTNAME = R.REFKEYNAME
+ AND PKCOL.TABSCHEMA = R.REFTABSCHEMA
+ AND PKCOL.TABNAME = R.REFTABNAME
+ AND PKCOL.COLSEQ = FKCOL.COLSEQ
+SQL;
+
+ $conditions = ['R.TABSCHEMA = ?', "T.TYPE = 'T'"];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'R.TABNAME = ?';
+ $params[] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY R.CONSTNAME, FKCOL.COLSEQ';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- public function listTableDetails($name): Table
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
{
- $table = parent::listTableDetails($name);
+ $sql = 'SELECT NAME, REMARKS';
+
+ $conditions = [];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = 'NAME = ?';
+ $params[] = $tableName;
+ }
+
+ $sql .= ' FROM SYSIBM.SYSTABLES';
+
+ if ($conditions !== []) {
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+ }
- $sql = $this->_platform->getListTableCommentsSQL($name);
+ /** @var array> $metadata */
+ $metadata = $this->_conn->executeQuery($sql, $params)
+ ->fetchAllAssociativeIndexed();
- $tableOptions = $this->_conn->fetchAssociative($sql);
+ $tableOptions = [];
+ foreach ($metadata as $table => $data) {
+ $data = array_change_key_case($data, CASE_LOWER);
- if ($tableOptions !== false) {
- $table->addOption('comment', $tableOptions['REMARKS']);
+ $tableOptions[$table] = ['comment' => $data['remarks']];
}
- return $table;
+ return $tableOptions;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php b/app/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php
new file mode 100644
index 000000000..cc7acea03
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php
@@ -0,0 +1,21 @@
+getName(),
+ implode(', ', $foreignKey->getColumns()),
+ $foreignKey->getForeignTableName(),
+ implode(', ', $foreignKey->getForeignColumns()),
+ ),
+ );
+ }
+}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php b/app/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php
new file mode 100644
index 000000000..008bd5f0e
--- /dev/null
+++ b/app/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php
@@ -0,0 +1,21 @@
+_columns[$column] = new Identifier($column);
@@ -118,9 +116,7 @@ public function getQuotedColumns(AbstractPlatform $platform)
return $columns;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getUnquotedColumns()
{
return array_map([$this, 'trimQuotes'], $this->getColumns());
@@ -136,17 +132,13 @@ public function isSimpleIndex()
return ! $this->_isPrimary && ! $this->_isUnique;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function isUnique()
{
return $this->_isUnique;
}
- /**
- * @return bool
- */
+ /** @return bool */
public function isPrimary()
{
return $this->_isPrimary;
@@ -194,11 +186,21 @@ public function spansColumns(array $columnNames)
}
/**
- * Checks if the other index already fulfills all the indexing and constraint needs of the current one.
+ * Keeping misspelled function name for backwards compatibility
+ *
+ * @deprecated Use {@see isFulfilledBy()} instead.
*
* @return bool
*/
public function isFullfilledBy(Index $other)
+ {
+ return $this->isFulfilledBy($other);
+ }
+
+ /**
+ * Checks if the other index already fulfills all the indexing and constraint needs of the current one.
+ */
+ public function isFulfilledBy(Index $other): bool
{
// allow the other index to be equally large only. It being larger is an option
// but it creates a problem with scenarios of the kind PRIMARY KEY(foo,bar) UNIQUE(foo)
@@ -326,9 +328,7 @@ public function getOption($name)
return $this->options[strtolower($name)];
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getOptions()
{
return $this->options;
diff --git a/app/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php
index 7c175bb60..f2305098a 100644
--- a/app/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php
@@ -5,12 +5,17 @@
use Doctrine\DBAL\Platforms\AbstractMySQLPlatform;
use Doctrine\DBAL\Platforms\MariaDb1027Platform;
use Doctrine\DBAL\Platforms\MySQL;
+use Doctrine\DBAL\Platforms\MySQL\CollationMetadataProvider\CachingCollationMetadataProvider;
+use Doctrine\DBAL\Platforms\MySQL\CollationMetadataProvider\ConnectionCollationMetadataProvider;
+use Doctrine\DBAL\Result;
use Doctrine\DBAL\Types\Type;
+use Doctrine\Deprecations\Deprecation;
use function array_change_key_case;
use function array_shift;
use function assert;
use function explode;
+use function implode;
use function is_string;
use function preg_match;
use function strpos;
@@ -27,9 +32,7 @@
*/
class MySQLSchemaManager extends AbstractSchemaManager
{
- /**
- * @see https://mariadb.com/kb/en/library/string-literals/#escape-sequences
- */
+ /** @see https://mariadb.com/kb/en/library/string-literals/#escape-sequences */
private const MARIADB_ESCAPE_SEQUENCES = [
'\\0' => "\0",
"\\'" => "'",
@@ -48,30 +51,76 @@ class MySQLSchemaManager extends AbstractSchemaManager
];
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- protected function _getPortableViewDefinition($view)
+ public function listTableNames()
{
- return new View($view['TABLE_NAME'], $view['VIEW_DEFINITION']);
+ return $this->doListTableNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
+ return $this->doListTableDetails($name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableForeignKeys($table, $database = null)
+ {
+ return $this->doListTableForeignKeys($table, $database);
}
/**
* {@inheritdoc}
*/
- protected function _getPortableTableDefinition($table)
+ protected function _getPortableViewDefinition($view)
{
- return array_shift($table);
+ return new View($view['TABLE_NAME'], $view['VIEW_DEFINITION']);
}
/**
* {@inheritdoc}
*/
- protected function _getPortableUserDefinition($user)
+ protected function _getPortableTableDefinition($table)
{
- return [
- 'user' => $user['User'],
- 'password' => $user['Password'],
- ];
+ return array_shift($table);
}
/**
@@ -157,7 +206,7 @@ protected function _getPortableTableColumnDefinition($tableColumn)
preg_match(
'([A-Za-z]+\(([0-9]+),([0-9]+)\))',
$tableColumn['type'],
- $match
+ $match,
) === 1
) {
$precision = $match[1];
@@ -311,64 +360,214 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
$list[$value['constraint_name']]['foreign'][] = $value['referenced_column_name'];
}
- $result = [];
- foreach ($list as $constraint) {
- $result[] = new ForeignKeyConstraint(
- $constraint['local'],
- $constraint['foreignTable'],
- $constraint['foreign'],
- $constraint['name'],
- [
- 'onDelete' => $constraint['onDelete'],
- 'onUpdate' => $constraint['onUpdate'],
- ]
- );
- }
-
- return $result;
+ return parent::_getPortableTableForeignKeysList($list);
}
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- public function listTableDetails($name)
+ protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint
{
- $table = parent::listTableDetails($name);
+ return new ForeignKeyConstraint(
+ $tableForeignKey['local'],
+ $tableForeignKey['foreignTable'],
+ $tableForeignKey['foreign'],
+ $tableForeignKey['name'],
+ [
+ 'onDelete' => $tableForeignKey['onDelete'],
+ 'onUpdate' => $tableForeignKey['onUpdate'],
+ ],
+ );
+ }
- $sql = $this->_platform->getListTableMetadataSQL($name);
+ public function createComparator(): Comparator
+ {
+ return new MySQL\Comparator(
+ $this->_platform,
+ new CachingCollationMetadataProvider(
+ new ConnectionCollationMetadataProvider($this->_conn),
+ ),
+ );
+ }
- $tableOptions = $this->_conn->fetchAssociative($sql);
+ protected function selectTableNames(string $databaseName): Result
+ {
+ $sql = <<<'SQL'
+SELECT TABLE_NAME
+FROM information_schema.TABLES
+WHERE TABLE_SCHEMA = ?
+ AND TABLE_TYPE = 'BASE TABLE'
+ORDER BY TABLE_NAME
+SQL;
+
+ return $this->_conn->executeQuery($sql, [$databaseName]);
+ }
- if ($tableOptions === false) {
- return $table;
- }
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
- $table->addOption('engine', $tableOptions['ENGINE']);
+ if ($tableName === null) {
+ $sql .= ' c.TABLE_NAME,';
+ }
- if ($tableOptions['TABLE_COLLATION'] !== null) {
- $table->addOption('collation', $tableOptions['TABLE_COLLATION']);
+ $sql .= <<<'SQL'
+ c.COLUMN_NAME AS field,
+ c.COLUMN_TYPE AS type,
+ c.IS_NULLABLE AS `null`,
+ c.COLUMN_KEY AS `key`,
+ c.COLUMN_DEFAULT AS `default`,
+ c.EXTRA,
+ c.COLUMN_COMMENT AS comment,
+ c.CHARACTER_SET_NAME AS characterset,
+ c.COLLATION_NAME AS collation
+FROM information_schema.COLUMNS c
+ INNER JOIN information_schema.TABLES t
+ ON t.TABLE_NAME = c.TABLE_NAME
+SQL;
+
+ // The schema name is passed multiple times as a literal in the WHERE clause instead of using a JOIN condition
+ // in order to avoid performance issues on MySQL older than 8.0 and the corresponding MariaDB versions
+ // caused by https://bugs.mysql.com/bug.php?id=81347
+ $conditions = ['c.TABLE_SCHEMA = ?', 't.TABLE_SCHEMA = ?', "t.TABLE_TYPE = 'BASE TABLE'"];
+ $params = [$databaseName, $databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 't.TABLE_NAME = ?';
+ $params[] = $tableName;
}
- $table->addOption('charset', $tableOptions['CHARACTER_SET_NAME']);
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY ORDINAL_POSITION';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' TABLE_NAME,';
+ }
- if ($tableOptions['AUTO_INCREMENT'] !== null) {
- $table->addOption('autoincrement', $tableOptions['AUTO_INCREMENT']);
+ $sql .= <<<'SQL'
+ NON_UNIQUE AS Non_Unique,
+ INDEX_NAME AS Key_name,
+ COLUMN_NAME AS Column_Name,
+ SUB_PART AS Sub_Part,
+ INDEX_TYPE AS Index_Type
+FROM information_schema.STATISTICS
+SQL;
+
+ $conditions = ['TABLE_SCHEMA = ?'];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'TABLE_NAME = ?';
+ $params[] = $tableName;
}
- $table->addOption('comment', $tableOptions['TABLE_COMMENT']);
- $table->addOption('create_options', $this->parseCreateOptions($tableOptions['CREATE_OPTIONS']));
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY SEQ_IN_INDEX';
- return $table;
+ return $this->_conn->executeQuery($sql, $params);
}
- public function createComparator(): Comparator
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
{
- return new MySQL\Comparator($this->getDatabasePlatform());
+ $sql = 'SELECT DISTINCT';
+
+ if ($tableName === null) {
+ $sql .= ' k.TABLE_NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ k.CONSTRAINT_NAME,
+ k.COLUMN_NAME,
+ k.REFERENCED_TABLE_NAME,
+ k.REFERENCED_COLUMN_NAME,
+ k.ORDINAL_POSITION /*!50116,
+ c.UPDATE_RULE,
+ c.DELETE_RULE */
+FROM information_schema.key_column_usage k /*!50116
+INNER JOIN information_schema.referential_constraints c
+ON c.CONSTRAINT_NAME = k.CONSTRAINT_NAME
+AND c.TABLE_NAME = k.TABLE_NAME */
+SQL;
+
+ $conditions = ['k.TABLE_SCHEMA = ?'];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'k.TABLE_NAME = ?';
+ $params[] = $tableName;
+ }
+
+ $conditions[] = 'k.REFERENCED_COLUMN_NAME IS NOT NULL';
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions)
+ // The schema name is passed multiple times in the WHERE clause instead of using a JOIN condition
+ // in order to avoid performance issues on MySQL older than 8.0 and the corresponding MariaDB versions
+ // caused by https://bugs.mysql.com/bug.php?id=81347.
+ // Use a string literal for the database name since the internal PDO SQL parser
+ // cannot recognize parameter placeholders inside conditional comments
+ . ' /*!50116 AND c.CONSTRAINT_SCHEMA = ' . $this->_conn->quote($databaseName) . ' */'
+ . ' ORDER BY k.ORDINAL_POSITION';
+
+ return $this->_conn->executeQuery($sql, $params);
}
/**
- * @return string[]|true[]
+ * {@inheritDoc}
*/
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
+ {
+ $sql = <<<'SQL'
+ SELECT t.TABLE_NAME,
+ t.ENGINE,
+ t.AUTO_INCREMENT,
+ t.TABLE_COMMENT,
+ t.CREATE_OPTIONS,
+ t.TABLE_COLLATION,
+ ccsa.CHARACTER_SET_NAME
+ FROM information_schema.TABLES t
+ INNER JOIN information_schema.COLLATION_CHARACTER_SET_APPLICABILITY ccsa
+ ON ccsa.COLLATION_NAME = t.TABLE_COLLATION
+SQL;
+
+ $conditions = ['t.TABLE_SCHEMA = ?'];
+ $params = [$databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 't.TABLE_NAME = ?';
+ $params[] = $tableName;
+ }
+
+ $conditions[] = "t.TABLE_TYPE = 'BASE TABLE'";
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+
+ /** @var array> $metadata */
+ $metadata = $this->_conn->executeQuery($sql, $params)
+ ->fetchAllAssociativeIndexed();
+
+ $tableOptions = [];
+ foreach ($metadata as $table => $data) {
+ $data = array_change_key_case($data, CASE_LOWER);
+
+ $tableOptions[$table] = [
+ 'engine' => $data['engine'],
+ 'collation' => $data['table_collation'],
+ 'charset' => $data['character_set_name'],
+ 'autoincrement' => $data['auto_increment'],
+ 'comment' => $data['table_comment'],
+ 'create_options' => $this->parseCreateOptions($data['create_options']),
+ ];
+ }
+
+ return $tableOptions;
+ }
+
+ /** @return string[]|true[] */
private function parseCreateOptions(?string $string): array
{
$options = [];
diff --git a/app/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php
index 762492e72..8b0d8e3cc 100644
--- a/app/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php
@@ -4,15 +4,19 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\OraclePlatform;
+use Doctrine\DBAL\Result;
use Doctrine\DBAL\Types\Type;
+use Doctrine\Deprecations\Deprecation;
use function array_change_key_case;
use function array_values;
+use function implode;
use function is_string;
use function preg_match;
use function str_replace;
use function strpos;
use function strtolower;
+use function strtoupper;
use function trim;
use const CASE_LOWER;
@@ -25,25 +29,70 @@
class OracleSchemaManager extends AbstractSchemaManager
{
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- protected function _getPortableViewDefinition($view)
+ public function listTableNames()
{
- $view = array_change_key_case($view, CASE_LOWER);
+ return $this->doListTableNames();
+ }
- return new View($this->getQuotedIdentifierName($view['view_name']), $view['text']);
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
+ return $this->doListTableDetails($name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableForeignKeys($table, $database = null)
+ {
+ return $this->doListTableForeignKeys($table, $database);
}
/**
* {@inheritdoc}
*/
- protected function _getPortableUserDefinition($user)
+ protected function _getPortableViewDefinition($view)
{
- $user = array_change_key_case($user, CASE_LOWER);
+ $view = array_change_key_case($view, CASE_LOWER);
- return [
- 'user' => $user['username'],
- ];
+ return new View($this->getQuotedIdentifierName($view['view_name']), $view['text']);
}
/**
@@ -215,18 +264,21 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
$list[$value['constraint_name']]['foreign'][$value['position']] = $foreignColumn;
}
- $result = [];
- foreach ($list as $constraint) {
- $result[] = new ForeignKeyConstraint(
- array_values($constraint['local']),
- $this->getQuotedIdentifierName($constraint['foreignTable']),
- array_values($constraint['foreign']),
- $this->getQuotedIdentifierName($constraint['name']),
- ['onDelete' => $constraint['onDelete']]
- );
- }
+ return parent::_getPortableTableForeignKeysList($list);
+ }
- return $result;
+ /**
+ * {@inheritDoc}
+ */
+ protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint
+ {
+ return new ForeignKeyConstraint(
+ array_values($tableForeignKey['local']),
+ $this->getQuotedIdentifierName($tableForeignKey['foreignTable']),
+ array_values($tableForeignKey['foreign']),
+ $this->getQuotedIdentifierName($tableForeignKey['name']),
+ ['onDelete' => $tableForeignKey['onDelete']],
+ );
}
/**
@@ -239,7 +291,7 @@ protected function _getPortableSequenceDefinition($sequence)
return new Sequence(
$this->getQuotedIdentifierName($sequence['sequence_name']),
(int) $sequence['increment_by'],
- (int) $sequence['min_value']
+ (int) $sequence['min_value'],
);
}
@@ -318,22 +370,170 @@ private function getQuotedIdentifierName($identifier): string
return $identifier;
}
+ protected function selectTableNames(string $databaseName): Result
+ {
+ $sql = <<<'SQL'
+SELECT TABLE_NAME
+FROM ALL_TABLES
+WHERE OWNER = :OWNER
+ORDER BY TABLE_NAME
+SQL;
+
+ return $this->_conn->executeQuery($sql, ['OWNER' => $databaseName]);
+ }
+
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' C.TABLE_NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ C.COLUMN_NAME,
+ C.DATA_TYPE,
+ C.DATA_DEFAULT,
+ C.DATA_PRECISION,
+ C.DATA_SCALE,
+ C.CHAR_LENGTH,
+ C.DATA_LENGTH,
+ C.NULLABLE,
+ D.COMMENTS
+ FROM ALL_TAB_COLUMNS C
+ INNER JOIN ALL_TABLES T
+ ON T.OWNER = C.OWNER
+ AND T.TABLE_NAME = C.TABLE_NAME
+ LEFT JOIN ALL_COL_COMMENTS D
+ ON D.OWNER = C.OWNER
+ AND D.TABLE_NAME = C.TABLE_NAME
+ AND D.COLUMN_NAME = C.COLUMN_NAME
+SQL;
+
+ $conditions = ['C.OWNER = :OWNER'];
+ $params = ['OWNER' => $databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'C.TABLE_NAME = :TABLE_NAME';
+ $params['TABLE_NAME'] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.COLUMN_ID';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' IND_COL.TABLE_NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ IND_COL.INDEX_NAME AS NAME,
+ IND.INDEX_TYPE AS TYPE,
+ DECODE(IND.UNIQUENESS, 'NONUNIQUE', 0, 'UNIQUE', 1) AS IS_UNIQUE,
+ IND_COL.COLUMN_NAME,
+ IND_COL.COLUMN_POSITION AS COLUMN_POS,
+ CON.CONSTRAINT_TYPE AS IS_PRIMARY
+ FROM ALL_IND_COLUMNS IND_COL
+ LEFT JOIN ALL_INDEXES IND
+ ON IND.OWNER = IND_COL.INDEX_OWNER
+ AND IND.INDEX_NAME = IND_COL.INDEX_NAME
+ LEFT JOIN ALL_CONSTRAINTS CON
+ ON CON.OWNER = IND_COL.INDEX_OWNER
+ AND CON.INDEX_NAME = IND_COL.INDEX_NAME
+SQL;
+
+ $conditions = ['IND_COL.INDEX_OWNER = :OWNER'];
+ $params = ['OWNER' => $databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'IND_COL.TABLE_NAME = :TABLE_NAME';
+ $params['TABLE_NAME'] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IND_COL.TABLE_NAME, IND_COL.INDEX_NAME'
+ . ', IND_COL.COLUMN_POSITION';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' COLS.TABLE_NAME,';
+ }
+
+ $sql .= <<<'SQL'
+ ALC.CONSTRAINT_NAME,
+ ALC.DELETE_RULE,
+ COLS.COLUMN_NAME LOCAL_COLUMN,
+ COLS.POSITION,
+ R_COLS.TABLE_NAME REFERENCES_TABLE,
+ R_COLS.COLUMN_NAME FOREIGN_COLUMN
+ FROM ALL_CONS_COLUMNS COLS
+ LEFT JOIN ALL_CONSTRAINTS ALC ON ALC.OWNER = COLS.OWNER AND ALC.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME
+ LEFT JOIN ALL_CONS_COLUMNS R_COLS ON R_COLS.OWNER = ALC.R_OWNER AND
+ R_COLS.CONSTRAINT_NAME = ALC.R_CONSTRAINT_NAME AND
+ R_COLS.POSITION = COLS.POSITION
+SQL;
+
+ $conditions = ["ALC.CONSTRAINT_TYPE = 'R'", 'COLS.OWNER = :OWNER'];
+ $params = ['OWNER' => $databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'COLS.TABLE_NAME = :TABLE_NAME';
+ $params['TABLE_NAME'] = $tableName;
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY COLS.TABLE_NAME, COLS.CONSTRAINT_NAME'
+ . ', COLS.POSITION';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- public function listTableDetails($name): Table
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
{
- $table = parent::listTableDetails($name);
+ $sql = 'SELECT TABLE_NAME, COMMENTS';
+
+ $conditions = ['OWNER = :OWNER'];
+ $params = ['OWNER' => $databaseName];
+
+ if ($tableName !== null) {
+ $conditions[] = 'TABLE_NAME = :TABLE_NAME';
+ $params['TABLE_NAME'] = $tableName;
+ }
- $sql = $this->_platform->getListTableCommentsSQL($name);
+ $sql .= ' FROM ALL_TAB_COMMENTS WHERE ' . implode(' AND ', $conditions);
- $tableOptions = $this->_conn->fetchAssociative($sql);
+ /** @var array> $metadata */
+ $metadata = $this->_conn->executeQuery($sql, $params)
+ ->fetchAllAssociativeIndexed();
- if ($tableOptions !== false) {
- $tableOptions = array_change_key_case($tableOptions, CASE_LOWER);
- $table->addOption('comment', $tableOptions['comments']);
+ $tableOptions = [];
+ foreach ($metadata as $table => $data) {
+ $data = array_change_key_case($data, CASE_LOWER);
+
+ $tableOptions[$table] = [
+ 'comment' => $data['comments'],
+ ];
}
- return $table;
+ return $tableOptions;
+ }
+
+ protected function normalizeName(string $name): string
+ {
+ $identifier = new Identifier($name);
+
+ return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php
index 03239bde5..7583c4d02 100644
--- a/app/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php
@@ -4,17 +4,20 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
+use Doctrine\DBAL\Result;
+use Doctrine\DBAL\Types\JsonType;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Types\Types;
use Doctrine\Deprecations\Deprecation;
use function array_change_key_case;
use function array_filter;
-use function array_keys;
use function array_map;
+use function array_merge;
use function array_shift;
use function assert;
use function explode;
+use function get_class;
use function implode;
use function in_array;
use function preg_match;
@@ -35,7 +38,64 @@
class PostgreSQLSchemaManager extends AbstractSchemaManager
{
/** @var string[]|null */
- private $existingSchemaPaths;
+ private ?array $existingSchemaPaths = null;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableNames()
+ {
+ return $this->doListTableNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
+ return $this->doListTableDetails($name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableForeignKeys($table, $database = null)
+ {
+ return $this->doListTableForeignKeys($table, $database);
+ }
/**
* Gets all the existing schema names.
@@ -52,7 +112,7 @@ public function getSchemaNames()
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'PostgreSQLSchemaManager::getSchemaNames() is deprecated,'
- . ' use PostgreSQLSchemaManager::listSchemaNames() instead.'
+ . ' use PostgreSQLSchemaManager::listSchemaNames() instead.',
);
return $this->listNamespaceNames();
@@ -69,7 +129,7 @@ public function listSchemaNames(): array
FROM information_schema.schemata
WHERE schema_name NOT LIKE 'pg\_%'
AND schema_name != 'information_schema'
-SQL
+SQL,
);
}
@@ -83,7 +143,7 @@ public function getSchemaSearchPaths()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4821',
- 'PostgreSQLSchemaManager::getSchemaSearchPaths() is deprecated.'
+ 'PostgreSQLSchemaManager::getSchemaSearchPaths() is deprecated.',
);
$params = $this->_conn->getParams();
@@ -169,7 +229,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
preg_match(
'(ON UPDATE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))',
$tableForeignKey['condef'],
- $match
+ $match,
) === 1
) {
$onUpdate = $match[1];
@@ -179,7 +239,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
preg_match(
'(ON DELETE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))',
$tableForeignKey['condef'],
- $match
+ $match,
) === 1
) {
$onDelete = $match[1];
@@ -199,7 +259,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
$foreignTable,
$foreignColumns,
$tableForeignKey['conname'],
- ['onUpdate' => $onUpdate, 'onDelete' => $onDelete]
+ ['onUpdate' => $onUpdate, 'onDelete' => $onDelete],
);
}
@@ -211,17 +271,6 @@ protected function _getPortableViewDefinition($view)
return new View($view['schemaname'] . '.' . $view['viewname'], $view['definition']);
}
- /**
- * {@inheritdoc}
- */
- protected function _getPortableUserDefinition($user)
- {
- return [
- 'user' => $user['usename'],
- 'password' => $user['passwd'],
- ];
- }
-
/**
* {@inheritdoc}
*/
@@ -249,7 +298,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null
$columnNameSql = sprintf(
'SELECT attnum, attname FROM pg_attribute WHERE attrelid=%d AND attnum IN (%s) ORDER BY attnum ASC',
$row['indrelid'],
- implode(' ,', $colNumbers)
+ implode(' ,', $colNumbers),
);
$indexColumns = $this->_conn->fetchAllAssociative($columnNameSql);
@@ -283,32 +332,6 @@ protected function _getPortableDatabaseDefinition($database)
return $database['datname'];
}
- /**
- * {@inheritdoc}
- */
- protected function _getPortableSequencesList($sequences)
- {
- $sequenceDefinitions = [];
-
- foreach ($sequences as $sequence) {
- if ($sequence['schemaname'] !== 'public') {
- $sequenceName = $sequence['schemaname'] . '.' . $sequence['relname'];
- } else {
- $sequenceName = $sequence['relname'];
- }
-
- $sequenceDefinitions[$sequenceName] = $sequence;
- }
-
- $list = [];
-
- foreach ($this->filterAssetNames(array_keys($sequenceDefinitions)) as $sequenceName) {
- $list[] = $this->_getPortableSequenceDefinition($sequenceDefinitions[$sequenceName]);
- }
-
- return $list;
- }
-
/**
* {@inheritdoc}
*
@@ -320,7 +343,7 @@ protected function getPortableNamespaceDefinition(array $namespace)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'PostgreSQLSchemaManager::getPortableNamespaceDefinition() is deprecated,'
- . ' use PostgreSQLSchemaManager::listSchemaNames() instead.'
+ . ' use PostgreSQLSchemaManager::listSchemaNames() instead.',
);
return $namespace['nspname'];
@@ -337,15 +360,6 @@ protected function _getPortableSequenceDefinition($sequence)
$sequenceName = $sequence['relname'];
}
- if (! isset($sequence['increment_by'], $sequence['min_value'])) {
- /** @var string[] $data */
- $data = $this->_conn->fetchAssociative(
- 'SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName)
- );
-
- $sequence += $data;
- }
-
return new Sequence($sequenceName, (int) $sequence['increment_by'], (int) $sequence['min_value']);
}
@@ -479,7 +493,7 @@ protected function _getPortableTableColumnDefinition($tableColumn)
preg_match(
'([A-Za-z]+\(([0-9]+),([0-9]+)\))',
$tableColumn['complete_type'],
- $match
+ $match,
) === 1
) {
$precision = $match[1];
@@ -503,7 +517,7 @@ protected function _getPortableTableColumnDefinition($tableColumn)
$tableColumn['default'] !== null && preg_match(
"('([^']+)'::)",
$tableColumn['default'],
- $match
+ $match,
) === 1
) {
$tableColumn['default'] = $match[1];
@@ -530,6 +544,20 @@ protected function _getPortableTableColumnDefinition($tableColumn)
}
if ($column->getType()->getName() === Types::JSON) {
+ if (! $column->getType() instanceof JsonType) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5049',
+ <<<'DEPRECATION'
+ %s not extending %s while being named %s is deprecated,
+ and will lead to jsonb never to being used in 4.0.,
+ DEPRECATION,
+ get_class($column->getType()),
+ JsonType::class,
+ Types::JSON,
+ );
+ }
+
$column->setPlatformOption('jsonb', $jsonb);
}
@@ -564,21 +592,182 @@ private function parseDefaultExpression(?string $default): ?string
return str_replace("''", "'", $default);
}
+ protected function selectTableNames(string $databaseName): Result
+ {
+ $sql = <<<'SQL'
+SELECT quote_ident(table_name) AS table_name,
+ table_schema AS schema_name
+FROM information_schema.tables
+WHERE table_catalog = ?
+ AND table_schema NOT LIKE 'pg\_%'
+ AND table_schema != 'information_schema'
+ AND table_name != 'geometry_columns'
+ AND table_name != 'spatial_ref_sys'
+ AND table_type = 'BASE TABLE'
+SQL;
+
+ return $this->_conn->executeQuery($sql, [$databaseName]);
+ }
+
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' c.relname AS table_name, n.nspname AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ a.attnum,
+ quote_ident(a.attname) AS field,
+ t.typname AS type,
+ format_type(a.atttypid, a.atttypmod) AS complete_type,
+ (SELECT tc.collcollate FROM pg_catalog.pg_collation tc WHERE tc.oid = a.attcollation) AS collation,
+ (SELECT t1.typname FROM pg_catalog.pg_type t1 WHERE t1.oid = t.typbasetype) AS domain_type,
+ (SELECT format_type(t2.typbasetype, t2.typtypmod) FROM
+ pg_catalog.pg_type t2 WHERE t2.typtype = 'd' AND t2.oid = a.atttypid) AS domain_complete_type,
+ a.attnotnull AS isnotnull,
+ (SELECT 't'
+ FROM pg_index
+ WHERE c.oid = pg_index.indrelid
+ AND pg_index.indkey[0] = a.attnum
+ AND pg_index.indisprimary = 't'
+ ) AS pri,
+ (SELECT pg_get_expr(adbin, adrelid)
+ FROM pg_attrdef
+ WHERE c.oid = pg_attrdef.adrelid
+ AND pg_attrdef.adnum=a.attnum
+ ) AS default,
+ (SELECT pg_description.description
+ FROM pg_description WHERE pg_description.objoid = c.oid AND a.attnum = pg_description.objsubid
+ ) AS comment
+ FROM pg_attribute a
+ INNER JOIN pg_class c
+ ON c.oid = a.attrelid
+ INNER JOIN pg_type t
+ ON t.oid = a.atttypid
+ INNER JOIN pg_namespace n
+ ON n.oid = c.relnamespace
+ LEFT JOIN pg_depend d
+ ON d.objid = c.oid
+ AND d.deptype = 'e'
+SQL;
+
+ $conditions = array_merge([
+ 'a.attnum > 0',
+ "c.relkind = 'r'",
+ 'd.refobjid IS NULL',
+ ], $this->buildQueryConditions($tableName));
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY a.attnum';
+
+ return $this->_conn->executeQuery($sql);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' tc.relname AS table_name, tn.nspname AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ quote_ident(ic.relname) AS relname,
+ i.indisunique,
+ i.indisprimary,
+ i.indkey,
+ i.indrelid,
+ pg_get_expr(indpred, indrelid) AS "where"
+ FROM pg_index i
+ JOIN pg_class AS tc ON tc.oid = i.indrelid
+ JOIN pg_namespace tn ON tn.oid = tc.relnamespace
+ JOIN pg_class AS ic ON ic.oid = i.indexrelid
+ WHERE ic.oid IN (
+ SELECT indexrelid
+ FROM pg_index i, pg_class c, pg_namespace n
+SQL;
+
+ $conditions = array_merge([
+ 'c.oid = i.indrelid',
+ 'c.relnamespace = n.oid',
+ ], $this->buildQueryConditions($tableName));
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ')';
+
+ return $this->_conn->executeQuery($sql);
+ }
+
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' tc.relname AS table_name, tn.nspname AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ quote_ident(r.conname) as conname,
+ pg_get_constraintdef(r.oid, true) as condef
+ FROM pg_constraint r
+ JOIN pg_class AS tc ON tc.oid = r.conrelid
+ JOIN pg_namespace tn ON tn.oid = tc.relnamespace
+ WHERE r.conrelid IN
+ (
+ SELECT c.oid
+ FROM pg_class c, pg_namespace n
+SQL;
+
+ $conditions = array_merge(['n.oid = c.relnamespace'], $this->buildQueryConditions($tableName));
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ") AND r.contype = 'f'";
+
+ return $this->_conn->executeQuery($sql);
+ }
+
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*/
- public function listTableDetails($name): Table
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
{
- $table = parent::listTableDetails($name);
+ $sql = <<<'SQL'
+SELECT c.relname,
+ obj_description(c.oid, 'pg_class') AS comment
+FROM pg_class c
+ INNER JOIN pg_namespace n
+ ON n.oid = c.relnamespace
+SQL;
- $sql = $this->_platform->getListTableMetadataSQL($name);
+ $conditions = array_merge(["c.relkind = 'r'"], $this->buildQueryConditions($tableName));
- $tableOptions = $this->_conn->fetchAssociative($sql);
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+
+ return $this->_conn->fetchAllAssociativeIndexed($sql);
+ }
- if ($tableOptions !== false) {
- $table->addOption('comment', $tableOptions['table_comment']);
+ /**
+ * @param string|null $tableName
+ *
+ * @return list
+ */
+ private function buildQueryConditions($tableName): array
+ {
+ $conditions = [];
+
+ if ($tableName !== null) {
+ if (strpos($tableName, '.') !== false) {
+ [$schemaName, $tableName] = explode('.', $tableName);
+ $conditions[] = 'n.nspname = ' . $this->_platform->quoteStringLiteral($schemaName);
+ } else {
+ $conditions[] = 'n.nspname = ANY(current_schemas(false))';
+ }
+
+ $identifier = new Identifier($tableName);
+ $conditions[] = 'c.relname = ' . $this->_platform->quoteStringLiteral($identifier->getName());
}
- return $table;
+ $conditions[] = "n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')";
+
+ return $conditions;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php
index 8a8713f09..657e3651a 100644
--- a/app/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php
@@ -5,11 +5,15 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\SQLServer;
use Doctrine\DBAL\Platforms\SQLServerPlatform;
+use Doctrine\DBAL\Result;
use Doctrine\DBAL\Types\Type;
use Doctrine\Deprecations\Deprecation;
+use function array_change_key_case;
use function assert;
use function count;
+use function explode;
+use function implode;
use function is_string;
use function preg_match;
use function sprintf;
@@ -17,6 +21,8 @@
use function strpos;
use function strtok;
+use const CASE_LOWER;
+
/**
* SQL Server Schema Manager.
*
@@ -24,8 +30,64 @@
*/
class SQLServerSchemaManager extends AbstractSchemaManager
{
- /** @var string|null */
- private $databaseCollation;
+ private ?string $databaseCollation = null;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableNames()
+ {
+ return $this->doListTableNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
+ return $this->doListTableDetails($name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableForeignKeys($table, $database = null)
+ {
+ return $this->doListTableForeignKeys($table, $database);
+ }
/**
* {@inheritDoc}
@@ -37,7 +99,7 @@ public function listSchemaNames(): array
SELECT name
FROM sys.schemas
WHERE name NOT IN('guest', 'INFORMATION_SCHEMA', 'sys')
-SQL
+SQL,
);
}
@@ -200,7 +262,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
$tableForeignKey['foreign_table'],
$tableForeignKey['foreign_columns'],
$tableForeignKey['name'],
- $tableForeignKey['options']
+ $tableForeignKey['options'],
);
}
@@ -209,11 +271,11 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
*/
protected function _getPortableTableDefinition($table)
{
- if (isset($table['schema_name']) && $table['schema_name'] !== 'dbo') {
- return $table['schema_name'] . '.' . $table['name'];
+ if ($table['schema_name'] !== 'dbo') {
+ return $table['schema_name'] . '.' . $table['table_name'];
}
- return $table['name'];
+ return $table['table_name'];
}
/**
@@ -235,7 +297,7 @@ protected function getPortableNamespaceDefinition(array $namespace)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4503',
'SQLServerSchemaManager::getPortableNamespaceDefinition() is deprecated,'
- . ' use SQLServerSchemaManager::listSchemaNames() instead.'
+ . ' use SQLServerSchemaManager::listSchemaNames() instead.',
);
return $namespace['name'];
@@ -253,37 +315,21 @@ protected function _getPortableViewDefinition($view)
/**
* {@inheritdoc}
*/
- public function listTableIndexes($table)
+ public function alterTable(TableDiff $tableDiff)
{
- $sql = $this->_platform->getListTableIndexesSQL($table, $this->_conn->getDatabase());
-
- try {
- $tableIndexes = $this->_conn->fetchAllAssociative($sql);
- } catch (Exception $e) {
- if (strpos($e->getMessage(), 'SQLSTATE [01000, 15472]') === 0) {
- return [];
- }
+ $droppedColumns = $tableDiff->getDroppedColumns();
- throw $e;
- }
+ if (count($droppedColumns) > 0) {
+ $tableName = ($tableDiff->getOldTable() ?? $tableDiff->getName($this->_platform))->getName();
- return $this->_getPortableTableIndexesList($tableIndexes, $table);
- }
-
- /**
- * {@inheritdoc}
- */
- public function alterTable(TableDiff $tableDiff)
- {
- if (count($tableDiff->removedColumns) > 0) {
- foreach ($tableDiff->removedColumns as $col) {
- foreach ($this->getColumnConstraints($tableDiff->name, $col->getName()) as $constraint) {
+ foreach ($droppedColumns as $col) {
+ foreach ($this->getColumnConstraints($tableName, $col->getName()) as $constraint) {
$this->_conn->executeStatement(
sprintf(
'ALTER TABLE %s DROP CONSTRAINT %s',
- $tableDiff->name,
- $constraint
- )
+ $tableName,
+ $constraint,
+ ),
);
}
}
@@ -317,41 +363,17 @@ private function getColumnConstraints(string $table, string $column): iterable
AND c.name = ?
SQL
,
- [$table, $column]
+ [$table, $column],
);
}
- /**
- * @param string $name
- *
- * @throws Exception
- */
- public function listTableDetails($name): Table
- {
- $table = parent::listTableDetails($name);
-
- $sql = $this->_platform->getListTableMetadataSQL($name);
-
- $tableOptions = $this->_conn->fetchAssociative($sql);
-
- if ($tableOptions !== false) {
- $table->addOption('comment', $tableOptions['table_comment']);
- }
-
- return $table;
- }
-
- /**
- * @throws Exception
- */
+ /** @throws Exception */
public function createComparator(): Comparator
{
- return new SQLServer\Comparator($this->getDatabasePlatform(), $this->getDatabaseCollation());
+ return new SQLServer\Comparator($this->_platform, $this->getDatabaseCollation());
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
private function getDatabaseCollation(): string
{
if ($this->databaseCollation === null) {
@@ -368,4 +390,214 @@ private function getDatabaseCollation(): string
return $this->databaseCollation;
}
+
+ protected function selectTableNames(string $databaseName): Result
+ {
+ // The "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams
+ $sql = <<<'SQL'
+SELECT name AS table_name,
+ SCHEMA_NAME(schema_id) AS schema_name
+FROM sys.objects
+WHERE type = 'U'
+ AND name != 'sysdiagrams'
+ORDER BY name
+SQL;
+
+ return $this->_conn->executeQuery($sql, [$databaseName]);
+ }
+
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' obj.name AS table_name, scm.name AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ col.name,
+ type.name AS type,
+ col.max_length AS length,
+ ~col.is_nullable AS notnull,
+ def.definition AS [default],
+ col.scale,
+ col.precision,
+ col.is_identity AS autoincrement,
+ col.collation_name AS collation,
+ -- CAST avoids driver error for sql_variant type
+ CAST(prop.value AS NVARCHAR(MAX)) AS comment
+ FROM sys.columns AS col
+ JOIN sys.types AS type
+ ON col.user_type_id = type.user_type_id
+ JOIN sys.objects AS obj
+ ON col.object_id = obj.object_id
+ JOIN sys.schemas AS scm
+ ON obj.schema_id = scm.schema_id
+ LEFT JOIN sys.default_constraints def
+ ON col.default_object_id = def.object_id
+ AND col.object_id = def.parent_object_id
+ LEFT JOIN sys.extended_properties AS prop
+ ON obj.object_id = prop.major_id
+ AND col.column_id = prop.minor_id
+ AND prop.name = 'MS_Description'
+SQL;
+
+ // The "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams
+ $conditions = ["obj.type = 'U'", "obj.name != 'sysdiagrams'"];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = $this->getTableWhereClause($tableName, 'scm.name', 'obj.name');
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' tbl.name AS table_name, scm.name AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ idx.name AS key_name,
+ col.name AS column_name,
+ ~idx.is_unique AS non_unique,
+ idx.is_primary_key AS [primary],
+ CASE idx.type
+ WHEN '1' THEN 'clustered'
+ WHEN '2' THEN 'nonclustered'
+ ELSE NULL
+ END AS flags
+ FROM sys.tables AS tbl
+ JOIN sys.schemas AS scm
+ ON tbl.schema_id = scm.schema_id
+ JOIN sys.indexes AS idx
+ ON tbl.object_id = idx.object_id
+ JOIN sys.index_columns AS idxcol
+ ON idx.object_id = idxcol.object_id
+ AND idx.index_id = idxcol.index_id
+ JOIN sys.columns AS col
+ ON idxcol.object_id = col.object_id
+ AND idxcol.column_id = col.column_id
+SQL;
+
+ $conditions = [];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = $this->getTableWhereClause($tableName, 'scm.name', 'tbl.name');
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+ }
+
+ $sql .= ' ORDER BY idx.index_id, idxcol.key_ordinal';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = 'SELECT';
+
+ if ($tableName === null) {
+ $sql .= ' OBJECT_NAME (f.parent_object_id) AS table_name, SCHEMA_NAME(f.schema_id) AS schema_name,';
+ }
+
+ $sql .= <<<'SQL'
+ f.name AS ForeignKey,
+ SCHEMA_NAME (f.SCHEMA_ID) AS SchemaName,
+ OBJECT_NAME (f.parent_object_id) AS TableName,
+ COL_NAME (fc.parent_object_id,fc.parent_column_id) AS ColumnName,
+ SCHEMA_NAME (o.SCHEMA_ID) ReferenceSchemaName,
+ OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
+ COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName,
+ f.delete_referential_action_desc,
+ f.update_referential_action_desc
+ FROM sys.foreign_keys AS f
+ INNER JOIN sys.foreign_key_columns AS fc
+ INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
+ ON f.OBJECT_ID = fc.constraint_object_id
+SQL;
+
+ $conditions = [];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = $this->getTableWhereClause(
+ $tableName,
+ 'SCHEMA_NAME(f.schema_id)',
+ 'OBJECT_NAME(f.parent_object_id)',
+ );
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+ }
+
+ $sql .= ' ORDER BY fc.constraint_column_id';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
+ {
+ $sql = <<<'SQL'
+ SELECT
+ tbl.name,
+ p.value AS [table_comment]
+ FROM
+ sys.tables AS tbl
+ INNER JOIN sys.extended_properties AS p ON p.major_id=tbl.object_id AND p.minor_id=0 AND p.class=1
+SQL;
+
+ $conditions = ["SCHEMA_NAME(tbl.schema_id) = N'dbo'", "p.name = N'MS_Description'"];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = "tbl.name = N'" . $tableName . "'";
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions);
+
+ /** @var array> $metadata */
+ $metadata = $this->_conn->executeQuery($sql, $params)
+ ->fetchAllAssociativeIndexed();
+
+ $tableOptions = [];
+ foreach ($metadata as $table => $data) {
+ $data = array_change_key_case($data, CASE_LOWER);
+
+ $tableOptions[$table] = [
+ 'comment' => $data['table_comment'],
+ ];
+ }
+
+ return $tableOptions;
+ }
+
+ /**
+ * Returns the where clause to filter schema and table name in a query.
+ *
+ * @param string $table The full qualified name of the table.
+ * @param string $schemaColumn The name of the column to compare the schema to in the where clause.
+ * @param string $tableColumn The name of the column to compare the table to in the where clause.
+ */
+ private function getTableWhereClause($table, $schemaColumn, $tableColumn): string
+ {
+ if (strpos($table, '.') !== false) {
+ [$schema, $table] = explode('.', $table);
+ $schema = $this->_platform->quoteStringLiteral($schema);
+ $table = $this->_platform->quoteStringLiteral($table);
+ } else {
+ $schema = 'SCHEMA_NAME()';
+ $table = $this->_platform->quoteStringLiteral($table);
+ }
+
+ return sprintf('(%s = %s AND %s = %s)', $tableColumn, $table, $schemaColumn, $schema);
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Schema.php b/app/vendor/doctrine/dbal/src/Schema/Schema.php
index 9be9e3508..703c83c59 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Schema.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Schema.php
@@ -2,11 +2,12 @@
namespace Doctrine\DBAL\Schema;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Schema\Visitor\CreateSchemaSqlCollector;
-use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector;
use Doctrine\DBAL\Schema\Visitor\NamespaceVisitor;
use Doctrine\DBAL\Schema\Visitor\Visitor;
+use Doctrine\DBAL\SQL\Builder\CreateSchemaObjectsSQLBuilder;
+use Doctrine\DBAL\SQL\Builder\DropSchemaObjectsSQLBuilder;
use Doctrine\Deprecations\Deprecation;
use function array_keys;
@@ -44,7 +45,7 @@ class Schema extends AbstractAsset
*
* @var string[]
*/
- private $namespaces = [];
+ private array $namespaces = [];
/** @var Table[] */
protected $_tables = [];
@@ -68,9 +69,7 @@ public function __construct(
?SchemaConfig $schemaConfig = null,
array $namespaces = []
) {
- if ($schemaConfig === null) {
- $schemaConfig = new SchemaConfig();
- }
+ $schemaConfig ??= new SchemaConfig();
$this->_schemaConfig = $schemaConfig;
$this->_setName($schemaConfig->getName() ?? 'public');
@@ -98,7 +97,7 @@ public function hasExplicitForeignKeyIndexes()
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4822',
- 'Schema::hasExplicitForeignKeyIndexes() is deprecated.'
+ 'Schema::hasExplicitForeignKeyIndexes() is deprecated.',
);
return $this->_schemaConfig->hasExplicitForeignKeyIndexes();
@@ -192,9 +191,7 @@ public function getTable($name)
return $this->_tables[$name];
}
- /**
- * @param string $name
- */
+ /** @param string $name */
private function getFullQualifiedAssetName($name): string
{
$name = $this->getUnquotedAssetName($name);
@@ -267,7 +264,7 @@ public function getTableNames()
'https://github.com/doctrine/dbal/pull/4800',
'Schema::getTableNames() is deprecated.'
. ' Use Schema::getTables() and Table::getName() instead.',
- __METHOD__
+ __METHOD__,
);
return array_keys($this->_tables);
@@ -302,9 +299,7 @@ public function getSequence($name)
return $this->_sequences[$name];
}
- /**
- * @return Sequence[]
- */
+ /** @return Sequence[] */
public function getSequences()
{
return $this->_sequences;
@@ -427,27 +422,29 @@ public function dropSequence($name)
/**
* Returns an array of necessary SQL queries to create the schema on the given platform.
*
- * @return string[]
+ * @return list
+ *
+ * @throws Exception
*/
public function toSql(AbstractPlatform $platform)
{
- $sqlCollector = new CreateSchemaSqlCollector($platform);
- $this->visit($sqlCollector);
+ $builder = new CreateSchemaObjectsSQLBuilder($platform);
- return $sqlCollector->getQueries();
+ return $builder->buildSQL($this);
}
/**
* Return an array of necessary SQL queries to drop the schema on the given platform.
*
- * @return string[]
+ * @return list
+ *
+ * @throws Exception
*/
public function toDropSql(AbstractPlatform $platform)
{
- $dropSqlCollector = new DropSchemaSqlCollector($platform);
- $this->visit($dropSqlCollector);
+ $builder = new DropSchemaObjectsSQLBuilder($platform);
- return $dropSqlCollector->getQueries();
+ return $builder->buildSQL($this);
}
/**
@@ -479,10 +476,18 @@ public function getMigrateFromSql(Schema $fromSchema, AbstractPlatform $platform
}
/**
+ * @deprecated
+ *
* @return void
*/
public function visit(Visitor $visitor)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5435',
+ 'Schema::visit() is deprecated.',
+ );
+
$visitor->acceptSchema($this);
if ($visitor instanceof NamespaceVisitor) {
diff --git a/app/vendor/doctrine/dbal/src/Schema/SchemaConfig.php b/app/vendor/doctrine/dbal/src/Schema/SchemaConfig.php
index 92e0701f0..5e394514b 100644
--- a/app/vendor/doctrine/dbal/src/Schema/SchemaConfig.php
+++ b/app/vendor/doctrine/dbal/src/Schema/SchemaConfig.php
@@ -35,7 +35,7 @@ public function hasExplicitForeignKeyIndexes()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4822',
- 'SchemaConfig::hasExplicitForeignKeyIndexes() is deprecated.'
+ 'SchemaConfig::hasExplicitForeignKeyIndexes() is deprecated.',
);
return $this->hasExplicitForeignKeyIndexes;
@@ -53,7 +53,7 @@ public function setExplicitForeignKeyIndexes($flag)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4822',
- 'SchemaConfig::setExplicitForeignKeyIndexes() is deprecated.'
+ 'SchemaConfig::setExplicitForeignKeyIndexes() is deprecated.',
);
$this->hasExplicitForeignKeyIndexes = (bool) $flag;
@@ -69,9 +69,7 @@ public function setMaxIdentifierLength($length)
$this->maxIdentifierLength = (int) $length;
}
- /**
- * @return int
- */
+ /** @return int */
public function getMaxIdentifierLength()
{
return $this->maxIdentifierLength;
diff --git a/app/vendor/doctrine/dbal/src/Schema/SchemaDiff.php b/app/vendor/doctrine/dbal/src/Schema/SchemaDiff.php
index 50d0d12fc..a6a866579 100644
--- a/app/vendor/doctrine/dbal/src/Schema/SchemaDiff.php
+++ b/app/vendor/doctrine/dbal/src/Schema/SchemaDiff.php
@@ -3,8 +3,11 @@
namespace Doctrine\DBAL\Schema;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
+use function array_filter;
use function array_merge;
+use function count;
/**
* Differences between two schemas.
@@ -14,12 +17,18 @@
*/
class SchemaDiff
{
- /** @var Schema|null */
+ /**
+ * @deprecated
+ *
+ * @var Schema|null
+ */
public $fromSchema;
/**
* All added namespaces.
*
+ * @internal Use {@link getCreatedSchemas()} instead.
+ *
* @var string[]
*/
public $newNamespaces = [];
@@ -27,6 +36,8 @@ class SchemaDiff
/**
* All removed namespaces.
*
+ * @internal Use {@link getDroppedSchemas()} instead.
+ *
* @var string[]
*/
public $removedNamespaces = [];
@@ -34,6 +45,8 @@ class SchemaDiff
/**
* All added tables.
*
+ * @internal Use {@link getCreatedTables()} instead.
+ *
* @var Table[]
*/
public $newTables = [];
@@ -41,6 +54,8 @@ class SchemaDiff
/**
* All changed tables.
*
+ * @internal Use {@link getAlteredTables()} instead.
+ *
* @var TableDiff[]
*/
public $changedTables = [];
@@ -48,35 +63,141 @@ class SchemaDiff
/**
* All removed tables.
*
+ * @internal Use {@link getDroppedTables()} instead.
+ *
* @var Table[]
*/
public $removedTables = [];
- /** @var Sequence[] */
+ /**
+ * @internal Use {@link getCreatedSequences()} instead.
+ *
+ * @var Sequence[]
+ */
public $newSequences = [];
- /** @var Sequence[] */
+ /**
+ * @internal Use {@link getAlteredSequences()} instead.
+ *
+ * @var Sequence[]
+ */
public $changedSequences = [];
- /** @var Sequence[] */
+ /**
+ * @internal Use {@link getDroppedSequences()} instead.
+ *
+ * @var Sequence[]
+ */
public $removedSequences = [];
- /** @var ForeignKeyConstraint[] */
+ /**
+ * @deprecated
+ *
+ * @var ForeignKeyConstraint[]
+ */
public $orphanedForeignKeys = [];
/**
* Constructs an SchemaDiff object.
*
- * @param Table[] $newTables
- * @param TableDiff[] $changedTables
- * @param Table[] $removedTables
+ * @internal The diff can be only instantiated by a {@see Comparator}.
+ *
+ * @param Table[] $newTables
+ * @param TableDiff[] $changedTables
+ * @param Table[] $removedTables
+ * @param array $createdSchemas
+ * @param array $droppedSchemas
+ * @param array $createdSequences
+ * @param array $alteredSequences
+ * @param array $droppedSequences
+ */
+ public function __construct(
+ $newTables = [],
+ $changedTables = [],
+ $removedTables = [],
+ ?Schema $fromSchema = null,
+ $createdSchemas = [],
+ $droppedSchemas = [],
+ $createdSequences = [],
+ $alteredSequences = [],
+ $droppedSequences = []
+ ) {
+ $this->newTables = $newTables;
+
+ $this->changedTables = array_filter($changedTables, static function (TableDiff $diff): bool {
+ return ! $diff->isEmpty();
+ });
+
+ $this->removedTables = $removedTables;
+ $this->fromSchema = $fromSchema;
+ $this->newNamespaces = $createdSchemas;
+ $this->removedNamespaces = $droppedSchemas;
+ $this->newSequences = $createdSequences;
+ $this->changedSequences = $alteredSequences;
+ $this->removedSequences = $droppedSequences;
+ }
+
+ /** @return array */
+ public function getCreatedSchemas(): array
+ {
+ return $this->newNamespaces;
+ }
+
+ /** @return array */
+ public function getDroppedSchemas(): array
+ {
+ return $this->removedNamespaces;
+ }
+
+ /** @return array */
+ public function getCreatedTables(): array
+ {
+ return $this->newTables;
+ }
+
+ /** @return array */
+ public function getAlteredTables(): array
+ {
+ return $this->changedTables;
+ }
+
+ /** @return array */
+ public function getDroppedTables(): array
+ {
+ return $this->removedTables;
+ }
+
+ /** @return array */
+ public function getCreatedSequences(): array
+ {
+ return $this->newSequences;
+ }
+
+ /** @return array */
+ public function getAlteredSequences(): array
+ {
+ return $this->changedSequences;
+ }
+
+ /** @return array */
+ public function getDroppedSequences(): array
+ {
+ return $this->removedSequences;
+ }
+
+ /**
+ * Returns whether the diff is empty (contains no changes).
*/
- public function __construct($newTables = [], $changedTables = [], $removedTables = [], ?Schema $fromSchema = null)
+ public function isEmpty(): bool
{
- $this->newTables = $newTables;
- $this->changedTables = $changedTables;
- $this->removedTables = $removedTables;
- $this->fromSchema = $fromSchema;
+ return count($this->newNamespaces) === 0
+ && count($this->removedNamespaces) === 0
+ && count($this->newTables) === 0
+ && count($this->changedTables) === 0
+ && count($this->removedTables) === 0
+ && count($this->newSequences) === 0
+ && count($this->changedSequences) === 0
+ && count($this->removedSequences) === 0;
}
/**
@@ -88,33 +209,51 @@ public function __construct($newTables = [], $changedTables = [], $removedTables
*
* This way it is ensured that assets are deleted which might not be relevant to the metadata schema at all.
*
- * @return string[]
+ * @deprecated
+ *
+ * @return list
*/
public function toSaveSql(AbstractPlatform $platform)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5766',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return $this->_toSql($platform, true);
}
/**
- * @return string[]
+ * @deprecated Use {@link AbstractPlatform::getAlterSchemaSQL()} instead.
+ *
+ * @return list
*/
public function toSql(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5766',
+ '%s is deprecated. Use AbstractPlatform::getAlterSchemaSQL() instead.',
+ __METHOD__,
+ );
+
return $this->_toSql($platform, false);
}
/**
* @param bool $saveMode
*
- * @return string[]
+ * @return list
*/
protected function _toSql(AbstractPlatform $platform, $saveMode = false)
{
$sql = [];
if ($platform->supportsSchemas()) {
- foreach ($this->newNamespaces as $newNamespace) {
- $sql[] = $platform->getCreateSchemaSQL($newNamespace);
+ foreach ($this->getCreatedSchemas() as $schema) {
+ $sql[] = $platform->getCreateSchemaSQL($schema);
}
}
@@ -125,46 +264,28 @@ protected function _toSql(AbstractPlatform $platform, $saveMode = false)
}
if ($platform->supportsSequences() === true) {
- foreach ($this->changedSequences as $sequence) {
+ foreach ($this->getAlteredSequences() as $sequence) {
$sql[] = $platform->getAlterSequenceSQL($sequence);
}
if ($saveMode === false) {
- foreach ($this->removedSequences as $sequence) {
+ foreach ($this->getDroppedSequences() as $sequence) {
$sql[] = $platform->getDropSequenceSQL($sequence);
}
}
- foreach ($this->newSequences as $sequence) {
+ foreach ($this->getCreatedSequences() as $sequence) {
$sql[] = $platform->getCreateSequenceSQL($sequence);
}
}
- $foreignKeySql = [];
- foreach ($this->newTables as $table) {
- $sql = array_merge(
- $sql,
- $platform->getCreateTableSQL($table, AbstractPlatform::CREATE_INDEXES)
- );
-
- if (! $platform->supportsForeignKeyConstraints()) {
- continue;
- }
-
- foreach ($table->getForeignKeys() as $foreignKey) {
- $foreignKeySql[] = $platform->getCreateForeignKeySQL($foreignKey, $table);
- }
- }
-
- $sql = array_merge($sql, $foreignKeySql);
+ $sql = array_merge($sql, $platform->getCreateTablesSQL($this->getCreatedTables()));
if ($saveMode === false) {
- foreach ($this->removedTables as $table) {
- $sql[] = $platform->getDropTableSQL($table);
- }
+ $sql = array_merge($sql, $platform->getDropTablesSQL($this->getDroppedTables()));
}
- foreach ($this->changedTables as $tableDiff) {
+ foreach ($this->getAlteredTables() as $tableDiff) {
$sql = array_merge($sql, $platform->getAlterTableSQL($tableDiff));
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/SchemaException.php b/app/vendor/doctrine/dbal/src/Schema/SchemaException.php
index d4e22380e..4ec091f8d 100644
--- a/app/vendor/doctrine/dbal/src/Schema/SchemaException.php
+++ b/app/vendor/doctrine/dbal/src/Schema/SchemaException.php
@@ -3,26 +3,59 @@
namespace Doctrine\DBAL\Schema;
use Doctrine\DBAL\Exception;
+use Doctrine\DBAL\Schema\Exception\ColumnAlreadyExists;
+use Doctrine\DBAL\Schema\Exception\ColumnDoesNotExist;
+use Doctrine\DBAL\Schema\Exception\ForeignKeyDoesNotExist;
+use Doctrine\DBAL\Schema\Exception\IndexAlreadyExists;
+use Doctrine\DBAL\Schema\Exception\IndexDoesNotExist;
+use Doctrine\DBAL\Schema\Exception\IndexNameInvalid;
+use Doctrine\DBAL\Schema\Exception\NamedForeignKeyRequired;
+use Doctrine\DBAL\Schema\Exception\NamespaceAlreadyExists;
+use Doctrine\DBAL\Schema\Exception\SequenceAlreadyExists;
+use Doctrine\DBAL\Schema\Exception\SequenceDoesNotExist;
+use Doctrine\DBAL\Schema\Exception\TableAlreadyExists;
+use Doctrine\DBAL\Schema\Exception\TableDoesNotExist;
+use Doctrine\DBAL\Schema\Exception\UniqueConstraintDoesNotExist;
-use function implode;
use function sprintf;
-/**
- * @psalm-immutable
- */
+/** @psalm-immutable */
class SchemaException extends Exception
{
- public const TABLE_DOESNT_EXIST = 10;
- public const TABLE_ALREADY_EXISTS = 20;
- public const COLUMN_DOESNT_EXIST = 30;
- public const COLUMN_ALREADY_EXISTS = 40;
- public const INDEX_DOESNT_EXIST = 50;
- public const INDEX_ALREADY_EXISTS = 60;
- public const SEQUENCE_DOENST_EXIST = 70;
- public const SEQUENCE_ALREADY_EXISTS = 80;
- public const INDEX_INVALID_NAME = 90;
- public const FOREIGNKEY_DOESNT_EXIST = 100;
- public const CONSTRAINT_DOESNT_EXIST = 110;
+ /** @deprecated Use {@see TableDoesNotExist} instead. */
+ public const TABLE_DOESNT_EXIST = 10;
+
+ /** @deprecated Use {@see TableAlreadyExists} instead. */
+ public const TABLE_ALREADY_EXISTS = 20;
+
+ /** @deprecated Use {@see ColumnDoesNotExist} instead. */
+ public const COLUMN_DOESNT_EXIST = 30;
+
+ /** @deprecated Use {@see ColumnAlreadyExists} instead. */
+ public const COLUMN_ALREADY_EXISTS = 40;
+
+ /** @deprecated Use {@see IndexDoesNotExist} instead. */
+ public const INDEX_DOESNT_EXIST = 50;
+
+ /** @deprecated Use {@see IndexAlreadyExists} instead. */
+ public const INDEX_ALREADY_EXISTS = 60;
+
+ /** @deprecated Use {@see SequenceDoesNotExist} instead. */
+ public const SEQUENCE_DOENST_EXIST = 70;
+
+ /** @deprecated Use {@see SequenceAlreadyExists} instead. */
+ public const SEQUENCE_ALREADY_EXISTS = 80;
+
+ /** @deprecated Use {@see IndexNameInvalid} instead. */
+ public const INDEX_INVALID_NAME = 90;
+
+ /** @deprecated Use {@see ForeignKeyDoesNotExist} instead. */
+ public const FOREIGNKEY_DOESNT_EXIST = 100;
+
+ /** @deprecated Use {@see UniqueConstraintDoesNotExist} instead. */
+ public const CONSTRAINT_DOESNT_EXIST = 110;
+
+ /** @deprecated Use {@see NamespaceAlreadyExists} instead. */
public const NAMESPACE_ALREADY_EXISTS = 120;
/**
@@ -32,7 +65,7 @@ class SchemaException extends Exception
*/
public static function tableDoesNotExist($tableName)
{
- return new self("There is no table with name '" . $tableName . "' in the schema.", self::TABLE_DOESNT_EXIST);
+ return TableDoesNotExist::new($tableName);
}
/**
@@ -42,10 +75,7 @@ public static function tableDoesNotExist($tableName)
*/
public static function indexNameInvalid($indexName)
{
- return new self(
- sprintf('Invalid index-name %s given, has to be [a-zA-Z0-9_]', $indexName),
- self::INDEX_INVALID_NAME
- );
+ return IndexNameInvalid::new($indexName);
}
/**
@@ -56,10 +86,7 @@ public static function indexNameInvalid($indexName)
*/
public static function indexDoesNotExist($indexName, $table)
{
- return new self(
- sprintf("Index '%s' does not exist on table '%s'.", $indexName, $table),
- self::INDEX_DOESNT_EXIST
- );
+ return IndexDoesNotExist::new($indexName, $table);
}
/**
@@ -70,10 +97,7 @@ public static function indexDoesNotExist($indexName, $table)
*/
public static function indexAlreadyExists($indexName, $table)
{
- return new self(
- sprintf("An index with name '%s' was already defined on table '%s'.", $indexName, $table),
- self::INDEX_ALREADY_EXISTS
- );
+ return IndexAlreadyExists::new($indexName, $table);
}
/**
@@ -84,10 +108,7 @@ public static function indexAlreadyExists($indexName, $table)
*/
public static function columnDoesNotExist($columnName, $table)
{
- return new self(
- sprintf("There is no column with name '%s' on table '%s'.", $columnName, $table),
- self::COLUMN_DOESNT_EXIST
- );
+ return ColumnDoesNotExist::new($columnName, $table);
}
/**
@@ -97,10 +118,7 @@ public static function columnDoesNotExist($columnName, $table)
*/
public static function namespaceAlreadyExists($namespaceName)
{
- return new self(
- sprintf("The namespace with name '%s' already exists.", $namespaceName),
- self::NAMESPACE_ALREADY_EXISTS
- );
+ return NamespaceAlreadyExists::new($namespaceName);
}
/**
@@ -110,7 +128,7 @@ public static function namespaceAlreadyExists($namespaceName)
*/
public static function tableAlreadyExists($tableName)
{
- return new self("The table with name '" . $tableName . "' already exists.", self::TABLE_ALREADY_EXISTS);
+ return TableAlreadyExists::new($tableName);
}
/**
@@ -121,10 +139,7 @@ public static function tableAlreadyExists($tableName)
*/
public static function columnAlreadyExists($tableName, $columnName)
{
- return new self(
- "The column '" . $columnName . "' on table '" . $tableName . "' already exists.",
- self::COLUMN_ALREADY_EXISTS
- );
+ return ColumnAlreadyExists::new($tableName, $columnName);
}
/**
@@ -134,7 +149,7 @@ public static function columnAlreadyExists($tableName, $columnName)
*/
public static function sequenceAlreadyExists($name)
{
- return new self("The sequence '" . $name . "' already exists.", self::SEQUENCE_ALREADY_EXISTS);
+ return SequenceAlreadyExists::new($name);
}
/**
@@ -144,7 +159,7 @@ public static function sequenceAlreadyExists($name)
*/
public static function sequenceDoesNotExist($name)
{
- return new self("There exists no sequence with the name '" . $name . "'.", self::SEQUENCE_DOENST_EXIST);
+ return SequenceDoesNotExist::new($name);
}
/**
@@ -155,10 +170,7 @@ public static function sequenceDoesNotExist($name)
*/
public static function uniqueConstraintDoesNotExist($constraintName, $table)
{
- return new self(
- sprintf('There exists no unique constraint with the name "%s" on table "%s".', $constraintName, $table),
- self::CONSTRAINT_DOESNT_EXIST
- );
+ return UniqueConstraintDoesNotExist::new($constraintName, $table);
}
/**
@@ -169,23 +181,13 @@ public static function uniqueConstraintDoesNotExist($constraintName, $table)
*/
public static function foreignKeyDoesNotExist($fkName, $table)
{
- return new self(
- sprintf("There exists no foreign key with the name '%s' on table '%s'.", $fkName, $table),
- self::FOREIGNKEY_DOESNT_EXIST
- );
+ return ForeignKeyDoesNotExist::new($fkName, $table);
}
- /**
- * @return SchemaException
- */
+ /** @return SchemaException */
public static function namedForeignKeyRequired(Table $localTable, ForeignKeyConstraint $foreignKey)
{
- return new self(
- 'The performed schema operation on ' . $localTable->getName() . ' requires a named foreign key, ' .
- 'but the given foreign key from (' . implode(', ', $foreignKey->getColumns()) . ') onto foreign table ' .
- "'" . $foreignKey->getForeignTableName() . "' (" . implode(', ', $foreignKey->getForeignColumns()) . ')' .
- ' is currently unnamed.'
- );
+ return NamedForeignKeyRequired::new($localTable, $foreignKey);
}
/**
@@ -196,7 +198,7 @@ public static function namedForeignKeyRequired(Table $localTable, ForeignKeyCons
public static function alterTableChangeNotSupported($changeName)
{
return new self(
- sprintf("Alter table change not supported, given '%s'", $changeName)
+ sprintf("Alter table change not supported, given '%s'", $changeName),
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Sequence.php b/app/vendor/doctrine/dbal/src/Schema/Sequence.php
index a634e84fa..527c63c35 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Sequence.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Sequence.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Schema;
use Doctrine\DBAL\Schema\Visitor\Visitor;
+use Doctrine\Deprecations\Deprecation;
use function count;
use function sprintf;
@@ -35,25 +36,19 @@ public function __construct($name, $allocationSize = 1, $initialValue = 1, $cach
$this->cache = $cache;
}
- /**
- * @return int
- */
+ /** @return int */
public function getAllocationSize()
{
return $this->allocationSize;
}
- /**
- * @return int
- */
+ /** @return int */
public function getInitialValue()
{
return $this->initialValue;
}
- /**
- * @return int|null
- */
+ /** @return int|null */
public function getCache()
{
return $this->cache;
@@ -139,10 +134,18 @@ public function isAutoIncrementsFor(Table $table)
}
/**
+ * @deprecated
+ *
* @return void
*/
public function visit(Visitor $visitor)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5435',
+ 'Sequence::visit() is deprecated.',
+ );
+
$visitor->acceptSequence($this);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php b/app/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php
index 3e0e5cfec..c240ce212 100644
--- a/app/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php
+++ b/app/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php
@@ -6,6 +6,7 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Platforms\SQLite;
use Doctrine\DBAL\Platforms\SqlitePlatform;
+use Doctrine\DBAL\Result;
use Doctrine\DBAL\Types\StringType;
use Doctrine\DBAL\Types\TextType;
use Doctrine\DBAL\Types\Type;
@@ -14,15 +15,17 @@
use function array_change_key_case;
use function array_map;
use function array_merge;
-use function array_reverse;
+use function count;
use function explode;
use function file_exists;
+use function implode;
use function preg_match;
use function preg_match_all;
use function preg_quote;
use function preg_replace;
use function rtrim;
use function str_replace;
+use function strcasecmp;
use function strpos;
use function strtolower;
use function trim;
@@ -38,6 +41,71 @@
*/
class SqliteSchemaManager extends AbstractSchemaManager
{
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableNames()
+ {
+ return $this->doListTableNames();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTables()
+ {
+ return $this->doListTables();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated Use {@see introspectTable()} instead.
+ */
+ public function listTableDetails($name)
+ {
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5595',
+ '%s is deprecated. Use introspectTable() instead.',
+ __METHOD__,
+ );
+
+ return $this->doListTableDetails($name);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableColumns($table, $database = null)
+ {
+ return $this->doListTableColumns($table, $database);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function listTableIndexes($table)
+ {
+ return $this->doListTableIndexes($table);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected function fetchForeignKeyColumnsByTable(string $databaseName): array
+ {
+ $columnsByTable = parent::fetchForeignKeyColumnsByTable($databaseName);
+
+ if (count($columnsByTable) > 0) {
+ foreach ($columnsByTable as $table => $columns) {
+ $columnsByTable[$table] = $this->addDetailsToTableForeignKeyColumns($table, $columns);
+ }
+ }
+
+ return $columnsByTable;
+ }
+
/**
* {@inheritdoc}
*
@@ -48,7 +116,7 @@ public function dropDatabase($database)
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4963',
- 'SqliteSchemaManager::dropDatabase() is deprecated. Delete the database file using the filesystem.'
+ 'SqliteSchemaManager::dropDatabase() is deprecated. Delete the database file using the filesystem.',
);
if (! file_exists($database)) {
@@ -69,7 +137,7 @@ public function createDatabase($database)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4963',
'SqliteSchemaManager::createDatabase() is deprecated.'
- . ' The engine will create the database file automatically.'
+ . ' The engine will create the database file automatically.',
);
$params = $this->_conn->getParams();
@@ -82,26 +150,16 @@ public function createDatabase($database)
$conn->close();
}
- /**
- * {@inheritdoc}
- */
- public function renameTable($name, $newName)
- {
- $tableDiff = new TableDiff($name);
- $tableDiff->fromTable = $this->listTableDetails($name);
- $tableDiff->newName = $newName;
- $this->alterTable($tableDiff);
- }
-
/**
* {@inheritdoc}
*/
public function createForeignKey(ForeignKeyConstraint $foreignKey, $table)
{
- $tableDiff = $this->getTableDiffForAlterForeignKey($table);
- $tableDiff->addedForeignKeys[] = $foreignKey;
+ if (! $table instanceof Table) {
+ $table = $this->listTableDetails($table);
+ }
- $this->alterTable($tableDiff);
+ $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [$foreignKey]));
}
/**
@@ -115,13 +173,14 @@ public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4897',
'SqliteSchemaManager::dropAndCreateForeignKey() is deprecated.'
- . ' Use SqliteSchemaManager::dropForeignKey() and SqliteSchemaManager::createForeignKey() instead.'
+ . ' Use SqliteSchemaManager::dropForeignKey() and SqliteSchemaManager::createForeignKey() instead.',
);
- $tableDiff = $this->getTableDiffForAlterForeignKey($table);
- $tableDiff->changedForeignKeys[] = $foreignKey;
+ if (! $table instanceof Table) {
+ $table = $this->listTableDetails($table);
+ }
- $this->alterTable($tableDiff);
+ $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [], [$foreignKey]));
}
/**
@@ -129,10 +188,11 @@ public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table
*/
public function dropForeignKey($foreignKey, $table)
{
- $tableDiff = $this->getTableDiffForAlterForeignKey($table);
- $tableDiff->removedForeignKeys[] = $foreignKey;
+ if (! $table instanceof Table) {
+ $table = $this->listTableDetails($table);
+ }
- $this->alterTable($tableDiff);
+ $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [], [], [$foreignKey]));
}
/**
@@ -140,50 +200,16 @@ public function dropForeignKey($foreignKey, $table)
*/
public function listTableForeignKeys($table, $database = null)
{
- if ($database === null) {
- $database = $this->_conn->getDatabase();
- }
+ $table = $this->normalizeName($table);
- $sql = $this->_platform->getListTableForeignKeysSQL($table, $database);
- $tableForeignKeys = $this->_conn->fetchAllAssociative($sql);
+ $columns = $this->selectForeignKeyColumns('', $table)
+ ->fetchAllAssociative();
- if (! empty($tableForeignKeys)) {
- $createSql = $this->getCreateTableSQL($table);
-
- if (
- preg_match_all(
- '#
- (?:CONSTRAINT\s+([^\s]+)\s+)?
- (?:FOREIGN\s+KEY[^\)]+\)\s*)?
- REFERENCES\s+[^\s]+\s+(?:\([^)]+\))?
- (?:
- [^,]*?
- (NOT\s+DEFERRABLE|DEFERRABLE)
- (?:\s+INITIALLY\s+(DEFERRED|IMMEDIATE))?
- )?#isx',
- $createSql,
- $match
- ) > 0
- ) {
- $names = array_reverse($match[1]);
- $deferrable = array_reverse($match[2]);
- $deferred = array_reverse($match[3]);
- } else {
- $names = $deferrable = $deferred = [];
- }
-
- foreach ($tableForeignKeys as $key => $value) {
- $id = $value['id'];
-
- $tableForeignKeys[$key] = array_merge($tableForeignKeys[$key], [
- 'constraint_name' => isset($names[$id]) && $names[$id] !== '' ? $names[$id] : $id,
- 'deferrable' => isset($deferrable[$id]) && strtolower($deferrable[$id]) === 'deferrable',
- 'deferred' => isset($deferred[$id]) && strtolower($deferred[$id]) === 'deferred',
- ]);
- }
+ if (count($columns) > 0) {
+ $columns = $this->addDetailsToTableForeignKeyColumns($table, $columns);
}
- return $this->_getPortableTableForeignKeysList($tableForeignKeys);
+ return $this->_getPortableTableForeignKeysList($columns);
}
/**
@@ -191,7 +217,7 @@ public function listTableForeignKeys($table, $database = null)
*/
protected function _getPortableTableDefinition($table)
{
- return $table['name'];
+ return $table['table_name'];
}
/**
@@ -218,7 +244,7 @@ static function (array $a, array $b): int {
}
return $a['pk'] - $b['pk'];
- }
+ },
);
foreach ($indexArray as $indexColumnRow) {
@@ -301,7 +327,7 @@ protected function _getPortableTableColumnList($table, $database, $tableColumns)
if ($type instanceof StringType || $type instanceof TextType) {
$column->setPlatformOption(
'collation',
- $this->parseColumnCollationFromSQL($columnName, $createSql) ?? 'BINARY'
+ $this->parseColumnCollationFromSQL($columnName, $createSql) ?? 'BINARY',
);
}
@@ -420,8 +446,8 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
$list = [];
foreach ($tableForeignKeys as $value) {
$value = array_change_key_case($value, CASE_LOWER);
- $name = $value['constraint_name'];
- if (! isset($list[$name])) {
+ $id = $value['id'];
+ if (! isset($list[$id])) {
if (! isset($value['on_delete']) || $value['on_delete'] === 'RESTRICT') {
$value['on_delete'] = null;
}
@@ -430,8 +456,8 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
$value['on_update'] = null;
}
- $list[$name] = [
- 'name' => $name,
+ $list[$id] = [
+ 'name' => $value['constraint_name'],
'local' => [],
'foreign' => [],
'foreignTable' => $value['table'],
@@ -442,49 +468,35 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys)
];
}
- $list[$name]['local'][] = $value['from'];
+ $list[$id]['local'][] = $value['from'];
if ($value['to'] === null) {
continue;
}
- $list[$name]['foreign'][] = $value['to'];
+ $list[$id]['foreign'][] = $value['to'];
}
- $result = [];
- foreach ($list as $constraint) {
- $result[] = new ForeignKeyConstraint(
- $constraint['local'],
- $constraint['foreignTable'],
- $constraint['foreign'],
- $constraint['name'],
- [
- 'onDelete' => $constraint['onDelete'],
- 'onUpdate' => $constraint['onUpdate'],
- 'deferrable' => $constraint['deferrable'],
- 'deferred' => $constraint['deferred'],
- ]
- );
- }
-
- return $result;
+ return parent::_getPortableTableForeignKeysList($list);
}
/**
- * @param Table|string $table
- *
- * @throws Exception
+ * {@inheritDoc}
*/
- private function getTableDiffForAlterForeignKey($table): TableDiff
+ protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint
{
- if (! $table instanceof Table) {
- $table = $this->listTableDetails($table);
- }
-
- $tableDiff = new TableDiff($table->getName());
- $tableDiff->fromTable = $table;
-
- return $tableDiff;
+ return new ForeignKeyConstraint(
+ $tableForeignKey['local'],
+ $tableForeignKey['foreignTable'],
+ $tableForeignKey['foreign'],
+ $tableForeignKey['name'],
+ [
+ 'onDelete' => $tableForeignKey['onDelete'],
+ 'onUpdate' => $tableForeignKey['onUpdate'],
+ 'deferrable' => $tableForeignKey['deferrable'],
+ 'deferred' => $tableForeignKey['deferred'],
+ ],
+ );
}
private function parseColumnCollationFromSQL(string $column, string $sql): ?string
@@ -533,9 +545,7 @@ private function parseColumnCommentFromSQL(string $column, string $sql): ?string
return $comment === '' ? null : $comment;
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
private function getCreateTableSQL(string $table): string
{
$sql = $this->_conn->fetchOne(
@@ -552,7 +562,7 @@ private function getCreateTableSQL(string $table): string
AND name = ?
SQL
,
- [$table]
+ [$table],
);
if ($sql !== false) {
@@ -563,28 +573,73 @@ private function getCreateTableSQL(string $table): string
}
/**
- * {@inheritDoc}
+ * @param list> $columns
+ *
+ * @return list>
+ *
+ * @throws Exception
+ */
+ private function addDetailsToTableForeignKeyColumns(string $table, array $columns): array
+ {
+ $foreignKeyDetails = $this->getForeignKeyDetails($table);
+ $foreignKeyCount = count($foreignKeyDetails);
+
+ foreach ($columns as $i => $column) {
+ // SQLite identifies foreign keys in reverse order of appearance in SQL
+ $columns[$i] = array_merge($column, $foreignKeyDetails[$foreignKeyCount - $column['id'] - 1]);
+ }
+
+ return $columns;
+ }
+
+ /**
+ * @param string $table
+ *
+ * @return list>
*
- * @param string $name
+ * @throws Exception
*/
- public function listTableDetails($name): Table
+ private function getForeignKeyDetails($table)
{
- $table = parent::listTableDetails($name);
+ $createSql = $this->getCreateTableSQL($table);
- $tableCreateSql = $this->getCreateTableSQL($name);
+ if (
+ preg_match_all(
+ '#
+ (?:CONSTRAINT\s+(\S+)\s+)?
+ (?:FOREIGN\s+KEY[^)]+\)\s*)?
+ REFERENCES\s+\S+\s*(?:\([^)]+\))?
+ (?:
+ [^,]*?
+ (NOT\s+DEFERRABLE|DEFERRABLE)
+ (?:\s+INITIALLY\s+(DEFERRED|IMMEDIATE))?
+ )?#isx',
+ $createSql,
+ $match,
+ ) === 0
+ ) {
+ return [];
+ }
- $comment = $this->parseTableCommentFromSQL($name, $tableCreateSql);
+ $names = $match[1];
+ $deferrable = $match[2];
+ $deferred = $match[3];
+ $details = [];
- if ($comment !== null) {
- $table->addOption('comment', $comment);
+ for ($i = 0, $count = count($match[0]); $i < $count; $i++) {
+ $details[] = [
+ 'constraint_name' => isset($names[$i]) && $names[$i] !== '' ? $names[$i] : null,
+ 'deferrable' => isset($deferrable[$i]) && strcasecmp($deferrable[$i], 'deferrable') === 0,
+ 'deferred' => isset($deferred[$i]) && strcasecmp($deferred[$i], 'deferred') === 0,
+ ];
}
- return $table;
+ return $details;
}
public function createComparator(): Comparator
{
- return new SQLite\Comparator($this->getDatabasePlatform());
+ return new SQLite\Comparator($this->_platform);
}
/**
@@ -597,10 +652,130 @@ public function getSchemaSearchPaths()
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4821',
- 'SqliteSchemaManager::getSchemaSearchPaths() is deprecated.'
+ 'SqliteSchemaManager::getSchemaSearchPaths() is deprecated.',
);
// SQLite does not support schemas or databases
return [];
}
+
+ protected function selectTableNames(string $databaseName): Result
+ {
+ $sql = <<<'SQL'
+SELECT name AS table_name
+FROM sqlite_master
+WHERE type = 'table'
+ AND name != 'sqlite_sequence'
+ AND name != 'geometry_columns'
+ AND name != 'spatial_ref_sys'
+UNION ALL
+SELECT name
+FROM sqlite_temp_master
+WHERE type = 'table'
+ORDER BY name
+SQL;
+
+ return $this->_conn->executeQuery($sql);
+ }
+
+ protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = <<<'SQL'
+ SELECT t.name AS table_name,
+ c.*
+ FROM sqlite_master t
+ JOIN pragma_table_info(t.name) c
+SQL;
+
+ $conditions = [
+ "t.type = 'table'",
+ "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')",
+ ];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = 't.name = ?';
+ $params[] = str_replace('.', '__', $tableName);
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, c.cid';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = <<<'SQL'
+ SELECT t.name AS table_name,
+ i.*
+ FROM sqlite_master t
+ JOIN pragma_index_list(t.name) i
+SQL;
+
+ $conditions = [
+ "t.type = 'table'",
+ "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')",
+ ];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = 't.name = ?';
+ $params[] = str_replace('.', '__', $tableName);
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, i.seq';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
+ {
+ $sql = <<<'SQL'
+ SELECT t.name AS table_name,
+ p.*
+ FROM sqlite_master t
+ JOIN pragma_foreign_key_list(t.name) p
+ ON p."seq" != "-1"
+SQL;
+
+ $conditions = [
+ "t.type = 'table'",
+ "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')",
+ ];
+ $params = [];
+
+ if ($tableName !== null) {
+ $conditions[] = 't.name = ?';
+ $params[] = str_replace('.', '__', $tableName);
+ }
+
+ $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, p.id DESC, p.seq';
+
+ return $this->_conn->executeQuery($sql, $params);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array
+ {
+ if ($tableName === null) {
+ $tables = $this->listTableNames();
+ } else {
+ $tables = [$tableName];
+ }
+
+ $tableOptions = [];
+ foreach ($tables as $table) {
+ $comment = $this->parseTableCommentFromSQL($table, $this->getCreateTableSQL($table));
+
+ if ($comment === null) {
+ continue;
+ }
+
+ $tableOptions[$table]['comment'] = $comment;
+ }
+
+ return $tableOptions;
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Table.php b/app/vendor/doctrine/dbal/src/Schema/Table.php
index 4f591eb63..7fbd6091a 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Table.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Table.php
@@ -6,6 +6,7 @@
use Doctrine\DBAL\Schema\Exception\InvalidTableName;
use Doctrine\DBAL\Schema\Visitor\Visitor;
use Doctrine\DBAL\Types\Type;
+use Doctrine\Deprecations\Deprecation;
use function array_filter;
use function array_keys;
@@ -46,7 +47,7 @@ class Table extends AbstractAsset
protected $_schemaConfig;
/** @var Index[] */
- private $implicitIndexes = [];
+ private array $implicitIndexes = [];
/**
* @param Column[] $columns
@@ -91,17 +92,13 @@ public function __construct(
$this->_options = array_merge($this->_options, $options);
}
- /**
- * @return void
- */
+ /** @return void */
public function setSchemaConfig(SchemaConfig $schemaConfig)
{
$this->_schemaConfig = $schemaConfig;
}
- /**
- * @return int
- */
+ /** @return int */
protected function _getMaxIdentifierLength()
{
if ($this->_schemaConfig instanceof SchemaConfig) {
@@ -148,13 +145,11 @@ public function setPrimaryKey(array $columnNames, $indexName = false)
*/
public function addIndex(array $columnNames, ?string $indexName = null, array $flags = [], array $options = [])
{
- if ($indexName === null) {
- $indexName = $this->_generateIdentifierName(
- array_merge([$this->getName()], $columnNames),
- 'idx',
- $this->_getMaxIdentifierLength()
- );
- }
+ $indexName ??= $this->_generateIdentifierName(
+ array_merge([$this->getName()], $columnNames),
+ 'idx',
+ $this->_getMaxIdentifierLength(),
+ );
return $this->_addIndex($this->_createIndex($columnNames, $indexName, false, false, $flags, $options));
}
@@ -172,13 +167,11 @@ public function addUniqueConstraint(
array $flags = [],
array $options = []
): Table {
- if ($indexName === null) {
- $indexName = $this->_generateIdentifierName(
- array_merge([$this->getName()], $columnNames),
- 'uniq',
- $this->_getMaxIdentifierLength()
- );
- }
+ $indexName ??= $this->_generateIdentifierName(
+ array_merge([$this->getName()], $columnNames),
+ 'uniq',
+ $this->_getMaxIdentifierLength(),
+ );
return $this->_addUniqueConstraint($this->_createUniqueConstraint($columnNames, $indexName, $flags, $options));
}
@@ -231,13 +224,11 @@ public function dropIndex($name)
*/
public function addUniqueIndex(array $columnNames, $indexName = null, array $options = [])
{
- if ($indexName === null) {
- $indexName = $this->_generateIdentifierName(
- array_merge([$this->getName()], $columnNames),
- 'uniq',
- $this->_getMaxIdentifierLength()
- );
- }
+ $indexName ??= $this->_generateIdentifierName(
+ array_merge([$this->getName()], $columnNames),
+ 'uniq',
+ $this->_getMaxIdentifierLength(),
+ );
return $this->_addIndex($this->_createIndex($columnNames, $indexName, true, false, [], $options));
}
@@ -358,6 +349,8 @@ public function addColumn($name, $typeName, array $options = [])
/**
* Change Column Details.
*
+ * @deprecated Use {@link modifyColumn()} instead.
+ *
* @param string $name
* @param mixed[] $options
*
@@ -366,6 +359,26 @@ public function addColumn($name, $typeName, array $options = [])
* @throws SchemaException
*/
public function changeColumn($name, array $options)
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5747',
+ '%s is deprecated. Use modifyColumn() instead.',
+ __METHOD__,
+ );
+
+ return $this->modifyColumn($name, $options);
+ }
+
+ /**
+ * @param string $name
+ * @param mixed[] $options
+ *
+ * @return self
+ *
+ * @throws SchemaException
+ */
+ public function modifyColumn($name, array $options)
{
$column = $this->getColumn($name);
$column->setOptions($options);
@@ -411,13 +424,11 @@ public function addForeignKeyConstraint(
array $options = [],
$name = null
) {
- if ($name === null) {
- $name = $this->_generateIdentifierName(
- array_merge((array) $this->getName(), $localColumnNames),
- 'fk',
- $this->_getMaxIdentifierLength()
- );
- }
+ $name ??= $this->_generateIdentifierName(
+ array_merge([$this->getName()], $localColumnNames),
+ 'fk',
+ $this->_getMaxIdentifierLength(),
+ );
if ($foreignTable instanceof Table) {
foreach ($foreignColumnNames as $columnName) {
@@ -438,7 +449,7 @@ public function addForeignKeyConstraint(
$foreignTable,
$foreignColumnNames,
$name,
- $options
+ $options,
);
return $this->_addForeignKeyConstraint($constraint);
@@ -488,7 +499,7 @@ protected function _addIndex(Index $indexCandidate)
$replacedImplicitIndexes = [];
foreach ($this->implicitIndexes as $name => $implicitIndex) {
- if (! $implicitIndex->isFullfilledBy($indexCandidate) || ! isset($this->_indexes[$name])) {
+ if (! $implicitIndex->isFulfilledBy($indexCandidate) || ! isset($this->_indexes[$name])) {
continue;
}
@@ -515,9 +526,7 @@ protected function _addIndex(Index $indexCandidate)
return $this;
}
- /**
- * @return self
- */
+ /** @return self */
protected function _addUniqueConstraint(UniqueConstraint $constraint): Table
{
$mergedNames = array_merge([$this->getName()], $constraint->getColumns());
@@ -537,7 +546,7 @@ protected function _addUniqueConstraint(UniqueConstraint $constraint): Table
$indexCandidate = $this->_createIndex($constraint->getColumns(), $indexName, true, false);
foreach ($this->_indexes as $existingIndex) {
- if ($indexCandidate->isFullfilledBy($existingIndex)) {
+ if ($indexCandidate->isFulfilledBy($existingIndex)) {
return $this;
}
}
@@ -547,9 +556,7 @@ protected function _addUniqueConstraint(UniqueConstraint $constraint): Table
return $this;
}
- /**
- * @return self
- */
+ /** @return self */
protected function _addForeignKeyConstraint(ForeignKeyConstraint $constraint)
{
$constraint->setLocalTable($this);
@@ -560,7 +567,7 @@ protected function _addForeignKeyConstraint(ForeignKeyConstraint $constraint)
$name = $this->_generateIdentifierName(
array_merge([$this->getName()], $constraint->getLocalColumns()),
'fk',
- $this->_getMaxIdentifierLength()
+ $this->_getMaxIdentifierLength(),
);
}
@@ -578,13 +585,13 @@ protected function _addForeignKeyConstraint(ForeignKeyConstraint $constraint)
$indexName = $this->_generateIdentifierName(
array_merge([$this->getName()], $constraint->getColumns()),
'idx',
- $this->_getMaxIdentifierLength()
+ $this->_getMaxIdentifierLength(),
);
$indexCandidate = $this->_createIndex($constraint->getColumns(), $indexName, false, false);
foreach ($this->_indexes as $existingIndex) {
- if ($indexCandidate->isFullfilledBy($existingIndex)) {
+ if ($indexCandidate->isFulfilledBy($existingIndex)) {
return $this;
}
}
@@ -698,11 +705,11 @@ public function removeUniqueConstraint(string $name): void
*/
public function getColumns()
{
- $primaryKeyColumns = $this->hasPrimaryKey() ? $this->getPrimaryKeyColumns() : [];
+ $primaryKeyColumns = $this->getPrimaryKey() !== null ? $this->getPrimaryKeyColumns() : [];
$foreignKeyColumns = $this->getForeignKeyColumns();
$remainderColumns = $this->filterColumns(
array_merge(array_keys($primaryKeyColumns), array_keys($foreignKeyColumns)),
- true
+ true,
);
return array_merge($primaryKeyColumns, $foreignKeyColumns, $remainderColumns);
@@ -711,10 +718,19 @@ public function getColumns()
/**
* Returns the foreign key columns
*
+ * @deprecated Use {@see getForeignKey()} and {@see ForeignKeyConstraint::getLocalColumns()} instead.
+ *
* @return Column[]
*/
public function getForeignKeyColumns()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5731',
+ '%s is deprecated. Use getForeignKey() and ForeignKeyConstraint::getLocalColumns() instead.',
+ __METHOD__,
+ );
+
$foreignKeyColumns = [];
foreach ($this->getForeignKeys() as $foreignKey) {
@@ -789,12 +805,21 @@ public function getPrimaryKey()
/**
* Returns the primary key columns.
*
+ * @deprecated Use {@see getPrimaryKey()} and {@see Index::getColumns()} instead.
+ *
* @return Column[]
*
* @throws Exception
*/
public function getPrimaryKeyColumns()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5731',
+ '%s is deprecated. Use getPrimaryKey() and Index::getColumns() instead.',
+ __METHOD__,
+ );
+
$primaryKey = $this->getPrimaryKey();
if ($primaryKey === null) {
@@ -807,10 +832,19 @@ public function getPrimaryKeyColumns()
/**
* Returns whether this table has a primary key.
*
+ * @deprecated Use {@see getPrimaryKey()} instead.
+ *
* @return bool
*/
public function hasPrimaryKey()
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5731',
+ '%s is deprecated. Use getPrimaryKey() instead.',
+ __METHOD__,
+ );
+
return $this->_primaryKeyName !== null && $this->hasIndex($this->_primaryKeyName);
}
@@ -847,9 +881,7 @@ public function getIndex($name)
return $this->_indexes[$name];
}
- /**
- * @return Index[]
- */
+ /** @return Index[] */
public function getIndexes()
{
return $this->_indexes;
@@ -895,21 +927,27 @@ public function getOption($name)
return $this->_options[$name];
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getOptions()
{
return $this->_options;
}
/**
+ * @deprecated
+ *
* @return void
*
* @throws SchemaException
*/
public function visit(Visitor $visitor)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5435',
+ 'Table::visit() is deprecated.',
+ );
+
$visitor->acceptTable($this);
foreach ($this->getColumns() as $column) {
diff --git a/app/vendor/doctrine/dbal/src/Schema/TableDiff.php b/app/vendor/doctrine/dbal/src/Schema/TableDiff.php
index 82c912f71..58128d75b 100644
--- a/app/vendor/doctrine/dbal/src/Schema/TableDiff.php
+++ b/app/vendor/doctrine/dbal/src/Schema/TableDiff.php
@@ -3,34 +3,53 @@
namespace Doctrine\DBAL\Schema;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
+
+use function array_filter;
+use function array_values;
+use function count;
/**
* Table Diff.
*/
class TableDiff
{
- /** @var string */
+ /**
+ * @deprecated Use {@see getOldTable()} instead.
+ *
+ * @var string
+ */
public $name;
- /** @var string|false */
+ /**
+ * @deprecated Rename tables via {@link AbstractSchemaManager::renameTable()} instead.
+ *
+ * @var string|false
+ */
public $newName = false;
/**
* All added columns
*
+ * @internal Use {@see getAddedColumns()} instead.
+ *
* @var Column[]
*/
public $addedColumns;
/**
- * All changed columns
+ * All modified columns
+ *
+ * @internal Use {@see getModifiedColumns()} instead.
*
* @var ColumnDiff[]
*/
public $changedColumns = [];
/**
- * All removed columns
+ * All dropped columns
+ *
+ * @internal Use {@see getDroppedColumns()} instead.
*
* @var Column[]
*/
@@ -39,6 +58,8 @@ class TableDiff
/**
* Columns that are only renamed from key to column instance name.
*
+ * @internal Use {@see getRenamedColumns()} instead.
+ *
* @var Column[]
*/
public $renamedColumns = [];
@@ -46,6 +67,8 @@ class TableDiff
/**
* All added indexes.
*
+ * @internal Use {@see getAddedIndexes()} instead.
+ *
* @var Index[]
*/
public $addedIndexes = [];
@@ -53,6 +76,8 @@ class TableDiff
/**
* All changed indexes.
*
+ * @internal Use {@see getModifiedIndexes()} instead.
+ *
* @var Index[]
*/
public $changedIndexes = [];
@@ -60,6 +85,8 @@ class TableDiff
/**
* All removed indexes
*
+ * @internal Use {@see getDroppedIndexes()} instead.
+ *
* @var Index[]
*/
public $removedIndexes = [];
@@ -67,6 +94,8 @@ class TableDiff
/**
* Indexes that are only renamed but are identical otherwise.
*
+ * @internal Use {@see getRenamedIndexes()} instead.
+ *
* @var Index[]
*/
public $renamedIndexes = [];
@@ -74,6 +103,8 @@ class TableDiff
/**
* All added foreign key definitions
*
+ * @internal Use {@see getAddedForeignKeys()} instead.
+ *
* @var ForeignKeyConstraint[]
*/
public $addedForeignKeys = [];
@@ -81,6 +112,8 @@ class TableDiff
/**
* All changed foreign keys
*
+ * @internal Use {@see getModifiedForeignKeys()} instead.
+ *
* @var ForeignKeyConstraint[]
*/
public $changedForeignKeys = [];
@@ -88,45 +121,80 @@ class TableDiff
/**
* All removed foreign keys
*
- * @var ForeignKeyConstraint[]|string[]
+ * @internal Use {@see getDroppedForeignKeys()} instead.
+ *
+ * @var (ForeignKeyConstraint|string)[]
*/
public $removedForeignKeys = [];
- /** @var Table|null */
+ /**
+ * @internal Use {@see getOldTable()} instead.
+ *
+ * @var Table|null
+ */
public $fromTable;
/**
- * Constructs an TableDiff object.
+ * Constructs a TableDiff object.
*
- * @param string $tableName
- * @param Column[] $addedColumns
- * @param ColumnDiff[] $changedColumns
- * @param Column[] $removedColumns
- * @param Index[] $addedIndexes
- * @param Index[] $changedIndexes
- * @param Index[] $removedIndexes
+ * @internal The diff can be only instantiated by a {@see Comparator}.
+ *
+ * @param string $tableName
+ * @param array $addedColumns
+ * @param array $modifiedColumns
+ * @param array $droppedColumns
+ * @param array $addedIndexes
+ * @param array $changedIndexes
+ * @param array $removedIndexes
+ * @param list $addedForeignKeys
+ * @param list $changedForeignKeys
+ * @param list $removedForeignKeys
+ * @param array $renamedColumns
+ * @param array $renamedIndexes
*/
public function __construct(
$tableName,
$addedColumns = [],
- $changedColumns = [],
- $removedColumns = [],
+ $modifiedColumns = [],
+ $droppedColumns = [],
$addedIndexes = [],
$changedIndexes = [],
$removedIndexes = [],
- ?Table $fromTable = null
+ ?Table $fromTable = null,
+ $addedForeignKeys = [],
+ $changedForeignKeys = [],
+ $removedForeignKeys = [],
+ $renamedColumns = [],
+ $renamedIndexes = []
) {
- $this->name = $tableName;
- $this->addedColumns = $addedColumns;
- $this->changedColumns = $changedColumns;
- $this->removedColumns = $removedColumns;
- $this->addedIndexes = $addedIndexes;
- $this->changedIndexes = $changedIndexes;
- $this->removedIndexes = $removedIndexes;
- $this->fromTable = $fromTable;
+ $this->name = $tableName;
+ $this->addedColumns = $addedColumns;
+ $this->changedColumns = $modifiedColumns;
+ $this->renamedColumns = $renamedColumns;
+ $this->removedColumns = $droppedColumns;
+ $this->addedIndexes = $addedIndexes;
+ $this->changedIndexes = $changedIndexes;
+ $this->renamedIndexes = $renamedIndexes;
+ $this->removedIndexes = $removedIndexes;
+ $this->addedForeignKeys = $addedForeignKeys;
+ $this->changedForeignKeys = $changedForeignKeys;
+ $this->removedForeignKeys = $removedForeignKeys;
+
+ if ($fromTable !== null) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5678',
+ 'Not passing the $fromColumn to %s is deprecated.',
+ __METHOD__,
+ );
+ }
+
+ $this->fromTable = $fromTable;
}
/**
+ * @deprecated Use {@see getOldTable()} instead.
+ *
* @param AbstractPlatform $platform The platform to use for retrieving this table diff's name.
*
* @return Identifier
@@ -134,19 +202,160 @@ public function __construct(
public function getName(AbstractPlatform $platform)
{
return new Identifier(
- $this->fromTable instanceof Table ? $this->fromTable->getQuotedName($platform) : $this->name
+ $this->fromTable instanceof Table ? $this->fromTable->getQuotedName($platform) : $this->name,
);
}
/**
+ * @deprecated Rename tables via {@link AbstractSchemaManager::renameTable()} instead.
+ *
* @return Identifier|false
*/
public function getNewName()
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5663',
+ '%s is deprecated. Rename tables via AbstractSchemaManager::renameTable() instead.',
+ __METHOD__,
+ );
+
if ($this->newName === false) {
return false;
}
return new Identifier($this->newName);
}
+
+ public function getOldTable(): ?Table
+ {
+ return $this->fromTable;
+ }
+
+ /** @return list */
+ public function getAddedColumns(): array
+ {
+ return array_values($this->addedColumns);
+ }
+
+ /** @return list */
+ public function getModifiedColumns(): array
+ {
+ return array_values($this->changedColumns);
+ }
+
+ /** @return list */
+ public function getDroppedColumns(): array
+ {
+ return array_values($this->removedColumns);
+ }
+
+ /** @return array */
+ public function getRenamedColumns(): array
+ {
+ return $this->renamedColumns;
+ }
+
+ /** @return list */
+ public function getAddedIndexes(): array
+ {
+ return array_values($this->addedIndexes);
+ }
+
+ /**
+ * @internal This method exists only for compatibility with the current implementation of schema managers
+ * that modify the diff while processing it.
+ */
+ public function unsetAddedIndex(Index $index): void
+ {
+ $this->addedIndexes = array_filter(
+ $this->addedIndexes,
+ static function (Index $addedIndex) use ($index): bool {
+ return $addedIndex !== $index;
+ },
+ );
+ }
+
+ /** @return array */
+ public function getModifiedIndexes(): array
+ {
+ return array_values($this->changedIndexes);
+ }
+
+ /** @return list */
+ public function getDroppedIndexes(): array
+ {
+ return array_values($this->removedIndexes);
+ }
+
+ /**
+ * @internal This method exists only for compatibility with the current implementation of schema managers
+ * that modify the diff while processing it.
+ */
+ public function unsetDroppedIndex(Index $index): void
+ {
+ $this->removedIndexes = array_filter(
+ $this->removedIndexes,
+ static function (Index $removedIndex) use ($index): bool {
+ return $removedIndex !== $index;
+ },
+ );
+ }
+
+ /** @return array */
+ public function getRenamedIndexes(): array
+ {
+ return $this->renamedIndexes;
+ }
+
+ /** @return list */
+ public function getAddedForeignKeys(): array
+ {
+ return $this->addedForeignKeys;
+ }
+
+ /** @return list */
+ public function getModifiedForeignKeys(): array
+ {
+ return $this->changedForeignKeys;
+ }
+
+ /** @return list */
+ public function getDroppedForeignKeys(): array
+ {
+ return $this->removedForeignKeys;
+ }
+
+ /**
+ * @internal This method exists only for compatibility with the current implementation of the schema comparator.
+ *
+ * @param ForeignKeyConstraint|string $foreignKey
+ */
+ public function unsetDroppedForeignKey($foreignKey): void
+ {
+ $this->removedForeignKeys = array_filter(
+ $this->removedForeignKeys,
+ static function ($removedForeignKey) use ($foreignKey): bool {
+ return $removedForeignKey !== $foreignKey;
+ },
+ );
+ }
+
+ /**
+ * Returns whether the diff is empty (contains no changes).
+ */
+ public function isEmpty(): bool
+ {
+ return count($this->addedColumns) === 0
+ && count($this->changedColumns) === 0
+ && count($this->removedColumns) === 0
+ && count($this->renamedColumns) === 0
+ && count($this->addedIndexes) === 0
+ && count($this->changedIndexes) === 0
+ && count($this->removedIndexes) === 0
+ && count($this->renamedIndexes) === 0
+ && count($this->addedForeignKeys) === 0
+ && count($this->changedForeignKeys) === 0
+ && count($this->removedForeignKeys) === 0;
+ }
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php b/app/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php
index cb91becb2..85502e714 100644
--- a/app/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php
+++ b/app/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php
@@ -34,7 +34,7 @@ class UniqueConstraint extends AbstractAsset implements Constraint
*
* @var mixed[]
*/
- private $options;
+ private array $options;
/**
* @param string[] $columns
@@ -78,9 +78,7 @@ public function getQuotedColumns(AbstractPlatform $platform)
return $columns;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getUnquotedColumns(): array
{
return array_map([$this, 'trimQuotes'], $this->getColumns());
@@ -134,17 +132,13 @@ public function hasOption(string $name): bool
return isset($this->options[strtolower($name)]);
}
- /**
- * @return mixed
- */
+ /** @return mixed */
public function getOption(string $name)
{
return $this->options[strtolower($name)];
}
- /**
- * @return mixed[]
- */
+ /** @return mixed[] */
public function getOptions(): array
{
return $this->options;
diff --git a/app/vendor/doctrine/dbal/src/Schema/View.php b/app/vendor/doctrine/dbal/src/Schema/View.php
index ac8d6cb5c..b19f2ad1f 100644
--- a/app/vendor/doctrine/dbal/src/Schema/View.php
+++ b/app/vendor/doctrine/dbal/src/Schema/View.php
@@ -20,9 +20,7 @@ public function __construct($name, $sql)
$this->sql = $sql;
}
- /**
- * @return string
- */
+ /** @return string */
public function getSql()
{
return $this->sql;
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php
index 471690442..3d2ad27c0 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php
@@ -11,6 +11,8 @@
/**
* Abstract Visitor with empty methods for easy extension.
+ *
+ * @deprecated
*/
class AbstractVisitor implements Visitor, NamespaceVisitor
{
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php
index c08fb6fec..e7908c3ee 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php
@@ -6,28 +6,35 @@
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
+use Doctrine\Deprecations\Deprecation;
use function array_merge;
+/** @deprecated Use {@link CreateSchemaObjectsSQLBuilder} instead. */
class CreateSchemaSqlCollector extends AbstractVisitor
{
/** @var string[] */
- private $createNamespaceQueries = [];
+ private array $createNamespaceQueries = [];
/** @var string[] */
- private $createTableQueries = [];
+ private array $createTableQueries = [];
/** @var string[] */
- private $createSequenceQueries = [];
+ private array $createSequenceQueries = [];
/** @var string[] */
- private $createFkConstraintQueries = [];
+ private array $createFkConstraintQueries = [];
- /** @var AbstractPlatform */
- private $platform;
+ private AbstractPlatform $platform;
public function __construct(AbstractPlatform $platform)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5416',
+ 'CreateSchemaSqlCollector is deprecated. Use CreateSchemaObjectsSQLBuilder instead.',
+ );
+
$this->platform = $platform;
}
@@ -71,9 +78,7 @@ public function acceptSequence(Sequence $sequence)
$this->createSequenceQueries[] = $this->platform->getCreateSequenceSQL($sequence);
}
- /**
- * @return void
- */
+ /** @return void */
public function resetQueries()
{
$this->createNamespaceQueries = [];
@@ -91,9 +96,9 @@ public function getQueries()
{
return array_merge(
$this->createNamespaceQueries,
- $this->createTableQueries,
$this->createSequenceQueries,
- $this->createFkConstraintQueries
+ $this->createTableQueries,
+ $this->createFkConstraintQueries,
);
}
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php
index 1b77268b4..0c5730258 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php
@@ -7,6 +7,7 @@
use Doctrine\DBAL\Schema\SchemaException;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
+use Doctrine\Deprecations\Deprecation;
use SplObjectStorage;
use function assert;
@@ -14,23 +15,24 @@
/**
* Gathers SQL statements that allow to completely drop the current schema.
+ *
+ * @deprecated Use {@link DropSchemaObjectsSQLBuilder} instead.
*/
class DropSchemaSqlCollector extends AbstractVisitor
{
- /** @var SplObjectStorage */
- private $constraints;
-
- /** @var SplObjectStorage */
- private $sequences;
-
- /** @var SplObjectStorage */
- private $tables;
-
- /** @var AbstractPlatform */
- private $platform;
+ private SplObjectStorage $constraints;
+ private SplObjectStorage $sequences;
+ private SplObjectStorage $tables;
+ private AbstractPlatform $platform;
public function __construct(AbstractPlatform $platform)
{
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5416',
+ 'DropSchemaSqlCollector is deprecated. Use DropSchemaObjectsSQLBuilder instead.',
+ );
+
$this->platform = $platform;
$this->initializeQueries();
}
@@ -63,17 +65,13 @@ public function acceptSequence(Sequence $sequence)
$this->sequences->attach($sequence);
}
- /**
- * @return void
- */
+ /** @return void */
public function clearQueries()
{
$this->initializeQueries();
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getQueries()
{
$sql = [];
@@ -81,17 +79,20 @@ public function getQueries()
foreach ($this->constraints as $fkConstraint) {
assert($fkConstraint instanceof ForeignKeyConstraint);
$localTable = $this->constraints[$fkConstraint];
- $sql[] = $this->platform->getDropForeignKeySQL($fkConstraint, $localTable);
+ $sql[] = $this->platform->getDropForeignKeySQL(
+ $fkConstraint->getQuotedName($this->platform),
+ $localTable->getQuotedName($this->platform),
+ );
}
foreach ($this->sequences as $sequence) {
assert($sequence instanceof Sequence);
- $sql[] = $this->platform->getDropSequenceSQL($sequence);
+ $sql[] = $this->platform->getDropSequenceSQL($sequence->getQuotedName($this->platform));
}
foreach ($this->tables as $table) {
assert($table instanceof Table);
- $sql[] = $this->platform->getDropTableSQL($table);
+ $sql[] = $this->platform->getDropTableSQL($table->getQuotedName($this->platform));
}
return $sql;
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php
index 5af4678f1..e3c61411e 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php
@@ -18,8 +18,7 @@
*/
class Graphviz extends AbstractVisitor
{
- /** @var string */
- private $output = '';
+ private string $output = '';
/**
* {@inheritdoc}
@@ -33,7 +32,7 @@ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkCons
'dir' => 'back',
'arrowtail' => 'dot',
'arrowhead' => 'normal',
- ]
+ ],
);
}
@@ -60,7 +59,7 @@ public function acceptTable(Table $table)
[
'label' => $this->createTableLabel($table),
'shape' => 'plaintext',
- ]
+ ],
);
}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php
index b0548d606..443824342 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php
@@ -4,6 +4,8 @@
/**
* Visitor that can visit schema namespaces.
+ *
+ * @deprecated
*/
interface NamespaceVisitor
{
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php
index 509eac6f0..c67bf99e8 100644
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php
+++ b/app/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php
@@ -6,6 +6,7 @@
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
+use Doctrine\Deprecations\Deprecation;
/**
* Removes assets from a schema that are not in the default namespace.
@@ -16,12 +17,23 @@
* non default namespaces.
*
* This visitor filters all these non-default namespaced tables and sequences
- * and removes them from the SChema instance.
+ * and removes them from the Schema instance.
+ *
+ * @deprecated Do not use namespaces if the target database platform doesn't support them.
*/
class RemoveNamespacedAssets extends AbstractVisitor
{
- /** @var Schema|null */
- private $schema;
+ private ?Schema $schema = null;
+
+ public function __construct()
+ {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5432',
+ 'RemoveNamespacedAssets is deprecated. Do not use namespaces'
+ . " if the target database platform doesn't support them.",
+ );
+ }
/**
* {@inheritdoc}
diff --git a/app/vendor/doctrine/dbal/src/Schema/Visitor/SchemaDiffVisitor.php b/app/vendor/doctrine/dbal/src/Schema/Visitor/SchemaDiffVisitor.php
deleted file mode 100644
index 040b59f55..000000000
--- a/app/vendor/doctrine/dbal/src/Schema/Visitor/SchemaDiffVisitor.php
+++ /dev/null
@@ -1,50 +0,0 @@
-params[$param] = $variable;
$this->types[$param] = $type;
@@ -163,7 +172,8 @@ public function execute($params = null): Result
Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4580',
- 'Statement::execute() is deprecated, use Statement::executeQuery() or Statement::executeStatement() instead'
+ '%s() is deprecated, use Statement::executeQuery() or Statement::executeStatement() instead',
+ __METHOD__,
);
if ($params !== null) {
@@ -178,7 +188,7 @@ public function execute($params = null): Result
try {
return new Result(
$this->stmt->execute($params),
- $this->conn
+ $this->conn,
);
} catch (Driver\Exception $ex) {
throw $this->conn->convertExceptionDuringQuery($ex, $this->sql, $this->params, $this->types);
@@ -198,6 +208,15 @@ public function execute($params = null): Result
*/
public function executeQuery(array $params = []): Result
{
+ if (func_num_args() > 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::executeQuery() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+ }
+
if ($params === []) {
$params = null; // Workaround as long execute() exists and used internally.
}
@@ -214,6 +233,15 @@ public function executeQuery(array $params = []): Result
*/
public function executeStatement(array $params = []): int
{
+ if (func_num_args() > 0) {
+ Deprecation::trigger(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5556',
+ 'Passing $params to Statement::executeStatement() is deprecated. Bind parameters using'
+ . ' Statement::bindParam() or Statement::bindValue() instead.',
+ );
+ }
+
if ($params === []) {
$params = null; // Workaround as long execute() exists and used internally.
}
diff --git a/app/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php b/app/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php
index 86a2842cb..eb854a594 100644
--- a/app/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php
+++ b/app/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php
@@ -31,16 +31,22 @@
use function is_array;
use function is_string;
+/** @deprecated Use database documentation instead. */
class ReservedWordsCommand extends Command
{
/** @var array */
- private $keywordLists;
+ private array $keywordLists;
- /** @var ConnectionProvider */
- private $connectionProvider;
+ private ConnectionProvider $connectionProvider;
public function __construct(ConnectionProvider $connectionProvider)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5431',
+ 'ReservedWordsCommand is deprecated. Use database documentation instead.',
+ );
+
parent::__construct();
$this->connectionProvider = $connectionProvider;
@@ -80,7 +86,7 @@ public function setKeywordListClass($name, $class)
'doctrine/dbal',
'https://github.com/doctrine/dbal/issues/4510',
'ReservedWordsCommand::setKeywordListClass() is deprecated,'
- . ' use ReservedWordsCommand::setKeywordList() instead.'
+ . ' use ReservedWordsCommand::setKeywordList() instead.',
);
$this->keywordLists[$name] = new $class();
@@ -98,10 +104,10 @@ protected function configure()
'list',
'l',
InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
- 'Keyword-List name.'
+ 'Keyword-List name.',
),
])
- ->setHelp(<<setHelp(<<<'EOT'
Checks if the current database contains tables and columns
with names that are identifiers in this dialect or in other SQL dialects.
@@ -126,8 +132,7 @@ protected function configure()
* pgsql100
* sqlite
* sqlserver
-EOT
- );
+EOT);
}
/**
@@ -139,6 +144,12 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
+ $output->writeln(
+ 'The dbal:reserved-words command is deprecated.'
+ . ' Use the documentation on the used database platform(s) instead.',
+ );
+ $output->writeln('');
+
$conn = $this->getConnection($input);
$keywordLists = $input->getOption('list');
@@ -158,7 +169,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
if (! isset($this->keywordLists[$keywordList])) {
throw new InvalidArgumentException(
"There exists no keyword list with name '" . $keywordList . "'. " .
- 'Known lists: ' . implode(', ', array_keys($this->keywordLists))
+ 'Known lists: ' . implode(', ', array_keys($this->keywordLists)),
);
}
@@ -167,10 +178,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
$output->write(
'Checking keyword violations for ' . implode(', ', $keywordLists) . '...',
- true
+ true,
);
- $schema = $conn->getSchemaManager()->createSchema();
+ $schema = $conn->getSchemaManager()->introspectSchema();
$visitor = new ReservedKeywordsValidator($keywords);
$schema->visit($visitor);
@@ -179,7 +190,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$output->write(
'There are ' . count($violations) . ' reserved keyword violations'
. ' in your database schema:',
- true
+ true,
);
foreach ($violations as $violation) {
diff --git a/app/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php b/app/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php
index a91372061..5bd72ea6a 100644
--- a/app/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php
+++ b/app/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php
@@ -26,8 +26,7 @@
*/
class RunSqlCommand extends Command
{
- /** @var ConnectionProvider */
- private $connectionProvider;
+ private ConnectionProvider $connectionProvider;
public function __construct(ConnectionProvider $connectionProvider)
{
@@ -47,13 +46,12 @@ protected function configure()
new InputOption('depth', null, InputOption::VALUE_REQUIRED, 'Dumping depth of result set (deprecated).'),
new InputOption('force-fetch', null, InputOption::VALUE_NONE, 'Forces fetching the result.'),
])
- ->setHelp(<<setHelp(<<<'EOT'
The %command.name% command executes the given SQL query and
outputs the results:
php %command.full_name% "SELECT * FROM users"
-EOT
- );
+EOT);
}
/**
@@ -104,9 +102,7 @@ private function getConnection(InputInterface $input): Connection
return $this->connectionProvider->getDefaultConnection();
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
private function runQuery(SymfonyStyle $io, Connection $conn, string $sql): void
{
$resultSet = $conn->fetchAllAssociative($sql);
@@ -119,9 +115,7 @@ private function runQuery(SymfonyStyle $io, Connection $conn, string $sql): void
$io->table(array_keys($resultSet[0]), $resultSet);
}
- /**
- * @throws Exception
- */
+ /** @throws Exception */
private function runStatement(SymfonyStyle $io, Connection $conn, string $sql): void
{
$io->success(sprintf('%d rows affected.', $conn->executeStatement($sql)));
diff --git a/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider.php b/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider.php
index 9919e481f..b203692d9 100644
--- a/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider.php
+++ b/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider.php
@@ -8,8 +8,6 @@ interface ConnectionProvider
{
public function getDefaultConnection(): Connection;
- /**
- * @throws ConnectionNotFound in case a connection with the given name does not exist.
- */
+ /** @throws ConnectionNotFound in case a connection with the given name does not exist. */
public function getConnection(string $name): Connection;
}
diff --git a/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider/SingleConnectionProvider.php b/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider/SingleConnectionProvider.php
index 368e0ff3c..941fbd3c2 100644
--- a/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider/SingleConnectionProvider.php
+++ b/app/vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider/SingleConnectionProvider.php
@@ -10,11 +10,9 @@
class SingleConnectionProvider implements ConnectionProvider
{
- /** @var Connection */
- private $connection;
+ private Connection $connection;
- /** @var string */
- private $defaultConnectionName;
+ private string $defaultConnectionName;
public function __construct(Connection $connection, string $defaultConnectionName = 'default')
{
diff --git a/app/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php b/app/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php
index 823a1e80a..e8fa3c60b 100644
--- a/app/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php
+++ b/app/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php
@@ -13,6 +13,8 @@
/**
* Handles running the Console Tools inside Symfony Console context.
+ *
+ * @deprecated Use Symfony Console documentation to bootstrap a command-line application.
*/
class ConsoleRunner
{
@@ -38,9 +40,7 @@ public static function run(ConnectionProvider $connectionProvider, $commands = [
$cli->run();
}
- /**
- * @return void
- */
+ /** @return void */
public static function addCommands(Application $cli, ConnectionProvider $connectionProvider)
{
$cli->addCommands([
diff --git a/app/vendor/doctrine/dbal/src/TransactionIsolationLevel.php b/app/vendor/doctrine/dbal/src/TransactionIsolationLevel.php
index e8dc5d918..9020343ab 100644
--- a/app/vendor/doctrine/dbal/src/TransactionIsolationLevel.php
+++ b/app/vendor/doctrine/dbal/src/TransactionIsolationLevel.php
@@ -26,9 +26,7 @@ final class TransactionIsolationLevel
*/
public const SERIALIZABLE = 4;
- /**
- * @codeCoverageIgnore
- */
+ /** @codeCoverageIgnore */
private function __construct()
{
}
diff --git a/app/vendor/doctrine/dbal/src/Types/ArrayType.php b/app/vendor/doctrine/dbal/src/Types/ArrayType.php
index 3137e03f3..fb202406f 100644
--- a/app/vendor/doctrine/dbal/src/Types/ArrayType.php
+++ b/app/vendor/doctrine/dbal/src/Types/ArrayType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function is_resource;
use function restore_error_handler;
@@ -11,8 +12,13 @@
use function stream_get_contents;
use function unserialize;
+use const E_DEPRECATED;
+use const E_USER_DEPRECATED;
+
/**
* Type that maps a PHP array to a clob SQL type.
+ *
+ * @deprecated Use {@link JsonType} instead.
*/
class ArrayType extends Type
{
@@ -45,6 +51,10 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
$value = is_resource($value) ? stream_get_contents($value) : $value;
set_error_handler(function (int $code, string $message): bool {
+ if ($code === E_DEPRECATED || $code === E_USER_DEPRECATED) {
+ return false;
+ }
+
throw ConversionException::conversionFailedUnserialization($this->getName(), $message);
});
@@ -65,9 +75,18 @@ public function getName()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/BooleanType.php b/app/vendor/doctrine/dbal/src/Types/BooleanType.php
index 68a80ef3f..92f530558 100644
--- a/app/vendor/doctrine/dbal/src/Types/BooleanType.php
+++ b/app/vendor/doctrine/dbal/src/Types/BooleanType.php
@@ -5,6 +5,7 @@
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\DB2Platform;
+use Doctrine\Deprecations\Deprecation;
/**
* Type that maps an SQL boolean to a PHP boolean.
@@ -52,10 +53,19 @@ public function getBindingType()
}
/**
+ * @deprecated
+ *
* @return bool
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
// We require a commented boolean type in order to distinguish between
// boolean and smallint as both (have to) map to the same native type.
return $platform instanceof DB2Platform;
diff --git a/app/vendor/doctrine/dbal/src/Types/ConversionException.php b/app/vendor/doctrine/dbal/src/Types/ConversionException.php
index 278734b9b..154b06d3e 100644
--- a/app/vendor/doctrine/dbal/src/Types/ConversionException.php
+++ b/app/vendor/doctrine/dbal/src/Types/ConversionException.php
@@ -57,7 +57,7 @@ public static function conversionFailedFormat($value, $toType, $expectedFormat,
'Could not convert database value "' . $value . '" to Doctrine Type ' .
$toType . '. Expected format: ' . $expectedFormat,
0,
- $previous
+ $previous,
);
}
@@ -81,7 +81,7 @@ public static function conversionFailedInvalidType(
'Could not convert PHP value %s to type %s. Expected one of the following types: %s',
var_export($value, true),
$toType,
- implode(', ', $possibleTypes)
+ implode(', ', $possibleTypes),
), 0, $previous);
}
@@ -89,7 +89,7 @@ public static function conversionFailedInvalidType(
'Could not convert PHP value of type %s to type %s. Expected one of the following types: %s',
is_object($value) ? get_class($value) : gettype($value),
$toType,
- implode(', ', $possibleTypes)
+ implode(', ', $possibleTypes),
), 0, $previous);
}
@@ -108,7 +108,7 @@ public static function conversionFailedSerialization($value, $format, $error /*,
"Could not convert PHP type '%s' to '%s', as an '%s' error was triggered by the serialization",
$actualType,
$format,
- $error
+ $error,
), 0, func_num_args() >= 4 ? func_get_arg(3) : null);
}
@@ -117,7 +117,7 @@ public static function conversionFailedUnserialization(string $format, string $e
return new self(sprintf(
"Could not convert database value to '%s' as an error was triggered by the unserialization: '%s'",
$format,
- $error
+ $error,
));
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateImmutableType.php b/app/vendor/doctrine/dbal/src/Types/DateImmutableType.php
index 4fbe6a472..98fa6dc61 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateImmutableType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateImmutableType.php
@@ -4,6 +4,7 @@
use DateTimeImmutable;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
/**
* Immutable type of {@see DateType}.
@@ -34,7 +35,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', DateTimeImmutable::class]
+ ['null', DateTimeImmutable::class],
);
}
@@ -53,7 +54,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateFormatString()
+ $platform->getDateFormatString(),
);
}
@@ -62,9 +63,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateIntervalType.php b/app/vendor/doctrine/dbal/src/Types/DateIntervalType.php
index 6ecd4989c..72156f17d 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateIntervalType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateIntervalType.php
@@ -4,6 +4,7 @@
use DateInterval;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use Throwable;
use function substr;
@@ -30,7 +31,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform)
{
$column['length'] = 255;
- return $platform->getVarcharTypeDeclarationSQL($column);
+ return $platform->getStringTypeDeclarationSQL($column);
}
/**
@@ -80,9 +81,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php b/app/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php
index fd7751977..6f7896202 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php
@@ -4,6 +4,7 @@
use DateTimeImmutable;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function date_create_immutable;
@@ -36,7 +37,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', DateTimeImmutable::class]
+ ['null', DateTimeImmutable::class],
);
}
@@ -59,7 +60,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateTimeFormatString()
+ $platform->getDateTimeFormatString(),
);
}
@@ -68,9 +69,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateTimeType.php b/app/vendor/doctrine/dbal/src/Types/DateTimeType.php
index 454295d71..738c6bfb5 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateTimeType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateTimeType.php
@@ -64,7 +64,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateTimeFormatString()
+ $platform->getDateTimeFormatString(),
);
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php b/app/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php
index 6e707e065..222a9c3b0 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php
@@ -4,6 +4,7 @@
use DateTimeImmutable;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
/**
* Immutable type of {@see DateTimeTzType}.
@@ -34,7 +35,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', DateTimeImmutable::class]
+ ['null', DateTimeImmutable::class],
);
}
@@ -53,7 +54,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateTimeTzFormatString()
+ $platform->getDateTimeTzFormatString(),
);
}
@@ -62,9 +63,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateTimeTzType.php b/app/vendor/doctrine/dbal/src/Types/DateTimeTzType.php
index 29672397f..ee08f9d1e 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateTimeTzType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateTimeTzType.php
@@ -56,7 +56,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', 'DateTime']
+ ['null', 'DateTime'],
);
}
@@ -74,7 +74,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateTimeTzFormatString()
+ $platform->getDateTimeTzFormatString(),
);
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DateType.php b/app/vendor/doctrine/dbal/src/Types/DateType.php
index 6f86f5436..533667dd5 100644
--- a/app/vendor/doctrine/dbal/src/Types/DateType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DateType.php
@@ -57,7 +57,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getDateFormatString()
+ $platform->getDateFormatString(),
);
}
diff --git a/app/vendor/doctrine/dbal/src/Types/DecimalType.php b/app/vendor/doctrine/dbal/src/Types/DecimalType.php
index c70067f2b..144e97a04 100644
--- a/app/vendor/doctrine/dbal/src/Types/DecimalType.php
+++ b/app/vendor/doctrine/dbal/src/Types/DecimalType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\DBAL\Platforms\SqlitePlatform;
use function is_float;
use function is_int;
@@ -37,7 +38,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
{
// Some drivers starting from PHP 8.1 can represent decimals as float/int
// See also: https://github.com/doctrine/dbal/pull/4818
- if (PHP_VERSION_ID >= 80100 && (is_float($value) || is_int($value))) {
+ if ((PHP_VERSION_ID >= 80100 || $platform instanceof SqlitePlatform) && (is_float($value) || is_int($value))) {
return (string) $value;
}
diff --git a/app/vendor/doctrine/dbal/src/Types/GuidType.php b/app/vendor/doctrine/dbal/src/Types/GuidType.php
index a4974f9d0..6ce903e2b 100644
--- a/app/vendor/doctrine/dbal/src/Types/GuidType.php
+++ b/app/vendor/doctrine/dbal/src/Types/GuidType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
/**
* Represents a GUID/UUID datatype (both are actually synonyms) in the database.
@@ -27,9 +28,18 @@ public function getName()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return ! $platform->hasNativeGuidType();
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/JsonType.php b/app/vendor/doctrine/dbal/src/Types/JsonType.php
index d28b8b79f..20ee79deb 100644
--- a/app/vendor/doctrine/dbal/src/Types/JsonType.php
+++ b/app/vendor/doctrine/dbal/src/Types/JsonType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use JsonException;
use function is_resource;
@@ -72,9 +73,18 @@ public function getName()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return ! $platform->hasNativeJsonType();
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/ObjectType.php b/app/vendor/doctrine/dbal/src/Types/ObjectType.php
index 49042c1bf..f8bcc9437 100644
--- a/app/vendor/doctrine/dbal/src/Types/ObjectType.php
+++ b/app/vendor/doctrine/dbal/src/Types/ObjectType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function is_resource;
use function restore_error_handler;
@@ -13,6 +14,8 @@
/**
* Type that maps a PHP object to a clob SQL type.
+ *
+ * @deprecated Use {@link JsonType} instead.
*/
class ObjectType extends Type
{
@@ -64,9 +67,18 @@ public function getName()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/SimpleArrayType.php b/app/vendor/doctrine/dbal/src/Types/SimpleArrayType.php
index ee9c7f2df..3ec695cb7 100644
--- a/app/vendor/doctrine/dbal/src/Types/SimpleArrayType.php
+++ b/app/vendor/doctrine/dbal/src/Types/SimpleArrayType.php
@@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function count;
use function explode;
@@ -62,9 +63,18 @@ public function getName()
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/StringType.php b/app/vendor/doctrine/dbal/src/Types/StringType.php
index 4e7bd55d0..e409c2a8f 100644
--- a/app/vendor/doctrine/dbal/src/Types/StringType.php
+++ b/app/vendor/doctrine/dbal/src/Types/StringType.php
@@ -14,7 +14,7 @@ class StringType extends Type
*/
public function getSQLDeclaration(array $column, AbstractPlatform $platform)
{
- return $platform->getVarcharTypeDeclarationSQL($column);
+ return $platform->getStringTypeDeclarationSQL($column);
}
/**
diff --git a/app/vendor/doctrine/dbal/src/Types/TimeImmutableType.php b/app/vendor/doctrine/dbal/src/Types/TimeImmutableType.php
index 8d2c1517c..eef8ba91f 100644
--- a/app/vendor/doctrine/dbal/src/Types/TimeImmutableType.php
+++ b/app/vendor/doctrine/dbal/src/Types/TimeImmutableType.php
@@ -4,6 +4,7 @@
use DateTimeImmutable;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
/**
* Immutable type of {@see TimeType}.
@@ -34,7 +35,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', DateTimeImmutable::class]
+ ['null', DateTimeImmutable::class],
);
}
@@ -53,7 +54,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getTimeFormatString()
+ $platform->getTimeFormatString(),
);
}
@@ -62,9 +63,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/TimeType.php b/app/vendor/doctrine/dbal/src/Types/TimeType.php
index 4f2c8c631..9c8f03e98 100644
--- a/app/vendor/doctrine/dbal/src/Types/TimeType.php
+++ b/app/vendor/doctrine/dbal/src/Types/TimeType.php
@@ -57,7 +57,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedFormat(
$value,
$this->getName(),
- $platform->getTimeFormatString()
+ $platform->getTimeFormatString(),
);
}
diff --git a/app/vendor/doctrine/dbal/src/Types/Type.php b/app/vendor/doctrine/dbal/src/Types/Type.php
index c2ae2be5a..536cf36f2 100644
--- a/app/vendor/doctrine/dbal/src/Types/Type.php
+++ b/app/vendor/doctrine/dbal/src/Types/Type.php
@@ -5,6 +5,7 @@
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function array_map;
use function get_class;
@@ -47,12 +48,9 @@ abstract class Type
Types::TIME_IMMUTABLE => TimeImmutableType::class,
];
- /** @var TypeRegistry|null */
- private static $typeRegistry;
+ private static ?TypeRegistry $typeRegistry = null;
- /**
- * @internal Do not instantiate directly - use {@see Type::addType()} method instead.
- */
+ /** @internal Do not instantiate directly - use {@see Type::addType()} method instead. */
final public function __construct()
{
}
@@ -102,19 +100,15 @@ abstract public function getSQLDeclaration(array $column, AbstractPlatform $plat
/**
* Gets the name of this type.
*
- * @return string
+ * @deprecated this method will be removed in Doctrine DBAL 4.0.
*
- * @todo Needed?
+ * @return string
*/
abstract public function getName();
final public static function getTypeRegistry(): TypeRegistry
{
- if (self::$typeRegistry === null) {
- self::$typeRegistry = self::createTypeRegistry();
- }
-
- return self::$typeRegistry;
+ return self::$typeRegistry ??= self::createTypeRegistry();
}
private static function createTypeRegistry(): TypeRegistry
@@ -210,7 +204,7 @@ public static function getTypesMap()
static function (Type $type): string {
return get_class($type);
},
- self::getTypeRegistry()->getMap()
+ self::getTypeRegistry()->getMap(),
);
}
@@ -273,10 +267,19 @@ public function getMappedDatabaseTypes(AbstractPlatform $platform)
* one of those types as commented, which will have Doctrine use an SQL
* comment to typehint the actual Doctrine Type.
*
+ * @deprecated
+ *
* @return bool
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return false;
}
}
diff --git a/app/vendor/doctrine/dbal/src/Types/TypeRegistry.php b/app/vendor/doctrine/dbal/src/Types/TypeRegistry.php
index ce33b951a..b5e800ad1 100644
--- a/app/vendor/doctrine/dbal/src/Types/TypeRegistry.php
+++ b/app/vendor/doctrine/dbal/src/Types/TypeRegistry.php
@@ -16,11 +16,9 @@
final class TypeRegistry
{
/** @var array Map of type names and their corresponding flyweight objects. */
- private $instances;
+ private array $instances;
- /**
- * @param array $instances
- */
+ /** @param array $instances */
public function __construct(array $instances = [])
{
$this->instances = $instances;
diff --git a/app/vendor/doctrine/dbal/src/Types/Types.php b/app/vendor/doctrine/dbal/src/Types/Types.php
index 56bf3f51c..54b0dfecc 100644
--- a/app/vendor/doctrine/dbal/src/Types/Types.php
+++ b/app/vendor/doctrine/dbal/src/Types/Types.php
@@ -9,7 +9,9 @@
*/
final class Types
{
- public const ARRAY = 'array';
+ /** @deprecated Use {@link Types::JSON} instead. */
+ public const ARRAY = 'array';
+
public const ASCII_STRING = 'ascii_string';
public const BIGINT = 'bigint';
public const BINARY = 'binary';
@@ -27,17 +29,18 @@ final class Types
public const GUID = 'guid';
public const INTEGER = 'integer';
public const JSON = 'json';
- public const OBJECT = 'object';
- public const SIMPLE_ARRAY = 'simple_array';
- public const SMALLINT = 'smallint';
- public const STRING = 'string';
- public const TEXT = 'text';
- public const TIME_MUTABLE = 'time';
- public const TIME_IMMUTABLE = 'time_immutable';
- /**
- * @codeCoverageIgnore
- */
+ /** @deprecated Use {@link Types::JSON} instead. */
+ public const OBJECT = 'object';
+
+ public const SIMPLE_ARRAY = 'simple_array';
+ public const SMALLINT = 'smallint';
+ public const STRING = 'string';
+ public const TEXT = 'text';
+ public const TIME_MUTABLE = 'time';
+ public const TIME_IMMUTABLE = 'time_immutable';
+
+ /** @codeCoverageIgnore */
private function __construct()
{
}
diff --git a/app/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php b/app/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php
index f4f5e3ec3..24bddc443 100644
--- a/app/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php
+++ b/app/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php
@@ -4,6 +4,7 @@
use DateTimeImmutable;
use Doctrine\DBAL\Platforms\AbstractPlatform;
+use Doctrine\Deprecations\Deprecation;
use function date_create_immutable;
@@ -36,7 +37,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform)
throw ConversionException::conversionFailedInvalidType(
$value,
$this->getName(),
- ['null', DateTimeImmutable::class]
+ ['null', DateTimeImmutable::class],
);
}
@@ -60,9 +61,18 @@ public function convertToPHPValue($value, AbstractPlatform $platform)
/**
* {@inheritdoc}
+ *
+ * @deprecated
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
+ Deprecation::triggerIfCalledFromOutside(
+ 'doctrine/dbal',
+ 'https://github.com/doctrine/dbal/pull/5509',
+ '%s is deprecated.',
+ __METHOD__,
+ );
+
return true;
}
}
diff --git a/app/vendor/symfony/service-contracts/.gitignore b/app/vendor/symfony/service-contracts/.gitignore
new file mode 100644
index 000000000..c49a5d8df
--- /dev/null
+++ b/app/vendor/symfony/service-contracts/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml
diff --git a/app/vendor/symfony/service-contracts/Attribute/Required.php b/app/vendor/symfony/service-contracts/Attribute/Required.php
new file mode 100644
index 000000000..9df851189
--- /dev/null
+++ b/app/vendor/symfony/service-contracts/Attribute/Required.php
@@ -0,0 +1,25 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service\Attribute;
+
+/**
+ * A required dependency.
+ *
+ * This attribute indicates that a property holds a required dependency. The annotated property or method should be
+ * considered during the instantiation process of the containing class.
+ *
+ * @author Alexander M. Turek
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Required
+{
+}
diff --git a/app/vendor/symfony/service-contracts/Attribute/SubscribedService.php b/app/vendor/symfony/service-contracts/Attribute/SubscribedService.php
new file mode 100644
index 000000000..10d1bc38e
--- /dev/null
+++ b/app/vendor/symfony/service-contracts/Attribute/SubscribedService.php
@@ -0,0 +1,33 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service\Attribute;
+
+use Symfony\Contracts\Service\ServiceSubscriberTrait;
+
+/**
+ * Use with {@see ServiceSubscriberTrait} to mark a method's return type
+ * as a subscribed service.
+ *
+ * @author Kevin Bond
+ */
+#[\Attribute(\Attribute::TARGET_METHOD)]
+final class SubscribedService
+{
+ /**
+ * @param string|null $key The key to use for the service
+ * If null, use "ClassName::methodName"
+ */
+ public function __construct(
+ public ?string $key = null
+ ) {
+ }
+}
diff --git a/app/vendor/symfony/service-contracts/CHANGELOG.md b/app/vendor/symfony/service-contracts/CHANGELOG.md
new file mode 100644
index 000000000..7932e2613
--- /dev/null
+++ b/app/vendor/symfony/service-contracts/CHANGELOG.md
@@ -0,0 +1,5 @@
+CHANGELOG
+=========
+
+The changelog is maintained for all Symfony contracts at the following URL:
+https://github.com/symfony/contracts/blob/main/CHANGELOG.md
diff --git a/app/vendor/symfony/service-contracts/LICENSE b/app/vendor/symfony/service-contracts/LICENSE
index 3f853aaf3..74cdc2dbf 100644
--- a/app/vendor/symfony/service-contracts/LICENSE
+++ b/app/vendor/symfony/service-contracts/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2018-2019 Fabien Potencier
+Copyright (c) 2018-2022 Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/app/vendor/symfony/service-contracts/README.md b/app/vendor/symfony/service-contracts/README.md
index d033a439b..41e054a10 100644
--- a/app/vendor/symfony/service-contracts/README.md
+++ b/app/vendor/symfony/service-contracts/README.md
@@ -6,4 +6,4 @@ A set of abstractions extracted out of the Symfony components.
Can be used to build on semantics that the Symfony components proved useful - and
that already have battle tested implementations.
-See https://github.com/symfony/contracts/blob/master/README.md for more information.
+See https://github.com/symfony/contracts/blob/main/README.md for more information.
diff --git a/app/vendor/symfony/service-contracts/ServiceLocatorTrait.php b/app/vendor/symfony/service-contracts/ServiceLocatorTrait.php
index 71b1b7460..19d3e80ff 100644
--- a/app/vendor/symfony/service-contracts/ServiceLocatorTrait.php
+++ b/app/vendor/symfony/service-contracts/ServiceLocatorTrait.php
@@ -14,6 +14,10 @@
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
+// Help opcache.preload discover always-needed symbols
+class_exists(ContainerExceptionInterface::class);
+class_exists(NotFoundExceptionInterface::class);
+
/**
* A trait to help implement ServiceProviderInterface.
*
@@ -22,9 +26,9 @@
*/
trait ServiceLocatorTrait
{
- private $factories;
- private $loading = [];
- private $providedTypes;
+ private array $factories;
+ private array $loading = [];
+ private array $providedTypes;
/**
* @param callable[] $factories
@@ -37,7 +41,7 @@ public function __construct(array $factories)
/**
* {@inheritdoc}
*/
- public function has($id)
+ public function has(string $id): bool
{
return isset($this->factories[$id]);
}
@@ -45,7 +49,7 @@ public function has($id)
/**
* {@inheritdoc}
*/
- public function get($id)
+ public function get(string $id): mixed
{
if (!isset($this->factories[$id])) {
throw $this->createNotFoundException($id);
@@ -72,7 +76,7 @@ public function get($id)
*/
public function getProvidedServices(): array
{
- if (null === $this->providedTypes) {
+ if (!isset($this->providedTypes)) {
$this->providedTypes = [];
foreach ($this->factories as $name => $factory) {
@@ -81,7 +85,7 @@ public function getProvidedServices(): array
} else {
$type = (new \ReflectionFunction($factory))->getReturnType();
- $this->providedTypes[$name] = $type ? ($type->allowsNull() ? '?' : '').$type->getName() : '?';
+ $this->providedTypes[$name] = $type ? ($type->allowsNull() ? '?' : '').($type instanceof \ReflectionNamedType ? $type->getName() : $type) : '?';
}
}
}
diff --git a/app/vendor/symfony/service-contracts/ServiceProviderInterface.php b/app/vendor/symfony/service-contracts/ServiceProviderInterface.php
index c60ad0bd4..e78827ca4 100644
--- a/app/vendor/symfony/service-contracts/ServiceProviderInterface.php
+++ b/app/vendor/symfony/service-contracts/ServiceProviderInterface.php
@@ -18,9 +18,23 @@
*
* @author Nicolas Grekas
* @author Mateusz Sip
+ *
+ * @template T of mixed
*/
interface ServiceProviderInterface extends ContainerInterface
{
+ /**
+ * {@inheritdoc}
+ *
+ * @return T
+ */
+ public function get(string $id): mixed;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has(string $id): bool;
+
/**
* Returns an associative array of service types keyed by the identifiers provided by the current container.
*
diff --git a/app/vendor/symfony/service-contracts/ServiceSubscriberInterface.php b/app/vendor/symfony/service-contracts/ServiceSubscriberInterface.php
index 8bb320f5b..881ab971a 100644
--- a/app/vendor/symfony/service-contracts/ServiceSubscriberInterface.php
+++ b/app/vendor/symfony/service-contracts/ServiceSubscriberInterface.php
@@ -47,7 +47,7 @@ interface ServiceSubscriberInterface
* * ['?Psr\Log\LoggerInterface'] is a shortcut for
* * ['Psr\Log\LoggerInterface' => '?Psr\Log\LoggerInterface']
*
- * @return array The required service types, optionally keyed by service names
+ * @return string[] The required service types, optionally keyed by service names
*/
- public static function getSubscribedServices();
+ public static function getSubscribedServices(): array;
}
diff --git a/app/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/app/vendor/symfony/service-contracts/ServiceSubscriberTrait.php
index ceaef6fa1..e8c9b1704 100644
--- a/app/vendor/symfony/service-contracts/ServiceSubscriberTrait.php
+++ b/app/vendor/symfony/service-contracts/ServiceSubscriberTrait.php
@@ -12,50 +12,65 @@
namespace Symfony\Contracts\Service;
use Psr\Container\ContainerInterface;
+use Symfony\Contracts\Service\Attribute\Required;
+use Symfony\Contracts\Service\Attribute\SubscribedService;
/**
* Implementation of ServiceSubscriberInterface that determines subscribed services from
- * private method return types. Service ids are available as "ClassName::methodName".
+ * method return types. Service ids are available as "ClassName::methodName".
*
* @author Kevin Bond
*/
trait ServiceSubscriberTrait
{
/** @var ContainerInterface */
- private $container;
+ protected $container;
+ /**
+ * {@inheritdoc}
+ */
public static function getSubscribedServices(): array
{
- static $services;
+ $services = method_exists(get_parent_class(self::class) ?: '', __FUNCTION__) ? parent::getSubscribedServices() : [];
- if (null !== $services) {
- return $services;
- }
+ foreach ((new \ReflectionClass(self::class))->getMethods() as $method) {
+ if (self::class !== $method->getDeclaringClass()->name) {
+ continue;
+ }
- $services = \is_callable(['parent', __FUNCTION__]) ? parent::getSubscribedServices() : [];
+ if (!$attribute = $method->getAttributes(SubscribedService::class)[0] ?? null) {
+ continue;
+ }
- foreach ((new \ReflectionClass(self::class))->getMethods() as $method) {
if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) {
- continue;
+ throw new \LogicException(sprintf('Cannot use "%s" on method "%s::%s()" (can only be used on non-static, non-abstract methods with no parameters).', SubscribedService::class, self::class, $method->name));
+ }
+
+ if (!$returnType = $method->getReturnType()) {
+ throw new \LogicException(sprintf('Cannot use "%s" on methods without a return type in "%s::%s()".', SubscribedService::class, $method->name, self::class));
}
- if (self::class === $method->getDeclaringClass()->name && ($returnType = $method->getReturnType()) && !$returnType->isBuiltin()) {
- $services[self::class.'::'.$method->name] = '?'.$returnType->getName();
+ $serviceId = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType;
+
+ if ($returnType->allowsNull()) {
+ $serviceId = '?'.$serviceId;
}
+
+ $services[$attribute->newInstance()->key ?? self::class.'::'.$method->name] = $serviceId;
}
return $services;
}
- /**
- * @required
- */
- public function setContainer(ContainerInterface $container)
+ #[Required]
+ public function setContainer(ContainerInterface $container): ?ContainerInterface
{
$this->container = $container;
- if (\is_callable(['parent', __FUNCTION__])) {
+ if (method_exists(get_parent_class(self::class) ?: '', __FUNCTION__)) {
return parent::setContainer($container);
}
+
+ return null;
}
}
diff --git a/app/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php b/app/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php
index 69594583f..88f6a0687 100644
--- a/app/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php
+++ b/app/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php
@@ -15,9 +15,9 @@
use Psr\Container\ContainerInterface;
use Symfony\Contracts\Service\ServiceLocatorTrait;
-class ServiceLocatorTest extends TestCase
+abstract class ServiceLocatorTest extends TestCase
{
- public function getServiceLocator(array $factories)
+ protected function getServiceLocator(array $factories): ContainerInterface
{
return new class($factories) implements ContainerInterface {
use ServiceLocatorTrait;
@@ -64,12 +64,12 @@ public function testGetDoesNotMemoize()
$this->assertSame(2, $i);
}
- /**
- * @expectedException \Psr\Container\NotFoundExceptionInterface
- * @expectedExceptionMessage The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.
- */
public function testThrowsOnUndefinedInternalService()
{
+ if (!$this->getExpectedException()) {
+ $this->expectException(\Psr\Container\NotFoundExceptionInterface::class);
+ $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.');
+ }
$locator = $this->getServiceLocator([
'foo' => function () use (&$locator) { return $locator->get('bar'); },
]);
@@ -77,12 +77,10 @@ public function testThrowsOnUndefinedInternalService()
$locator->get('foo');
}
- /**
- * @expectedException \Psr\Container\ContainerExceptionInterface
- * @expectedExceptionMessage Circular reference detected for service "bar", path: "bar -> baz -> bar".
- */
public function testThrowsOnCircularReference()
{
+ $this->expectException(\Psr\Container\ContainerExceptionInterface::class);
+ $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".');
$locator = $this->getServiceLocator([
'foo' => function () use (&$locator) { return $locator->get('bar'); },
'bar' => function () use (&$locator) { return $locator->get('baz'); },
diff --git a/app/vendor/symfony/service-contracts/composer.json b/app/vendor/symfony/service-contracts/composer.json
index 54341174c..e7e4a64df 100644
--- a/app/vendor/symfony/service-contracts/composer.json
+++ b/app/vendor/symfony/service-contracts/composer.json
@@ -16,19 +16,29 @@
}
],
"require": {
- "php": "^7.1.3"
+ "php": ">=8.1",
+ "psr/container": "^2.0"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"suggest": {
- "psr/container": "",
"symfony/service-implementation": ""
},
"autoload": {
- "psr-4": { "Symfony\\Contracts\\Service\\": "" }
+ "psr-4": { "Symfony\\Contracts\\Service\\": "" },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
},
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-main": "3.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
}
}