diff options
author | Andrey Andreev <narf@bofh.bg> | 2012-11-17 21:44:20 +0100 |
---|---|---|
committer | Andrey Andreev <narf@bofh.bg> | 2012-11-17 21:44:20 +0100 |
commit | be18b9637d8a2c35e4044defc6ce1acaa21dc303 (patch) | |
tree | 01b18271654599b857275812191f687d0b27a0b9 /system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php | |
parent | ad6c373711c1975098cc0e3cd9780e16499a4732 (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.php | 29 |
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; } // -------------------------------------------------------------------- |