source: sandbox/2.5.1-evolucao/phpgwapi/inc/adodb/drivers/adodb-netezza.inc.php @ 8222

Revision 8222, 5.0 KB checked in by angelo, 11 years ago (diff)

Ticket #3491 - Compatibilizar Expresso com novas versoes do PHP

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2/*
3  V5.18 3 Sep 2012  (c) 2000-2012 John Lim (jlim#natsoft.com). 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
18if (!defined('ADODB_DIR')) die();
19
20include_once(ADODB_DIR.'/drivers/adodb-postgres64.inc.php');
21
22class 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
137class 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?>
Note: See TracBrowser for help on using the repository browser.