summaryrefslogtreecommitdiff
path: root/drivers/adodb-db2oci.inc.php
diff options
context:
space:
mode:
authorDamien Regad <dregad@mantisbt.org>2013-08-05 13:56:24 +0200
committerDamien Regad <dregad@mantisbt.org>2013-08-05 13:56:24 +0200
commit53010b5ceb548968e93c752defec085e7c508f4a (patch)
tree332484926a4f961b6a12ca522f437e25bcace741 /drivers/adodb-db2oci.inc.php
parent212c76c103997ef3aeb539517899ed42ddffdae4 (diff)
downloadadodb-53010b5ceb548968e93c752defec085e7c508f4a.tar.gz
adodb-53010b5ceb548968e93c752defec085e7c508f4a.tar.bz2
adodb-53010b5ceb548968e93c752defec085e7c508f4a.zip
Reorg: ADOdb5 (master) branch
- Move all files in adodb5/ to root - Remove adodb-for-php4/ directory
Diffstat (limited to 'drivers/adodb-db2oci.inc.php')
-rw-r--r--drivers/adodb-db2oci.inc.php230
1 files changed, 230 insertions, 0 deletions
diff --git a/drivers/adodb-db2oci.inc.php b/drivers/adodb-db2oci.inc.php
new file mode 100644
index 00000000..f0c4113b
--- /dev/null
+++ b/drivers/adodb-db2oci.inc.php
@@ -0,0 +1,230 @@
+<?php
+/*
+V5.18 3 Sep 2012 (c) 2000-2012 John Lim (jlim#natsoft.com). All rights reserved.
+ Released under both BSD license and Lesser GPL library license.
+ Whenever there is any discrepancy between the two licenses,
+ the BSD license will take precedence.
+Set tabs to 4 for best viewing.
+
+ Latest version is available at http://adodb.sourceforge.net
+
+ Microsoft Visual FoxPro data driver. Requires ODBC. Works only on MS Windows.
+*/
+
+// security - hide paths
+if (!defined('ADODB_DIR')) die();
+include(ADODB_DIR."/drivers/adodb-db2.inc.php");
+
+
+if (!defined('ADODB_DB2OCI')){
+define('ADODB_DB2OCI',1);
+
+/*
+// regex code for smart remapping of :0, :1 bind vars to ? ?
+function _colontrack($p)
+{
+global $_COLONARR,$_COLONSZ;
+ $v = (integer) substr($p,1);
+ if ($v > $_COLONSZ) return $p;
+ $_COLONARR[] = $v;
+ return '?';
+}
+
+// smart remapping of :0, :1 bind vars to ? ?
+function _colonscope($sql,$arr)
+{
+global $_COLONARR,$_COLONSZ;
+
+ $_COLONARR = array();
+ $_COLONSZ = sizeof($arr);
+
+ $sql2 = preg_replace("/(:[0-9]+)/e","_colontrack('\\1')",$sql);
+
+ if (empty($_COLONARR)) return array($sql,$arr);
+
+ foreach($_COLONARR as $k => $v) {
+ $arr2[] = $arr[$v];
+ }
+
+ return array($sql2,$arr2);
+}
+*/
+
+/*
+ Smart remapping of :0, :1 bind vars to ? ?
+
+ Handles colons in comments -- and / * * / and in quoted strings.
+*/
+
+function _colonparser($sql,$arr)
+{
+ $lensql = strlen($sql);
+ $arrsize = sizeof($arr);
+ $state = 'NORM';
+ $at = 1;
+ $ch = $sql[0];
+ $ch2 = @$sql[1];
+ $sql2 = '';
+ $arr2 = array();
+ $nprev = 0;
+
+
+ while (strlen($ch)) {
+
+ switch($ch) {
+ case '/':
+ if ($state == 'NORM' && $ch2 == '*') {
+ $state = 'COMMENT';
+
+ $at += 1;
+ $ch = $ch2;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ }
+ break;
+
+ case '*':
+ if ($state == 'COMMENT' && $ch2 == '/') {
+ $state = 'NORM';
+
+ $at += 1;
+ $ch = $ch2;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ }
+ break;
+
+ case "\n":
+ case "\r":
+ if ($state == 'COMMENT2') $state = 'NORM';
+ break;
+
+ case "'":
+ do {
+ $at += 1;
+ $ch = $ch2;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ } while ($ch !== "'");
+ break;
+
+ case ':':
+ if ($state == 'COMMENT' || $state == 'COMMENT2') break;
+
+ //echo "$at=$ch $ch2, ";
+ if ('0' <= $ch2 && $ch2 <= '9') {
+ $n = '';
+ $nat = $at;
+ do {
+ $at += 1;
+ $ch = $ch2;
+ $n .= $ch;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ } while ('0' <= $ch && $ch <= '9');
+ #echo "$n $arrsize ] ";
+ $n = (integer) $n;
+ if ($n < $arrsize) {
+ $sql2 .= substr($sql,$nprev,$nat-$nprev-1).'?';
+ $nprev = $at-1;
+ $arr2[] = $arr[$n];
+ }
+ }
+ break;
+
+ case '-':
+ if ($state == 'NORM') {
+ if ($ch2 == '-') $state = 'COMMENT2';
+ $at += 1;
+ $ch = $ch2;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ }
+ break;
+ }
+
+ $at += 1;
+ $ch = $ch2;
+ $ch2 = $at < $lensql ? $sql[$at] : '';
+ }
+
+ if ($nprev == 0) {
+ $sql2 = $sql;
+ } else {
+ $sql2 .= substr($sql,$nprev);
+ }
+
+ return array($sql2,$arr2);
+}
+
+class ADODB_db2oci extends ADODB_db2 {
+ var $databaseType = "db2oci";
+ var $sysTimeStamp = 'sysdate';
+ var $sysDate = 'trunc(sysdate)';
+ var $_bindInputArray = true;
+
+ function ADODB_db2oci()
+ {
+ parent::ADODB_db2();
+ }
+
+ function Param($name,$type='C')
+ {
+ return ':'.$name;
+ }
+
+
+ function MetaTables($ttype=false,$schema=false)
+ {
+ global $ADODB_FETCH_MODE;
+
+ $savem = $ADODB_FETCH_MODE;
+ $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+ $qid = db2_tables($this->_connectionID);
+
+ $rs = new ADORecordSet_db2($qid);
+
+ $ADODB_FETCH_MODE = $savem;
+ if (!$rs) {
+ $false = false;
+ return $false;
+ }
+
+ $arr = $rs->GetArray();
+ $rs->Close();
+ $arr2 = array();
+ // adodb_pr($arr);
+ if ($ttype) {
+ $isview = strncmp($ttype,'V',1) === 0;
+ }
+ for ($i=0; $i < sizeof($arr); $i++) {
+ if (!$arr[$i][2]) continue;
+ $type = $arr[$i][3];
+ $schemaval = ($schema) ? $arr[$i][1].'.' : '';
+ $name = $schemaval.$arr[$i][2];
+ $owner = $arr[$i][1];
+ if (substr($name,0,8) == 'EXPLAIN_') continue;
+ if ($ttype) {
+ if ($isview) {
+ if (strncmp($type,'V',1) === 0) $arr2[] = $name;
+ } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
+ } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
+ }
+ return $arr2;
+ }
+
+ function _Execute($sql, $inputarr=false )
+ {
+ if ($inputarr) list($sql,$inputarr) = _colonparser($sql, $inputarr);
+ return parent::_Execute($sql, $inputarr);
+ }
+};
+
+
+class ADORecordSet_db2oci extends ADORecordSet_db2 {
+
+ var $databaseType = "db2oci";
+
+ function ADORecordSet_db2oci($id,$mode=false)
+ {
+ return $this->ADORecordSet_db2($id,$mode);
+ }
+}
+
+} //define
+?> \ No newline at end of file