"Fossies" - the Fresh Open Source Software Archive

Member "phpESP/admin/include/lib/adodb/drivers/adodb-ado_mssql.inc.php" (5 Apr 2008, 4437 Bytes) of package /linux/www/old/phpESP-2.1.4.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 <?php
    2 /* 
    3 V4.98 13 Feb 2008  (c) 2000-2008 John Lim (jlim#natsoft.com.my). 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)
   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 }
  154 ?>