File: adodb-netezza.inc.php

package info (click to toggle)
libphp-adodb 5.21.4-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 2,276 kB
  • sloc: php: 35,839; xml: 52; sql: 32; makefile: 5
file content (161 lines) | stat: -rw-r--r-- 5,241 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
/**
 * Netezza Driver
 *
 * @link https://www.ibm.com/products/netezza
 * Based on the previous postgres drivers. 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
 * TODO: Still need to remove blob functions, as Netezza doesn't support blob
 *
 * This file is part of ADOdb, a Database Abstraction Layer library for PHP.
 *
 * @package ADOdb
 * @link https://adodb.org Project's web site and documentation
 * @link https://github.com/ADOdb/ADOdb Source code and issue tracker
 *
 * The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
 * and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
 * any later version. This means you can use it in proprietary products.
 * See the LICENSE.md file distributed with this source code for details.
 * @license BSD-3-Clause
 * @license LGPL-2.1-or-later
 *
 * @copyright 2000-2013 John Lim
 * @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
 * @author Josh Eldridge <joshuae74@hotmail.com>
 */

// 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 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;

	// _initrs modified to disable blob handling
	function _initrs()
	{
	global $ADODB_COUNTRECS;
		$this->_numOfRows = ($ADODB_COUNTRECS)? @pg_num_rows($this->_queryID):-1;
		$this->_numOfFields = @pg_num_fields($this->_queryID);
	}

}