source: tmp/version-2_5-test/data/module/adodb/drivers/adodb-fbsql.inc.php @ 18609

Revision 18609, 6.4 KB checked in by kajiwara, 14 years ago (diff)

正式版にナイトリービルド版をマージしてみるテスト

Line 
1<?php
2/*
3 @version v4.992 10 Nov 2009 (c) 2000-2009 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)
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.