3 @version v5.20.19 13-Dec-2020
4 @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
5 @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community
6 Released under both BSD license and Lesser GPL library license.
7 Whenever there is any discrepancy between the two licenses,
8 the BSD license will take precedence.
9 Set tabs to 4 for best viewing.
11 Latest version is available at http://adodb.org/
13 Microsoft Visual FoxPro data driver. Requires ODBC. Works only on MS Windows.
16 // security - hide paths
17 if (!defined('ADODB_DIR')) die();
18 include(ADODB_DIR."/drivers/adodb-db2.inc.php");
21 if (!defined('ADODB_DB2OCI')){
22 define('ADODB_DB2OCI',1);
25 // regex code for smart remapping of :0, :1 bind vars to ? ?
26 function _colontrack($p)
28 global $_COLONARR,$_COLONSZ;
29 $v = (integer) substr($p,1);
30 if ($v > $_COLONSZ) return $p;
35 // smart remapping of :0, :1 bind vars to ? ?
36 function _colonscope($sql,$arr)
38 global $_COLONARR,$_COLONSZ;
41 $_COLONSZ = sizeof($arr);
43 $sql2 = preg_replace("/(:[0-9]+)/e","_colontrack('\\1')",$sql);
45 if (empty($_COLONARR)) return array($sql,$arr);
47 foreach($_COLONARR as $k => $v) {
51 return array($sql2,$arr2);
56 Smart remapping of :0, :1 bind vars to ? ?
58 Handles colons in comments -- and / * * / and in quoted strings.
61 function _colonparser($sql,$arr)
63 $lensql = strlen($sql);
64 $arrsize = sizeof($arr);
78 if ($state == 'NORM' && $ch2 == '*') {
83 $ch2 = $at < $lensql ? $sql[$at] : '';
88 if ($state == 'COMMENT' && $ch2 == '/') {
93 $ch2 = $at < $lensql ? $sql[$at] : '';
99 if ($state == 'COMMENT2') $state = 'NORM';
106 $ch2 = $at < $lensql ? $sql[$at] : '';
107 } while ($ch !== "'");
111 if ($state == 'COMMENT' || $state == 'COMMENT2') break;
113 //echo "$at=$ch $ch2, ";
114 if ('0' <= $ch2 && $ch2 <= '9') {
121 $ch2 = $at < $lensql ? $sql[$at] : '';
122 } while ('0' <= $ch && $ch <= '9');
123 #echo "$n $arrsize ] ";
126 $sql2 .= substr($sql,$nprev,$nat-$nprev-1).'?';
134 if ($state == 'NORM') {
135 if ($ch2 == '-') $state = 'COMMENT2';
138 $ch2 = $at < $lensql ? $sql[$at] : '';
145 $ch2 = $at < $lensql ? $sql[$at] : '';
151 $sql2 .= substr($sql,$nprev);
154 return array($sql2,$arr2);
157 class ADODB_db2oci extends ADODB_db2 {
158 var $databaseType = "db2oci";
159 var $sysTimeStamp = 'sysdate';
160 var $sysDate = 'trunc(sysdate)';
161 var $_bindInputArray = true;
163 function Param($name,$type='C')
169 function MetaTables($ttype = false, $schema = false, $mask = false)
171 global $ADODB_FETCH_MODE;
173 $savem = $ADODB_FETCH_MODE;
174 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
175 $qid = db2_tables($this->_connectionID);
177 $rs = new ADORecordSet_db2($qid);
179 $ADODB_FETCH_MODE = $savem;
185 $arr = $rs->GetArray();
190 $isview = strncmp($ttype,'V',1) === 0;
192 for ($i=0; $i < sizeof($arr); $i++) {
193 if (!$arr[$i][2]) continue;
195 $schemaval = ($schema) ? $arr[$i][1].'.' : '';
196 $name = $schemaval.$arr[$i][2];
197 $owner = $arr[$i][1];
198 if (substr($name,0,8) == 'EXPLAIN_') continue;
201 if (strncmp($type,'V',1) === 0) $arr2[] = $name;
202 } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
203 } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
208 function _Execute($sql, $inputarr=false )
210 if ($inputarr) list($sql,$inputarr) = _colonparser($sql, $inputarr);
211 return parent::_Execute($sql, $inputarr);
216 class ADORecordSet_db2oci extends ADORecordSet_db2 {
218 var $databaseType = "db2oci";
220 function __construct($id,$mode=false)
222 return parent::__construct($id,$mode);