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

Revision 8222, 5.0 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
3
4/*
5V5.18 3 Sep 2012  (c) 2000-2012 John Lim (jlim#natsoft.com). All rights reserved.
6  Released under both BSD license and Lesser GPL library license.
7  Whenever there is any discrepancy between the two licenses,
8  the BSD license will take precedence.
9  Set tabs to 8.
10 
11*/
12
13class ADODB_pdo_mysql extends ADODB_pdo {
14        var $metaTablesSQL = "SHOW TABLES";     
15        var $metaColumnsSQL = "SHOW COLUMNS FROM `%s`";
16        var $sysDate = 'CURDATE()';
17        var $sysTimeStamp = 'NOW()';
18        var $hasGenID = true;
19        var $_genIDSQL = "update %s set id=LAST_INSERT_ID(id+1);";
20        var $_dropSeqSQL = "drop table %s";
21        var $fmtTimeStamp = "'Y-m-d, H:i:s'";
22        var $nameQuote = '`';
23
24        function _init($parentDriver)
25        {
26       
27                $parentDriver->hasTransactions = false;
28                #$parentDriver->_bindInputArray = false;
29                $parentDriver->hasInsertID = true;
30                $parentDriver->_connectionID->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
31        }
32       
33                // dayFraction is a day in floating point
34        function OffsetDate($dayFraction,$date=false)
35        {               
36                if (!$date) $date = $this->sysDate;
37               
38                $fraction = $dayFraction * 24 * 3600;
39                return $date . ' + INTERVAL ' .  $fraction.' SECOND';
40               
41//              return "from_unixtime(unix_timestamp($date)+$fraction)";
42        }
43       
44        function Concat()
45        {       
46                $s = "";
47                $arr = func_get_args();
48
49                // suggestion by andrew005#mnogo.ru
50                $s = implode(',',$arr);
51                if (strlen($s) > 0) return "CONCAT($s)"; return '';
52        }
53       
54        function ServerInfo()
55        {
56                $arr['description'] = ADOConnection::GetOne("select version()");
57                $arr['version'] = ADOConnection::_findvers($arr['description']);
58                return $arr;
59        }
60       
61        function MetaTables($ttype=false,$showSchema=false,$mask=false)
62        {       
63                $save = $this->metaTablesSQL;
64                if ($showSchema && is_string($showSchema)) {
65                        $this->metaTablesSQL .= " from $showSchema";
66                }
67               
68                if ($mask) {
69                        $mask = $this->qstr($mask);
70                        $this->metaTablesSQL .= " like $mask";
71                }
72                $ret = ADOConnection::MetaTables($ttype,$showSchema);
73               
74                $this->metaTablesSQL = $save;
75                return $ret;
76        }
77       
78        function SetTransactionMode( $transaction_mode )
79        {
80                $this->_transmode  = $transaction_mode;
81                if (empty($transaction_mode)) {
82                        $this->Execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ');
83                        return;
84                }
85                if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
86                $this->Execute("SET SESSION TRANSACTION ".$transaction_mode);
87        }
88       
89        function MetaColumns($table,$normalize=true)
90        {
91                $this->_findschema($table,$schema);
92                if ($schema) {
93                        $dbName = $this->database;
94                        $this->SelectDB($schema);
95                }
96                global $ADODB_FETCH_MODE;
97                $save = $ADODB_FETCH_MODE;
98                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
99               
100                if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
101                $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
102               
103                if ($schema) {
104                        $this->SelectDB($dbName);
105                }
106               
107                if (isset($savem)) $this->SetFetchMode($savem);
108                $ADODB_FETCH_MODE = $save;
109                if (!is_object($rs)) {
110                        $false = false;
111                        return $false;
112                }
113                       
114                $retarr = array();
115                while (!$rs->EOF){
116                        $fld = new ADOFieldObject();
117                        $fld->name = $rs->fields[0];
118                        $type = $rs->fields[1];
119                       
120                        // split type into type(length):
121                        $fld->scale = null;
122                        if (preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
123                                $fld->type = $query_array[1];
124                                $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
125                                $fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
126                        } elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {
127                                $fld->type = $query_array[1];
128                                $fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
129                        } elseif (preg_match("/^(enum)\((.*)\)$/i", $type, $query_array)) {
130                                $fld->type = $query_array[1];
131                                $arr = explode(",",$query_array[2]);
132                                $fld->enums = $arr;
133                                $zlen = max(array_map("strlen",$arr)) - 2; // PHP >= 4.0.6
134                                $fld->max_length = ($zlen > 0) ? $zlen : 1;
135                        } else {
136                                $fld->type = $type;
137                                $fld->max_length = -1;
138                        }
139                        $fld->not_null = ($rs->fields[2] != 'YES');
140                        $fld->primary_key = ($rs->fields[3] == 'PRI');
141                        $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
142                        $fld->binary = (strpos($type,'blob') !== false);
143                        $fld->unsigned = (strpos($type,'unsigned') !== false);
144                               
145                        if (!$fld->binary) {
146                                $d = $rs->fields[4];
147                                if ($d != '' && $d != 'NULL') {
148                                        $fld->has_default = true;
149                                        $fld->default_value = $d;
150                                } else {
151                                        $fld->has_default = false;
152                                }
153                        }
154                       
155                        if ($save == ADODB_FETCH_NUM) {
156                                $retarr[] = $fld;
157                        } else {
158                                $retarr[strtoupper($fld->name)] = $fld;
159                        }
160                                $rs->MoveNext();
161                        }
162               
163                        $rs->Close();
164                        return $retarr;
165        }
166               
167       
168        // parameters use PostgreSQL convention, not MySQL
169        function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0)
170        {
171                $offsetStr =($offset>=0) ? "$offset," : '';
172                // jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220
173                if ($nrows < 0) $nrows = '18446744073709551615';
174               
175                if ($secs)
176                        $rs = $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr);
177                else
178                        $rs = $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr);
179                return $rs;
180        }
181}
182?>
Note: See TracBrowser for help on using the repository browser.