source: trunk/phpgwapi/inc/adodb/drivers/adodb-fbsql.inc.php @ 2

Revision 2, 6.4 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2/*
3 @version V4.50 6 July 2004 (c) 2000-2004 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->databaseName = $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                default:
174                case ADODB_FETCH_BOTH: $this->fetchMode = FBSQL_BOTH; break;
175                case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break;
176                }
177                return $this->ADORecordSet($queryID);
178        }
179       
180        function _initrs()
181        {
182        GLOBAL $ADODB_COUNTRECS;
183                $this->_numOfRows = ($ADODB_COUNTRECS) ? @fbsql_num_rows($this->_queryID):-1;
184                $this->_numOfFields = @fbsql_num_fields($this->_queryID);
185        }
186       
187
188
189        function &FetchField($fieldOffset = -1) {
190                if ($fieldOffset != -1) {
191                        $o =  @fbsql_fetch_field($this->_queryID, $fieldOffset);
192                        //$o->max_length = -1; // fbsql returns the max length less spaces -- so it is unrealiable
193                        $f = @fbsql_field_flags($this->_queryID,$fieldOffset);
194                        $o->binary = (strpos($f,'binary')!== false);
195                }
196                else if ($fieldOffset == -1) {  /*      The $fieldOffset argument is not provided thus its -1   */
197                        $o = @fbsql_fetch_field($this->_queryID);// fbsql returns the max length less spaces -- so it is unrealiable
198                        //$o->max_length = -1;
199                }
200               
201                return $o;
202        }
203               
204        function _seek($row)
205        {
206                return @fbsql_data_seek($this->_queryID,$row);
207        }
208       
209        function _fetch($ignore_fields=false)
210        {
211                $this->fields = @fbsql_fetch_array($this->_queryID,$this->fetchMode);
212                return ($this->fields == true);
213        }
214       
215        function _close() {
216                return @fbsql_free_result($this->_queryID);             
217        }
218       
219        function MetaType($t,$len=-1,$fieldobj=false)
220        {
221                if (is_object($t)) {
222                        $fieldobj = $t;
223                        $t = $fieldobj->type;
224                        $len = $fieldobj->max_length;
225                }
226                $len = -1; // fbsql max_length is not accurate
227                switch (strtoupper($t)) {
228                case 'CHARACTER':
229                case 'CHARACTER VARYING':
230                case 'BLOB':
231                case 'CLOB':
232                case 'BIT':
233                case 'BIT VARYING':
234                        if ($len <= $this->blobSize) return 'C';
235                       
236                // so we have to check whether binary...
237                case 'IMAGE':
238                case 'LONGBLOB':
239                case 'BLOB':
240                case 'MEDIUMBLOB':
241                        return !empty($fieldobj->binary) ? 'B' : 'X';
242                       
243                case 'DATE': return 'D';
244               
245                case 'TIME':
246                case 'TIME WITH TIME ZONE':
247                case 'TIMESTAMP':
248                case 'TIMESTAMP WITH TIME ZONE': return 'T';
249               
250                case 'PRIMARY_KEY':
251                        return 'R';
252                case 'INTEGER':
253                case 'SMALLINT':
254                case 'BOOLEAN':
255                       
256                        if (!empty($fieldobj->primary_key)) return 'R';
257                        else return 'I';
258               
259                default: return 'N';
260                }
261        }
262
263} //class
264} // defined
265?>
Note: See TracBrowser for help on using the repository browser.