Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/adodb/drivers/adodb-db2oci.inc.php
Go to the documentation of this file.
00001 <?php
00002 /* 
00003 V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
00004   Released under both BSD license and Lesser GPL library license. 
00005   Whenever there is any discrepancy between the two licenses, 
00006   the BSD license will take precedence. 
00007 Set tabs to 4 for best viewing.
00008   
00009   Latest version is available at http://adodb.sourceforge.net
00010   
00011   Microsoft Visual FoxPro data driver. Requires ODBC. Works only on MS Windows.
00012 */
00013 
00014 // security - hide paths
00015 if (!defined('ADODB_DIR')) die();
00016 include(ADODB_DIR."/drivers/adodb-db2.inc.php");
00017 
00018 
00019 if (!defined('ADODB_DB2OCI')){
00020 define('ADODB_DB2OCI',1);
00021 
00022 /*
00023 // regex code for smart remapping of :0, :1 bind vars to ? ?
00024 function _colontrack($p)
00025 {
00026 global $_COLONARR,$_COLONSZ;
00027         $v = (integer) substr($p,1);
00028         if ($v > $_COLONSZ) return $p;
00029         $_COLONARR[] = $v;
00030         return '?';
00031 }
00032 
00033 // smart remapping of :0, :1 bind vars to ? ?
00034 function _colonscope($sql,$arr)
00035 {
00036 global $_COLONARR,$_COLONSZ;
00037 
00038         $_COLONARR = array();
00039         $_COLONSZ = sizeof($arr);
00040         
00041         $sql2 = preg_replace("/(:[0-9]+)/e","_colontrack('\\1')",$sql);
00042         
00043         if (empty($_COLONARR)) return array($sql,$arr);
00044         
00045         foreach($_COLONARR as $k => $v) {
00046                 $arr2[] = $arr[$v]; 
00047         }
00048         
00049         return array($sql2,$arr2);
00050 }
00051 */
00052 
00053 /*
00054         Smart remapping of :0, :1 bind vars to ? ?
00055         
00056         Handles colons in comments -- and / * * / and in quoted strings.
00057 */
00058 
00059 function _colonparser($sql,$arr)
00060 {
00061         $lensql = strlen($sql);
00062         $arrsize = sizeof($arr);
00063         $state = 'NORM';
00064         $at = 1;
00065         $ch = $sql[0]; 
00066         $ch2 = @$sql[1];
00067         $sql2 = '';
00068         $arr2 = array();
00069         $nprev = 0;
00070         
00071         
00072         while (strlen($ch)) {
00073         
00074                 switch($ch) {
00075                 case '/':
00076                         if ($state == 'NORM' && $ch2 == '*') {
00077                                 $state = 'COMMENT';
00078                                 
00079                                 $at += 1;
00080                                 $ch = $ch2;
00081                                 $ch2 = $at < $lensql ? $sql[$at] : '';
00082                         }
00083                         break;
00084                         
00085                 case '*':
00086                         if ($state == 'COMMENT' && $ch2 == '/') {
00087                                 $state = 'NORM';
00088                                 
00089                                 $at += 1;
00090                                 $ch = $ch2;
00091                                 $ch2 = $at < $lensql ? $sql[$at] : '';
00092                         }
00093                         break;
00094                 
00095                 case "\n":
00096                 case "\r":
00097                         if ($state == 'COMMENT2') $state = 'NORM';
00098                         break;
00099                 
00100                 case "'":
00101                         do {
00102                                 $at += 1;
00103                                 $ch = $ch2;
00104                                 $ch2 = $at < $lensql ? $sql[$at] : '';
00105                         } while ($ch !== "'");
00106                         break;
00107                         
00108                 case ':':
00109                         if ($state == 'COMMENT' || $state == 'COMMENT2') break;
00110                         
00111                         //echo "$at=$ch $ch2, ";
00112                         if ('0' <= $ch2 && $ch2 <= '9') {
00113                                 $n = '';
00114                                 $nat = $at;
00115                                 do {
00116                                         $at += 1;
00117                                         $ch = $ch2;
00118                                         $n .= $ch;
00119                                         $ch2 = $at < $lensql ? $sql[$at] : '';
00120                                 } while ('0' <= $ch && $ch <= '9');
00121                                 #echo "$n $arrsize ] ";
00122                                 $n = (integer) $n;
00123                                 if ($n < $arrsize) {
00124                                         $sql2 .= substr($sql,$nprev,$nat-$nprev-1).'?';
00125                                         $nprev = $at-1;
00126                                         $arr2[] = $arr[$n];
00127                                 }
00128                         }
00129                         break;
00130                         
00131                 case '-':
00132                         if ($state == 'NORM') {
00133                                 if ($ch2 == '-') $state = 'COMMENT2';
00134                                 $at += 1;
00135                                 $ch = $ch2;
00136                                 $ch2 = $at < $lensql ? $sql[$at] : '';
00137                         }
00138                         break;
00139                 }
00140                 
00141                 $at += 1;
00142                 $ch = $ch2;
00143                 $ch2 = $at < $lensql ? $sql[$at] : '';
00144         }
00145         
00146         if ($nprev == 0) {
00147                 $sql2 = $sql;
00148         } else {
00149                 $sql2 .= substr($sql,$nprev);
00150         }
00151         
00152         return array($sql2,$arr2);
00153 }
00154 
00155 class ADODB_db2oci extends ADODB_db2 {
00156         var $databaseType = "db2oci";   
00157         var $sysTimeStamp = 'sysdate';
00158         var $sysDate = 'trunc(sysdate)';
00159         var $_bindInputArray = true;
00160         
00161         function ADODB_db2oci()
00162         {
00163                 parent::ADODB_db2();
00164         }
00165         
00166         function Param($name,$type=false)
00167         {
00168                 return ':'.$name;
00169         }
00170         
00171         
00172         function MetaTables($ttype=false,$schema=false)
00173         {
00174         global $ADODB_FETCH_MODE;
00175         
00176                 $savem = $ADODB_FETCH_MODE;
00177                 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
00178                 $qid = db2_tables($this->_connectionID);
00179                 
00180                 $rs = new ADORecordSet_db2($qid);
00181                 
00182                 $ADODB_FETCH_MODE = $savem;
00183                 if (!$rs) {
00184                         $false = false;
00185                         return $false;
00186                 }
00187                 
00188                 $arr = $rs->GetArray();
00189                 $rs->Close();
00190                 $arr2 = array();
00191         //      adodb_pr($arr);
00192                 if ($ttype) {
00193                         $isview = strncmp($ttype,'V',1) === 0;
00194                 }
00195                 for ($i=0; $i < sizeof($arr); $i++) {
00196                         if (!$arr[$i][2]) continue;
00197                         $type = $arr[$i][3];
00198                         $schemaval = ($schema) ? $arr[$i][1].'.' : '';
00199                         $name = $schemaval.$arr[$i][2];
00200                         $owner = $arr[$i][1];
00201                         if (substr($name,0,8) == 'EXPLAIN_') continue;
00202                         if ($ttype) { 
00203                                 if ($isview) {
00204                                         if (strncmp($type,'V',1) === 0) $arr2[] = $name;
00205                                 } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
00206                         } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name;
00207                 }
00208                 return $arr2;
00209         }
00210         
00211         function _Execute($sql, $inputarr=false )
00212         {
00213                 if ($inputarr) list($sql,$inputarr) = _colonparser($sql, $inputarr);
00214                 return parent::_Execute($sql, $inputarr);
00215         }
00216 };
00217  
00218 
00219 class  ADORecordSet_db2oci extends ADORecordSet_db2 {   
00220         
00221         var $databaseType = "db2oci";           
00222         
00223         function ADORecordSet_db2oci($id,$mode=false)
00224         {
00225                 return $this->ADORecordSet_db2($id,$mode);
00226         }
00227 }
00228 
00229 } //define
00230 ?>
 All Data Structures Namespaces Files Functions Variables Enumerations