- Timestamp:
- 09/26/13 15:41:49 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/2.5.1-evolucao/phpgwapi/inc/adodb/drivers/adodb-db2.inc.php
r34 r8222 1 1 <?php 2 2 /* 3 V 4.94 23 Jan 2007 (c) 2006 John Lim (jlim#natsoft.com.my). All rights reserved.3 V5.18 3 Sep 2012 (c) 2000-2012 (jlim#natsoft.com). All rights reserved. 4 4 5 5 This is a version of the ADODB driver for DB2. It uses the 'ibm_db2' PECL extension … … 25 25 26 26 27 28 29 27 30 class ADODB_db2 extends ADOConnection { 28 31 var $databaseType = "db2"; … … 34 37 var $sysTimeStamp = 'CURRENT TIMESTAMP'; 35 38 36 var $fmtTimeStamp = "'Y-m-d -H:i:s'";39 var $fmtTimeStamp = "'Y-m-d H:i:s'"; 37 40 var $replaceQuote = "''"; // string to use to replace quotes 38 41 var $dataProvider = "db2"; … … 45 48 var $_bindInputArray = false; 46 49 var $_genIDSQL = "VALUES NEXTVAL FOR %s"; 47 var $_genSeqSQL = "CREATE SEQUENCE %s START WITH 1NO MAXVALUE NO CYCLE";50 var $_genSeqSQL = "CREATE SEQUENCE %s START WITH %s NO MAXVALUE NO CYCLE"; 48 51 var $_dropSeqSQL = "DROP SEQUENCE %s"; 49 52 var $_autocommit = true; … … 53 56 var $hasInsertID = true; 54 57 58 55 59 function _insertid() 56 60 { … … 69 73 70 74 if (!function_exists('db2_connect')) { 71 ADOConnection::outp("Warning: The old ODBC based DB2 driver has been renamed 'odbc_db2'. This ADOdb driver calls PHP's native db2 extension .");75 ADOConnection::outp("Warning: The old ODBC based DB2 driver has been renamed 'odbc_db2'. This ADOdb driver calls PHP's native db2 extension which is not installed."); 72 76 return null; 73 77 } … … 76 80 ini_set('ibm_db2.binmode', $this->binmode); 77 81 78 if ($argDatabasename) { 79 $this->_connectionID = db2_connect($argDatabasename,$argUsername,$argPassword); 82 if ($argDatabasename && empty($argDSN)) { 83 84 if (stripos($argDatabasename,'UID=') && stripos($argDatabasename,'PWD=')) $this->_connectionID = db2_connect($argDatabasename,null,null); 85 else $this->_connectionID = db2_connect($argDatabasename,$argUsername,$argPassword); 80 86 } else { 81 $this->_connectionID = db2_connect($argDSN,$argUsername,$argPassword); 87 if ($argDatabasename) $schema = $argDatabasename; 88 if (stripos($argDSN,'UID=') && stripos($argDSN,'PWD=')) $this->_connectionID = db2_connect($argDSN,null,null); 89 else $this->_connectionID = db2_connect($argDSN,$argUsername,$argPassword); 82 90 } 83 91 if (isset($php_errormsg)) $php_errormsg = ''; … … 87 95 88 96 $this->_errorMsg = @db2_conn_errormsg(); 89 90 97 if (isset($this->connectStmt)) $this->Execute($this->connectStmt); 91 98 99 if ($this->_connectionID && isset($schema)) $this->Execute("SET SCHEMA=$schema"); 92 100 return $this->_connectionID != false; 93 101 } … … 107 115 $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; 108 116 109 if ($argDatabasename) { 110 $this->_connectionID = db2_pconnect($argDatabasename,$argUsername,$argPassword); 117 if ($argDatabasename && empty($argDSN)) { 118 119 if (stripos($argDatabasename,'UID=') && stripos($argDatabasename,'PWD=')) $this->_connectionID = db2_pconnect($argDatabasename,null,null); 120 else $this->_connectionID = db2_pconnect($argDatabasename,$argUsername,$argPassword); 111 121 } else { 112 $this->_connectionID = db2_pconnect($argDSN,$argUsername,$argPassword); 122 if ($argDatabasename) $schema = $argDatabasename; 123 if (stripos($argDSN,'UID=') && stripos($argDSN,'PWD=')) $this->_connectionID = db2_pconnect($argDSN,null,null); 124 else $this->_connectionID = db2_pconnect($argDSN,$argUsername,$argPassword); 113 125 } 114 126 if (isset($php_errormsg)) $php_errormsg = ''; … … 118 130 if (isset($this->connectStmt)) $this->Execute($this->connectStmt); 119 131 132 if ($this->_connectionID && isset($schema)) $this->Execute("SET SCHEMA=$schema"); 120 133 return $this->_connectionID != false; 121 134 } … … 198 211 function ServerInfo() 199 212 { 200 201 if (!empty($this->host) && ADODB_PHPVER >= 0x4300) { 202 $dsn = strtoupper($this->host); 203 $first = true; 204 $found = false; 205 206 if (!function_exists('db2_data_source')) return false; 207 208 while(true) { 209 210 $rez = @db2_data_source($this->_connectionID, 211 $first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT); 212 $first = false; 213 if (!is_array($rez)) break; 214 if (strtoupper($rez['server']) == $dsn) { 215 $found = true; 216 break; 217 } 218 } 219 if (!$found) return ADOConnection::ServerInfo(); 220 if (!isset($rez['version'])) $rez['version'] = ''; 221 return $rez; 213 $row = $this->GetRow("SELECT service_level, fixpack_num FROM TABLE(sysproc.env_get_inst_info()) 214 as INSTANCEINFO"); 215 216 217 if ($row) { 218 $info['version'] = $row[0].':'.$row[1]; 219 $info['fixpack'] = $row[1]; 220 $info['description'] = ''; 222 221 } else { 223 222 return ADOConnection::ServerInfo(); 224 223 } 225 } 226 224 225 return $info; 226 } 227 227 228 228 function CreateSequence($seqname='adodbseq',$start=1) 229 229 { 230 230 if (empty($this->_genSeqSQL)) return false; 231 $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname ));231 $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$start)); 232 232 if (!$ok) return false; 233 233 return true; … … 238 238 if (empty($this->_dropSeqSQL)) return false; 239 239 return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); 240 } 241 242 function SelectLimit($sql,$nrows=-1,$offset=-1,$inputArr=false) 243 { 244 $nrows = (integer) $nrows; 245 if ($offset <= 0) { 246 // could also use " OPTIMIZE FOR $nrows ROWS " 247 if ($nrows >= 0) $sql .= " FETCH FIRST $nrows ROWS ONLY "; 248 $rs = $this->Execute($sql,$inputArr); 249 } else { 250 if ($offset > 0 && $nrows < 0); 251 else { 252 $nrows += $offset; 253 $sql .= " FETCH FIRST $nrows ROWS ONLY "; 254 } 255 $rs = ADOConnection::SelectLimit($sql,-1,$offset,$inputArr); 256 } 257 258 return $rs; 240 259 } 241 260 … … 250 269 // if you have to modify the parameter below, your database is overloaded, 251 270 // or you need to implement generation of id's yourself! 252 $num = $this->GetOne("VALUES NEXTVAL FOR $seq");271 $num = $this->GetOne("VALUES NEXTVAL FOR $seq"); 253 272 return $num; 254 273 } 255 274 256 275 … … 336 355 if (!$rs) return false; 337 356 338 $arr = &$rs->GetArray();357 $arr = $rs->GetArray(); 339 358 $rs->Close(); 340 359 $arr2 = array(); … … 391 410 392 411 393 function &MetaTables($ttype=false,$schema=false)412 function MetaTables($ttype=false,$schema=false) 394 413 { 395 414 global $ADODB_FETCH_MODE; … … 407 426 } 408 427 409 $arr =& $rs->GetArray(); 410 428 $arr = $rs->GetArray(); 411 429 $rs->Close(); 412 430 $arr2 = array(); … … 418 436 if (!$arr[$i][2]) continue; 419 437 $type = $arr[$i][3]; 438 $owner = $arr[$i][1]; 420 439 $schemaval = ($schema) ? $arr[$i][1].'.' : ''; 421 440 if ($ttype) { 422 441 if ($isview) { 423 442 if (strncmp($type,'V',1) === 0) $arr2[] = $schemaval.$arr[$i][2]; 424 } else if (strncmp($ type,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2];425 } else if (strncmp($ type,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2];443 } else if (strncmp($owner,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2]; 444 } else if (strncmp($owner,'SYS',3) !== 0) $arr2[] = $schemaval.$arr[$i][2]; 426 445 } 427 446 return $arr2; … … 496 515 } 497 516 498 function &MetaColumns($table)517 function MetaColumns($table, $normalize=true) 499 518 { 500 519 global $ADODB_FETCH_MODE; … … 512 531 if (empty($qid)) return $false; 513 532 514 $rs = &new ADORecordSet_db2($qid);533 $rs = new ADORecordSet_db2($qid); 515 534 $ADODB_FETCH_MODE = $savem; 516 535 … … 564 583 if (empty($qid)) return $false; 565 584 566 $rs = &new ADORecordSet_db2($qid);585 $rs = new ADORecordSet_db2($qid); 567 586 $ADODB_FETCH_MODE = $savem; 568 587 … … 592 611 } 593 612 613 594 614 function Prepare($sql) 595 615 { … … 720 740 721 741 // returns the field object 722 function &FetchField($offset = -1)742 function FetchField($offset = -1) 723 743 { 724 744 $o= new ADOFieldObject(); … … 762 782 763 783 // speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated 764 function &GetArrayLimit($nrows,$offset=-1)784 function GetArrayLimit($nrows,$offset=-1) 765 785 { 766 786 if ($offset <= 0) { 767 $rs = &$this->GetArray($nrows);787 $rs = $this->GetArray($nrows); 768 788 return $rs; 769 789 } … … 774 794 775 795 if ($this->fetchMode & ADODB_FETCH_ASSOC) { 776 $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE);796 $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE); 777 797 } 778 798 … … 796 816 if ($this->fields) { 797 817 if ($this->fetchMode & ADODB_FETCH_ASSOC) { 798 $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE);818 $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE); 799 819 } 800 820 return true; … … 812 832 if ($this->fields) { 813 833 if ($this->fetchMode & ADODB_FETCH_ASSOC) { 814 $this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE);834 $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE); 815 835 } 816 836 return true;
Note: See TracChangeset
for help on using the changeset viewer.