summaryrefslogtreecommitdiffstats
path: root/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
diff options
context:
space:
mode:
authorAndrey Andreev <narf@bofh.bg>2012-11-17 21:44:20 +0100
committerAndrey Andreev <narf@bofh.bg>2012-11-17 21:44:20 +0100
commitbe18b9637d8a2c35e4044defc6ce1acaa21dc303 (patch)
tree01b18271654599b857275812191f687d0b27a0b9 /system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
parentad6c373711c1975098cc0e3cd9780e16499a4732 (diff)
Improve DB field_data() for IBM Informix and IBM DB2 (PDO)
Diffstat (limited to 'system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php')
-rw-r--r--system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php29
1 files changed, 19 insertions, 10 deletions
diff --git a/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php b/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
index d8dbc50c0..4d8436899 100644
--- a/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
+++ b/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
@@ -126,7 +126,8 @@ class CI_DB_pdo_ibm_driver extends CI_DB_pdo_driver {
*/
protected function _list_tables($prefix_limit = FALSE)
{
- $sql = 'SELECT "tabname" FROM "syscat"."tables" WHERE "type" = \'T\'';
+ $sql = 'SELECT "tabname" FROM "syscat"."tables"
+ WHERE "type" = \'T\' AND LOWER("tabschema") = '.$this->escape(strtolower($this->database));
if ($prefix_limit === TRUE && $this->dbprefix !== '')
{
@@ -145,27 +146,35 @@ class CI_DB_pdo_ibm_driver extends CI_DB_pdo_driver {
* Generates a platform-specific query string so that the column names can be fetched
*
* @param string $table
- * @return string
+ * @return array
*/
protected function _list_columns($table = '')
{
- return 'SELECT "colname" FROM "syscat"."tables"
- WHERE "syscat"."tabtype" = \'T\' AND "syscat"."tabname" = '.$this->escape($table);
+ return 'SELECT "colname" FROM "syscat"."columns"
+ WHERE LOWER("tabschema") = '.$this->escape(strtolower($this->database)).'
+ AND LOWER("tabname") = '.$this->escape(strtolower($table));
}
// --------------------------------------------------------------------
/**
- * Field data query
- *
- * Generates a platform-specific query so that the column data can be retrieved
+ * Returns an object with field data
*
* @param string $table
- * @return string
+ * @return array
*/
- protected function _field_data($table)
+ public function field_data($table = '')
{
- return 'SELECT * FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE).' FETCH FIRST 1 ROWS ONLY';
+ $sql = 'SELECT "colname" AS "name", "typename" AS "type", "default" AS "default", "length" AS "max_length",
+ CASE "keyseq" WHEN NULL THEN 0 ELSE 1 END AS "primary_key"
+ FROM "syscat"."columns"
+ WHERE LOWER("tabschema") = '.$this->escape(strtolower($this->database)).'
+ AND LOWER("tabname") = '.$this->escape(strtolower($table)).'
+ ORDER BY "colno"';
+
+ return (($query = $this->query($sql)) !== FALSE)
+ ? $query->result_object()
+ : FALSE;
}
// --------------------------------------------------------------------