diff options
Diffstat (limited to 'framework/3rdParty/adodb/drivers/adodb-pdo_mysql.inc.php')
| -rw-r--r-- | framework/3rdParty/adodb/drivers/adodb-pdo_mysql.inc.php | 146 | 
1 files changed, 146 insertions, 0 deletions
diff --git a/framework/3rdParty/adodb/drivers/adodb-pdo_mysql.inc.php b/framework/3rdParty/adodb/drivers/adodb-pdo_mysql.inc.php new file mode 100644 index 00000000..3c8710b2 --- /dev/null +++ b/framework/3rdParty/adodb/drivers/adodb-pdo_mysql.inc.php @@ -0,0 +1,146 @@ +<?php + + +/* +V4.81 3 May 2006  (c) 2000-2006 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,  +  the BSD license will take precedence. +  Set tabs to 8. +  +*/  + +class ADODB_pdo_mysql extends ADODB_pdo { +	var $metaTablesSQL = "SHOW TABLES";	 +	var $metaColumnsSQL = "SHOW COLUMNS FROM %s"; +	var $_bindInputArray = false; +	var $sysDate = 'CURDATE()'; +	var $sysTimeStamp = 'NOW()'; +	 +	function _init($parentDriver) +	{ +	 +		$parentDriver->hasTransactions = false; +		$parentDriver->_bindInputArray = true; +		$parentDriver->hasInsertID = true; +		$parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true); +	} +	 +	function ServerInfo() +	{ +		$arr['description'] = ADOConnection::GetOne("select version()"); +		$arr['version'] = ADOConnection::_findvers($arr['description']); +		return $arr; +	} +	 +	function &MetaTables($ttype=false,$showSchema=false,$mask=false)  +	{	 +		$save = $this->metaTablesSQL; +		if ($showSchema && is_string($showSchema)) { +			$this->metaTablesSQL .= " from $showSchema"; +		} +		 +		if ($mask) { +			$mask = $this->qstr($mask); +			$this->metaTablesSQL .= " like $mask"; +		} +		$ret =& ADOConnection::MetaTables($ttype,$showSchema); +		 +		$this->metaTablesSQL = $save; +		return $ret; +	} +	 + 	function &MetaColumns($table)  +	{ +		$this->_findschema($table,$schema); +		if ($schema) { +			$dbName = $this->database; +			$this->SelectDB($schema); +		} +		global $ADODB_FETCH_MODE; +		$save = $ADODB_FETCH_MODE; +		$ADODB_FETCH_MODE = ADODB_FETCH_NUM; +		 +		if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); +		$rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); +		 +		if ($schema) { +			$this->SelectDB($dbName); +		} +		 +		if (isset($savem)) $this->SetFetchMode($savem); +		$ADODB_FETCH_MODE = $save; +		if (!is_object($rs)) { +			$false = false; +			return $false; +		} +			 +		$retarr = array(); +		while (!$rs->EOF){ +			$fld = new ADOFieldObject(); +			$fld->name = $rs->fields[0]; +			$type = $rs->fields[1]; +			 +			// split type into type(length): +			$fld->scale = null; +			if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) { +				$fld->type = $query_array[1]; +				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; +				$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1; +			} elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) { +				$fld->type = $query_array[1]; +				$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1; +			} elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) { +				$fld->type = $query_array[1]; +				$arr = explode(",",$query_array[2]); +				$fld->enums = $arr; +				$zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6 +				$fld->max_length = ($zlen > 0) ? $zlen : 1; +			} else { +				$fld->type = $type; +				$fld->max_length = -1; +			} +			$fld->not_null = ($rs->fields[2] != 'YES'); +			$fld->primary_key = ($rs->fields[3] == 'PRI'); +			$fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); +			$fld->binary = (strpos($type,'blob') !== false); +			$fld->unsigned = (strpos($type,'unsigned') !== false); +				 +			if (!$fld->binary) { +				$d = $rs->fields[4]; +				if ($d != '' && $d != 'NULL') { +					$fld->has_default = true; +					$fld->default_value = $d; +				} else { +					$fld->has_default = false; +				} +			} +			 +			if ($save == ADODB_FETCH_NUM) { +				$retarr[] = $fld; +			} else { +				$retarr[strtoupper($fld->name)] = $fld; +			} +				$rs->MoveNext(); +			} +		 +			$rs->Close(); +			return $retarr;	 +	} +		 +	 +	// parameters use PostgreSQL convention, not MySQL +	function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0) +	{ +		$offsetStr =($offset>=0) ? "$offset," : ''; +		// jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220 +		if ($nrows < 0) $nrows = '18446744073709551615';  +		 +		if ($secs) +			$rs =& $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr); +		else +			$rs =& $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr); +		return $rs; +	} +} +?>
\ No newline at end of file  | 
