You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							170 lines
						
					
					
						
							5.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							170 lines
						
					
					
						
							5.2 KiB
						
					
					
				| <?php | |
| /* | |
|   V4.55 3 Jan 2005  (c) 2000-2005 John Lim (jlim#natsoft.com.my). All rights reserved. | |
|   | |
|   First cut at the Netezza Driver by Josh Eldridge joshuae74#hotmail.com | |
|  Based on the previous postgres drivers. | |
|  http://www.netezza.com/ | |
|  Major Additions/Changes: | |
|     MetaDatabasesSQL, MetaTablesSQL, MetaColumnsSQL | |
|     Note: You have to have admin privileges to access the system tables | |
|     Removed non-working keys code (Netezza has no concept of keys) | |
|     Fixed the way data types and lengths are returned in MetaColumns() | |
|     as well as added the default lengths for certain types | |
|     Updated public variables for Netezza | |
|     Still need to remove blob functions, as Netezza doesn't suppport blob | |
| */ | |
| // security - hide paths | |
| if (!defined('ADODB_DIR')) die(); | |
| 
 | |
| include_once(ADODB_DIR.'/drivers/adodb-postgres64.inc.php'); | |
| 
 | |
| class ADODB_netezza extends ADODB_postgres64 { | |
|     var $databaseType = 'netezza';	 | |
| 	var $dataProvider = 'netezza'; | |
| 	var $hasInsertID = false; | |
| 	var $_resultid = false; | |
|   	var $concat_operator='||'; | |
|   	var $random = 'random'; | |
| 	var $metaDatabasesSQL = "select objname from _v_object_data where objtype='database' order by 1"; | |
|     var $metaTablesSQL = "select objname from _v_object_data where objtype='table' order by 1"; | |
| 	var $isoDates = true; // accepts dates in ISO format | |
| 	var $sysDate = "CURRENT_DATE"; | |
| 	var $sysTimeStamp = "CURRENT_TIMESTAMP"; | |
| 	var $blobEncodeType = 'C'; | |
| 	var $metaColumnsSQL = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum"; | |
| 	var $metaColumnsSQL1 = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum"; | |
| 	// netezza doesn't have keys. it does have distributions, so maybe this is  | |
| 	// something that can be pulled from the system tables | |
| 	var $metaKeySQL = ""; | |
| 	var $hasAffectedRows = true; | |
| 	var $hasLimit = true;	 | |
| 	var $true = 't';		// string that represents TRUE for a database | |
| 	var $false = 'f';		// string that represents FALSE for a database | |
| 	var $fmtDate = "'Y-m-d'";	// used by DBDate() as the default date format used by the database | |
| 	var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt. | |
| 	var $ansiOuter = true; | |
| 	var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4 | |
| 							// http://bugs.php.net/bug.php?id=25404 | |
|  | |
| 							 | |
| 	function ADODB_netezza()  | |
| 	{ | |
| 	 | |
| 	} | |
| 	 | |
| 	function &MetaColumns($table,$upper=true)  | |
| 	{ | |
| 	 | |
| 	// Changed this function to support Netezza which has no concept of keys | |
| 	// could posisbly work on other things from the system table later. | |
| 	 | |
| 	global $ADODB_FETCH_MODE; | |
| 	 | |
| 		$table = strtolower($table); | |
| 
 | |
| 		$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,$table)); | |
| 		if (isset($savem)) $this->SetFetchMode($savem); | |
| 		$ADODB_FETCH_MODE = $save; | |
| 		 | |
| 		if ($rs === false) return false; | |
| 
 | |
| 		$retarr = array(); | |
| 		while (!$rs->EOF) { 	 | |
| 			$fld = new ADOFieldObject(); | |
| 			$fld->name = $rs->fields[0]; | |
| 			 | |
| 			// since we're returning type and length as one string,  | |
| 			// split them out here. | |
| 			 | |
| 			if ($first = strstr($rs->fields[1], "(")) { | |
| 			 $fld->max_length = trim($first, "()"); | |
| 			} else { | |
| 			 $fld->max_length = -1; | |
| 			} | |
| 		 | |
| 			if ($first = strpos($rs->fields[1], "(")) { | |
| 			 $fld->type = substr($rs->fields[1], 0, $first); | |
| 			} else { | |
| 			 $fld->type = $rs->fields[1]; | |
| 			} | |
| 			 | |
| 			switch ($fld->type) { | |
| 			 case "byteint": | |
| 			 case "boolean": | |
| 			 $fld->max_length = 1; | |
| 			 break; | |
| 			 case "smallint": | |
| 			 $fld->max_length = 2; | |
| 			 break; | |
| 			 case "integer": | |
| 			 case "numeric": | |
| 			 case "date": | |
| 			 $fld->max_length = 4; | |
| 			 break; | |
| 			 case "bigint": | |
| 			 case "time": | |
| 			 case "timestamp": | |
| 			 $fld->max_length = 8; | |
| 			 break; | |
| 			 case "timetz": | |
| 			 case "time with time zone": | |
| 			 $fld->max_length = 12; | |
| 			 break; | |
| 			} | |
| 			 | |
| 			if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;	 | |
| 			else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld; | |
| 			 | |
| 			$rs->MoveNext(); | |
| 		} | |
| 		$rs->Close(); | |
| 		return $retarr;	 | |
| 		 | |
| 	} | |
| 
 | |
| 		 | |
| } | |
| 	 | |
| /*-------------------------------------------------------------------------------------- | |
| 	 Class Name: Recordset | |
| --------------------------------------------------------------------------------------*/ | |
| 
 | |
| class ADORecordSet_netezza extends ADORecordSet_postgres64 | |
| { | |
| 	var $databaseType = "netezza"; | |
| 	var $canSeek = true; | |
| 	 | |
| 	function ADORecordSet_netezza($queryID,$mode=false)  | |
| 	{ | |
| 		if ($mode === false) {  | |
| 			global $ADODB_FETCH_MODE; | |
| 			$mode = $ADODB_FETCH_MODE; | |
| 		} | |
| 		switch ($mode) | |
| 		{ | |
| 		case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break; | |
| 		case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break; | |
| 		 | |
| 		case ADODB_FETCH_DEFAULT: | |
| 		case ADODB_FETCH_BOTH: | |
| 		default: $this->fetchMode = PGSQL_BOTH; break; | |
| 		} | |
| 		$this->adodbFetchMode = $mode; | |
| 		$this->ADORecordSet($queryID); | |
| 	} | |
| 	 | |
| 	// _initrs modified to disable blob handling | |
| 	function _initrs() | |
| 	{ | |
| 	global $ADODB_COUNTRECS; | |
| 		$this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($this->_queryID):-1; | |
| 		$this->_numOfFields = @pg_numfields($this->_queryID); | |
| 	} | |
| 
 | |
| } | |
| ?>
 | |
| 
 |