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);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								?>
							 | 
						|
								
							 |