diff options
author | Andrey Andreev <narf@bofh.bg> | 2012-03-20 14:35:50 +0100 |
---|---|---|
committer | Andrey Andreev <narf@bofh.bg> | 2012-03-20 14:35:50 +0100 |
commit | 160a4e5628aba8b5e35da784ec87037e133c1f05 (patch) | |
tree | 3ceec6e888a078bfe86ebfefe2e126f9b23f384f /system/database/drivers/pdo/pdo_result.php | |
parent | ad97736d8249240cba802d33a24b7b11e02488cf (diff) | |
parent | 820999cb0d82c80d6dc5dde133568812c8113e29 (diff) |
Merge upstream branch
Diffstat (limited to 'system/database/drivers/pdo/pdo_result.php')
-rw-r--r-- | system/database/drivers/pdo/pdo_result.php | 43 |
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; |