[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/adodb/drivers/ -> adodb-ado_mssql.inc.php (source)

   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 SQL Server ADO data driver. Requires ADO and MSSQL client.
  12    Works only on MS Windows.
  13  
  14    Warning: Some versions of PHP (esp PHP4) leak memory when ADO/COM is used.
  15    Please check http://bugs.php.net/ for more info.
  16  */
  17  
  18  // security - hide paths
  19  if (!defined('ADODB_DIR')) die();
  20  
  21  if (!defined('_ADODB_ADO_LAYER')) {
  22      if (PHP_VERSION >= 5) include(ADODB_DIR."/drivers/adodb-ado5.inc.php");
  23      else include(ADODB_DIR."/drivers/adodb-ado.inc.php");
  24  }
  25  
  26  
  27  class  ADODB_ado_mssql extends ADODB_ado {
  28      var $databaseType = 'ado_mssql';
  29      var $hasTop = 'top';
  30      var $hasInsertID = true;
  31      var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';
  32      var $sysTimeStamp = 'GetDate()';
  33      var $leftOuter = '*=';
  34      var $rightOuter = '=*';
  35      var $ansiOuter = true; // for mssql7 or later
  36      var $substr = "substring";
  37      var $length = 'len';
  38      var $_dropSeqSQL = "drop table %s";
  39  
  40      //var $_inTransaction = 1; // always open recordsets, so no transaction problems.
  41  
  42  	function ADODB_ado_mssql()
  43      {
  44              $this->ADODB_ado();
  45      }
  46  
  47  	function _insertid()
  48      {
  49              return $this->GetOne('select SCOPE_IDENTITY()');
  50      }
  51  
  52  	function _affectedrows()
  53      {
  54              return $this->GetOne('select @@rowcount');
  55      }
  56  
  57  	function SetTransactionMode( $transaction_mode )
  58      {
  59          $this->_transmode  = $transaction_mode;
  60          if (empty($transaction_mode)) {
  61              $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
  62              return;
  63          }
  64          if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
  65          $this->Execute("SET TRANSACTION ".$transaction_mode);
  66      }
  67  
  68  	function qstr($s,$magic_quotes=false)
  69      {
  70          $s = ADOConnection::qstr($s, $magic_quotes);
  71          return str_replace("\0", "\\\\000", $s);
  72      }
  73  
  74  	function MetaColumns($table, $normalize=true)
  75      {
  76          $table = strtoupper($table);
  77          $arr= array();
  78          $dbc = $this->_connectionID;
  79  
  80          $osoptions = array();
  81          $osoptions[0] = null;
  82          $osoptions[1] = null;
  83          $osoptions[2] = $table;
  84          $osoptions[3] = null;
  85  
  86          $adors=@$dbc->OpenSchema(4, $osoptions);//tables
  87  
  88          if ($adors){
  89                  while (!$adors->EOF){
  90                          $fld = new ADOFieldObject();
  91                          $c = $adors->Fields(3);
  92                          $fld->name = $c->Value;
  93                          $fld->type = 'CHAR'; // cannot discover type in ADO!
  94                          $fld->max_length = -1;
  95                          $arr[strtoupper($fld->name)]=$fld;
  96  
  97                          $adors->MoveNext();
  98                  }
  99                  $adors->Close();
 100          }
 101          $false = false;
 102          return empty($arr) ? $false : $arr;
 103      }
 104  
 105  	function CreateSequence($seq='adodbseq',$start=1)
 106      {
 107  
 108          $this->Execute('BEGIN TRANSACTION adodbseq');
 109          $start -= 1;
 110          $this->Execute("create table $seq (id float(53))");
 111          $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");
 112          if (!$ok) {
 113                  $this->Execute('ROLLBACK TRANSACTION adodbseq');
 114                  return false;
 115          }
 116          $this->Execute('COMMIT TRANSACTION adodbseq');
 117          return true;
 118      }
 119  
 120  	function GenID($seq='adodbseq',$start=1)
 121      {
 122          //$this->debug=1;
 123          $this->Execute('BEGIN TRANSACTION adodbseq');
 124          $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1");
 125          if (!$ok) {
 126              $this->Execute("create table $seq (id float(53))");
 127              $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");
 128              if (!$ok) {
 129                  $this->Execute('ROLLBACK TRANSACTION adodbseq');
 130                  return false;
 131              }
 132              $this->Execute('COMMIT TRANSACTION adodbseq');
 133              return $start;
 134          }
 135          $num = $this->GetOne("select id from $seq");
 136          $this->Execute('COMMIT TRANSACTION adodbseq');
 137          return $num;
 138  
 139          // in old implementation, pre 1.90, we returned GUID...
 140          //return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'");
 141      }
 142  
 143      } // end class
 144  
 145      class  ADORecordSet_ado_mssql extends ADORecordSet_ado {
 146  
 147      var $databaseType = 'ado_mssql';
 148  
 149  	function ADORecordSet_ado_mssql($id,$mode=false)
 150      {
 151              return $this->ADORecordSet_ado($id,$mode);
 152      }
 153  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1