]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/adodb/drivers/adodb-mysqlt.inc.php
Upgrade adodb
[SourceForge/phpwiki.git] / lib / WikiDB / adodb / drivers / adodb-mysqlt.inc.php
1 <?php
2
3 /*
4 V5.18 3 Sep 2012  (c) 2000-2012 John Lim (jlim#natsoft.com). All rights reserved.
5   Released under both BSD license and Lesser GPL library license. 
6   Whenever there is any discrepancy between the two licenses, 
7   the BSD license will take precedence.
8   Set tabs to 8.
9   
10   MySQL code that supports transactions. For MySQL 3.23 or later.
11   Code from James Poon <jpoon88@yahoo.com>
12   
13   Requires mysql client. Works on Windows and Unix.
14 */
15
16 // security - hide paths
17 if (!defined('ADODB_DIR')) die();
18
19 include_once(ADODB_DIR."/drivers/adodb-mysql.inc.php");
20
21
22 class ADODB_mysqlt extends ADODB_mysql {
23         var $databaseType = 'mysqlt';
24         var $ansiOuter = true; // for Version 3.23.17 or later
25         var $hasTransactions = true;
26         var $autoRollback = true; // apparently mysql does not autorollback properly 
27         
28         function ADODB_mysqlt() 
29         {                       
30         global $ADODB_EXTENSION; if ($ADODB_EXTENSION) $this->rsPrefix .= 'ext_';
31         }
32         
33         /* set transaction mode
34         
35         SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
36 { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
37
38         */
39         function SetTransactionMode( $transaction_mode ) 
40         {
41                 $this->_transmode  = $transaction_mode;
42                 if (empty($transaction_mode)) {
43                         $this->Execute('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
44                         return;
45                 }
46                 if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
47                 $this->Execute("SET SESSION TRANSACTION ".$transaction_mode);
48         }
49         
50         function BeginTrans()
51         {         
52                 if ($this->transOff) return true;
53                 $this->transCnt += 1;
54                 $this->Execute('SET AUTOCOMMIT=0');
55                 $this->Execute('BEGIN');
56                 return true;
57         }
58         
59         function CommitTrans($ok=true) 
60         {
61                 if ($this->transOff) return true; 
62                 if (!$ok) return $this->RollbackTrans();
63                 
64                 if ($this->transCnt) $this->transCnt -= 1;
65                 $ok = $this->Execute('COMMIT');
66                 $this->Execute('SET AUTOCOMMIT=1');
67                 return $ok ? true : false;
68         }
69         
70         function RollbackTrans()
71         {
72                 if ($this->transOff) return true;
73                 if ($this->transCnt) $this->transCnt -= 1;
74                 $ok = $this->Execute('ROLLBACK');
75                 $this->Execute('SET AUTOCOMMIT=1');
76                 return $ok ? true : false;
77         }
78         
79         function RowLock($tables,$where='',$col='1 as adodbignore') 
80         {
81                 if ($this->transCnt==0) $this->BeginTrans();
82                 if ($where) $where = ' where '.$where;
83                 $rs = $this->Execute("select $col from $tables $where for update");
84                 return !empty($rs); 
85         }
86         
87 }
88
89 class ADORecordSet_mysqlt extends ADORecordSet_mysql{   
90         var $databaseType = "mysqlt";
91         
92         function ADORecordSet_mysqlt($queryID,$mode=false) 
93         {
94                 if ($mode === false) { 
95                         global $ADODB_FETCH_MODE;
96                         $mode = $ADODB_FETCH_MODE;
97                 }
98                 
99                 switch ($mode)
100                 {
101                 case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
102                 case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
103                 
104                 case ADODB_FETCH_DEFAULT:
105                 case ADODB_FETCH_BOTH:
106                 default: $this->fetchMode = MYSQL_BOTH; break;
107                 }
108         
109                 $this->adodbFetchMode = $mode;
110                 $this->ADORecordSet($queryID);  
111         }
112         
113         function MoveNext()
114         {
115                 if (@$this->fields = mysql_fetch_array($this->_queryID,$this->fetchMode)) {
116                         $this->_currentRow += 1;
117                         return true;
118                 }
119                 if (!$this->EOF) {
120                         $this->_currentRow += 1;
121                         $this->EOF = true;
122                 }
123                 return false;
124         }
125 }
126
127 class ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt {     
128
129         function ADORecordSet_ext_mysqlt($queryID,$mode=false) 
130         {
131                 if ($mode === false) { 
132                         global $ADODB_FETCH_MODE;
133                         $mode = $ADODB_FETCH_MODE;
134                 }
135                 switch ($mode)
136                 {
137                 case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
138                 case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
139                 
140                 case ADODB_FETCH_DEFAULT:
141                 case ADODB_FETCH_BOTH:
142                 default: 
143                         $this->fetchMode = MYSQL_BOTH; break;
144                 }
145                 $this->adodbFetchMode = $mode;
146                 $this->ADORecordSet($queryID);  
147         }
148         
149         function MoveNext()
150         {
151                 return adodb_movenext($this);
152         }
153 }
154
155 ?>