summaryrefslogtreecommitdiffstats
path: root/system/database/drivers/pdo/pdo_result.php
diff options
context:
space:
mode:
authorAndrey Andreev <narf@bofh.bg>2012-03-18 13:22:07 +0100
committerAndrey Andreev <narf@bofh.bg>2012-03-18 13:22:07 +0100
commite3a0b2b4cba04f4f0925b6b16d15416aa66e8a85 (patch)
treedc8c615741d5bee4ae36b93b5c0389650a2f3aa2 /system/database/drivers/pdo/pdo_result.php
parent9127b9cb4039ecdac621403e709a2ef408de9f73 (diff)
parent4a80154b0bb28df04d407d3d3d83e112808b25d4 (diff)
Merge pull request #1060 from toopay/pdo_meta
Fixed meta table method(s) for PDO
Diffstat (limited to 'system/database/drivers/pdo/pdo_result.php')
-rw-r--r--system/database/drivers/pdo/pdo_result.php43
1 files changed, 41 insertions, 2 deletions
diff --git a/system/database/drivers/pdo/pdo_result.php b/system/database/drivers/pdo/pdo_result.php
index 309f1947d..384b753da 100644
--- a/system/database/drivers/pdo/pdo_result.php
+++ b/system/database/drivers/pdo/pdo_result.php
@@ -160,9 +160,48 @@ class CI_DB_pdo_result extends CI_DB_result {
try
{
- for($i = 0; $i < $this->num_fields(); $i++)
+ if (strpos($this->result_id->queryString, 'PRAGMA') !== FALSE)
{
- $data[] = $this->result_id->getColumnMeta($i);
+ foreach ($this->result_array() as $field)
+ {
+ preg_match('/([a-zA-Z]+)(\(\d+\))?/', $field['type'], $matches);
+
+ $F = new stdClass();
+ $F->name = $field['name'];
+ $F->type = ( ! empty($matches[1])) ? $matches[1] : NULL;
+ $F->default = NULL;
+ $F->max_length = ( ! empty($matches[2])) ? preg_replace('/[^\d]/', '', $matches[2]) : NULL;
+ $F->primary_key = (int) $field['pk'];
+ $F->pdo_type = NULL;
+
+ $data[] = $F;
+ }
+ }
+ else
+ {
+ for($i = 0, $max = $this->num_fields(); $i < $max; $i++)
+ {
+ $field = $this->result_id->getColumnMeta($i);
+
+ $F = new stdClass();
+ $F->name = $field['name'];
+ $F->type = $field['native_type'];
+ $F->default = NULL;
+ $F->pdo_type = $field['pdo_type'];
+
+ if ($field['precision'] < 0)
+ {
+ $F->max_length = NULL;
+ $F->primary_key = 0;
+ }
+ else
+ {
+ $F->max_length = ($field['len'] > 255) ? 0 : $field['len'];
+ $F->primary_key = (int) ( ! empty($field['flags']) && in_array('primary_key', $field['flags']));
+ }
+
+ $data[] = $F;
+ }
}
return $data;