/web/htdocs/www.euroroma.net/home/public/gallery2/lib/adodb/drivers/adodb-mysqlt.inc.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?php

/*
V4.98 13 Feb 2008  (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved.
  Released under both BSD license and Lesser GPL library license. 
  Whenever there is any discrepancy between the two licenses, 
  the BSD license will take precedence.
  Set tabs to 8.
  
  MySQL code that supports transactions. For MySQL 3.23 or later.
  Code from James Poon <jpoon88@yahoo.com>
  
  Requires mysql client. Works on Windows and Unix.
*/

// security - hide paths
if (!defined('ADODB_DIR')) die();

include_once(
ADODB_DIR."/drivers/adodb-mysql.inc.php");


class 
ADODB_mysqlt extends ADODB_mysql {
    var 
$databaseType 'mysqlt';
    var 
$ansiOuter true// for Version 3.23.17 or later
    
var $hasTransactions true;
    var 
$autoRollback true// apparently mysql does not autorollback properly 
    
    
function ADODB_mysqlt() 
    {            
    global 
$ADODB_EXTENSION; if ($ADODB_EXTENSION$this->rsPrefix .= 'ext_';
    }
    
    
/* set transaction mode
    
    SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

    */
    
function SetTransactionMode$transaction_mode 
    {
        
$this->_transmode  $transaction_mode;
        if (empty(
$transaction_mode)) {
            
$this->Execute('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
            return;
        }
        if (!
stristr($transaction_mode,'isolation')) $transaction_mode 'ISOLATION LEVEL '.$transaction_mode;
        
$this->Execute("SET SESSION TRANSACTION ".$transaction_mode);
    }
    
    function 
BeginTrans()
    {      
        if (
$this->transOff) return true;
        
$this->transCnt += 1;
        
$this->Execute('SET AUTOCOMMIT=0');
        
$this->Execute('BEGIN');
        return 
true;
    }
    
    function 
CommitTrans($ok=true
    {
        if (
$this->transOff) return true
        if (!
$ok) return $this->RollbackTrans();
        
        if (
$this->transCnt$this->transCnt -= 1;
        
$this->Execute('COMMIT');
        
$this->Execute('SET AUTOCOMMIT=1');
        return 
true;
    }
    
    function 
RollbackTrans()
    {
        if (
$this->transOff) return true;
        if (
$this->transCnt$this->transCnt -= 1;
        
$this->Execute('ROLLBACK');
        
$this->Execute('SET AUTOCOMMIT=1');
        return 
true;
    }
    
    function 
RowLock($tables,$where='',$flds='1 as adodb_ignore'
    {
        if (
$this->transCnt==0$this->BeginTrans();
        if (
$where$where ' where '.$where;
        
$rs =& $this->Execute("select $flds from $tables $where for update");
        return !empty(
$rs); 
    }
    
}

class 
ADORecordSet_mysqlt extends ADORecordSet_mysql{    
    var 
$databaseType "mysqlt";
    
    function 
ADORecordSet_mysqlt($queryID,$mode=false
    {
        if (
$mode === false) { 
            global 
$ADODB_FETCH_MODE;
            
$mode $ADODB_FETCH_MODE;
        }
        
        switch (
$mode)
        {
        case 
ADODB_FETCH_NUM$this->fetchMode MYSQL_NUM; break;
        case 
ADODB_FETCH_ASSOC:$this->fetchMode MYSQL_ASSOC; break;
        
        case 
ADODB_FETCH_DEFAULT:
        case 
ADODB_FETCH_BOTH:
        default: 
$this->fetchMode MYSQL_BOTH; break;
        }
    
        
$this->adodbFetchMode $mode;
        
$this->ADORecordSet($queryID);    
    }
    
    function 
MoveNext()
    {
        if (@
$this->fields mysql_fetch_array($this->_queryID,$this->fetchMode)) {
            
$this->_currentRow += 1;
            return 
true;
        }
        if (!
$this->EOF) {
            
$this->_currentRow += 1;
            
$this->EOF true;
        }
        return 
false;
    }
}

class 
ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt {    

    function 
ADORecordSet_ext_mysqlt($queryID,$mode=false
    {
        if (
$mode === false) { 
            global 
$ADODB_FETCH_MODE;
            
$mode $ADODB_FETCH_MODE;
        }
        switch (
$mode)
        {
        case 
ADODB_FETCH_NUM$this->fetchMode MYSQL_NUM; break;
        case 
ADODB_FETCH_ASSOC:$this->fetchMode MYSQL_ASSOC; break;
        
        case 
ADODB_FETCH_DEFAULT:
        case 
ADODB_FETCH_BOTH:
        default: 
            
$this->fetchMode MYSQL_BOTH; break;
        }
        
$this->adodbFetchMode $mode;
        
$this->ADORecordSet($queryID);    
    }
    
    function 
MoveNext()
    {
        return 
adodb_movenext($this);
    }
}

?>