source: moodle/trunk/fuentes/lib/adodb/drivers/adodb-fbsql.inc.php @ 1331

Last change on this file since 1331 was 1331, checked in by jrpelegrina, 3 years ago

Updated to moodle 3.0.3

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