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

Revision 8222, 6.4 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 @version V5.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.
7 Contribution by Frank M. Kromann <frank@frontbase.com>.
8  Set tabs to 8.
9*/
10
11// security - hide paths
12if (!defined('ADODB_DIR')) die();
13
14if (! defined("_ADODB_FBSQL_LAYER")) {
15 define("_ADODB_FBSQL_LAYER", 1 );
16
17class ADODB_fbsql extends ADOConnection {
18        var $databaseType = 'fbsql';
19        var $hasInsertID = true;
20        var $hasAffectedRows = true;   
21        var $metaTablesSQL = "SHOW TABLES";     
22        var $metaColumnsSQL = "SHOW COLUMNS FROM %s";
23        var $fmtTimeStamp = "'Y-m-d H:i:s'";
24        var $hasLimit = false;
25       
26        function ADODB_fbsql()
27        {                       
28        }
29       
30        function _insertid()
31        {
32                        return fbsql_insert_id($this->_connectionID);
33        }
34       
35        function _affectedrows()
36        {
37                        return fbsql_affected_rows($this->_connectionID);
38        }
39 
40        function MetaDatabases()
41        {
42                $qid = fbsql_list_dbs($this->_connectionID);
43                $arr = array();
44                $i = 0;
45                $max = fbsql_num_rows($qid);
46                while ($i < $max) {
47                        $arr[] = fbsql_tablename($qid,$i);
48                        $i += 1;
49                }
50                return $arr;
51        }
52
53        // returns concatenated string
54        function Concat()
55        {
56                $s = "";
57                $arr = func_get_args();
58                $first = true;
59
60                $s = implode(',',$arr);
61                if (sizeof($arr) > 0) return "CONCAT($s)";
62                else return '';
63        }
64       
65        // returns true or false
66        function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
67        {
68                $this->_connectionID = fbsql_connect($argHostname,$argUsername,$argPassword);
69                if ($this->_connectionID === false) return false;
70                if ($argDatabasename) return $this->SelectDB($argDatabasename);
71                return true;   
72        }
73       
74        // returns true or false
75        function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
76        {
77                $this->_connectionID = fbsql_pconnect($argHostname,$argUsername,$argPassword);
78                if ($this->_connectionID === false) return false;
79                if ($argDatabasename) return $this->SelectDB($argDatabasename);
80                return true;   
81        }
82       
83        function MetaColumns($table, $normalize=true)
84        {
85                if ($this->metaColumnsSQL) {
86                       
87                        $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table));
88                       
89                        if ($rs === false) return false;
90                       
91                        $retarr = array();
92                        while (!$rs->EOF){
93                                $fld = new ADOFieldObject();
94                                $fld->name = $rs->fields[0];
95                                $fld->type = $rs->fields[1];
96                                       
97                                // split type into type(length):
98                                if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) {
99                                        $fld->type = $query_array[1];
100                                        $fld->max_length = $query_array[2];
101                                } else {
102                                        $fld->max_length = -1;
103                                }
104                                $fld->not_null = ($rs->fields[2] != 'YES');
105                                $fld->primary_key = ($rs->fields[3] == 'PRI');
106                                $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);
107                                $fld->binary = (strpos($fld->type,'blob') !== false);
108                               
109                                $retarr[strtoupper($fld->name)] = $fld;
110                                $rs->MoveNext();
111                        }
112                        $rs->Close();
113                        return $retarr;
114                }
115                return false;
116        }
117               
118        // returns true or false
119        function SelectDB($dbName)
120        {
121                $this->database = $dbName;
122                if ($this->_connectionID) {
123                        return @fbsql_select_db($dbName,$this->_connectionID);         
124                }
125                else return false;     
126        }
127       
128       
129        // returns queryID or false
130        function _query($sql,$inputarr=false)
131        {
132                return fbsql_query("$sql;",$this->_connectionID);
133        }
134
135        /*      Returns: the last error message from previous database operation        */     
136        function ErrorMsg()
137        {
138                $this->_errorMsg = @fbsql_error($this->_connectionID);
139                        return $this->_errorMsg;
140        }
141       
142        /*      Returns: the last error number from previous database operation */     
143        function ErrorNo()
144        {
145                return @fbsql_errno($this->_connectionID);
146        }
147       
148        // returns true or false
149        function _close()
150        {
151                return @fbsql_close($this->_connectionID);
152        }
153               
154}
155       
156/*--------------------------------------------------------------------------------------
157         Class Name: Recordset
158--------------------------------------------------------------------------------------*/
159
160class ADORecordSet_fbsql extends ADORecordSet{ 
161       
162        var $databaseType = "fbsql";
163        var $canSeek = true;
164       
165        function ADORecordSet_fbsql($queryID,$mode=false)
166        {
167                if (!$mode) {
168                        global $ADODB_FETCH_MODE;
169                        $mode = $ADODB_FETCH_MODE;
170                }
171                switch ($mode) {
172                case ADODB_FETCH_NUM: $this->fetchMode = FBSQL_NUM; break;
173                case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break;
174                case ADODB_FETCH_BOTH:
175                default:
176                $this->fetchMode = FBSQL_BOTH; break;
177                }
178                return $this->ADORecordSet($queryID);
179        }
180       
181        function _initrs()
182        {
183        GLOBAL $ADODB_COUNTRECS;
184                $this->_numOfRows = ($ADODB_COUNTRECS) ? @fbsql_num_rows($this->_queryID):-1;
185                $this->_numOfFields = @fbsql_num_fields($this->_queryID);
186        }
187       
188
189
190        function FetchField($fieldOffset = -1) {
191                if ($fieldOffset != -1) {
192                        $o =  @fbsql_fetch_field($this->_queryID, $fieldOffset);
193                        //$o->max_length = -1; // fbsql returns the max length less spaces -- so it is unrealiable
194                        $f = @fbsql_field_flags($this->_queryID,$fieldOffset);
195                        $o->binary = (strpos($f,'binary')!== false);
196                }
197                else if ($fieldOffset == -1) {  /*      The $fieldOffset argument is not provided thus its -1   */
198                        $o = @fbsql_fetch_field($this->_queryID);// fbsql returns the max length less spaces -- so it is unrealiable
199                        //$o->max_length = -1;
200                }
201               
202                return $o;
203        }
204               
205        function _seek($row)
206        {
207                return @fbsql_data_seek($this->_queryID,$row);
208        }
209       
210        function _fetch($ignore_fields=false)
211        {
212                $this->fields = @fbsql_fetch_array($this->_queryID,$this->fetchMode);
213                return ($this->fields == true);
214        }
215       
216        function _close() {
217                return @fbsql_free_result($this->_queryID);             
218        }
219       
220        function MetaType($t,$len=-1,$fieldobj=false)
221        {
222                if (is_object($t)) {
223                        $fieldobj = $t;
224                        $t = $fieldobj->type;
225                        $len = $fieldobj->max_length;
226                }
227                $len = -1; // fbsql max_length is not accurate
228                switch (strtoupper($t)) {
229                case 'CHARACTER':
230                case 'CHARACTER VARYING':
231                case 'BLOB':
232                case 'CLOB':
233                case 'BIT':
234                case 'BIT VARYING':
235                        if ($len <= $this->blobSize) return 'C';
236                       
237                // so we have to check whether binary...
238                case 'IMAGE':
239                case 'LONGBLOB':
240                case 'BLOB':
241                case 'MEDIUMBLOB':
242                        return !empty($fieldobj->binary) ? 'B' : 'X';
243                       
244                case 'DATE': return 'D';
245               
246                case 'TIME':
247                case 'TIME WITH TIME ZONE':
248                case 'TIMESTAMP':
249                case 'TIMESTAMP WITH TIME ZONE': return 'T';
250               
251                case 'PRIMARY_KEY':
252                        return 'R';
253                case 'INTEGER':
254                case 'SMALLINT':
255                case 'BOOLEAN':
256                       
257                        if (!empty($fieldobj->primary_key)) return 'R';
258                        else return 'I';
259               
260                default: return 'N';
261                }
262        }
263
264} //class
265} // defined
266?>
Note: See TracBrowser for help on using the repository browser.