TYPO3 CMS  TYPO3_6-2
adodb-ado_mssql.inc.php
Go to the documentation of this file.
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 
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 }
MetaColumns($table, $normalize=true)
CreateSequence($seq='adodbseq', $start=1)
die
Definition: index.php:6
ADORecordSet_ado_mssql($id, $mode=false)
GenID($seq='adodbseq', $start=1)
qstr($s, $magic_quotes=false)
SetTransactionMode( $transaction_mode)