blob: a143fd7cbb4d001bb33ac5e507684e986b48d402 [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
Andrey Andreev8ae24c52012-01-16 13:05:23 +02002/**
3 * CodeIgniter
4 *
Andrey Andreevfe9309d2015-01-09 17:48:58 +02005 * An open source application development framework for PHP
Andrey Andreev8ae24c52012-01-16 13:05:23 +02006 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +02007 * This content is released under the MIT License (MIT)
Andrey Andreev8ae24c52012-01-16 13:05:23 +02008 *
Andrey Andreevcce6bd12018-01-09 11:32:02 +02009 * Copyright (c) 2014 - 2018, British Columbia Institute of Technology
Andrey Andreev8ae24c52012-01-16 13:05:23 +020010 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020011 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
Andrey Andreev8ae24c52012-01-16 13:05:23 +020017 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020018 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 * THE SOFTWARE.
28 *
29 * @package CodeIgniter
30 * @author EllisLab Dev Team
Andrey Andreev1924e872016-01-11 12:55:34 +020031 * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
Andrey Andreevcce6bd12018-01-09 11:32:02 +020032 * @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020033 * @license http://opensource.org/licenses/MIT MIT License
Andrey Andreevbd202c92016-01-11 12:50:18 +020034 * @link https://codeigniter.com
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020035 * @since Version 3.0.0
Andrey Andreev8ae24c52012-01-16 13:05:23 +020036 * @filesource
37 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020038defined('BASEPATH') OR exit('No direct script access allowed');
Andrey Andreev8ae24c52012-01-16 13:05:23 +020039
40/**
Andrey Andreev9a4f3562012-07-06 11:57:37 +030041 * SQLite3 Result Class
Andrey Andreev8ae24c52012-01-16 13:05:23 +020042 *
43 * This class extends the parent result class: CI_DB_result
44 *
45 * @category Database
Andrey Andreev9a4f3562012-07-06 11:57:37 +030046 * @author Andrey Andreev
Andrey Andreevbd202c92016-01-11 12:50:18 +020047 * @link https://codeigniter.com/user_guide/database/
Andrey Andreev8ae24c52012-01-16 13:05:23 +020048 */
49class CI_DB_sqlite3_result extends CI_DB_result {
50
Andrey Andreev8ae24c52012-01-16 13:05:23 +020051 /**
Andrey Andreev8ae24c52012-01-16 13:05:23 +020052 * Number of fields in the result set
53 *
54 * @return int
55 */
56 public function num_fields()
57 {
Andrey Andreev8463b912012-11-02 02:16:28 +020058 return $this->result_id->numColumns();
Andrey Andreev8ae24c52012-01-16 13:05:23 +020059 }
60
61 // --------------------------------------------------------------------
62
63 /**
64 * Fetch Field Names
65 *
66 * Generates an array of column names
67 *
68 * @return array
69 */
70 public function list_fields()
71 {
72 $field_names = array();
Andrey Andreev53921ca2012-01-16 14:35:22 +020073 for ($i = 0, $c = $this->num_fields(); $i < $c; $i++)
Andrey Andreev8ae24c52012-01-16 13:05:23 +020074 {
75 $field_names[] = $this->result_id->columnName($i);
76 }
77
78 return $field_names;
79 }
80
81 // --------------------------------------------------------------------
82
83 /**
84 * Field data
85 *
86 * Generates an array of objects containing field meta-data
87 *
88 * @return array
89 */
90 public function field_data()
91 {
Andrey Andreev822e74e2012-11-16 02:33:30 +020092 static $data_types = array(
93 SQLITE3_INTEGER => 'integer',
94 SQLITE3_FLOAT => 'float',
95 SQLITE3_TEXT => 'text',
96 SQLITE3_BLOB => 'blob',
97 SQLITE3_NULL => 'null'
98 );
99
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200100 $retval = array();
Gwenael Gf1294cb2015-01-23 18:19:32 +0100101 for ($i = 0, $c = $this->num_fields(); $i < $c; $i++)
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200102 {
103 $retval[$i] = new stdClass();
104 $retval[$i]->name = $this->result_id->columnName($i);
Andrey Andreev822e74e2012-11-16 02:33:30 +0200105
106 $type = $this->result_id->columnType($i);
107 $retval[$i]->type = isset($data_types[$type]) ? $data_types[$type] : $type;
108
109 $retval[$i]->max_length = NULL;
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200110 }
111
112 return $retval;
113 }
114
115 // --------------------------------------------------------------------
116
117 /**
118 * Free the result
119 *
120 * @return void
121 */
122 public function free_result()
123 {
124 if (is_object($this->result_id))
125 {
126 $this->result_id->finalize();
127 $this->result_id = NULL;
128 }
129 }
130
131 // --------------------------------------------------------------------
132
133 /**
134 * Result - associative array
135 *
136 * Returns the result set as an array
137 *
138 * @return array
139 */
140 protected function _fetch_assoc()
141 {
142 return $this->result_id->fetchArray(SQLITE3_ASSOC);
143 }
144
145 // --------------------------------------------------------------------
146
147 /**
148 * Result - object
149 *
150 * Returns the result set as an object
151 *
Andrey Andreev8463b912012-11-02 02:16:28 +0200152 * @param string $class_name
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200153 * @return object
154 */
Andrey Andreev9a4f3562012-07-06 11:57:37 +0300155 protected function _fetch_object($class_name = 'stdClass')
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200156 {
Andrey Andreev9a4f3562012-07-06 11:57:37 +0300157 // No native support for fetching rows as objects
158 if (($row = $this->result_id->fetchArray(SQLITE3_ASSOC)) === FALSE)
159 {
160 return FALSE;
161 }
162 elseif ($class_name === 'stdClass')
163 {
164 return (object) $row;
165 }
166
167 $class_name = new $class_name();
168 foreach (array_keys($row) as $key)
169 {
170 $class_name->$key = $row[$key];
171 }
172
173 return $class_name;
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200174 }
175
176 // --------------------------------------------------------------------
177
178 /**
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200179 * Data Seek
180 *
181 * Moves the internal pointer to the desired offset. We call
182 * this internally before fetching results to make sure the
Andrey Andreev8463b912012-11-02 02:16:28 +0200183 * result set starts at zero.
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200184 *
Andrey Andreev8463b912012-11-02 02:16:28 +0200185 * @param int $n (ignored)
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200186 * @return array
187 */
Andrey Andreev69edc432012-12-04 13:32:16 +0200188 public function data_seek($n = 0)
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200189 {
190 // Only resetting to the start of the result set is supported
Andrey Andreev69edc432012-12-04 13:32:16 +0200191 return ($n > 0) ? FALSE : $this->result_id->reset();
Andrey Andreev8ae24c52012-01-16 13:05:23 +0200192 }
193
194}