[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 V5.19 23-Apr-2014 (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved. 4 Released under both BSD license and Lesser GPL library license. 5 Whenever there is any discrepancy between the two licenses, 6 the BSD license will take precedence. 7 Set tabs to 4 for best viewing. 8 9 Latest version is available at http://adodb.sourceforge.net 10 11 Microsoft Visual FoxPro data driver. Requires ODBC. Works only on MS Windows. 12 */ 13 14 // security - hide paths 15 if (!defined('ADODB_DIR')) die(); 16 include(ADODB_DIR."/drivers/adodb-db2.inc.php"); 17 18 19 if (!defined('ADODB_DB2OCI')){ 20 define('ADODB_DB2OCI',1); 21 22 /* 23 // regex code for smart remapping of :0, :1 bind vars to ? ? 24 function _colontrack($p) 25 { 26 global $_COLONARR,$_COLONSZ; 27 $v = (integer) substr($p,1); 28 if ($v > $_COLONSZ) return $p; 29 $_COLONARR[] = $v; 30 return '?'; 31 } 32 33 // smart remapping of :0, :1 bind vars to ? ? 34 function _colonscope($sql,$arr) 35 { 36 global $_COLONARR,$_COLONSZ; 37 38 $_COLONARR = array(); 39 $_COLONSZ = sizeof($arr); 40 41 $sql2 = preg_replace("/(:[0-9]+)/e","_colontrack('\\1')",$sql); 42 43 if (empty($_COLONARR)) return array($sql,$arr); 44 45 foreach($_COLONARR as $k => $v) { 46 $arr2[] = $arr[$v]; 47 } 48 49 return array($sql2,$arr2); 50 } 51 */ 52 53 /* 54 Smart remapping of :0, :1 bind vars to ? ? 55 56 Handles colons in comments -- and / * * / and in quoted strings. 57 */ 58 59 function _colonparser($sql,$arr) 60 { 61 $lensql = strlen($sql); 62 $arrsize = sizeof($arr); 63 $state = 'NORM'; 64 $at = 1; 65 $ch = $sql[0]; 66 $ch2 = @$sql[1]; 67 $sql2 = ''; 68 $arr2 = array(); 69 $nprev = 0; 70 71 72 while (strlen($ch)) { 73 74 switch($ch) { 75 case '/': 76 if ($state == 'NORM' && $ch2 == '*') { 77 $state = 'COMMENT'; 78 79 $at += 1; 80 $ch = $ch2; 81 $ch2 = $at < $lensql ? $sql[$at] : ''; 82 } 83 break; 84 85 case '*': 86 if ($state == 'COMMENT' && $ch2 == '/') { 87 $state = 'NORM'; 88 89 $at += 1; 90 $ch = $ch2; 91 $ch2 = $at < $lensql ? $sql[$at] : ''; 92 } 93 break; 94 95 case "\n": 96 case "\r": 97 if ($state == 'COMMENT2') $state = 'NORM'; 98 break; 99 100 case "'": 101 do { 102 $at += 1; 103 $ch = $ch2; 104 $ch2 = $at < $lensql ? $sql[$at] : ''; 105 } while ($ch !== "'"); 106 break; 107 108 case ':': 109 if ($state == 'COMMENT' || $state == 'COMMENT2') break; 110 111 //echo "$at=$ch $ch2, "; 112 if ('0' <= $ch2 && $ch2 <= '9') { 113 $n = ''; 114 $nat = $at; 115 do { 116 $at += 1; 117 $ch = $ch2; 118 $n .= $ch; 119 $ch2 = $at < $lensql ? $sql[$at] : ''; 120 } while ('0' <= $ch && $ch <= '9'); 121 #echo "$n $arrsize ] "; 122 $n = (integer) $n; 123 if ($n < $arrsize) { 124 $sql2 .= substr($sql,$nprev,$nat-$nprev-1).'?'; 125 $nprev = $at-1; 126 $arr2[] = $arr[$n]; 127 } 128 } 129 break; 130 131 case '-': 132 if ($state == 'NORM') { 133 if ($ch2 == '-') $state = 'COMMENT2'; 134 $at += 1; 135 $ch = $ch2; 136 $ch2 = $at < $lensql ? $sql[$at] : ''; 137 } 138 break; 139 } 140 141 $at += 1; 142 $ch = $ch2; 143 $ch2 = $at < $lensql ? $sql[$at] : ''; 144 } 145 146 if ($nprev == 0) { 147 $sql2 = $sql; 148 } else { 149 $sql2 .= substr($sql,$nprev); 150 } 151 152 return array($sql2,$arr2); 153 } 154 155 class ADODB_db2oci extends ADODB_db2 { 156 var $databaseType = "db2oci"; 157 var $sysTimeStamp = 'sysdate'; 158 var $sysDate = 'trunc(sysdate)'; 159 var $_bindInputArray = true; 160 161 function ADODB_db2oci() 162 { 163 parent::ADODB_db2(); 164 } 165 166 function Param($name,$type='C') 167 { 168 return ':'.$name; 169 } 170 171 172 function MetaTables($ttype=false,$schema=false) 173 { 174 global $ADODB_FETCH_MODE; 175 176 $savem = $ADODB_FETCH_MODE; 177 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 178 $qid = db2_tables($this->_connectionID); 179 180 $rs = new ADORecordSet_db2($qid); 181 182 $ADODB_FETCH_MODE = $savem; 183 if (!$rs) { 184 $false = false; 185 return $false; 186 } 187 188 $arr = $rs->GetArray(); 189 $rs->Close(); 190 $arr2 = array(); 191 // adodb_pr($arr); 192 if ($ttype) { 193 $isview = strncmp($ttype,'V',1) === 0; 194 } 195 for ($i=0; $i < sizeof($arr); $i++) { 196 if (!$arr[$i][2]) continue; 197 $type = $arr[$i][3]; 198 $schemaval = ($schema) ? $arr[$i][1].'.' : ''; 199 $name = $schemaval.$arr[$i][2]; 200 $owner = $arr[$i][1]; 201 if (substr($name,0,8) == 'EXPLAIN_') continue; 202 if ($ttype) { 203 if ($isview) { 204 if (strncmp($type,'V',1) === 0) $arr2[] = $name; 205 } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name; 206 } else if (strncmp($type,'T',1) === 0 && strncmp($owner,'SYS',3) !== 0) $arr2[] = $name; 207 } 208 return $arr2; 209 } 210 211 function _Execute($sql, $inputarr=false ) 212 { 213 if ($inputarr) list($sql,$inputarr) = _colonparser($sql, $inputarr); 214 return parent::_Execute($sql, $inputarr); 215 } 216 }; 217 218 219 class ADORecordSet_db2oci extends ADORecordSet_db2 { 220 221 var $databaseType = "db2oci"; 222 223 function ADORecordSet_db2oci($id,$mode=false) 224 { 225 return $this->ADORecordSet_db2($id,$mode); 226 } 227 } 228 229 } //define
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |