Subversion-Projekte lars-tiefland.ci

Revision

Revision 2257 | 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
 *
2414 lars 9
 * Copyright (c) 2014 - 2019, 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/)
2414 lars 32
 * @copyright	Copyright (c) 2014 - 2019, British Columbia Institute of Technology (https://bcit.ca/)
33
 * @license	https://opensource.org/licenses/MIT	MIT License
68 lars 34
 * @link	https://codeigniter.com
35
 * @since	Version 1.4.1
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * oci8 Result Class
42
 *
43
 * This class extends the parent result class: CI_DB_result
44
 *
45
 * @category	Database
46
 * @author		EllisLab Dev Team
47
 * @link		https://codeigniter.com/user_guide/database/
48
 */
49
class CI_DB_oci8_result extends CI_DB_result {
50
 
51
	/**
52
	 * Statement ID
53
	 *
54
	 * @var	resource
55
	 */
56
	public $stmt_id;
57
 
58
	/**
59
	 * Cursor ID
60
	 *
61
	 * @var	resource
62
	 */
63
	public $curs_id;
64
 
65
	/**
66
	 * Limit used flag
67
	 *
68
	 * @var	bool
69
	 */
70
	public $limit_used;
71
 
72
	/**
73
	 * Commit mode flag
74
	 *
75
	 * @var	int
76
	 */
77
	public $commit_mode;
78
 
79
	// --------------------------------------------------------------------
80
 
81
	/**
82
	 * Class constructor
83
	 *
84
	 * @param	object	&$driver_object
85
	 * @return	void
86
	 */
87
	public function __construct(&$driver_object)
88
	{
89
		parent::__construct($driver_object);
90
 
91
		$this->stmt_id = $driver_object->stmt_id;
92
		$this->curs_id = $driver_object->curs_id;
93
		$this->limit_used = $driver_object->limit_used;
94
		$this->commit_mode =& $driver_object->commit_mode;
95
		$driver_object->stmt_id = FALSE;
96
	}
97
 
98
	// --------------------------------------------------------------------
99
 
100
	/**
101
	 * Number of fields in the result set
102
	 *
103
	 * @return	int
104
	 */
105
	public function num_fields()
106
	{
107
		$count = oci_num_fields($this->stmt_id);
108
 
109
		// if we used a limit we subtract it
110
		return ($this->limit_used) ? $count - 1 : $count;
111
	}
112
 
113
	// --------------------------------------------------------------------
114
 
115
	/**
116
	 * Fetch Field Names
117
	 *
118
	 * Generates an array of column names
119
	 *
120
	 * @return	array
121
	 */
122
	public function list_fields()
123
	{
124
		$field_names = array();
125
		for ($c = 1, $fieldCount = $this->num_fields(); $c <= $fieldCount; $c++)
126
		{
127
			$field_names[] = oci_field_name($this->stmt_id, $c);
128
		}
129
		return $field_names;
130
	}
131
 
132
	// --------------------------------------------------------------------
133
 
134
	/**
135
	 * Field data
136
	 *
137
	 * Generates an array of objects containing field meta-data
138
	 *
139
	 * @return	array
140
	 */
141
	public function field_data()
142
	{
143
		$retval = array();
144
		for ($c = 1, $fieldCount = $this->num_fields(); $c <= $fieldCount; $c++)
145
		{
146
			$F		= new stdClass();
147
			$F->name	= oci_field_name($this->stmt_id, $c);
148
			$F->type	= oci_field_type($this->stmt_id, $c);
149
			$F->max_length	= oci_field_size($this->stmt_id, $c);
150
 
151
			$retval[] = $F;
152
		}
153
 
154
		return $retval;
155
	}
156
 
157
	// --------------------------------------------------------------------
158
 
159
	/**
160
	 * Free the result
161
	 *
162
	 * @return	void
163
	 */
164
	public function free_result()
165
	{
166
		if (is_resource($this->result_id))
167
		{
168
			oci_free_statement($this->result_id);
169
			$this->result_id = FALSE;
170
		}
171
 
172
		if (is_resource($this->stmt_id))
173
		{
174
			oci_free_statement($this->stmt_id);
175
		}
176
 
177
		if (is_resource($this->curs_id))
178
		{
179
			oci_cancel($this->curs_id);
180
			$this->curs_id = NULL;
181
		}
182
	}
183
 
184
	// --------------------------------------------------------------------
185
 
186
	/**
187
	 * Result - associative array
188
	 *
189
	 * Returns the result set as an array
190
	 *
191
	 * @return	array
192
	 */
193
	protected function _fetch_assoc()
194
	{
195
		$id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
196
		return oci_fetch_assoc($id);
197
	}
198
 
199
	// --------------------------------------------------------------------
200
 
201
	/**
202
	 * Result - object
203
	 *
204
	 * Returns the result set as an object
205
	 *
206
	 * @param	string	$class_name
207
	 * @return	object
208
	 */
209
	protected function _fetch_object($class_name = 'stdClass')
210
	{
211
		$row = ($this->curs_id)
212
			? oci_fetch_object($this->curs_id)
213
			: oci_fetch_object($this->stmt_id);
214
 
215
		if ($class_name === 'stdClass' OR ! $row)
216
		{
217
			return $row;
218
		}
219
 
220
		$class_name = new $class_name();
221
		foreach ($row as $key => $value)
222
		{
223
			$class_name->$key = $value;
224
		}
225
 
226
		return $class_name;
227
	}
228
 
229
}