TYPO3 CMS  TYPO3_6-2
adodb-pdo_mysql.inc.php
Go to the documentation of this file.
1 <?php
2 
3 
4 /*
5 V5.19 23-Apr-2014 (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
6  Released under both BSD license and Lesser GPL library license.
7  Whenever there is any discrepancy between the two licenses,
8  the BSD license will take precedence.
9  Set tabs to 8.
10 
11 */
12 
13 class ADODB_pdo_mysql extends ADODB_pdo {
14  var $metaTablesSQL = "SHOW TABLES";
15  var $metaColumnsSQL = "SHOW COLUMNS FROM `%s`";
16  var $sysDate = 'CURDATE()';
17  var $sysTimeStamp = 'NOW()';
18  var $hasGenID = true;
19  var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);";
20  var $_dropSeqSQL = "drop table %s";
21  var $fmtTimeStamp = "'Y-m-d, H:i:s'";
22  var $nameQuote = '`';
23 
24  function _init($parentDriver)
25  {
26 
27  $parentDriver->hasTransactions = false;
28  #$parentDriver->_bindInputArray = false;
29  $parentDriver->hasInsertID = true;
30  $parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
31  }
32 
33  // dayFraction is a day in floating point
34  function OffsetDate($dayFraction,$date=false)
35  {
36  if (!$date) $date = $this->sysDate;
37 
38  $fraction = $dayFraction * 24 * 3600;
39  return $date . ' + INTERVAL ' . $fraction.' SECOND';
40 
41 // return "from_unixtime(unix_timestamp($date)+$fraction)";
42  }
43 
44  function Concat()
45  {
46  $s = "";
47  $arr = func_get_args();
48 
49  // suggestion by andrew005#mnogo.ru
50  $s = implode(',',$arr);
51  if (strlen($s) > 0) return "CONCAT($s)"; return '';
52  }
53 
54  function ServerInfo()
55  {
56  $arr['description'] = ADOConnection::GetOne("select version()");
57  $arr['version'] = ADOConnection::_findvers($arr['description']);
58  return $arr;
59  }
60 
61  function MetaTables($ttype=false,$showSchema=false,$mask=false)
62  {
63  $save = $this->metaTablesSQL;
64  if ($showSchema && is_string($showSchema)) {
65  $this->metaTablesSQL .= " from $showSchema";
66  }
67 
68  if ($mask) {
69  $mask = $this->qstr($mask);
70  $this->metaTablesSQL .= " like $mask";
71  }
72  $ret = ADOConnection::MetaTables($ttype,$showSchema);
73 
74  $this->metaTablesSQL = $save;
75  return $ret;
76  }
77 
78  function SetTransactionMode( $transaction_mode )
79  {
80  $this->_transmode = $transaction_mode;
81  if (empty($transaction_mode)) {
82  $this->Execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ');
83  return;
84  }
85  if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
86  $this->Execute("SET SESSION TRANSACTION ".$transaction_mode);
87  }
88 
89  function MetaColumns($table,$normalize=true)
90  {
91  $this->_findschema($table,$schema);
92  if ($schema) {
93  $dbName = $this->database;
94  $this->SelectDB($schema);
95  }
96  global $ADODB_FETCH_MODE;
97  $save = $ADODB_FETCH_MODE;
98  $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
99 
100  if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
101  $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
102 
103  if ($schema) {
104  $this->SelectDB($dbName);
105  }
106 
107  if (isset($savem)) $this->SetFetchMode($savem);
108  $ADODB_FETCH_MODE = $save;
109  if (!is_object($rs)) {
110  $false = false;
111  return $false;
112  }
113 
114  $retarr = array();
115  while (!$rs->EOF){
116  $fld = new ADOFieldObject();
117  $fld->name = $rs->fields[0];
118  $type = $rs->fields[1];
119 
120  // split type into type(length):
121  $fld->scale = null;
122  if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
123  $fld->type = $query_array[1];
124  $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
125  $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
126  } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {
127  $fld->type = $query_array[1];
128  $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
129  } elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) {
130  $fld->type = $query_array[1];
131  $arr = explode(",",$query_array[2]);
132  $fld->enums = $arr;
133  $zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6
134  $fld->max_length = ($zlen > 0) ? $zlen : 1;
135  } else {
136  $fld->type = $type;
137  $fld->max_length = -1;
138  }
139  $fld->not_null = ($rs->fields[2] != 'YES');
140  $fld->primary_key = ($rs->fields[3] == 'PRI');
141  $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
142  $fld->binary = (strpos($type,'blob') !== false);
143  $fld->unsigned = (strpos($type,'unsigned') !== false);
144 
145  if (!$fld->binary) {
146  $d = $rs->fields[4];
147  if ($d != '' && $d != 'NULL') {
148  $fld->has_default = true;
149  $fld->default_value = $d;
150  } else {
151  $fld->has_default = false;
152  }
153  }
154 
155  if ($save == ADODB_FETCH_NUM) {
156  $retarr[] = $fld;
157  } else {
158  $retarr[strtoupper($fld->name)] = $fld;
159  }
160  $rs->MoveNext();
161  }
162 
163  $rs->Close();
164  return $retarr;
165  }
166 
167 
168  // parameters use PostgreSQL convention, not MySQL
169  function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0)
170  {
171  $offsetStr =($offset>=0) ? "$offset," : '';
172  // jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220
173  if ($nrows < 0) $nrows = '18446744073709551615';
174 
175  if ($secs)
176  $rs = $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr);
177  else
178  $rs = $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr);
179  return $rs;
180  }
181 }
MetaColumns($table, $normalize=true)
$sql
Definition: server.php:82
if(isset($_REQUEST['nrows'])) else $rs
Definition: server.php:92
SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs=0)
SetTransactionMode( $transaction_mode)
$database
Definition: server.php:38
OffsetDate($dayFraction, $date=false)
MetaTables($ttype=false, $showSchema=false, $mask=false)
_init($parentDriver)