source: Dev/trunk/rdfapi/util/adodb/drivers/adodb-fbsql.inc.php @ 12

Last change on this file since 12 was 12, checked in by basvannuland, 14 years ago

Added RAP RDF API
Added RDF reader writer for save and load survey

File size: 6.6 KB
Line 
1<?php
2/*
3 @version V4.94 23 Jan 2007 (c) 2000-2007 John Lim (jlim#natsoft.com.my). 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)
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)
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.