source: tmp/version-2_5-test/data/module/adodb/drivers/adodb-netezza.inc.php @ 18609

Revision 18609, 5.0 KB checked in by kajiwara, 16 years ago (diff)

正式版にナイトリービルド版をマージしてみるテスト

Line 
1<?php
2/*
3  v4.992 10 Nov 2009  (c) 2000-2009 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.