TYPO3 CMS  TYPO3_6-2
adodb-fbsql.inc.php
Go to the documentation of this file.
1 <?php
2 /*
3  @version V5.19 23-Apr-2014 (c) 2000-2014 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
12 if (!defined('ADODB_DIR')) die();
13 
14 if (! defined("_ADODB_FBSQL_LAYER")) {
15  define("_ADODB_FBSQL_LAYER", 1 );
16 
17 class 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 
160 class 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
$sql
Definition: server.php:82
if(isset($_REQUEST['nrows'])) else $rs
Definition: server.php:92
die
Definition: index.php:6