Ignore:
Timestamp:
May 2, 2016, 12:09:23 PM (3 years ago)
Author:
jrpelegrina
Message:

Updated to moodle 3.0.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • moodle/trunk/fuentes/lib/adodb/drivers/adodb-oci8.inc.php

    r136 r1331  
    22/*
    33
    4   version V5.19  23-Apr-2014  (c) 2000-2014 John Lim. All rights reserved.
     4  @version   v5.20.1  06-Dec-2015
     5  @copyright (c) 2000-2013 John Lim. All rights reserved.
     6  @copyright (c) 2014      Damien Regad, Mark Newnham and the ADOdb community
    57
    68  Released under both BSD license and Lesser GPL library license.
     
    4345function oci_lob_desc($type) {
    4446        switch ($type) {
    45                 case OCI_B_BFILE: $result = OCI_D_FILE; break;
    46                 case OCI_B_CFILEE: $result = OCI_D_FILE; break;
    47                 case OCI_B_CLOB: $result = OCI_D_LOB; break;
    48                 case OCI_B_BLOB: $result = OCI_D_LOB; break;
    49                 case OCI_B_ROWID: $result = OCI_D_ROWID; break;
    50                 default: $result = false; break;
    51         }
    52         return $result;
     47                case OCI_B_BFILE:  return OCI_D_FILE;
     48                case OCI_B_CFILEE: return OCI_D_FILE;
     49                case OCI_B_CLOB:   return OCI_D_LOB;
     50                case OCI_B_BLOB:   return OCI_D_LOB;
     51                case OCI_B_ROWID:  return OCI_D_ROWID;
     52        }
     53        return false;
    5354}
    5455
     
    103104        // var $ansiOuter = true; // if oracle9
    104105
    105         function ADODB_oci8()
     106        function __construct()
    106107        {
    107108                $this->_hasOciFetchStatement = ADODB_PHPVER >= 0x4200;
    108                 if (defined('ADODB_EXTENSION')) $this->rsPrefix .= 'ext_';
     109                if (defined('ADODB_EXTENSION')) {
     110                        $this->rsPrefix .= 'ext_';
     111                }
    109112        }
    110113
     
    117120                $this->_findschema($table, $schema);
    118121
    119                 $false = false;
    120122                $save = $ADODB_FETCH_MODE;
    121123                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    122                 if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
    123 
    124                 if ($schema)
     124                if ($this->fetchMode !== false) {
     125                        $savem = $this->SetFetchMode(false);
     126                }
     127
     128                if ($schema){
    125129                        $rs = $this->Execute(sprintf($this->metaColumnsSQL2, strtoupper($schema), strtoupper($table)));
    126                 else
     130                }
     131                else {
    127132                        $rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table)));
    128 
    129                 if (isset($savem)) $this->SetFetchMode($savem);
     133                }
     134
     135                if (isset($savem)) {
     136                        $this->SetFetchMode($savem);
     137                }
    130138                $ADODB_FETCH_MODE = $save;
    131139                if (!$rs) {
    132                         return $false;
     140                        return false;
    133141                }
    134142                $retarr = array();
     
    140148                        $fld->scale = $rs->fields[3];
    141149                        if ($rs->fields[1] == 'NUMBER') {
    142                                 if ($rs->fields[3] == 0) $fld->type = 'INT';
     150                                if ($rs->fields[3] == 0) {
     151                                        $fld->type = 'INT';
     152                                }
    143153                                $fld->max_length = $rs->fields[4];
    144154                        }
     
    147157                        $fld->default_value = $rs->fields[6];
    148158
    149                         if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
    150                         else $retarr[strtoupper($fld->name)] = $fld;
     159                        if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) {
     160                                $retarr[] = $fld;
     161                        }
     162                        else {
     163                                $retarr[strtoupper($fld->name)] = $fld;
     164                        }
    151165                        $rs->MoveNext();
    152166                }
    153167                $rs->Close();
    154                 if (empty($retarr))
    155                         return  $false;
    156                 else
    157                         return $retarr;
     168                if (empty($retarr)) {
     169                        return false;
     170                }
     171                return $retarr;
    158172        }
    159173
     
    161175        {
    162176                $rs = $this->Execute("select TO_CHAR($this->sysTimeStamp,'YYYY-MM-DD HH24:MI:SS') from dual");
    163                 if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields));
     177                if ($rs && !$rs->EOF) {
     178                        return $this->UnixTimeStamp(reset($rs->fields));
     179                }
    164180
    165181                return false;
     
    194210        function _connect($argHostname, $argUsername, $argPassword, $argDatabasename=null, $mode=0)
    195211        {
    196                 if (!function_exists('oci_pconnect')) return null;
     212                if (!function_exists('oci_pconnect')) {
     213                        return null;
     214                }
    197215                #adodb_backtrace();
    198216
     
    201219
    202220                if($argHostname) { // added by Jorma Tuomainen <jorma.tuomainen@ppoy.fi>
    203                         if (empty($argDatabasename)) $argDatabasename = $argHostname;
     221                        if (empty($argDatabasename)) {
     222                                $argDatabasename = $argHostname;
     223                        }
    204224                        else {
    205225                                if(strpos($argHostname,":")) {
     
    230250                                ? oci_pconnect($argUsername,$argPassword, $argDatabasename,$this->charSet)
    231251                                : oci_pconnect($argUsername,$argPassword, $argDatabasename);
    232                         if ($this->_connectionID && $this->autoRollback)  oci_rollback($this->_connectionID);
     252                        if ($this->_connectionID && $this->autoRollback)  {
     253                                oci_rollback($this->_connectionID);
     254                        }
    233255                } else if ($mode==2) {
    234256                        $this->_connectionID = ($this->charSet)
     
    276298        function _affectedrows()
    277299        {
    278                 if (is_resource($this->_stmt)) return @oci_num_rows($this->_stmt);
     300                if (is_resource($this->_stmt)) {
     301                        return @oci_num_rows($this->_stmt);
     302                }
    279303                return 0;
    280304        }
     
    288312        function DBDate($d,$isfld=false)
    289313        {
    290                 if (empty($d) && $d !== 0) return 'null';
     314                if (empty($d) && $d !== 0) {
     315                        return 'null';
     316                }
    291317
    292318                if ($isfld) {
     
    295321                }
    296322
    297                 if (is_string($d)) $d = ADORecordSet::UnixDate($d);
    298 
    299                 if (is_object($d)) $ds = $d->format($this->fmtDate);
    300                 else $ds = adodb_date($this->fmtDate,$d);
     323                if (is_string($d)) {
     324                        $d = ADORecordSet::UnixDate($d);
     325                }
     326
     327                if (is_object($d)) {
     328                        $ds = $d->format($this->fmtDate);
     329                }
     330                else {
     331                        $ds = adodb_date($this->fmtDate,$d);
     332                }
    301333
    302334                return "TO_DATE(".$ds.",'".$this->dateformat."')";
     
    306338        {
    307339                $d = ADOConnection::DBDate($d);
    308                 if (strncmp($d,"'",1)) return $d;
    309 
    310                 return substr($d,1,strlen($d)-2);
     340                if (strncmp($d, "'", 1)) {
     341                        return $d;
     342                }
     343
     344                return substr($d, 1, strlen($d)-2);
    311345        }
    312346
    313347        function BindTimeStamp($ts)
    314348        {
    315                 if (empty($ts) && $ts !== 0) return 'null';
    316                 if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts);
    317 
    318                 if (is_object($ts)) $tss = $ts->format("'Y-m-d H:i:s'");
    319                 else $tss = adodb_date("'Y-m-d H:i:s'",$ts);
     349                if (empty($ts) && $ts !== 0) {
     350                        return 'null';
     351                }
     352                if (is_string($ts)) {
     353                        $ts = ADORecordSet::UnixTimeStamp($ts);
     354                }
     355
     356                if (is_object($ts)) {
     357                        $tss = $ts->format("'Y-m-d H:i:s'");
     358                }
     359                else {
     360                        $tss = adodb_date("'Y-m-d H:i:s'",$ts);
     361                }
    320362
    321363                return $tss;
     
    325367        function DBTimeStamp($ts,$isfld=false)
    326368        {
    327                 if (empty($ts) && $ts !== 0) return 'null';
    328                 if ($isfld) return 'TO_DATE(substr('.$ts.",1,19),'RRRR-MM-DD, HH24:MI:SS')";
    329                 if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts);
    330 
    331                 if (is_object($ts)) $tss = $ts->format("'Y-m-d H:i:s'");
    332                 else $tss = date("'Y-m-d H:i:s'",$ts);
     369                if (empty($ts) && $ts !== 0) {
     370                        return 'null';
     371                }
     372                if ($isfld) {
     373                        return 'TO_DATE(substr('.$ts.",1,19),'RRRR-MM-DD, HH24:MI:SS')";
     374                }
     375                if (is_string($ts)) {
     376                        $ts = ADORecordSet::UnixTimeStamp($ts);
     377                }
     378
     379                if (is_object($ts)) {
     380                        $tss = $ts->format("'Y-m-d H:i:s'");
     381                }
     382                else {
     383                        $tss = date("'Y-m-d H:i:s'",$ts);
     384                }
    333385
    334386                return 'TO_DATE('.$tss.",'RRRR-MM-DD, HH24:MI:SS')";
     
    337389        function RowLock($tables,$where,$col='1 as adodbignore')
    338390        {
    339                 if ($this->autoCommit) $this->BeginTrans();
     391                if ($this->autoCommit) {
     392                        $this->BeginTrans();
     393                }
    340394                return $this->GetOne("select $col from $tables where $where for update");
    341395        }
     
    375429                $primary_key = '';
    376430
    377                 $false = false;
    378431                $rs = $this->Execute(sprintf("SELECT * FROM ALL_CONSTRAINTS WHERE UPPER(TABLE_NAME)='%s' AND CONSTRAINT_TYPE='P'",$table));
    379432                if (!is_object($rs)) {
    380                         if (isset($savem))
     433                        if (isset($savem)) {
    381434                                $this->SetFetchMode($savem);
     435                        }
    382436                        $ADODB_FETCH_MODE = $save;
    383                         return $false;
    384                 }
    385 
    386                 if ($row = $rs->FetchRow())
     437                        return false;
     438                }
     439
     440                if ($row = $rs->FetchRow()) {
    387441                        $primary_key = $row[1]; //constraint_name
     442                }
    388443
    389444                if ($primary==TRUE && $primary_key=='') {
    390                         if (isset($savem))
     445                        if (isset($savem)) {
    391446                                $this->SetFetchMode($savem);
     447                        }
    392448                        $ADODB_FETCH_MODE = $save;
    393                         return $false; //There is no primary key
     449                        return false; //There is no primary key
    394450                }
    395451
     
    398454
    399455                if (!is_object($rs)) {
    400                         if (isset($savem))
     456                        if (isset($savem)) {
    401457                                $this->SetFetchMode($savem);
     458                        }
    402459                        $ADODB_FETCH_MODE = $save;
    403                         return $false;
     460                        return false;
    404461                }
    405462
     
    408465
    409466                while ($row = $rs->FetchRow()) {
    410                         if ($primary && $row[0] != $primary_key) continue;
     467                        if ($primary && $row[0] != $primary_key) {
     468                                continue;
     469                        }
    411470                        if (!isset($indexes[$row[0]])) {
    412471                                $indexes[$row[0]] = array(
     
    432491        function BeginTrans()
    433492        {
    434                 if ($this->transOff) return true;
     493                if ($this->transOff) {
     494                        return true;
     495                }
    435496                $this->transCnt += 1;
    436497                $this->autoCommit = false;
    437498                $this->_commit = OCI_DEFAULT;
    438499
    439                 if ($this->_transmode) $ok = $this->Execute("SET TRANSACTION ".$this->_transmode);
    440                 else $ok = true;
     500                if ($this->_transmode) {
     501                        $ok = $this->Execute("SET TRANSACTION ".$this->_transmode);
     502                }
     503                else {
     504                        $ok = true;
     505                }
    441506
    442507                return $ok ? true : false;
     
    445510        function CommitTrans($ok=true)
    446511        {
    447                 if ($this->transOff) return true;
    448                 if (!$ok) return $this->RollbackTrans();
    449 
    450                 if ($this->transCnt) $this->transCnt -= 1;
     512                if ($this->transOff) {
     513                        return true;
     514                }
     515                if (!$ok) {
     516                        return $this->RollbackTrans();
     517                }
     518
     519                if ($this->transCnt) {
     520                        $this->transCnt -= 1;
     521                }
    451522                $ret = oci_commit($this->_connectionID);
    452523                $this->_commit = OCI_COMMIT_ON_SUCCESS;
     
    457528        function RollbackTrans()
    458529        {
    459                 if ($this->transOff) return true;
    460                 if ($this->transCnt) $this->transCnt -= 1;
     530                if ($this->transOff) {
     531                        return true;
     532                }
     533                if ($this->transCnt) {
     534                        $this->transCnt -= 1;
     535                }
    461536                $ret = oci_rollback($this->_connectionID);
    462537                $this->_commit = OCI_COMMIT_ON_SUCCESS;
     
    473548        function ErrorMsg()
    474549        {
    475                 if ($this->_errorMsg !== false) return $this->_errorMsg;
    476 
    477                 if (is_resource($this->_stmt)) $arr = @oci_error($this->_stmt);
     550                if ($this->_errorMsg !== false) {
     551                        return $this->_errorMsg;
     552                }
     553
     554                if (is_resource($this->_stmt)) {
     555                        $arr = @oci_error($this->_stmt);
     556                }
    478557                if (empty($arr)) {
    479                         if (is_resource($this->_connectionID)) $arr = @oci_error($this->_connectionID);
    480                         else $arr = @oci_error();
    481                         if ($arr === false) return '';
     558                        if (is_resource($this->_connectionID)) {
     559                                $arr = @oci_error($this->_connectionID);
     560                        }
     561                        else {
     562                                $arr = @oci_error();
     563                        }
     564                        if ($arr === false) {
     565                                return '';
     566                        }
    482567                }
    483568                $this->_errorMsg = $arr['message'];
     
    488573        function ErrorNo()
    489574        {
    490                 if ($this->_errorCode !== false) return $this->_errorCode;
    491 
    492                 if (is_resource($this->_stmt)) $arr = @oci_error($this->_stmt);
     575                if ($this->_errorCode !== false) {
     576                        return $this->_errorCode;
     577                }
     578
     579                if (is_resource($this->_stmt)) {
     580                        $arr = @oci_error($this->_stmt);
     581                }
    493582                if (empty($arr)) {
    494583                        $arr = @oci_error($this->_connectionID);
    495                         if ($arr == false) $arr = @oci_error();
    496                         if ($arr == false) return '';
     584                        if ($arr == false) {
     585                                $arr = @oci_error();
     586                        }
     587                        if ($arr == false) {
     588                                return '';
     589                        }
    497590                }
    498591
     
    508601        function SQLDate($fmt, $col=false)
    509602        {
    510                 if (!$col) $col = $this->sysTimeStamp;
     603                if (!$col) {
     604                        $col = $this->sysTimeStamp;
     605                }
    511606                $s = 'TO_CHAR('.$col.",'";
    512607
     
    570665
    571666                        default:
    572                         // handle escape characters...
     667                                // handle escape characters...
    573668                                if ($ch == '\\') {
    574669                                        $i++;
    575670                                        $ch = substr($fmt,$i,1);
    576671                                }
    577                                 if (strpos('-/.:;, ',$ch) !== false) $s .= $ch;
    578                                 else $s .= '"'.$ch.'"';
     672                                if (strpos('-/.:;, ',$ch) !== false) {
     673                                        $s .= $ch;
     674                                }
     675                                else {
     676                                        $s .= '"'.$ch.'"';
     677                                }
    579678
    580679                        }
     
    610709                // seems that oracle only supports 1 hint comment in 8i
    611710                if ($this->firstrows) {
    612                         if ($nrows > 500 && $nrows < 1000) $hint = "FIRST_ROWS($nrows)";
    613                         else $hint = 'FIRST_ROWS';
    614 
    615                         if (strpos($sql,'/*+') !== false)
     711                        if ($nrows > 500 && $nrows < 1000) {
     712                                $hint = "FIRST_ROWS($nrows)";
     713                        }
     714                        else {
     715                                $hint = 'FIRST_ROWS';
     716                        }
     717
     718                        if (strpos($sql,'/*+') !== false) {
    616719                                $sql = str_replace('/*+ ',"/*+$hint ",$sql);
    617                         else
     720                        }
     721                        else {
    618722                                $sql = preg_replace('/^[ \t\n]*select/i',"SELECT /*+$hint*/",$sql);
     723                        }
    619724                        $hint = "/*+ $hint */";
    620                 } else
     725                } else {
    621726                        $hint = '';
     727                }
    622728
    623729                if ($offset == -1 || ($offset < $this->selectOffsetAlg1 && 0 < $nrows && $nrows < 1000)) {
    624730                        if ($nrows > 0) {
    625                                 if ($offset > 0) $nrows += $offset;
     731                                if ($offset > 0) {
     732                                        $nrows += $offset;
     733                                }
    626734                                //$inputarr['adodb_rownum'] = $nrows;
    627735                                if ($this->databaseType == 'oci8po') {
     
    644752                        $q_fields = "SELECT * FROM (".$sql.") WHERE NULL = NULL";
    645753
    646                         $false = false;
    647754                        if (! $stmt_arr = $this->Prepare($q_fields)) {
    648                                 return $false;
     755                                return false;
    649756                        }
    650757                        $stmt = $stmt_arr[1];
     
    653760                                foreach($inputarr as $k => $v) {
    654761                                        if (is_array($v)) {
    655                                                 if (sizeof($v) == 2) // suggested by g.giunta@libero.
     762                                                // suggested by g.giunta@libero.
     763                                                if (sizeof($v) == 2) {
    656764                                                        oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]);
    657                                                 else
     765                                                }
     766                                                else {
    658767                                                        oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]);
     768                                                }
    659769                                        } else {
    660770                                                $len = -1;
    661                                                 if ($v === ' ') $len = 1;
     771                                                if ($v === ' ') {
     772                                                        $len = 1;
     773                                                }
    662774                                                if (isset($bindarr)) {  // is prepared sql, so no need to oci_bind_by_name again
    663775                                                        $bindarr[$k] = $v;
     
    671783                        if (!oci_execute($stmt, OCI_DEFAULT)) {
    672784                                oci_free_statement($stmt);
    673                                 return $false;
     785                                return false;
    674786                        }
    675787
     
    682794                        oci_free_statement($stmt);
    683795                        $fields = implode(',', $cols);
    684                         if ($nrows <= 0) $nrows = 999999999999;
    685                         else $nrows += $offset;
     796                        if ($nrows <= 0) {
     797                                $nrows = 999999999999;
     798                        }
     799                        else {
     800                                $nrows += $offset;
     801                        }
    686802                        $offset += 1; // in Oracle rownum starts at 1
    687803
     
    700816                                $inputarr['adodb_offset'] = $offset;
    701817
    702                         if ($secs2cache>0) $rs = $this->CacheExecute($secs2cache, $sql,$inputarr);
     818                        if ($secs2cache > 0) {
     819                                $rs = $this->CacheExecute($secs2cache, $sql,$inputarr);
     820                        }
    703821                        else $rs = $this->Execute($sql,$inputarr);
    704822                        return $rs;
     
    742860                $desc = oci_new_descriptor($this->_connectionID, OCI_D_LOB);
    743861                $arr['blob'] = array($desc,-1,$type);
    744                 if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
     862                if ($this->session_sharing_force_blob) {
     863                        $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
     864                }
    745865                $commit = $this->autoCommit;
    746                 if ($commit) $this->BeginTrans();
     866                if ($commit) {
     867                        $this->BeginTrans();
     868                }
    747869                $rs = $this->_Execute($sql,$arr);
    748                 if ($rez = !empty($rs)) $desc->save($val);
     870                if ($rez = !empty($rs)) {
     871                        $desc->save($val);
     872                }
    749873                $desc->free();
    750                 if ($commit) $this->CommitTrans();
    751                 if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=FORCE');
    752 
    753                 if ($rez) $rs->Close();
     874                if ($commit) {
     875                        $this->CommitTrans();
     876                }
     877                if ($this->session_sharing_force_blob) {
     878                        $this->Execute('ALTER SESSION SET CURSOR_SHARING=FORCE');
     879                }
     880
     881                if ($rez) {
     882                        $rs->Close();
     883                }
    754884                return $rez;
    755885        }
     
    776906                $this->BeginTrans();
    777907                $rs = ADODB_oci8::Execute($sql,$arr);
    778                 if ($rez = !empty($rs)) $desc->savefile($val);
     908                if ($rez = !empty($rs)) {
     909                        $desc->savefile($val);
     910                }
    779911                $desc->free();
    780912                $this->CommitTrans();
    781913
    782                 if ($rez) $rs->Close();
     914                if ($rez) {
     915                        $rs->Close();
     916                }
    783917                return $rez;
    784918        }
     
    796930                        $fn = $this->fnExecute;
    797931                        $ret = $fn($this,$sql,$inputarr);
    798                         if (isset($ret)) return $ret;
     932                        if (isset($ret)) {
     933                                return $ret;
     934                        }
    799935                }
    800936                if ($inputarr !== false) {
    801                         if (!is_array($inputarr)) $inputarr = array($inputarr);
     937                        if (!is_array($inputarr)) {
     938                                $inputarr = array($inputarr);
     939                        }
    802940
    803941                        $element0 = reset($inputarr);
     
    807945                        if ($array2d || !$this->_bindInputArray) {
    808946
    809                         # is_object check because oci8 descriptors can be passed in
    810                         if ($array2d && $this->_bindInputArray) {
    811                                 if (is_string($sql))
    812                                         $stmt = $this->Prepare($sql);
    813                                 else
    814                                         $stmt = $sql;
    815 
    816                                 foreach($inputarr as $arr) {
    817                                         $ret = $this->_Execute($stmt,$arr);
    818                                         if (!$ret) return $ret;
    819                                 }
    820                                 return $ret;
    821                         } else {
    822                                 $sqlarr = explode(':',$sql);
    823                                 $sql = '';
    824                                 $lastnomatch = -2;
    825                                 #var_dump($sqlarr);echo "<hr>";var_dump($inputarr);echo"<hr>";
    826                                 foreach($sqlarr as $k => $str) {
    827                                                 if ($k == 0) { $sql = $str; continue; }
     947                                # is_object check because oci8 descriptors can be passed in
     948                                if ($array2d && $this->_bindInputArray) {
     949                                        if (is_string($sql)) {
     950                                                $stmt = $this->Prepare($sql);
     951                                        } else {
     952                                                $stmt = $sql;
     953                                        }
     954
     955                                        foreach($inputarr as $arr) {
     956                                                $ret = $this->_Execute($stmt,$arr);
     957                                                if (!$ret) {
     958                                                        return $ret;
     959                                                }
     960                                        }
     961                                        return $ret;
     962                                } else {
     963                                        $sqlarr = explode(':', $sql);
     964                                        $sql = '';
     965                                        $lastnomatch = -2;
     966                                        #var_dump($sqlarr);echo "<hr>";var_dump($inputarr);echo"<hr>";
     967                                        foreach($sqlarr as $k => $str) {
     968                                                if ($k == 0) {
     969                                                        $sql = $str;
     970                                                        continue;
     971                                                }
    828972                                                // we need $lastnomatch because of the following datetime,
    829973                                                // eg. '10:10:01', which causes code to think that there is bind param :10 and :1
    830974                                                $ok = preg_match('/^([0-9]*)/', $str, $arr);
    831975
    832                                                 if (!$ok) $sql .= $str;
    833                                                 else {
     976                                                if (!$ok) {
     977                                                        $sql .= $str;
     978                                                } else {
    834979                                                        $at = $arr[1];
    835980                                                        if (isset($inputarr[$at]) || is_null($inputarr[$at])) {
     
    840985                                                                        $sql .= ':'.$str;
    841986                                                                } else {
    842                                                                         if (is_null($inputarr[$at])) $sql .= 'null';
    843                                                                         else $sql .= $this->qstr($inputarr[$at]);
     987                                                                        if (is_null($inputarr[$at])) {
     988                                                                                $sql .= 'null';
     989                                                                        }
     990                                                                        else {
     991                                                                                $sql .= $this->qstr($inputarr[$at]);
     992                                                                        }
    844993                                                                        $sql .= substr($str, strlen($at));
    845994                                                                }
     
    847996                                                                $sql .= ':'.$str;
    848997                                                        }
    849 
    850998                                                }
    851999                                        }
     
    8541002                        }
    8551003                        $ret = $this->_Execute($sql,$inputarr);
    856 
    8571004
    8581005                } else {
     
    8771024                        $this->_errorCode = false;
    8781025                        $arr = @oci_error($this->_connectionID);
    879                         if ($arr === false) return false;
     1026                        if ($arr === false) {
     1027                                return false;
     1028                        }
    8801029
    8811030                        $this->_errorMsg = $arr['message'];
     
    9091058        function ExecuteCursor($sql,$cursorName='rs',$params=false)
    9101059        {
    911                 if (is_array($sql)) $stmt = $sql;
     1060                if (is_array($sql)) {
     1061                        $stmt = $sql;
     1062                }
    9121063                else $stmt = ADODB_oci8::Prepare($sql,true); # true to allocate oci_new_cursor
    9131064
     
    9261077                $rs = $this->Execute($stmt);
    9271078                if ($rs) {
    928                         if ($rs->databaseType == 'array') oci_free_cursor($stmt[4]);
    929                         else if ($hasref) $rs->_refcursor = $stmt[4];
     1079                        if ($rs->databaseType == 'array') {
     1080                                oci_free_cursor($stmt[4]);
     1081                        }
     1082                        elseif ($hasref) {
     1083                                $rs->_refcursor = $stmt[4];
     1084                        }
    9301085                }
    9311086                return $rs;
     
    9641119        {
    9651120
    966                 if (!is_array($stmt)) return false;
     1121                if (!is_array($stmt)) {
     1122                        return false;
     1123                }
    9671124
    9681125                if (($type == OCI_B_CURSOR) && sizeof($stmt) >= 5) {
     
    9711128
    9721129                if ($name == false) {
    973                         if ($type !== false) $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size,$type);
    974                         else $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size); // +1 byte for null terminator
     1130                        if ($type !== false) {
     1131                                $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size,$type);
     1132                        }
     1133                        else {
     1134                                $rez = oci_bind_by_name($stmt[1],":".$stmt[2],$var,$size); // +1 byte for null terminator
     1135                        }
    9751136                        $stmt[2] += 1;
    9761137                } else if (oci_lob_desc($type)) {
     
    10051166                                ADOConnection::outp("<b>Bind</b>: name = $name");
    10061167
    1007                         if ($type !== false) $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size,$type);
    1008                         else $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size); // +1 byte for null terminator
     1168                        if ($type !== false) {
     1169                                $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size,$type);
     1170                        }
     1171                        else {
     1172                                $rez = oci_bind_by_name($stmt[1],":".$name,$var,$size); // +1 byte for null terminator
     1173                        }
    10091174                }
    10101175
     
    10851250
    10861251                $this->_stmt = $stmt;
    1087                 if (!$stmt) return false;
    1088 
    1089                 if (defined('ADODB_PREFETCH_ROWS')) @oci_set_prefetch($stmt,ADODB_PREFETCH_ROWS);
     1252                if (!$stmt) {
     1253                        return false;
     1254                }
     1255
     1256                if (defined('ADODB_PREFETCH_ROWS')) {
     1257                        @oci_set_prefetch($stmt,ADODB_PREFETCH_ROWS);
     1258                }
    10901259
    10911260                if (is_array($inputarr)) {
    10921261                        foreach($inputarr as $k => $v) {
    10931262                                if (is_array($v)) {
    1094                                         if (sizeof($v) == 2) // suggested by g.giunta@libero.
     1263                                        // suggested by g.giunta@libero.
     1264                                        if (sizeof($v) == 2) {
    10951265                                                oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]);
    1096                                         else
     1266                                        }
     1267                                        else {
    10971268                                                oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]);
     1269                                        }
    10981270
    10991271                                        if ($this->debug==99) {
    1100                                                 if (is_object($v[0]))
     1272                                                if (is_object($v[0])) {
    11011273                                                        echo "name=:$k",' len='.$v[1],' type='.$v[2],'<br>';
    1102                                                 else
     1274                                                }
     1275                                                else {
    11031276                                                        echo "name=:$k",' var='.$inputarr[$k][0],' len='.$v[1],' type='.$v[2],'<br>';
     1277                                                }
    11041278
    11051279                                        }
    11061280                                } else {
    11071281                                        $len = -1;
    1108                                         if ($v === ' ') $len = 1;
     1282                                        if ($v === ' ') {
     1283                                                $len = 1;
     1284                                        }
    11091285                                        if (isset($bindarr)) {  // is prepared sql, so no need to oci_bind_by_name again
    11101286                                                $bindarr[$k] = $v;
     
    11991375        function _close()
    12001376        {
    1201                 if (!$this->_connectionID) return;
    1202 
    1203                 if (!$this->autoCommit) oci_rollback($this->_connectionID);
     1377                if (!$this->_connectionID) {
     1378                        return;
     1379                }
     1380
     1381
     1382                if (!$this->autoCommit) {
     1383                        oci_rollback($this->_connectionID);
     1384                }
    12041385                if (count($this->_refLOBs) > 0) {
    12051386                        foreach ($this ->_refLOBs as $key => $value) {
     
    12161397        function MetaPrimaryKeys($table, $owner=false,$internalKey=false)
    12171398        {
    1218                 if ($internalKey) return array('ROWID');
     1399                if ($internalKey) {
     1400                        return array('ROWID');
     1401                }
    12191402
    12201403                // tested with oracle 8.1.7
     
    13221505                //$nofixquotes=false;
    13231506
    1324                 if ($this->noNullStrings && strlen($s)==0)$s = ' ';
     1507                if ($this->noNullStrings && strlen($s)==0) {
     1508                        $s = ' ';
     1509                }
    13251510                if (!$magic_quotes) {
    13261511                        if ($this->replaceQuote[0] == '\\'){
     
    13521537        var $_fieldobjs;
    13531538
    1354         //var $_arr = false;
    1355 
    1356         function ADORecordset_oci8($queryID,$mode=false)
     1539        function __construct($queryID,$mode=false)
    13571540        {
    13581541                if ($mode === false) {
     
    13601543                        $mode = $ADODB_FETCH_MODE;
    13611544                }
    1362                 switch ($mode)
    1363                 {
    1364                 case ADODB_FETCH_ASSOC:$this->fetchMode = OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1365                 case ADODB_FETCH_DEFAULT:
    1366                 case ADODB_FETCH_BOTH:$this->fetchMode = OCI_NUM+OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1367                 case ADODB_FETCH_NUM:
    1368                 default:
    1369                 $this->fetchMode = OCI_NUM+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1370                 }
    1371 
     1545                switch ($mode) {
     1546                        case ADODB_FETCH_ASSOC:
     1547                                $this->fetchMode = OCI_ASSOC;
     1548                                break;
     1549                        case ADODB_FETCH_DEFAULT:
     1550                        case ADODB_FETCH_BOTH:
     1551                                $this->fetchMode = OCI_NUM + OCI_ASSOC;
     1552                                break;
     1553                        case ADODB_FETCH_NUM:
     1554                        default:
     1555                                $this->fetchMode = OCI_NUM;
     1556                                break;
     1557                }
     1558                $this->fetchMode += OCI_RETURN_NULLS + OCI_RETURN_LOBS;
    13721559                $this->adodbFetchMode = $mode;
    13731560                $this->_queryID = $queryID;
     
    13771564        function Init()
    13781565        {
    1379                 if ($this->_inited) return;
     1566                if ($this->_inited) {
     1567                        return;
     1568                }
    13801569
    13811570                $this->_inited = true;
     
    13841573                        $this->_currentRow = 0;
    13851574                        @$this->_initrs();
    1386                         if ($this->_numOfFields) $this->EOF = !$this->_fetch();
     1575                        if ($this->_numOfFields) {
     1576                                $this->EOF = !$this->_fetch();
     1577                        }
    13871578                        else $this->EOF = true;
    13881579
     
    13911582                        // see http://phplens.com/lens/lensforum/msgs.php?id=6771
    13921583                        $err = oci_error($this->_queryID);
    1393                         if ($err && $this->connection->debug) ADOConnection::outp($err);
     1584                        if ($err && $this->connection->debug) {
     1585                                ADOConnection::outp($err);
     1586                        }
    13941587                        */
    13951588
     
    14301623                $fieldOffset += 1;
    14311624                $fld->name =oci_field_name($this->_queryID, $fieldOffset);
     1625                if (ADODB_ASSOC_CASE == ADODB_ASSOC_CASE_LOWER) {
     1626                        $fld->name = strtolower($fld->name);
     1627                }
    14321628                $fld->type = oci_field_type($this->_queryID, $fieldOffset);
    14331629                $fld->max_length = oci_field_size($this->_queryID, $fieldOffset);
     
    14371633                                $p = oci_field_precision($this->_queryID, $fieldOffset);
    14381634                                $sc = oci_field_scale($this->_queryID, $fieldOffset);
    1439                                 if ($p != 0 && $sc == 0) $fld->type = 'INT';
     1635                                if ($p != 0 && $sc == 0) {
     1636                                        $fld->type = 'INT';
     1637                                }
    14401638                                $fld->scale = $p;
    14411639                                break;
     
    14571655
    14581656
    1459 /*
    1460         // 10% speedup to move MoveNext to child class
    1461         function _MoveNext()
    1462         {
    1463         //global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return @adodb_movenext($this);
    1464 
    1465                 if ($this->EOF) return false;
    1466 
    1467                 $this->_currentRow++;
    1468                 if($this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode))
    1469                         return true;
    1470                 $this->EOF = true;
    1471 
    1472                 return false;
    1473         }
    1474 */
    1475 
    1476 
    14771657        function MoveNext()
    14781658        {
    14791659                if ($this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) {
    14801660                        $this->_currentRow += 1;
     1661                        $this->_updatefields();
    14811662                        return true;
    14821663                }
     
    14881669        }
    14891670
    1490 /*
    1491         # does not work as first record is retrieved in _initrs(), so is not included in GetArray()
    1492         function GetArray($nRows = -1)
    1493         {
    1494         global $ADODB_OCI8_GETARRAY;
    1495 
    1496                 if (true ||  !empty($ADODB_OCI8_GETARRAY)) {
    1497                         # does not support $ADODB_ANSI_PADDING_OFF
    1498 
    1499                         //OCI_RETURN_NULLS and OCI_RETURN_LOBS is set by oci_fetch_all
    1500                         switch($this->adodbFetchMode) {
    1501                         case ADODB_FETCH_NUM:
    1502 
    1503                                 $ncols = @oci_fetch_all($this->_queryID, $results, 0, $nRows, oci_fetch_all_BY_ROW+OCI_NUM);
    1504                                 $results = array_merge(array($this->fields),$results);
    1505                                 return $results;
    1506 
    1507                         case ADODB_FETCH_ASSOC:
    1508                                 if (ADODB_ASSOC_CASE != 2 || $this->databaseType != 'oci8') break;
    1509 
    1510                                 $ncols = @oci_fetch_all($this->_queryID, $assoc, 0, $nRows, oci_fetch_all_BY_ROW);
    1511                                 $results = array_merge(array($this->fields),$assoc);
    1512                                 return $results;
    1513 
    1514                         default:
    1515                                 break;
    1516                         }
    1517                 }
    1518 
    1519                 $results = ADORecordSet::GetArray($nRows);
    1520                 return $results;
    1521 
    1522         }
    1523 */
    1524 
    15251671        // Optimize SelectLimit() by using oci_fetch()
    15261672        function GetArrayLimit($nrows,$offset=-1)
     
    15311677                }
    15321678                $arr = array();
    1533                 for ($i=1; $i < $offset; $i++)
    1534                         if (!@oci_fetch($this->_queryID)) return $arr;
    1535 
    1536                 if (!$this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) return $arr;;
     1679                for ($i=1; $i < $offset; $i++) {
     1680                        if (!@oci_fetch($this->_queryID)) {
     1681                                return $arr;
     1682                        }
     1683                }
     1684
     1685                if (!$this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode)) {
     1686                        return $arr;
     1687                }
     1688                $this->_updatefields();
    15371689                $results = array();
    15381690                $cnt = 0;
     
    15611713
    15621714
    1563 
    15641715        function _seek($row)
    15651716        {
     
    15691720        function _fetch()
    15701721        {
    1571                 return $this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode);
     1722                $this->fields = @oci_fetch_array($this->_queryID,$this->fetchMode);
     1723                $this->_updatefields();
     1724
     1725                return $this->fields;
    15721726        }
    15731727
     
    15791733        function _close()
    15801734        {
    1581                 if ($this->connection->_stmt === $this->_queryID) $this->connection->_stmt = false;
     1735                if ($this->connection->_stmt === $this->_queryID) {
     1736                        $this->connection->_stmt = false;
     1737                }
    15821738                if (!empty($this->_refcursor)) {
    15831739                        oci_free_cursor($this->_refcursor);
     
    16141770                case 'NVARCHAR':
    16151771                case 'NVARCHAR2':
    1616                         if ($len <= $this->blobSize) return 'C';
     1772                        if ($len <= $this->blobSize) {
     1773                                return 'C';
     1774                        }
    16171775
    16181776                case 'NCLOB':
     
    16451803
    16461804class ADORecordSet_ext_oci8 extends ADORecordSet_oci8 {
    1647         function ADORecordSet_ext_oci8($queryID,$mode=false)
    1648         {
    1649                 if ($mode === false) {
    1650                         global $ADODB_FETCH_MODE;
    1651                         $mode = $ADODB_FETCH_MODE;
    1652                 }
    1653                 switch ($mode)
    1654                 {
    1655                 case ADODB_FETCH_ASSOC:$this->fetchMode = OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1656                 case ADODB_FETCH_DEFAULT:
    1657                 case ADODB_FETCH_BOTH:$this->fetchMode = OCI_NUM+OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1658                 case ADODB_FETCH_NUM:
    1659                 default: $this->fetchMode = OCI_NUM+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
    1660                 }
    1661                 $this->adodbFetchMode = $mode;
    1662                 $this->_queryID = $queryID;
     1805        function __construct($queryID,$mode=false)
     1806        {
     1807                parent::__construct($queryID, $mode);
    16631808        }
    16641809
Note: See TracChangeset for help on using the changeset viewer.