[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/adodb/drivers/ -> adodb-pdo_mysql.inc.php (source)

   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  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1