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-ibase.inc.php

    r136 r1331  
    11<?php
    22/*
    3 V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
     3@version   v5.20.1  06-Dec-2015
     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
    46  Released under both BSD license and Lesser GPL library license.
    57  Whenever there is any discrepancy between the two licenses,
     
    5557        var $role = false;
    5658
    57         function ADODB_ibase()
    58         {
    59                  if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT;
    60         }
    61 
    62 
    63            // returns true or false
     59        function __construct()
     60        {
     61                if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT;
     62        }
     63
     64
     65        // returns true or false
    6466        function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$persist=false)
    6567        {
     
    8587                if (function_exists('ibase_timefmt')) {
    8688                        ibase_timefmt($this->ibase_datefmt,IBASE_DATE );
    87                         if ($this->dialect == 1) ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP );
    88                         else ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP );
     89                        if ($this->dialect == 1) {
     90                                ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP );
     91                        }
     92                        else {
     93                                ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP );
     94                        }
    8995                        ibase_timefmt($this->ibase_timefmt,IBASE_TIME );
    9096
     
    96102                return true;
    97103        }
    98            // returns true or false
     104
     105        // returns true or false
    99106        function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
    100107        {
     
    105112        function MetaPrimaryKeys($table,$owner_notused=false,$internalKey=false)
    106113        {
    107                 if ($internalKey) return array('RDB$DB_KEY');
     114                if ($internalKey) {
     115                        return array('RDB$DB_KEY');
     116                }
    108117
    109118                $table = strtoupper($table);
     
    139148                $this->transCnt += 1;
    140149                $this->autoCommit = false;
    141                 $this->_transactionID = $this->_connectionID;//ibase_trans($this->ibasetrans, $this->_connectionID);
     150                $this->_transactionID = $this->_connectionID;//ibase_trans($this->ibasetrans, $this->_connectionID);
    142151                return $this->_transactionID;
    143152        }
     
    145154        function CommitTrans($ok=true)
    146155        {
    147                 if (!$ok) return $this->RollbackTrans();
    148                 if ($this->transOff) return true;
    149                 if ($this->transCnt) $this->transCnt -= 1;
     156                if (!$ok) {
     157                        return $this->RollbackTrans();
     158                }
     159                if ($this->transOff) {
     160                        return true;
     161                }
     162                if ($this->transCnt) {
     163                        $this->transCnt -= 1;
     164                }
    150165                $ret = false;
    151166                $this->autoCommit = true;
    152167                if ($this->_transactionID) {
    153                                         //print ' commit ';
     168                        //print ' commit ';
    154169                        $ret = ibase_commit($this->_transactionID);
    155170                }
     
    181196                $ret = false;
    182197                $this->autoCommit = true;
    183                 if ($this->_transactionID)
    184                                   $ret = ibase_rollback($this->_transactionID);
     198                if ($this->_transactionID) {
     199                        $ret = ibase_rollback($this->_transactionID);
     200                }
    185201                $this->_transactionID = false;
    186202
     
    190206        function MetaIndexes ($table, $primary = FALSE, $owner=false)
    191207        {
    192         // save old fetch mode
    193         global $ADODB_FETCH_MODE;
    194         $false = false;
    195         $save = $ADODB_FETCH_MODE;
    196         $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    197         if ($this->fetchMode !== FALSE) {
    198                $savem = $this->SetFetchMode(FALSE);
    199         }
    200         $table = strtoupper($table);
    201         $sql = "SELECT * FROM RDB\$INDICES WHERE RDB\$RELATION_NAME = '".$table."'";
    202         if (!$primary) {
    203                 $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$%'";
    204         } else {
    205                 $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$FOREIGN%'";
    206         }
    207         // get index details
    208         $rs = $this->Execute($sql);
    209         if (!is_object($rs)) {
    210                 // restore fetchmode
    211                 if (isset($savem)) {
    212                     $this->SetFetchMode($savem);
    213                 }
    214                 $ADODB_FETCH_MODE = $save;
    215             return $false;
    216         }
    217 
    218         $indexes = array();
     208                // save old fetch mode
     209                global $ADODB_FETCH_MODE;
     210                $false = false;
     211                $save = $ADODB_FETCH_MODE;
     212                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
     213                if ($this->fetchMode !== FALSE) {
     214                                $savem = $this->SetFetchMode(FALSE);
     215                }
     216                $table = strtoupper($table);
     217                $sql = "SELECT * FROM RDB\$INDICES WHERE RDB\$RELATION_NAME = '".$table."'";
     218                if (!$primary) {
     219                        $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$%'";
     220                } else {
     221                        $sql .= " AND RDB\$INDEX_NAME NOT LIKE 'RDB\$FOREIGN%'";
     222                }
     223                // get index details
     224                $rs = $this->Execute($sql);
     225                if (!is_object($rs)) {
     226                        // restore fetchmode
     227                        if (isset($savem)) {
     228                                $this->SetFetchMode($savem);
     229                        }
     230                        $ADODB_FETCH_MODE = $save;
     231                        return $false;
     232                }
     233
     234                $indexes = array();
    219235                while ($row = $rs->FetchRow()) {
    220236                        $index = $row[0];
    221              if (!isset($indexes[$index])) {
    222                         if (is_null($row[3])) {$row[3] = 0;}
    223                      $indexes[$index] = array(
    224                              'unique' => ($row[3] == 1),
    225                              'columns' => array()
    226                      );
    227              }
     237                        if (!isset($indexes[$index])) {
     238                                if (is_null($row[3])) {
     239                                        $row[3] = 0;
     240                                }
     241                                $indexes[$index] = array(
     242                                        'unique' => ($row[3] == 1),
     243                                        'columns' => array()
     244                                );
     245                        }
    228246                        $sql = "SELECT * FROM RDB\$INDEX_SEGMENTS WHERE RDB\$INDEX_NAME = '".$index."' ORDER BY RDB\$FIELD_POSITION ASC";
    229247                        $rs1 = $this->Execute($sql);
    230             while ($row1 = $rs1->FetchRow()) {
    231                 $indexes[$index]['columns'][$row1[2]] = $row1[1];
    232                 }
    233                 }
    234         // restore fetchmode
    235         if (isset($savem)) {
    236             $this->SetFetchMode($savem);
    237         }
    238         $ADODB_FETCH_MODE = $save;
    239 
    240         return $indexes;
     248                        while ($row1 = $rs1->FetchRow()) {
     249                                $indexes[$index]['columns'][$row1[2]] = $row1[1];
     250                        }
     251                }
     252                // restore fetchmode
     253                if (isset($savem)) {
     254                        $this->SetFetchMode($savem);
     255                }
     256                $ADODB_FETCH_MODE = $save;
     257
     258                return $indexes;
    241259        }
    242260
     
    245263        function RowLock($tables,$where,$col=false)
    246264        {
    247                 if ($this->autoCommit) $this->BeginTrans();
     265                if ($this->autoCommit) {
     266                        $this->BeginTrans();
     267                }
    248268                $this->Execute("UPDATE $table SET $col=$col WHERE $where "); // is this correct - jlim?
    249269                return 1;
     
    251271
    252272
    253         function CreateSequence($seqname,$startID=1)
     273        function CreateSequence($seqname = 'adodbseq', $startID = 1)
    254274        {
    255275                $ok = $this->Execute(("INSERT INTO RDB\$GENERATORS (RDB\$GENERATOR_NAME) VALUES (UPPER('$seqname'))" ));
     
    258278        }
    259279
    260         function DropSequence($seqname)
     280        function DropSequence($seqname = 'adodbseq')
    261281        {
    262282                $seqname = strtoupper($seqname);
     
    273293                        $rs = $this->Execute($getnext);
    274294                }
    275                 if ($rs && !$rs->EOF) $this->genID = (integer) reset($rs->fields);
    276                 else $this->genID = 0; // false
    277 
    278                 if ($rs) $rs->Close();
     295                if ($rs && !$rs->EOF) {
     296                        $this->genID = (integer) reset($rs->fields);
     297                }
     298                else {
     299                        $this->genID = 0; // false
     300                }
     301
     302                if ($rs) {
     303                        $rs->Close();
     304                }
    279305
    280306                return $this->genID;
     
    283309        function SelectDB($dbName)
    284310        {
    285                    return false;
     311                return false;
    286312        }
    287313
     
    309335        }
    310336
    311            // returns query ID if successful, otherwise false
    312            // there have been reports of problems with nested queries - the code is probably not re-entrant?
     337        // returns query ID if successful, otherwise false
     338        // there have been reports of problems with nested queries - the code is probably not re-entrant?
    313339        function _query($sql,$iarr=false)
    314340        {
     
    366392                        } else $ret = $fn($conn,$sql);
    367393                }
    368                 if ($docommit && $ret === true) ibase_commit($this->_connectionID);
     394                if ($docommit && $ret === true) {
     395                        ibase_commit($this->_connectionID);
     396                }
    369397
    370398                $this->_handleerror();
     
    372400        }
    373401
    374          // returns true or false
    375          function _close()
    376          {
    377                 if (!$this->autoCommit) @ibase_rollback($this->_connectionID);
     402        // returns true or false
     403        function _close()
     404        {
     405                if (!$this->autoCommit) {
     406                        @ibase_rollback($this->_connectionID);
     407                }
    378408                return @ibase_close($this->_connectionID);
    379          }
     409        }
    380410
    381411        //OPN STUFF start
     
    389419                        case 8:
    390420                                if ($dialect3) {
    391                                     switch($fsubtype){
    392                                         case 0:
    393                                                 $fld->type = ($ftype == 7 ? 'smallint' : 'integer');
    394                                                 break;
    395                                         case 1:
    396                                                 $fld->type = 'numeric';
     421                                        switch($fsubtype){
     422                                                case 0:
     423                                                        $fld->type = ($ftype == 7 ? 'smallint' : 'integer');
     424                                                        break;
     425                                                case 1:
     426                                                        $fld->type = 'numeric';
    397427                                                        $fld->max_length = $fprecision;
    398428                                                        $fld->scale = $fscale;
    399                                                 break;
    400                                         case 2:
    401                                                 $fld->type = 'decimal';
     429                                                        break;
     430                                                case 2:
     431                                                        $fld->type = 'decimal';
    402432                                                        $fld->max_length = $fprecision;
    403433                                                        $fld->scale = $fscale;
    404                                                 break;
    405                                     } // switch
     434                                                        break;
     435                                        } // switch
    406436                                } else {
    407437                                        if ($fscale !=0) {
    408                                             $fld->type = 'decimal';
     438                                                $fld->type = 'decimal';
    409439                                                $fld->scale = $fscale;
    410440                                                $fld->max_length = ($ftype == 7 ? 4 : 9);
     
    416446                        case 16:
    417447                                if ($dialect3) {
    418                                     switch($fsubtype){
    419                                         case 0:
    420                                                 $fld->type = 'decimal';
     448                                        switch($fsubtype){
     449                                                case 0:
     450                                                        $fld->type = 'decimal';
    421451                                                        $fld->max_length = 18;
    422452                                                        $fld->scale = 0;
    423                                                 break;
    424                                         case 1:
    425                                                 $fld->type = 'numeric';
     453                                                        break;
     454                                                case 1:
     455                                                        $fld->type = 'numeric';
    426456                                                        $fld->max_length = $fprecision;
    427457                                                        $fld->scale = $fscale;
    428                                                 break;
    429                                         case 2:
    430                                                 $fld->type = 'decimal';
     458                                                        break;
     459                                                case 2:
     460                                                        $fld->type = 'decimal';
    431461                                                        $fld->max_length = $fprecision;
    432462                                                        $fld->scale = $fscale;
    433                                                 break;
    434                                     } // switch
     463                                                        break;
     464                                        } // switch
    435465                                }
    436466                                break;
     
    443473                        case 27:
    444474                                if ($fscale !=0) {
    445                                     $fld->type = 'decimal';
     475                                        $fld->type = 'decimal';
    446476                                        $fld->max_length = 15;
    447477                                        $fld->scale = 5;
     
    452482                        case 35:
    453483                                if ($dialect3) {
    454                                     $fld->type = 'timestamp';
     484                                        $fld->type = 'timestamp';
    455485                                } else {
    456486                                        $fld->type = 'date';
     
    476506        }
    477507        //OPN STUFF end
    478                 // returns array of ADOFieldObjects for current table
     508
     509        // returns array of ADOFieldObjects for current table
    479510        function MetaColumns($table, $normalize=true)
    480511        {
     
    570601
    571602        function _BlobDecode( $blob )
    572     {
    573         if  (ADODB_PHPVER >= 0x5000) {
    574             $blob_data = ibase_blob_info($this->_connectionID, $blob );
    575             $blobid = ibase_blob_open($this->_connectionID, $blob );
    576         } else {
    577 
    578             $blob_data = ibase_blob_info( $blob );
    579             $blobid = ibase_blob_open( $blob );
    580         }
    581 
    582         if( $blob_data[0] > $this->maxblobsize ) {
    583 
    584             $realblob = ibase_blob_get($blobid, $this->maxblobsize);
    585 
    586             while($string = ibase_blob_get($blobid, 8192)){
    587                 $realblob .= $string;
    588             }
    589         } else {
    590             $realblob = ibase_blob_get($blobid, $blob_data[0]);
    591         }
    592 
    593         ibase_blob_close( $blobid );
    594         return( $realblob );
     603        {
     604                if  (ADODB_PHPVER >= 0x5000) {
     605                        $blob_data = ibase_blob_info($this->_connectionID, $blob );
     606                        $blobid = ibase_blob_open($this->_connectionID, $blob );
     607                } else {
     608
     609                        $blob_data = ibase_blob_info( $blob );
     610                        $blobid = ibase_blob_open( $blob );
     611                }
     612
     613                if( $blob_data[0] > $this->maxblobsize ) {
     614
     615                        $realblob = ibase_blob_get($blobid, $this->maxblobsize);
     616
     617                        while($string = ibase_blob_get($blobid, 8192)){
     618                                $realblob .= $string;
     619                        }
     620                } else {
     621                        $realblob = ibase_blob_get($blobid, $blob_data[0]);
     622                }
     623
     624                ibase_blob_close( $blobid );
     625                return( $realblob );
    595626        }
    596627
     
    696727                        case 'H':
    697728                        case 'h':
    698                           $s .= "(extract(hour from $col))";
    699                           break;
     729                                $s .= "(extract(hour from $col))";
     730                                break;
    700731                        case 'I':
    701732                        case 'i':
    702                           $s .= "(extract(minute from $col))";
    703                           break;
     733                                $s .= "(extract(minute from $col))";
     734                                break;
    704735                        case 'S':
    705736                        case 's':
    706                           $s .= "CAST((extract(second from $col)) AS INTEGER)";
    707                           break;
     737                                $s .= "CAST((extract(second from $col)) AS INTEGER)";
     738                                break;
    708739
    709740                        default:
     
    721752
    722753/*--------------------------------------------------------------------------------------
    723                  Class Name: Recordset
     754        Class Name: Recordset
    724755--------------------------------------------------------------------------------------*/
    725756
     
    731762        var $_cacheType;
    732763
    733         function ADORecordset_ibase($id,$mode=false)
     764        function __construct($id,$mode=false)
    734765        {
    735766        global $ADODB_FETCH_MODE;
    736767
    737768                        $this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode;
    738                         $this->ADORecordSet($id);
     769                        parent::__construct($id);
    739770        }
    740771
     
    746777        function FetchField($fieldOffset = -1)
    747778        {
    748                          $fld = new ADOFieldObject;
    749                          $ibf = ibase_field_info($this->_queryID,$fieldOffset);
    750                          switch (ADODB_ASSOC_CASE) {
    751                          case 2: // the default
    752                                 $fld->name = ($ibf['alias']);
    753                                  if (empty($fld->name)) $fld->name = ($ibf['name']);
    754                                  break;
    755                          case 0:
    756                                  $fld->name = strtoupper($ibf['alias']);
    757                                  if (empty($fld->name)) $fld->name = strtoupper($ibf['name']);
    758                                  break;
    759                          case 1:
    760                                 $fld->name = strtolower($ibf['alias']);
    761                                  if (empty($fld->name)) $fld->name = strtolower($ibf['name']);
    762                                  break;
    763                          }
    764 
    765                          $fld->type = $ibf['type'];
    766                          $fld->max_length = $ibf['length'];
    767 
    768                          /*       This needs to be populated from the metadata */
    769                          $fld->not_null = false;
    770                          $fld->has_default = false;
    771                          $fld->default_value = 'null';
    772                          return $fld;
     779                        $fld = new ADOFieldObject;
     780                        $ibf = ibase_field_info($this->_queryID,$fieldOffset);
     781
     782                        $name = empty($ibf['alias']) ? $ibf['name'] : $ibf['alias'];
     783
     784                        switch (ADODB_ASSOC_CASE) {
     785                                case ADODB_ASSOC_CASE_UPPER:
     786                                        $fld->name = strtoupper($name);
     787                                        break;
     788                                case ADODB_ASSOC_CASE_LOWER:
     789                                        $fld->name = strtolower($name);
     790                                        break;
     791                                case ADODB_ASSOC_CASE_NATIVE:
     792                                default:
     793                                        $fld->name = $name;
     794                                        break;
     795                        }
     796
     797                        $fld->type = $ibf['type'];
     798                        $fld->max_length = $ibf['length'];
     799
     800                        /*       This needs to be populated from the metadata */
     801                        $fld->not_null = false;
     802                        $fld->has_default = false;
     803                        $fld->default_value = 'null';
     804                        return $fld;
    773805        }
    774806
     
    823855                $this->fields = $f;
    824856                if ($this->fetchMode == ADODB_FETCH_ASSOC) {
    825                         $this->fields = $this->GetRowAssoc(ADODB_ASSOC_CASE);
     857                        $this->fields = $this->GetRowAssoc();
    826858                } else if ($this->fetchMode == ADODB_FETCH_BOTH) {
    827                         $this->fields = array_merge($this->fields,$this->GetRowAssoc(ADODB_ASSOC_CASE));
     859                        $this->fields = array_merge($this->fields,$this->GetRowAssoc());
    828860                }
    829861                return true;
Note: See TracChangeset for help on using the changeset viewer.