source: sandbox/2.5.1-evolucao/phpgwapi/inc/adodb/drivers/adodb-ado_mssql.inc.php @ 8222

Revision 8222, 4.3 KB checked in by angelo, 11 years ago (diff)

Ticket #3491 - Compatibilizar Expresso com novas versoes do PHP

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2/*
3V5.18 3 Sep 2012  (c) 2000-2012 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.
7Set 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
19if (!defined('ADODB_DIR')) die();
20
21if (!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
27class  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}
154?>
Note: See TracBrowser for help on using the repository browser.