From 13bcf73178f854c64b4432f19c3f805f2a67ee2a Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Fri, 20 Jul 2012 16:30:26 +0000 Subject: [PATCH] fix for 5.4 PHP Strict Standards: Declaration of ADODB2_mysql::_CreateSuffix() should be compatible with ADODB_DataDict::_CreateSuffix --- phpgwapi/inc/adodb/adodb-datadict.inc.php | 254 +++++++++--------- .../inc/adodb/datadict/datadict-mysql.inc.php | 80 +++--- .../adodb/datadict/datadict-postgres.inc.php | 100 +++---- 3 files changed, 217 insertions(+), 217 deletions(-) diff --git a/phpgwapi/inc/adodb/adodb-datadict.inc.php b/phpgwapi/inc/adodb/adodb-datadict.inc.php index 78f19acb80..71e1f6c86e 100644 --- a/phpgwapi/inc/adodb/adodb-datadict.inc.php +++ b/phpgwapi/inc/adodb/adodb-datadict.inc.php @@ -2,14 +2,14 @@ /** V4.65 22 July 2005 (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved. - Released under both BSD license and Lesser GPL library license. - Whenever there is any discrepancy between the two licenses, + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. - + Set tabs to 4 for best viewing. - + DOCUMENTATION: - + See adodb/tests/test-datadict.php for docs and examples. */ @@ -42,13 +42,13 @@ if (!function_exists('ctype_alnum')) { /** Parse arguments, treat "text" (text) and 'text' as quotation marks. To escape, use "" or '' or )) - + Will read in "abc def" sans quotes, as: abc def Same with 'abc def'. However if `abc def`, then will read in as `abc def` - + @param endstmtchar Character that indicates end of statement - @param tokenchars Include the following characters in tokens apart from A-Z and 0-9 + @param tokenchars Include the following characters in tokens apart from A-Z and 0-9 @returns 2 dimensional array containing parsed tokens. */ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') @@ -61,7 +61,7 @@ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') $tokens[$stmtno] = array(); $max = strlen($args); $quoted = false; - + while ($pos < $max) { $ch = substr($args,$pos,1); switch($ch) { @@ -76,17 +76,17 @@ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') } break; } - + $tokarr[] = $ch; break; - + case '`': if ($intoken) $tokarr[] = $ch; case '(': - case ')': + case ')': case '"': case "'": - + if ($intoken) { if (empty($endquote)) { $tokens[$stmtno][] = implode('',$tokarr); @@ -108,9 +108,9 @@ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') } } else $tokarr[] = $ch; - + }else { - + if ($ch == '(') $endquote = ')'; else $endquote = $ch; $quoted = true; @@ -119,27 +119,27 @@ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') if ($ch == '`') $tokarr[] = '`'; } break; - + default: - + if (!$intoken) { if ($ch == $endstmtchar) { $stmtno += 1; $tokens[$stmtno] = array(); break; } - + $intoken = true; $quoted = false; $endquote = false; $tokarr = array(); - + } - + if ($quoted) $tokarr[] = $ch; else if (ctype_alnum($ch) || strpos($tokenchars,$ch) !== false) $tokarr[] = $ch; else { - if ($ch == $endstmtchar) { + if ($ch == $endstmtchar) { $tokens[$stmtno][] = implode('',$tokarr); $stmtno += 1; $tokens[$stmtno] = array(); @@ -155,7 +155,7 @@ function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') $pos += 1; } if ($intoken) $tokens[$stmtno][] = implode('',$tokarr); - + return $tokens; } @@ -164,7 +164,7 @@ class ADODB_DataDict { var $connection; var $debug = false; var $dropTable = 'DROP TABLE %s'; - var $renameTable = 'RENAME TABLE %s TO %s'; + var $renameTable = 'RENAME TABLE %s TO %s'; var $dropIndex = 'DROP INDEX %s'; var $addCol = ' ADD'; var $alterCol = ' ALTER COLUMN'; @@ -179,66 +179,66 @@ class ADODB_DataDict { var $invalidResizeTypes4 = array('CLOB','BLOB','TEXT','DATE','TIME'); // for changetablesql var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob /// in other words, we use a text area for editting. - + function GetCommentSQL($table,$col) { return false; } - + function SetCommentSQL($table,$col,$cmt) { return false; } - + function MetaTables() { if (!$this->connection->IsConnected()) return array(); return $this->connection->MetaTables(); } - + function MetaColumns($tab, $upper=true, $schema=false) { if (!$this->connection->IsConnected()) return array(); return $this->connection->MetaColumns($this->TableName($tab), $upper, $schema); } - + function MetaPrimaryKeys($tab,$owner=false,$intkey=false) { if (!$this->connection->IsConnected()) return array(); return $this->connection->MetaPrimaryKeys($this->TableName($tab), $owner, $intkey); } - + function MetaIndexes($table, $primary = false, $owner = false) { if (!$this->connection->IsConnected()) return array(); return $this->connection->MetaIndexes($this->TableName($table), $primary, $owner); } - + function MetaType($t,$len=-1,$fieldobj=false) { return ADORecordSet::MetaType($t,$len,$fieldobj); } - + function NameQuote($name = NULL,$allowBrackets=false) { if (!is_string($name)) { return FALSE; } - + $name = trim($name); - + if ( !is_object($this->connection) ) { return $name; } - + $quote = $this->connection->nameQuote; - + // if name is of the form `name`, quote it if ( preg_match('/^`(.+)`$/', $name, $matches) ) { return $quote . $matches[1] . $quote; } - - // if brackets are allowed, quote only the rest, + + // if brackets are allowed, quote only the rest, // to allow to limit indexes on colums, eg "column(32)" if ($allowBrackets && preg_match('/^(.*) *(\(\d+\))$/',$name,$matches)) { return $quote . $matches[1] . $quote . ' '. $matches[2]; @@ -247,17 +247,17 @@ class ADODB_DataDict { // not used stock ADOdb code, which only quotes names with special chars, // which does not help with column names using reserved words, eg. "timestamp" in phpfreechat - + // if name contains special characters, quote it $regex = ($allowBrackets) ? $this->nameRegexBrackets : $this->nameRegex; - + if ( !preg_match('/^[' . $regex . ']+$/', $name) ) { return $quote . $name . $quote; } - + return $name; } - + function TableName($name) { if ( $this->schema ) { @@ -265,7 +265,7 @@ class ADODB_DataDict { } return $this->NameQuote($name); } - + // Executes the sql array returned by GetTableSQL and GetIndexSQL function ExecuteSQLArray($sql, $continueOnError = true) { @@ -273,7 +273,7 @@ class ADODB_DataDict { $conn = &$this->connection; $saved = $conn->debug; foreach($sql as $line) { - + if ($this->debug) $conn->debug = true; $ok = $conn->Execute($line); $conn->debug = $saved; @@ -285,43 +285,43 @@ class ADODB_DataDict { } return $rez; } - + /* Returns the actual type given a character code. - + C: varchar X: CLOB (character large object) or largest varchar size if CLOB is not supported C2: Multibyte varchar X2: Multibyte CLOB - + B: BLOB (binary large object) - + D: Date - T: Date-time + T: Date-time L: Integer field suitable for storing booleans (0 or 1) I: Integer F: Floating point number N: Numeric or decimal number */ - + function ActualType($meta) { return $meta; } - + function CreateDatabase($dbname,$options=false) { $options = $this->_Options($options); $sql = array(); - + $s = 'CREATE DATABASE ' . $this->NameQuote($dbname); if (isset($options[$this->upperName])) $s .= ' '.$options[$this->upperName]; - + $sql[] = $s; return $sql; } - + /* Generates the SQL to create index. Returns an array of sql strings. */ @@ -330,25 +330,25 @@ class ADODB_DataDict { if (!is_array($flds)) { $flds = explode(',',$flds); } - + foreach($flds as $key => $fld) { # some indexes can use partial fields, eg. index first 32 chars of "name" with NAME(32) $flds[$key] = $this->NameQuote($fld,$allowBrackets=true); } - + return $this->_IndexSQL($this->NameQuote($idxname), $this->TableName($tabname), $flds, $this->_Options($idxoptions)); } - + function DropIndexSQL ($idxname, $tabname = NULL) { return array(sprintf($this->dropIndex, $this->NameQuote($idxname), $this->TableName($tabname))); } - + function SetSchema($schema) { $this->schema = $schema; } - + function AddColumnSQL($tabname, $flds) { $tabname = $this->TableName ($tabname); @@ -360,7 +360,7 @@ class ADODB_DataDict { } return $sql; } - + /** * Change the definition of one column * @@ -383,7 +383,7 @@ class ADODB_DataDict { } return $sql; } - + /** * Rename one column * @@ -404,7 +404,7 @@ class ADODB_DataDict { } return array(sprintf($this->renameColumn,$tabname,$this->NameQuote($oldcolumn),$this->NameQuote($newcolumn),$column_def)); } - + /** * Drop one column * @@ -427,36 +427,36 @@ class ADODB_DataDict { } return $sql; } - + function DropTableSQL($tabname) { return array (sprintf($this->dropTable, $this->TableName($tabname))); } - + function RenameTableSQL($tabname,$newname) { return array (sprintf($this->renameTable, $this->TableName($tabname),$this->TableName($newname))); - } - + } + /* Generate the SQL to create table. Returns an array of sql strings. */ function CreateTableSQL($tabname, $flds, $tableoptions=false) { if (!$tableoptions) $tableoptions = array(); - + list($lines,$pkey) = $this->_GenFields($flds, true); - + $taboptions = $this->_Options($tableoptions); $tabname = $this->TableName ($tabname); $sql = $this->_TableSQL($tabname,$lines,$pkey,$taboptions); - + $tsql = $this->_Triggers($tabname,$taboptions); foreach($tsql as $s) $sql[] = $s; - + return $sql; } - + function _GenFields($flds,$widespacing=false) { if (is_string($flds)) { @@ -470,7 +470,7 @@ class ADODB_DataDict { foreach($f0 as $token) { switch (strtoupper($token)) { case 'CONSTRAINT': - case 'DEFAULT': + case 'DEFAULT': $hasparam = $token; break; default: @@ -481,7 +481,7 @@ class ADODB_DataDict { } } $flds[] = $f1; - + } } $this->autoIncrement = false; @@ -489,7 +489,7 @@ class ADODB_DataDict { $pkey = array(); foreach($flds as $fld) { $fld = _array_change_key_case($fld); - + $fname = false; $fdefault = false; $fautoinc = false; @@ -503,20 +503,20 @@ class ADODB_DataDict { $fconstraint = false; $fnotnull = false; $funsigned = false; - + //----------------- // Parse attributes foreach($fld as $attr => $v) { if ($attr == 2 && is_numeric($v)) $attr = 'SIZE'; else if (is_numeric($attr) && $attr > 1 && !is_numeric($v)) $attr = strtoupper($v); - + switch($attr) { case '0': case 'NAME': $fname = $v; break; case '1': case 'TYPE': $ty = $v; $ftype = $this->ActualType(strtoupper($v)); break; - - case 'SIZE': + + case 'SIZE': $dotat = strpos($v,'.'); if ($dotat === false) $dotat = strpos($v,','); if ($dotat === false) $fsize = $v; else { @@ -538,33 +538,33 @@ class ADODB_DataDict { case 'CONSTRAINT': $fconstraint = $v; break; } //switch } // foreach $fld - + //-------------------- // VALIDATE FIELD INFO if (!strlen($fname)) { if ($this->debug) ADOConnection::outp("Undefined NAME"); return false; } - + $fid = strtoupper(preg_replace('/^`(.+)`$/', '$1', $fname)); $fname = $this->NameQuote($fname); - + if (!strlen($ftype)) { if ($this->debug) ADOConnection::outp("Undefined TYPE for field '$fname'"); return false; } else { $ftype = strtoupper($ftype); } - + $ftype = $this->_GetSize($ftype, $ty, $fsize, $fprec); - + if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls - + if ($fprimary) $pkey[] = $fname; - + // some databases do not allow blobs to have defaults if ($ty == 'X') $fdefault = false; - + //-------------------- // CONSTRUCT FIELD SQL if ($fdefts) { @@ -580,20 +580,20 @@ class ADODB_DataDict { $fdefault = $this->connection->sysDate; } } else if ($fdefault !== false && !$fnoquote) - if ($ty == 'C' or $ty == 'X' or + if ($ty == 'C' or $ty == 'X' or ( substr($fdefault,0,1) != "'" && !is_numeric($fdefault))) - if (strlen($fdefault) != 1 && substr($fdefault,0,1) == ' ' && substr($fdefault,strlen($fdefault)-1) == ' ') + if (strlen($fdefault) != 1 && substr($fdefault,0,1) == ' ' && substr($fdefault,strlen($fdefault)-1) == ' ') $fdefault = trim($fdefault); else if (strtolower($fdefault) != 'null') $fdefault = $this->connection->qstr($fdefault); $suffix = $this->_CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned); - + if ($widespacing) $fname = str_pad($fname,24); $lines[$fid] = $fname.' '.$ftype.$suffix; - + if ($fautoinc) $this->autoIncrement = true; } // foreach $flds - + return array($lines,$pkey); } /* @@ -610,56 +610,56 @@ class ADODB_DataDict { } return $ftype; } - - + + // return string must begin with space - function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint) - { + function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { $suffix = ''; if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; if ($fnotnull) $suffix .= ' NOT NULL'; if ($fconstraint) $suffix .= ' '.$fconstraint; return $suffix; } - + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) { $sql = array(); - + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { $sql[] = sprintf ($this->dropIndex, $idxname); if ( isset($idxoptions['DROP']) ) return $sql; } - + if ( empty ($flds) ) { return $sql; } - + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; - + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' '; - + if ( isset($idxoptions[$this->upperName]) ) $s .= $idxoptions[$this->upperName]; - + if ( is_array($flds) ) $flds = implode(', ',$flds); $s .= '(' . $flds . ')'; $sql[] = $s; - + return $sql; } - + function _DropAutoIncrement($tabname) { return false; } - + function _TableSQL($tabname,$lines,$pkey,$tableoptions) { $sql = array(); - + if (isset($tableoptions['REPLACE']) || isset ($tableoptions['DROP'])) { $sql[] = sprintf($this->dropTable,$tabname); if ($this->autoIncrement) { @@ -676,19 +676,19 @@ class ADODB_DataDict { $s .= ",\n PRIMARY KEY ("; $s .= implode(", ",$pkey).")"; } - if (isset($tableoptions['CONSTRAINTS'])) + if (isset($tableoptions['CONSTRAINTS'])) $s .= "\n".$tableoptions['CONSTRAINTS']; - - if (isset($tableoptions[$this->upperName.'_CONSTRAINTS'])) + + if (isset($tableoptions[$this->upperName.'_CONSTRAINTS'])) $s .= "\n".$tableoptions[$this->upperName.'_CONSTRAINTS']; - + $s .= "\n)"; if (isset($tableoptions[$this->upperName])) $s .= $tableoptions[$this->upperName]; $sql[] = $s; - + return $sql; } - + /* GENERATE TRIGGERS IF NEEDED used when table has auto-incrementing field that is emulated using triggers @@ -697,7 +697,7 @@ class ADODB_DataDict { { return array(); } - + /* Sanitize options, so that array elements with no keys are promoted to keys */ @@ -711,34 +711,34 @@ class ADODB_DataDict { } return $newopts; } - + /* "Florian Buzin [ easywe ]" - + This function changes/adds new fields to your table. You don't have to know if the col is new or not. It will check on its own. */ function ChangeTableSQL($tablename, $flds, $tableoptions = false) { global $ADODB_FETCH_MODE; - + $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; if ($this->connection->fetchMode !== false) $savem = $this->connection->SetFetchMode(false); - + // check table exists $save_handler = $this->connection->raiseErrorFn; $this->connection->raiseErrorFn = ''; $cols = $this->MetaColumns($tablename); $this->connection->raiseErrorFn = $save_handler; - + if (isset($savem)) $this->connection->SetFetchMode($savem); $ADODB_FETCH_MODE = $save; - - if ( empty($cols)) { + + if ( empty($cols)) { return $this->CreateTableSQL($tablename, $flds, $tableoptions); } - + if (is_array($flds)) { // Cycle through the update fields, comparing // existing fields to fields to update. @@ -757,11 +757,11 @@ class ADODB_DataDict { } } else { $holdflds[$k] = $v; - } + } } $flds = $holdflds; } - + // already exists, alter table instead list($lines,$pkey) = $this->_GenFields($flds); @@ -770,18 +770,18 @@ class ADODB_DataDict { foreach ( $lines as $id => $v ) { if ( isset($cols[$id]) && is_object($cols[$id]) ) { - + $flds = Lens_ParseArgs($v,','); - + // We are trying to change the size of the field, if not allowed, simply ignore the request. - if ($flds && in_array(strtoupper(substr($flds[0][1],0,4)),$this->invalidResizeTypes4)) continue; - + if ($flds && in_array(strtoupper(substr($flds[0][1],0,4)),$this->invalidResizeTypes4)) continue; + $sql[] = $alter . $this->alterCol . ' ' . $v; } else { $sql[] = $alter . $this->addCol . ' ' . $v; } } - + return $sql; } } // class diff --git a/phpgwapi/inc/adodb/datadict/datadict-mysql.inc.php b/phpgwapi/inc/adodb/datadict/datadict-mysql.inc.php index 5134bae2e6..a17e6266f0 100644 --- a/phpgwapi/inc/adodb/datadict/datadict-mysql.inc.php +++ b/phpgwapi/inc/adodb/datadict/datadict-mysql.inc.php @@ -2,12 +2,12 @@ /** V4.65 22 July 2005 (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved. - Released under both BSD license and Lesser GPL library license. - Whenever there is any discrepancy between the two licenses, + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. - + Set tabs to 4 for best viewing. - + */ // security - hide paths @@ -18,10 +18,10 @@ class ADODB2_mysql extends ADODB_DataDict { var $alterCol = ' MODIFY COLUMN'; var $alterTableAddIndex = true; var $dropTable = 'DROP TABLE IF EXISTS %s'; // requires mysql 3.22 or later - + var $dropIndex = 'DROP INDEX %s ON %s'; var $renameColumn = 'ALTER TABLE %s CHANGE COLUMN %s %s %s'; // needs column-definition! - + function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { @@ -30,43 +30,43 @@ class ADODB2_mysql extends ADODB_DataDict { $len = $fieldobj->max_length; } $is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->auto_increment; - + $len = -1; // mysql max_length is not accurate switch (strtoupper($t)) { - case 'STRING': + case 'STRING': case 'CHAR': - case 'VARCHAR': - case 'TINYBLOB': - case 'TINYTEXT': - case 'ENUM': + case 'VARCHAR': + case 'TINYBLOB': + case 'TINYTEXT': + case 'ENUM': case 'SET': if ($len <= $this->blobSize) return 'C'; - + case 'TEXT': - case 'LONGTEXT': + 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 'LONGBLOB': case 'BLOB': case 'MEDIUMBLOB': return !empty($fieldobj->binary) ? 'B' : 'X'; - + case 'YEAR': case 'DATE': return 'D'; - + case 'TIME': case 'DATETIME': case 'TIMESTAMP': return 'T'; - + case 'FLOAT': case 'DOUBLE': return 'F'; - - case 'INT': + + case 'INT': case 'INTEGER': return $is_serial ? 'R' : 'I'; case 'TINYINT': return $is_serial ? 'R' : 'I1'; case 'SMALLINT': return $is_serial ? 'R' : 'I2'; @@ -82,33 +82,33 @@ class ADODB2_mysql extends ADODB_DataDict { case 'C': return 'VARCHAR'; case 'XL':return 'LONGTEXT'; case 'X': return 'TEXT'; - + case 'C2': return 'VARCHAR'; case 'X2': return 'LONGTEXT'; - + case 'B': return 'LONGBLOB'; - + case 'D': return 'DATE'; case 'T': return 'DATETIME'; case 'L': return 'TINYINT'; - + case 'R': case 'I4': case 'I': return 'INTEGER'; case 'I1': return 'TINYINT'; case 'I2': return 'SMALLINT'; case 'I8': return 'BIGINT'; - + case 'F': return 'DOUBLE'; case 'N': return 'NUMERIC'; default: return $meta; } } - + // return string must begin with space function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) - { + { $suffix = ''; if ($funsigned) $suffix .= ' UNSIGNED'; if ($fnotnull) $suffix .= ' NOT NULL'; @@ -117,7 +117,7 @@ class ADODB2_mysql extends ADODB_DataDict { if ($fconstraint) $suffix .= ' '.$fconstraint; return $suffix; } - + /* CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] @@ -133,16 +133,16 @@ class ADODB2_mysql extends ADODB_DataDict { [reference_definition] or CHECK (expr) */ - + /* CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... ) */ - + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) { $sql = array(); - + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { if ($this->alterTableAddIndex) $sql[] = "ALTER TABLE $tabname DROP INDEX $idxname"; else $sql[] = sprintf($this->dropIndex, $idxname, $tabname); @@ -150,11 +150,11 @@ class ADODB2_mysql extends ADODB_DataDict { if ( isset($idxoptions['DROP']) ) return $sql; } - + if ( empty ($flds) ) { return $sql; } - + if (isset($idxoptions['FULLTEXT'])) { $unique = ' FULLTEXT'; } elseif (isset($idxoptions['UNIQUE'])) { @@ -162,19 +162,19 @@ class ADODB2_mysql extends ADODB_DataDict { } else { $unique = ''; } - + if ( is_array($flds) ) $flds = implode(', ',$flds); - + if ($this->alterTableAddIndex) $s = "ALTER TABLE $tabname ADD $unique INDEX $idxname "; else $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname; - + $s .= ' (' . $flds . ')'; - + if ( isset($idxoptions[$this->upperName]) ) $s .= $idxoptions[$this->upperName]; - + $sql[] = $s; - + return $sql; } } diff --git a/phpgwapi/inc/adodb/datadict/datadict-postgres.inc.php b/phpgwapi/inc/adodb/datadict/datadict-postgres.inc.php index 5030dce24f..d1a379fd2e 100644 --- a/phpgwapi/inc/adodb/datadict/datadict-postgres.inc.php +++ b/phpgwapi/inc/adodb/datadict/datadict-postgres.inc.php @@ -2,26 +2,26 @@ /** V4.65 22 July 2005 (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved. - Released under both BSD license and Lesser GPL library license. - Whenever there is any discrepancy between the two licenses, + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. - + Set tabs to 4 for best viewing. - + */ // security - hide paths if (!defined('ADODB_DIR')) die(); class ADODB2_postgres extends ADODB_DataDict { - + var $databaseType = 'postgres'; var $seqField = false; var $seqPrefix = 'SEQ_'; var $addCol = ' ADD COLUMN'; var $quote = '"'; var $renameTable = 'ALTER TABLE %s RENAME TO %s'; // at least since 7.1 - + function MetaType($t,$len=-1,$fieldobj=false) { if (is_object($t)) { @@ -29,9 +29,9 @@ class ADODB2_postgres extends ADODB_DataDict { $t = $fieldobj->type; $len = $fieldobj->max_length; } - $is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->unique && + $is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->unique && $fieldobj->has_default && substr($fieldobj->default_value,0,8) == 'nextval('; - + switch (strtoupper($t)) { case 'INTERVAL': case 'CHAR': @@ -40,83 +40,83 @@ class ADODB2_postgres extends ADODB_DataDict { case 'NAME': case 'BPCHAR': 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 'TIME': case 'DATETIME': case 'TIMESTAMP': case 'TIMESTAMPTZ': return 'T'; - + case 'INTEGER': return !$is_serial ? 'I' : 'R'; - case 'SMALLINT': + case 'SMALLINT': case 'INT2': return !$is_serial ? 'I2' : 'R'; case 'INT4': return !$is_serial ? 'I4' : 'R'; - case 'BIGINT': + case 'BIGINT': case 'INT8': return !$is_serial ? 'I8' : 'R'; - + case 'OID': case 'SERIAL': return 'R'; - + case 'FLOAT4': case 'FLOAT8': case 'DOUBLE PRECISION': case 'REAL': return 'F'; - + default: return 'N'; } } - + function ActualType($meta) { switch($meta) { case 'C': return 'VARCHAR'; case 'XL': case 'X': return 'TEXT'; - + case 'C2': return 'VARCHAR'; case 'X2': return 'TEXT'; - + case 'B': return 'BYTEA'; - + case 'D': return 'DATE'; case 'T': return 'TIMESTAMP'; - + case 'L': return 'BOOLEAN'; case 'I': return 'INTEGER'; case 'I1': return 'SMALLINT'; case 'I2': return 'INT2'; case 'I4': return 'INT4'; case 'I8': return 'INT8'; - + case 'F': return 'FLOAT8'; case 'N': return 'NUMERIC'; default: return $meta; } } - + /** - * Adding a new Column + * Adding a new Column * * reimplementation of the default function as postgres does NOT allow to set the default in the same statement * @@ -139,7 +139,7 @@ class ADODB2_postgres extends ADODB_DataDict { $sql[] = $alter . str_replace('DEFAULT '.$default,'',$v); $sql[] = 'UPDATE '.$tabname.' SET '.$colname.'='.$default; $sql[] = 'ALTER TABLE '.$tabname.' ALTER COLUMN '.$colname.' SET DEFAULT ' . $default; - } else { + } else { $sql[] = $alter . $v; } if ($not_null) { @@ -149,7 +149,7 @@ class ADODB2_postgres extends ADODB_DataDict { } return $sql; } - + /** * Change the definition of one column * @@ -169,7 +169,7 @@ class ADODB2_postgres extends ADODB_DataDict { } return $this->_recreate_copy_table($tabname,False,$tableflds,$tableoptions); } - + /** * Drop one column * @@ -193,7 +193,7 @@ class ADODB2_postgres extends ADODB_DataDict { } return $this->_recreate_copy_table($tabname,$flds,$tableflds,$tableoptions); } - + /** * Save the content into a temp. table, drop and recreate the original table and copy the content back in * @@ -213,7 +213,7 @@ class ADODB2_postgres extends ADODB_DataDict { foreach(($meta=$this->MetaColumns($tabname)) as $fld) { if (!$dropflds || !in_array($fld->name,$dropflds)) { // we need to explicit convert varchar to a number to be able to do an AlterColumn of a char column to a nummeric one - if (preg_match('/'.$fld->name.' (I|I2|I4|I8|N|F)/i',$tableflds,$matches) && + if (preg_match('/'.$fld->name.' (I|I2|I4|I8|N|F)/i',$tableflds,$matches) && in_array($fld->type,array('varchar','char','text','bytea'))) { $copyflds[] = "to_number($fld->name,'S9999999999999D99')"; } elseif (preg_match('/'.$fld->name.' ([\w]+)/i',$tableflds,$matches) && @@ -229,7 +229,7 @@ class ADODB2_postgres extends ADODB_DataDict { $copyflds[] = $fld->name; } // identify the sequence name and the fld its on - if ($fld->primary_key && $fld->has_default && + if ($fld->primary_key && $fld->has_default && preg_match("/nextval\('([^']+)'::(text|regclass)\)/",$fld->default_value,$matches)) { $seq_name = $matches[1]; $seq_fld = $fld->name; @@ -237,7 +237,7 @@ class ADODB2_postgres extends ADODB_DataDict { } } $copyflds = implode(', ',$copyflds); - + $tempname = $tabname.'_tmp'; $aSql[] = 'BEGIN'; // we use a transaction, to make sure not to loose the content of the table $aSql[] = "SELECT * INTO TEMPORARY TABLE $tempname FROM $tabname"; @@ -260,19 +260,19 @@ class ADODB2_postgres extends ADODB_DataDict { $aSql[] = 'COMMIT'; return $aSql; } - + function DropTableSQL($tabname) { $sql = ADODB_DataDict::DropTableSQL($tabname); - + $drop_seq = $this->_DropAutoIncrement($tabname); if ($drop_seq) $sql[] = $drop_seq; - + return $sql; } // return string must begin with space - function _CreateSuffix($fname, &$ftype, $fnotnull,$fdefault,$fautoinc,$fconstraint) + function _CreateSuffix($fname, &$ftype, $fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) { if ($fautoinc) { $ftype = 'SERIAL'; @@ -284,7 +284,7 @@ class ADODB2_postgres extends ADODB_DataDict { if ($fconstraint) $suffix .= ' '.$fconstraint; return $suffix; } - + // search for a sequece for the given table (asumes the seqence-name contains the table-name!) // if yes return sql to drop it // this is still necessary if postgres < 7.3 or the SERIAL was created on an earlier version!!! @@ -300,7 +300,7 @@ class ADODB2_postgres extends ADODB_DataDict { } return "DROP SEQUENCE ".$seq; } - + /* CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( { column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ] @@ -324,8 +324,8 @@ class ADODB2_postgres extends ADODB_DataDict { [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] */ - - + + /* CREATE [ UNIQUE ] INDEX index_name ON table [ USING acc_method ] ( column [ ops_name ] [, ...] ) @@ -337,32 +337,32 @@ CREATE [ UNIQUE ] INDEX index_name ON table function _IndexSQL($idxname, $tabname, $flds, $idxoptions) { $sql = array(); - + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); if ( isset($idxoptions['DROP']) ) return $sql; } - + if ( empty ($flds) ) { return $sql; } - + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; - + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' '; - + if (isset($idxoptions['HASH'])) $s .= 'USING HASH '; - + if ( isset($idxoptions[$this->upperName]) ) $s .= $idxoptions[$this->upperName]; - + if ( is_array($flds) ) $flds = implode(', ',$flds); $s .= '(' . $flds . ')'; $sql[] = $s; - + return $sql; } }