Subversion-Projekte lars-tiefland.ci

Revision

Revision 68 | Revision 2242 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
68 lars 1
<?php
2
/**
3
 * CodeIgniter
4
 *
5
 * An open source application development framework for PHP
6
 *
7
 * This content is released under the MIT License (MIT)
8
 *
2049 lars 9
 * Copyright (c) 2014 - 2017, British Columbia Institute of Technology
68 lars 10
 *
11
 * 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:
17
 *
18
 * 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
31
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
2049 lars 32
 * @copyright	Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/)
68 lars 33
 * @license	http://opensource.org/licenses/MIT	MIT License
34
 * @link	https://codeigniter.com
35
 * @since	Version 3.0.0
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * SQLite3 Result Class
42
 *
43
 * This class extends the parent result class: CI_DB_result
44
 *
45
 * @category	Database
46
 * @author		Andrey Andreev
47
 * @link		https://codeigniter.com/user_guide/database/
48
 */
49
class CI_DB_sqlite3_result extends CI_DB_result {
50
 
51
	/**
52
	 * Number of fields in the result set
53
	 *
54
	 * @return	int
55
	 */
56
	public function num_fields()
57
	{
58
		return $this->result_id->numColumns();
59
	}
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();
73
		for ($i = 0, $c = $this->num_fields(); $i < $c; $i++)
74
		{
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
	{
92
		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
 
100
		$retval = array();
101
		for ($i = 0, $c = $this->num_fields(); $i < $c; $i++)
102
		{
103
			$retval[$i]			= new stdClass();
104
			$retval[$i]->name		= $this->result_id->columnName($i);
105
 
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;
110
		}
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
	 *
152
	 * @param	string	$class_name
153
	 * @return	object
154
	 */
155
	protected function _fetch_object($class_name = 'stdClass')
156
	{
157
		// 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;
174
	}
175
 
176
	// --------------------------------------------------------------------
177
 
178
	/**
179
	 * Data Seek
180
	 *
181
	 * Moves the internal pointer to the desired offset. We call
182
	 * this internally before fetching results to make sure the
183
	 * result set starts at zero.
184
	 *
185
	 * @param	int	$n	(ignored)
186
	 * @return	array
187
	 */
188
	public function data_seek($n = 0)
189
	{
190
		// Only resetting to the start of the result set is supported
191
		return ($n > 0) ? FALSE : $this->result_id->reset();
192
	}
193
 
194
}