"TYPO3 4.0.1: typo3_src-4.0.1/typo3/sysext/adodb/adodb/drivers/adodb-pdo_mysql.inc.php Source File", "datetime" => "Sat Dec 2 19:22:26 2006", "date" => "2 Dec 2006", "doxygenversion" => "1.4.6", "projectname" => "TYPO3 4.0.1", "projectnumber" => "4.0.1" ); get_header($doxygen_vars); ?>
00001 <?php 00002 00003 00004 /* 00005 V4.90 8 June 2006 (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved. 00006 Released under both BSD license and Lesser GPL library license. 00007 Whenever there is any discrepancy between the two licenses, 00008 the BSD license will take precedence. 00009 Set tabs to 8. 00010 00011 */ 00012 00013 class ADODB_pdo_mysql extends ADODB_pdo { 00014 var $metaTablesSQL = "SHOW TABLES"; 00015 var $metaColumnsSQL = "SHOW COLUMNS FROM %s"; 00016 var $_bindInputArray = false; 00017 var $sysDate = 'CURDATE()'; 00018 var $sysTimeStamp = 'NOW()'; 00019 00020 function _init($parentDriver) 00021 { 00022 00023 $parentDriver->hasTransactions = false; 00024 $parentDriver->_bindInputArray = true; 00025 $parentDriver->hasInsertID = true; 00026 $parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true); 00027 } 00028 00029 function ServerInfo() 00030 { 00031 $arr['description'] = ADOConnection::GetOne("select version()"); 00032 $arr['version'] = ADOConnection::_findvers($arr['description']); 00033 return $arr; 00034 } 00035 00036 function &MetaTables($ttype=false,$showSchema=false,$mask=false) 00037 { 00038 $save = $this->metaTablesSQL; 00039 if ($showSchema && is_string($showSchema)) { 00040 $this->metaTablesSQL .= " from $showSchema"; 00041 } 00042 00043 if ($mask) { 00044 $mask = $this->qstr($mask); 00045 $this->metaTablesSQL .= " like $mask"; 00046 } 00047 $ret =& ADOConnection::MetaTables($ttype,$showSchema); 00048 00049 $this->metaTablesSQL = $save; 00050 return $ret; 00051 } 00052 00053 function SetTransactionMode( $transaction_mode ) 00054 { 00055 $this->_transmode = $transaction_mode; 00056 if (empty($transaction_mode)) { 00057 $this->Execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ'); 00058 return; 00059 } 00060 if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; 00061 $this->Execute("SET SESSION TRANSACTION ".$transaction_mode); 00062 } 00063 00064 function &MetaColumns($table) 00065 { 00066 $this->_findschema($table,$schema); 00067 if ($schema) { 00068 $dbName = $this->database; 00069 $this->SelectDB($schema); 00070 } 00071 global $ADODB_FETCH_MODE; 00072 $save = $ADODB_FETCH_MODE; 00073 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00074 00075 if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); 00076 $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); 00077 00078 if ($schema) { 00079 $this->SelectDB($dbName); 00080 } 00081 00082 if (isset($savem)) $this->SetFetchMode($savem); 00083 $ADODB_FETCH_MODE = $save; 00084 if (!is_object($rs)) { 00085 $false = false; 00086 return $false; 00087 } 00088 00089 $retarr = array(); 00090 while (!$rs->EOF){ 00091 $fld = new ADOFieldObject(); 00092 $fld->name = $rs->fields[0]; 00093 $type = $rs->fields[1]; 00094 00095 // split type into type(length): 00096 $fld->scale = null; 00097 if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) { 00098 $fld->type = $query_array[1]; 00099 $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; 00100 $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1; 00101 } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) { 00102 $fld->type = $query_array[1]; 00103 $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; 00104 } elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) { 00105 $fld->type = $query_array[1]; 00106 $arr = explode(",",$query_array[2]); 00107 $fld->enums = $arr; 00108 $zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6 00109 $fld->max_length = ($zlen > 0) ? $zlen : 1; 00110 } else { 00111 $fld->type = $type; 00112 $fld->max_length = -1; 00113 } 00114 $fld->not_null = ($rs->fields[2] != 'YES'); 00115 $fld->primary_key = ($rs->fields[3] == 'PRI'); 00116 $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); 00117 $fld->binary = (strpos($type,'blob') !== false); 00118 $fld->unsigned = (strpos($type,'unsigned') !== false); 00119 00120 if (!$fld->binary) { 00121 $d = $rs->fields[4]; 00122 if ($d != '' && $d != 'NULL') { 00123 $fld->has_default = true; 00124 $fld->default_value = $d; 00125 } else { 00126 $fld->has_default = false; 00127 } 00128 } 00129 00130 if ($save == ADODB_FETCH_NUM) { 00131 $retarr[] = $fld; 00132 } else { 00133 $retarr[strtoupper($fld->name)] = $fld; 00134 } 00135 $rs->MoveNext(); 00136 } 00137 00138 $rs->Close(); 00139 return $retarr; 00140 } 00141 00142 00143 // parameters use PostgreSQL convention, not MySQL 00144 function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0) 00145 { 00146 $offsetStr =($offset>=0) ? "$offset," : ''; 00147 // jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220 00148 if ($nrows < 0) $nrows = '18446744073709551615'; 00149 00150 if ($secs) 00151 $rs =& $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr); 00152 else 00153 $rs =& $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr); 00154 return $rs; 00155 } 00156 } 00157 ?>