1 | <?php
|
---|
2 |
|
---|
3 | /*
|
---|
4 | V4.94 23 Jan 2007 (c) 2000-2007 John Lim (jlim#natsoft.com.my). 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 | $this->Execute('COMMIT');
|
---|
66 | $this->Execute('SET AUTOCOMMIT=1');
|
---|
67 | return true;
|
---|
68 | }
|
---|
69 |
|
---|
70 | function RollbackTrans()
|
---|
71 | {
|
---|
72 | if ($this->transOff) return true;
|
---|
73 | if ($this->transCnt) $this->transCnt -= 1;
|
---|
74 | $this->Execute('ROLLBACK');
|
---|
75 | $this->Execute('SET AUTOCOMMIT=1');
|
---|
76 | return true;
|
---|
77 | }
|
---|
78 |
|
---|
79 | function RowLock($tables,$where='',$flds='1 as adodb_ignore')
|
---|
80 | {
|
---|
81 | if ($this->transCnt==0) $this->BeginTrans();
|
---|
82 | if ($where) $where = ' where '.$where;
|
---|
83 | $rs =& $this->Execute("select $flds 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 | ?> |
---|