blob: 4cff5f44858de5c5b04e78773183b7a6dbae6cd7 [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
Timothy Warren76e04352012-02-14 11:55:17 -05002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Timothy Warren76e04352012-02-14 11:55:17 -05006 *
7 * NOTICE OF LICENSE
Timothy Warren817af192012-02-16 08:28:00 -05008 *
Timothy Warren76e04352012-02-14 11:55:17 -05009 * Licensed under the Open Software License version 3.0
Timothy Warren817af192012-02-16 08:28:00 -050010 *
Timothy Warren76e04352012-02-14 11:55:17 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
Timothy Warren7221f942012-02-14 15:02:33 -050017 * licensing@ellislab.com so we can send you a copy immediately.
Timothy Warren76e04352012-02-14 11:55:17 -050018 *
Timothy Warren7221f942012-02-14 15:02:33 -050019 * @package CodeIgniter
20 * @author EllisLab Dev Team
darwinel871754a2014-02-11 17:34:57 +010021 * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)
Timothy Warren7221f942012-02-14 15:02:33 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
23 * @link http://codeigniter.com
24 * @since Version 3.0
25 * @filesource
Timothy Warren76e04352012-02-14 11:55:17 -050026 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020027defined('BASEPATH') OR exit('No direct script access allowed');
Timothy Warren76e04352012-02-14 11:55:17 -050028
Timothy Warren76e04352012-02-14 11:55:17 -050029/**
30 * Firebird/Interbase Database Adapter Class
31 *
32 * Note: _DB is an extender class that the app controller
Jamie Rumbelowffe7a0a2012-04-26 13:48:18 +010033 * creates dynamically based on whether the query builder
Timothy Warren76e04352012-02-14 11:55:17 -050034 * class is being used or not.
35 *
Timothy Warren7221f942012-02-14 15:02:33 -050036 * @package CodeIgniter
37 * @subpackage Drivers
38 * @category Database
39 * @author EllisLab Dev Team
40 * @link http://codeigniter.com/user_guide/database/
Timothy Warren76e04352012-02-14 11:55:17 -050041 */
Andrey Andreev26086872012-07-05 11:21:58 +030042class CI_DB_ibase_driver extends CI_DB {
Timothy Warren76e04352012-02-14 11:55:17 -050043
Andrey Andreeva24e52e2012-11-02 03:54:12 +020044 /**
45 * Database driver
46 *
47 * @var string
48 */
Andrey Andreev26086872012-07-05 11:21:58 +030049 public $dbdriver = 'ibase';
Timothy Warren76e04352012-02-14 11:55:17 -050050
Andrey Andreeva24e52e2012-11-02 03:54:12 +020051 // --------------------------------------------------------------------
Timothy Warren76e04352012-02-14 11:55:17 -050052
Andrey Andreeva24e52e2012-11-02 03:54:12 +020053 /**
54 * ORDER BY random keyword
55 *
Andrey Andreev98e46cf2012-11-13 03:01:42 +020056 * @var array
Andrey Andreeva24e52e2012-11-02 03:54:12 +020057 */
Andrey Andreev98e46cf2012-11-13 03:01:42 +020058 protected $_random_keyword = array('RAND()', 'RAND()');
Andrey Andreev00df2e32012-03-02 18:37:16 +020059
Andrey Andreeva24e52e2012-11-02 03:54:12 +020060 /**
61 * IBase Transaction status flag
62 *
63 * @var resource
64 */
65 protected $_ibase_trans;
66
67 // --------------------------------------------------------------------
Timothy Warren76e04352012-02-14 11:55:17 -050068
69 /**
70 * Non-persistent database connection
71 *
Timothy Warren7221f942012-02-14 15:02:33 -050072 * @return resource
Timothy Warren76e04352012-02-14 11:55:17 -050073 */
Timothy Warren4be822b2012-02-14 12:07:34 -050074 public function db_connect()
Timothy Warren76e04352012-02-14 11:55:17 -050075 {
Timothy Warren3c4281f2012-02-16 19:00:10 -050076 return @ibase_connect($this->hostname.':'.$this->database, $this->username, $this->password, $this->char_set);
Timothy Warren76e04352012-02-14 11:55:17 -050077 }
78
79 // --------------------------------------------------------------------
80
81 /**
82 * Persistent database connection
83 *
Timothy Warren7221f942012-02-14 15:02:33 -050084 * @return resource
Timothy Warren76e04352012-02-14 11:55:17 -050085 */
Timothy Warren4be822b2012-02-14 12:07:34 -050086 public function db_pconnect()
Timothy Warren76e04352012-02-14 11:55:17 -050087 {
Timothy Warren3c4281f2012-02-16 19:00:10 -050088 return @ibase_pconnect($this->hostname.':'.$this->database, $this->username, $this->password, $this->char_set);
Timothy Warren76e04352012-02-14 11:55:17 -050089 }
90
91 // --------------------------------------------------------------------
92
93 /**
Andrey Andreev08856b82012-03-03 03:19:28 +020094 * Database version number
Timothy Warren76e04352012-02-14 11:55:17 -050095 *
Timothy Warren7221f942012-02-14 15:02:33 -050096 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -050097 */
Andrey Andreev08856b82012-03-03 03:19:28 +020098 public function version()
Timothy Warren76e04352012-02-14 11:55:17 -050099 {
Andrey Andreev08856b82012-03-03 03:19:28 +0200100 if (isset($this->data_cache['version']))
101 {
102 return $this->data_cache['version'];
103 }
104
Timothy Warren3d985a12012-02-15 11:38:00 -0500105 if (($service = ibase_service_attach($this->hostname, $this->username, $this->password)))
106 {
Andrey Andreev08856b82012-03-03 03:19:28 +0200107 $this->data_cache['version'] = ibase_server_info($service, IBASE_SVC_SERVER_VERSION);
Andrey Andreev00df2e32012-03-02 18:37:16 +0200108
Timothy Warrenab189e12012-02-22 10:34:23 -0500109 // Don't keep the service open
110 ibase_service_detach($service);
Andrey Andreev08856b82012-03-03 03:19:28 +0200111 return $this->data_cache['version'];
Timothy Warren3d985a12012-02-15 11:38:00 -0500112 }
Andrey Andreev00df2e32012-03-02 18:37:16 +0200113
Timothy Warren3d985a12012-02-15 11:38:00 -0500114 return FALSE;
Timothy Warren76e04352012-02-14 11:55:17 -0500115 }
116
117 // --------------------------------------------------------------------
118
119 /**
120 * Execute the query
121 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200122 * @param string $sql an SQL query
Timothy Warren7221f942012-02-14 15:02:33 -0500123 * @return resource
Timothy Warren76e04352012-02-14 11:55:17 -0500124 */
Timothy Warren95562142012-02-20 17:37:21 -0500125 protected function _execute($sql)
Timothy Warren76e04352012-02-14 11:55:17 -0500126 {
Timothy Warren7221f942012-02-14 15:02:33 -0500127 return @ibase_query($this->conn_id, $sql);
Timothy Warren76e04352012-02-14 11:55:17 -0500128 }
129
130 // --------------------------------------------------------------------
131
132 /**
Timothy Warren76e04352012-02-14 11:55:17 -0500133 * Begin Transaction
134 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200135 * @param bool $test_mode
Timothy Warren7221f942012-02-14 15:02:33 -0500136 * @return bool
Timothy Warren76e04352012-02-14 11:55:17 -0500137 */
Timothy Warren4be822b2012-02-14 12:07:34 -0500138 public function trans_begin($test_mode = FALSE)
Timothy Warren76e04352012-02-14 11:55:17 -0500139 {
Timothy Warren76e04352012-02-14 11:55:17 -0500140 // When transactions are nested we only begin/commit/rollback the outermost ones
Andrey Andreev131772c2012-03-20 23:35:03 +0200141 if ( ! $this->trans_enabled OR $this->_trans_depth > 0)
Timothy Warren76e04352012-02-14 11:55:17 -0500142 {
143 return TRUE;
144 }
145
146 // Reset the transaction failure flag.
147 // If the $test_mode flag is set to TRUE transactions will be rolled back
148 // even if the queries produce a successful result.
Andrey Andreev131772c2012-03-20 23:35:03 +0200149 $this->_trans_failure = ($test_mode === TRUE);
Timothy Warren76e04352012-02-14 11:55:17 -0500150
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200151 $this->_ibase_trans = @ibase_trans($this->conn_id);
Andrey Andreev00df2e32012-03-02 18:37:16 +0200152
Timothy Warren76e04352012-02-14 11:55:17 -0500153 return TRUE;
154 }
155
156 // --------------------------------------------------------------------
157
158 /**
159 * Commit Transaction
160 *
Timothy Warren7221f942012-02-14 15:02:33 -0500161 * @return bool
Timothy Warren76e04352012-02-14 11:55:17 -0500162 */
Timothy Warren4be822b2012-02-14 12:07:34 -0500163 public function trans_commit()
Timothy Warren76e04352012-02-14 11:55:17 -0500164 {
Timothy Warren76e04352012-02-14 11:55:17 -0500165 // When transactions are nested we only begin/commit/rollback the outermost ones
Andrey Andreev131772c2012-03-20 23:35:03 +0200166 if ( ! $this->trans_enabled OR $this->_trans->depth > 0)
Timothy Warren76e04352012-02-14 11:55:17 -0500167 {
168 return TRUE;
169 }
Andrey Andreev00df2e32012-03-02 18:37:16 +0200170
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200171 return @ibase_commit($this->_ibase_trans);
Timothy Warren76e04352012-02-14 11:55:17 -0500172 }
173
174 // --------------------------------------------------------------------
175
176 /**
177 * Rollback Transaction
178 *
Timothy Warren7221f942012-02-14 15:02:33 -0500179 * @return bool
Timothy Warren76e04352012-02-14 11:55:17 -0500180 */
Timothy Warren4be822b2012-02-14 12:07:34 -0500181 public function trans_rollback()
Timothy Warren76e04352012-02-14 11:55:17 -0500182 {
Timothy Warren76e04352012-02-14 11:55:17 -0500183 // When transactions are nested we only begin/commit/rollback the outermost ones
Andrey Andreev131772c2012-03-20 23:35:03 +0200184 if ( ! $this->trans_enabled OR $this->_trans_depth > 0)
Timothy Warren76e04352012-02-14 11:55:17 -0500185 {
186 return TRUE;
187 }
188
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200189 return @ibase_rollback($this->_ibase_trans);
Timothy Warren76e04352012-02-14 11:55:17 -0500190 }
191
192 // --------------------------------------------------------------------
193
194 /**
Timothy Warren76e04352012-02-14 11:55:17 -0500195 * Affected Rows
196 *
Andrey Andreev131772c2012-03-20 23:35:03 +0200197 * @return int
Timothy Warren76e04352012-02-14 11:55:17 -0500198 */
Timothy Warren4be822b2012-02-14 12:07:34 -0500199 public function affected_rows()
Timothy Warren76e04352012-02-14 11:55:17 -0500200 {
Timothy Warren7221f942012-02-14 15:02:33 -0500201 return @ibase_affected_rows($this->conn_id);
Timothy Warren76e04352012-02-14 11:55:17 -0500202 }
203
204 // --------------------------------------------------------------------
205
206 /**
207 * Insert ID
208 *
Andrey Andreev131772c2012-03-20 23:35:03 +0200209 * @param string $generator_name
210 * @param int $inc_by
211 * @return int
Timothy Warren76e04352012-02-14 11:55:17 -0500212 */
Andrey Andreev5382b1b2012-06-25 01:26:48 +0300213 public function insert_id($generator_name, $inc_by = 0)
Timothy Warren76e04352012-02-14 11:55:17 -0500214 {
Timothy Warren07b660b2012-02-20 13:23:06 -0500215 //If a generator hasn't been used before it will return 0
Timothy Warrenfed2d1d2012-02-20 15:42:45 -0500216 return ibase_gen_id('"'.$generator_name.'"', $inc_by);
Timothy Warren76e04352012-02-14 11:55:17 -0500217 }
218
219 // --------------------------------------------------------------------
220
221 /**
Timothy Warren76e04352012-02-14 11:55:17 -0500222 * List table query
223 *
224 * Generates a platform-specific query string so that the table names can be fetched
225 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200226 * @param bool $prefix_limit
Timothy Warren7221f942012-02-14 15:02:33 -0500227 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500228 */
Timothy Warren95562142012-02-20 17:37:21 -0500229 protected function _list_tables($prefix_limit = FALSE)
Timothy Warren76e04352012-02-14 11:55:17 -0500230 {
Andrey Andreev60c9c992012-03-20 23:46:09 +0200231 $sql = 'SELECT "RDB$RELATION_NAME" FROM "RDB$RELATIONS" WHERE "RDB$RELATION_NAME" NOT LIKE \'RDB$%\' AND "RDB$RELATION_NAME" NOT LIKE \'MON$%\'';
Timothy Warren76e04352012-02-14 11:55:17 -0500232
Alex Bilbie48a2baf2012-06-02 11:09:54 +0100233 if ($prefix_limit !== FALSE && $this->dbprefix !== '')
Timothy Warren76e04352012-02-14 11:55:17 -0500234 {
Andrey Andreev5382b1b2012-06-25 01:26:48 +0300235 return $sql.' AND "RDB$RELATION_NAME" LIKE \''.$this->escape_like_str($this->dbprefix)."%' "
236 .sprintf($this->_like_escape_str, $this->_like_escape_chr);
Timothy Warren76e04352012-02-14 11:55:17 -0500237 }
Andrey Andreev131772c2012-03-20 23:35:03 +0200238
Timothy Warren76e04352012-02-14 11:55:17 -0500239 return $sql;
240 }
241
242 // --------------------------------------------------------------------
243
244 /**
245 * Show column query
246 *
247 * Generates a platform-specific query string so that the column names can be fetched
248 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200249 * @param string $table
Timothy Warren7221f942012-02-14 15:02:33 -0500250 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500251 */
Timothy Warren95562142012-02-20 17:37:21 -0500252 protected function _list_columns($table = '')
Timothy Warren76e04352012-02-14 11:55:17 -0500253 {
Andrey Andreev5382b1b2012-06-25 01:26:48 +0300254 return 'SELECT "RDB$FIELD_NAME" FROM "RDB$RELATION_FIELDS" WHERE "RDB$RELATION_NAME" = '.$this->escape($table);
Timothy Warren76e04352012-02-14 11:55:17 -0500255 }
256
257 // --------------------------------------------------------------------
258
259 /**
Andrey Andreev02e7a9d2012-11-16 01:49:46 +0200260 * Returns an object with field data
Timothy Warren76e04352012-02-14 11:55:17 -0500261 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200262 * @param string $table
Andrey Andreev02e7a9d2012-11-16 01:49:46 +0200263 * @return array
Timothy Warren76e04352012-02-14 11:55:17 -0500264 */
Andrey Andreev02e7a9d2012-11-16 01:49:46 +0200265 public function field_data($table = '')
Timothy Warren76e04352012-02-14 11:55:17 -0500266 {
Andrey Andreev02e7a9d2012-11-16 01:49:46 +0200267 if ($table === '')
268 {
269 return ($this->db_debug) ? $this->display_error('db_field_param_missing') : FALSE;
270 }
271
272 $sql = 'SELECT "rfields"."RDB$FIELD_NAME" AS "name",
273 CASE "fields"."RDB$FIELD_TYPE"
274 WHEN 7 THEN \'SMALLINT\'
275 WHEN 8 THEN \'INTEGER\'
276 WHEN 9 THEN \'QUAD\'
277 WHEN 10 THEN \'FLOAT\'
278 WHEN 11 THEN \'DFLOAT\'
279 WHEN 12 THEN \'DATE\'
280 WHEN 13 THEN \'TIME\'
281 WHEN 14 THEN \'CHAR\'
282 WHEN 16 THEN \'INT64\'
283 WHEN 27 THEN \'DOUBLE\'
284 WHEN 35 THEN \'TIMESTAMP\'
285 WHEN 37 THEN \'VARCHAR\'
286 WHEN 40 THEN \'CSTRING\'
287 WHEN 261 THEN \'BLOB\'
288 ELSE NULL
289 END AS "type",
290 "fields"."RDB$FIELD_LENGTH" AS "max_length",
291 "rfields"."RDB$DEFAULT_VALUE" AS "default"
292 FROM "RDB$RELATION_FIELDS" "rfields"
293 JOIN "RDB$FIELDS" "fields" ON "rfields"."RDB$FIELD_SOURCE" = "fields"."RDB$FIELD_NAME"
294 WHERE "rfields"."RDB$RELATION_NAME" = '.$this->escape($table).'
295 ORDER BY "rfields"."RDB$FIELD_POSITION"';
296
297 return (($query = $this->query($sql)) !== FALSE)
298 ? $query->result_object()
299 : FALSE;
Timothy Warren76e04352012-02-14 11:55:17 -0500300 }
301
302 // --------------------------------------------------------------------
303
304 /**
Andrey Andreev00df2e32012-03-02 18:37:16 +0200305 * Error
Timothy Warren76e04352012-02-14 11:55:17 -0500306 *
Andrey Andreev00df2e32012-03-02 18:37:16 +0200307 * Returns an array containing code and message of the last
308 * database error that has occured.
Timothy Warren76e04352012-02-14 11:55:17 -0500309 *
Andrey Andreev00df2e32012-03-02 18:37:16 +0200310 * @return array
Timothy Warren76e04352012-02-14 11:55:17 -0500311 */
Andrey Andreev00df2e32012-03-02 18:37:16 +0200312 public function error()
Timothy Warren76e04352012-02-14 11:55:17 -0500313 {
Andrey Andreev00df2e32012-03-02 18:37:16 +0200314 return array('code' => ibase_errcode(), 'message' => ibase_errmsg());
Timothy Warren76e04352012-02-14 11:55:17 -0500315 }
316
317 // --------------------------------------------------------------------
318
319 /**
Timothy Warren76e04352012-02-14 11:55:17 -0500320 * Update statement
321 *
322 * Generates a platform-specific update string from the supplied data
323 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200324 * @param string $table
325 * @param array $values
Timothy Warren7221f942012-02-14 15:02:33 -0500326 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500327 */
Andrey Andreevb0478652012-07-18 15:34:46 +0300328 protected function _update($table, $values)
Timothy Warren76e04352012-02-14 11:55:17 -0500329 {
Andrey Andreevb0478652012-07-18 15:34:46 +0300330 $this->qb_limit = FALSE;
331 return parent::_update($table, $values);
Timothy Warren76e04352012-02-14 11:55:17 -0500332 }
333
Timothy Warren76e04352012-02-14 11:55:17 -0500334 // --------------------------------------------------------------------
335
336 /**
337 * Truncate statement
338 *
339 * Generates a platform-specific truncate string from the supplied data
Andrey Andreeva6fe36e2012-04-05 16:00:32 +0300340 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200341 * If the database does not support the TRUNCATE statement,
Andrey Andreeva6fe36e2012-04-05 16:00:32 +0300342 * then this method maps to 'DELETE FROM table'
Timothy Warren76e04352012-02-14 11:55:17 -0500343 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200344 * @param string $table
Timothy Warren7221f942012-02-14 15:02:33 -0500345 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500346 */
Timothy Warren95562142012-02-20 17:37:21 -0500347 protected function _truncate($table)
Timothy Warren76e04352012-02-14 11:55:17 -0500348 {
Andrey Andreeva6fe36e2012-04-05 16:00:32 +0300349 return 'DELETE FROM '.$table;
Timothy Warren76e04352012-02-14 11:55:17 -0500350 }
351
352 // --------------------------------------------------------------------
353
354 /**
355 * Delete statement
356 *
357 * Generates a platform-specific delete string from the supplied data
358 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200359 * @param string $table
Timothy Warren7221f942012-02-14 15:02:33 -0500360 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500361 */
Andrey Andreevb0478652012-07-18 15:34:46 +0300362 protected function _delete($table)
Timothy Warren76e04352012-02-14 11:55:17 -0500363 {
Andrey Andreevb0478652012-07-18 15:34:46 +0300364 $this->qb_limit = FALSE;
365 return parent::_delete($table);
Timothy Warren76e04352012-02-14 11:55:17 -0500366 }
367
368 // --------------------------------------------------------------------
369
370 /**
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200371 * LIMIT
Timothy Warren76e04352012-02-14 11:55:17 -0500372 *
373 * Generates a platform-specific LIMIT clause
374 *
Andrey Andreeva24e52e2012-11-02 03:54:12 +0200375 * @param string $sql SQL Query
Timothy Warren7221f942012-02-14 15:02:33 -0500376 * @return string
Timothy Warren76e04352012-02-14 11:55:17 -0500377 */
Andrey Andreevc9b924c2012-07-19 13:06:02 +0300378 protected function _limit($sql)
Timothy Warren76e04352012-02-14 11:55:17 -0500379 {
Timothy Warren56784f62012-02-29 11:58:20 -0500380 // Limit clause depends on if Interbase or Firebird
Andrey Andreev08856b82012-03-03 03:19:28 +0200381 if (stripos($this->version(), 'firebird') !== FALSE)
Timothy Warren56784f62012-02-29 11:58:20 -0500382 {
Andrey Andreevc9b924c2012-07-19 13:06:02 +0300383 $select = 'FIRST '.$this->qb_limit
384 .($this->qb_offset ? ' SKIP '.$this->qb_offset : '');
Timothy Warren56784f62012-02-29 11:58:20 -0500385 }
386 else
387 {
Andrey Andreev131772c2012-03-20 23:35:03 +0200388 $select = 'ROWS '
Andrey Andreevc9b924c2012-07-19 13:06:02 +0300389 .($this->qb_offset ? $this->qb_offset.' TO '.($this->qb_limit + $this->qb_offset) : $this->qb_limit);
Timothy Warren56784f62012-02-29 11:58:20 -0500390 }
Andrey Andreev00df2e32012-03-02 18:37:16 +0200391
Timothy Warrena5410872013-01-09 10:44:14 -0500392 return preg_replace('`SELECT`i', 'SELECT '.$select, $sql, 1);
Timothy Warren76e04352012-02-14 11:55:17 -0500393 }
394
395 // --------------------------------------------------------------------
396
397 /**
398 * Close DB Connection
399 *
Timothy Warren7221f942012-02-14 15:02:33 -0500400 * @return void
Timothy Warren76e04352012-02-14 11:55:17 -0500401 */
Andrey Andreev79922c02012-05-23 12:27:17 +0300402 protected function _close()
Timothy Warren76e04352012-02-14 11:55:17 -0500403 {
Andrey Andreev79922c02012-05-23 12:27:17 +0300404 @ibase_close($this->conn_id);
Timothy Warren76e04352012-02-14 11:55:17 -0500405 }
Andrey Andreev00df2e32012-03-02 18:37:16 +0200406
Timothy Warren76e04352012-02-14 11:55:17 -0500407}
408
Andrey Andreev26086872012-07-05 11:21:58 +0300409/* End of file ibase_driver.php */
410/* Location: ./system/database/drivers/ibase/ibase_driver.php */