Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
36 kaklik 1
<?php
2
/*
3
  V4.80 8 Mar 2006  (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved.
4
 
5
  First cut at the Netezza Driver by Josh Eldridge joshuae74#hotmail.com
6
 Based on the previous postgres drivers.
7
 http://www.netezza.com/
8
 Major Additions/Changes:
9
    MetaDatabasesSQL, MetaTablesSQL, MetaColumnsSQL
10
    Note: You have to have admin privileges to access the system tables
11
    Removed non-working keys code (Netezza has no concept of keys)
12
    Fixed the way data types and lengths are returned in MetaColumns()
13
    as well as added the default lengths for certain types
14
    Updated public variables for Netezza
15
    Still need to remove blob functions, as Netezza doesn't suppport blob
16
*/
17
// security - hide paths
18
if (!defined('ADODB_DIR')) die();
19
 
20
include_once(ADODB_DIR.'/drivers/adodb-postgres64.inc.php');
21
 
22
class ADODB_netezza extends ADODB_postgres64 {
23
    var $databaseType = 'netezza';	
24
	var $dataProvider = 'netezza';
25
	var $hasInsertID = false;
26
	var $_resultid = false;
27
  	var $concat_operator='||';
28
  	var $random = 'random';
29
	var $metaDatabasesSQL = "select objname from _v_object_data where objtype='database' order by 1";
30
    var $metaTablesSQL = "select objname from _v_object_data where objtype='table' order by 1";
31
	var $isoDates = true; // accepts dates in ISO format
32
	var $sysDate = "CURRENT_DATE";
33
	var $sysTimeStamp = "CURRENT_TIMESTAMP";
34
	var $blobEncodeType = 'C';
35
	var $metaColumnsSQL = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
36
	var $metaColumnsSQL1 = "SELECT attname, atttype FROM _v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
37
	// netezza doesn't have keys. it does have distributions, so maybe this is 
38
	// something that can be pulled from the system tables
39
	var $metaKeySQL = "";
40
	var $hasAffectedRows = true;
41
	var $hasLimit = true;	
42
	var $true = 't';		// string that represents TRUE for a database
43
	var $false = 'f';		// string that represents FALSE for a database
44
	var $fmtDate = "'Y-m-d'";	// used by DBDate() as the default date format used by the database
45
	var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the default timestamp fmt.
46
	var $ansiOuter = true;
47
	var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4
48
							// http://bugs.php.net/bug.php?id=25404
49
 
50
 
51
	function ADODB_netezza() 
52
	{
53
 
54
	}
55
 
56
	function &MetaColumns($table,$upper=true) 
57
	{
58
 
59
	// Changed this function to support Netezza which has no concept of keys
60
	// could posisbly work on other things from the system table later.
61
 
62
	global $ADODB_FETCH_MODE;
63
 
64
		$table = strtolower($table);
65
 
66
		$save = $ADODB_FETCH_MODE;
67
		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
68
		if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
69
 
70
		$rs =& $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
71
		if (isset($savem)) $this->SetFetchMode($savem);
72
		$ADODB_FETCH_MODE = $save;
73
 
74
		if ($rs === false) return false;
75
 
76
		$retarr = array();
77
		while (!$rs->EOF) { 	
78
			$fld = new ADOFieldObject();
79
			$fld->name = $rs->fields[0];
80
 
81
			// since we're returning type and length as one string, 
82
			// split them out here.
83
 
84
			if ($first = strstr($rs->fields[1], "(")) {
85
			 $fld->max_length = trim($first, "()");
86
			} else {
87
			 $fld->max_length = -1;
88
			}
89
 
90
			if ($first = strpos($rs->fields[1], "(")) {
91
			 $fld->type = substr($rs->fields[1], 0, $first);
92
			} else {
93
			 $fld->type = $rs->fields[1];
94
			}
95
 
96
			switch ($fld->type) {
97
			 case "byteint":
98
			 case "boolean":
99
			 $fld->max_length = 1;
100
			 break;
101
			 case "smallint":
102
			 $fld->max_length = 2;
103
			 break;
104
			 case "integer":
105
			 case "numeric":
106
			 case "date":
107
			 $fld->max_length = 4;
108
			 break;
109
			 case "bigint":
110
			 case "time":
111
			 case "timestamp":
112
			 $fld->max_length = 8;
113
			 break;
114
			 case "timetz":
115
			 case "time with time zone":
116
			 $fld->max_length = 12;
117
			 break;
118
			}
119
 
120
			if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;	
121
			else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld;
122
 
123
			$rs->MoveNext();
124
		}
125
		$rs->Close();
126
		return $retarr;	
127
 
128
	}
129
 
130
 
131
}
132
 
133
/*--------------------------------------------------------------------------------------
134
	 Class Name: Recordset
135
--------------------------------------------------------------------------------------*/
136
 
137
class ADORecordSet_netezza extends ADORecordSet_postgres64
138
{
139
	var $databaseType = "netezza";
140
	var $canSeek = true;
141
 
142
	function ADORecordSet_netezza($queryID,$mode=false) 
143
	{
144
		if ($mode === false) { 
145
			global $ADODB_FETCH_MODE;
146
			$mode = $ADODB_FETCH_MODE;
147
		}
148
		switch ($mode)
149
		{
150
		case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break;
151
		case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break;
152
 
153
		case ADODB_FETCH_DEFAULT:
154
		case ADODB_FETCH_BOTH:
155
		default: $this->fetchMode = PGSQL_BOTH; break;
156
		}
157
		$this->adodbFetchMode = $mode;
158
		$this->ADORecordSet($queryID);
159
	}
160
 
161
	// _initrs modified to disable blob handling
162
	function _initrs()
163
	{
164
	global $ADODB_COUNTRECS;
165
		$this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($this->_queryID):-1;
166
		$this->_numOfFields = @pg_numfields($this->_queryID);
167
	}
168
 
169
}
170
?>