new approach to logging database access and upgraded adodb
[openemr.git] / library / adodb / drivers / adodb-netezza.inc.php
blobf8322de9154f4018b23c5706c5126abb7167ca8f
1 <?php
2 /*
3 V5.14 8 Sept 2011 (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
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
17 // security - hide paths
18 if (!defined('ADODB_DIR')) die();
20 include_once(ADODB_DIR.'/drivers/adodb-postgres64.inc.php');
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
51 function ADODB_netezza()
56 function MetaColumns($table,$upper=true)
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.
62 global $ADODB_FETCH_MODE;
64 $table = strtolower($table);
66 $save = $ADODB_FETCH_MODE;
67 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
68 if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
70 $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
71 if (isset($savem)) $this->SetFetchMode($savem);
72 $ADODB_FETCH_MODE = $save;
74 if ($rs === false) return false;
76 $retarr = array();
77 while (!$rs->EOF) {
78 $fld = new ADOFieldObject();
79 $fld->name = $rs->fields[0];
81 // since we're returning type and length as one string,
82 // split them out here.
84 if ($first = strstr($rs->fields[1], "(")) {
85 $fld->max_length = trim($first, "()");
86 } else {
87 $fld->max_length = -1;
90 if ($first = strpos($rs->fields[1], "(")) {
91 $fld->type = substr($rs->fields[1], 0, $first);
92 } else {
93 $fld->type = $rs->fields[1];
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;
120 if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
121 else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld;
123 $rs->MoveNext();
125 $rs->Close();
126 return $retarr;
133 /*--------------------------------------------------------------------------------------
134 Class Name: Recordset
135 --------------------------------------------------------------------------------------*/
137 class ADORecordSet_netezza extends ADORecordSet_postgres64
139 var $databaseType = "netezza";
140 var $canSeek = true;
142 function ADORecordSet_netezza($queryID,$mode=false)
144 if ($mode === false) {
145 global $ADODB_FETCH_MODE;
146 $mode = $ADODB_FETCH_MODE;
148 switch ($mode)
150 case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break;
151 case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break;
153 case ADODB_FETCH_DEFAULT:
154 case ADODB_FETCH_BOTH:
155 default: $this->fetchMode = PGSQL_BOTH; break;
157 $this->adodbFetchMode = $mode;
158 $this->ADORecordSet($queryID);
161 // _initrs modified to disable blob handling
162 function _initrs()
164 global $ADODB_COUNTRECS;
165 $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($this->_queryID):-1;
166 $this->_numOfFields = @pg_numfields($this->_queryID);