root/websites/planet.php.gr.jp/trunk/lib/Ethna/class/DB/Ethna_DB_PEAR.php @ 12921

Revision 12921, 6.4 kB (checked in by ha1t, 7 years ago)

first import

Line 
1<?php
2// vim: foldmethod=marker
3/**
4 *    Ethna_DB_PEAR.php
5 *
6 *    @author        Masaki Fujimoto <fujimoto@php.net>
7 *    @license    http://www.opensource.org/licenses/bsd-license.php The BSD License
8 *    @package    Ethna
9 *    @version    $Id: Ethna_DB_PEAR.php 49 2006-06-20 09:44:20Z ha1t $
10 */
11include_once('DB.php');
12
13// {{{ Ethna_DB_PEAR
14/**
15 *    Ethna_DB���饹�μ��AR�)
16 *
17 *    @author        Masaki Fujimoto <fujimoto@php.net>
18 *    @access        public
19 *    @package    Ethna
20 */
21class Ethna_DB_PEAR extends Ethna_DB
22{
23    /**#@+
24     *    @access    private
25     */
26
27    /**    @var    object    DB                PEAR DB���֥�������*/
28    var $db;
29
30    /**    @var    array    �ȥ������������å� */
31    var    $transaction = array();
32
33
34    /**    @var    object    Ethna_Logger    ����֥�������*/
35    var $logger;
36
37    /**    @var    object    Ethna_AppSQL    SQL���֥�������*/
38    var $sql;
39
40    /**    @var    string    DB������mysql, pgsql...) */
41    var $type;
42
43    /**    @var    string    DSN */
44    var $dsn;
45
46    /**    @var    bool    ����ե饰 */
47    var $persistent;
48
49    /**#@-*/
50
51
52    // {{{ Ethna_DB���饹�μ��**
53     *    Ethna_DB_PEAR���饹�Υ��󥹥ȥ饯��
54     *
55     *    @access    public
56     *    @param    object    Ethna_Controller    &$controller    �����饪�֥�������     *    @param    string    $dsn                                DSN
57     *    @param    bool    $persistent                            �����
58     */
59    function Ethna_DB_PEAR(&$controller, $dsn, $persistent)
60    {
61        parent::Ethna_DB($controller, $dsn, $persistent);
62
63        $this->db = null;
64        $this->logger =& $controller->getLogger();
65        $this->sql =& $controller->getSQL();
66
67        $dsninfo = DB::parseDSN($dsn);
68        $this->type = $dsninfo['phptype'];
69    }
70
71    /**
72     *    DB�������� *
73     *    @access    public
74     *    @return    mixed    0:��ェλ Ethna_Error:���顼
75     */
76    function connect()
77    {
78        $this->db =& DB::connect($this->dsn, $this->persistent);
79        if (DB::isError($this->db)) {
80            $error = Ethna::raiseError('DB�³���顼: %s', E_DB_CONNECT, $this->db->getUserInfo());
81            $error->addUserInfo($this->db);
82            $this->db = null;
83            return $error;
84        }
85
86        return 0;
87    }
88
89    /**
90     *    DB�³��Ǥ��� *
91     *    @access    public
92     */
93    function disconnect()
94    {
95        if (is_null($this->db)) {
96            return;
97        }
98        $this->db->disconnect();
99    }
100
101    /**
102     *    DB�³����
103     *
104     *    @access    public
105     *    @return    bool    true:���alse:���顼
106     */
107    function isValid()
108    {
109        if (is_null($this->db)) {
110            return false;
111        } else {
112            return true;
113        }
114    }
115
116    /**
117     *    DB�ȥ����������򳫻Ϥ��� *
118     *    @access    public
119     *    @return    mixed    0:��ェλ Ethna_Error:���顼
120     */
121    function begin()
122    {
123        if (count($this->transaction) > 0) {
124            $this->transaction[] = true;
125            return 0;
126        }
127
128        $r = $this->query('BEGIN;');
129        if (Ethna::isError($r)) {
130            return $r;
131        }
132        $this->transaction[] = true;
133
134        return 0;
135    }
136
137    /**
138     *    DB�ȥ�����������Ǥ��� *
139     *    @access    public
140     *    @return    mixed    0:��ェλ Ethna_Error:���顼
141     */
142    function rollback()
143    {
144        if (count($this->transaction) == 0) {
145            return 0;
146        }
147
148        // ����å����ϥ����å���ؤ����ȥ����������򥯥ꥢ����    $r = $this->query('ROLLBACK;');
149        if (Ethna::isError($r)) {
150            return $r;
151        }
152        $this->transaction = array();
153
154        return 0;
155    }
156
157    /**
158     *    DB�ȥ���������������� *
159     *    @access    public
160     *    @return    mixed    0:��ェλ Ethna_Error:���顼
161     */
162    function commit()
163    {
164        if (count($this->transaction) == 0) {
165            return 0;
166        } else if (count($this->transaction) > 1) {
167            array_pop($this->transaction);
168            return 0;
169        }
170
171        $r = $this->query('COMMIT;');
172        if (Ethna::isError($r)) {
173            return $r;
174        }
175        array_pop($this->transaction);
176
177        return 0;
178    }
179
180    /**
181     *  �ơ��֥���������    *
182     *  @access public
183     *  @param  string  $table  �ơ��֥�
184     *  @return mixed   array: PEAR::DB�˽स���᥿�ǡ��� Ethna_Error::���顼
185     */
186    function getMetaData($table)
187    {
188        return $this->db->tableInfo($table);
189    }
190    // }}}
191
192    // {{{ Ethna_AppObjectϢ�ȤΤ������**
193     *    DB�����פ��
194     *
195     *    @access    public
196     *    @return    string    DB������     */
197    function getType()
198    {
199        return $this->type;
200    }
201
202    /**
203     *    ������ȯ�Ԥ��� *
204     *    @access    public
205     *    @param    string    $query    SQLʸ
206     *    @return    mixed    DB_Result:�����֥�������Ethna_Error:���顼
207     */
208    function &query($query)
209    {
210        return $this->_query($query);
211    }
212
213    /**
214     *    ľ��INSERT�ˤ�ID������ *
215     *    �³���B��mysql�ʤ�sql_insert_id()��ͤ��
216     *
217     *    @access    public
218     *    @return    mixed    int:ľ��INSERT�ˤ������줿ID null:̤���ݡ���     */
219    function getInsertId()
220    {
221        if ($this->isValid() == false) {
222            return null;
223        } else if ($this->type == 'mysql') {
224            return mysql_insert_id($this->db->connection);
225        }
226
227        return null;
228    }
229
230    /**
231     *    ľ���������������Կ������ *
232     *    @access    public
233     *    @return    int        �����Կ�*/
234    function affectedRows()
235    {
236        return $this->db->affectedRows();
237    }
238    // }}}
239
240    // {{{ Ethna_DB_PEAR����μ��**
241     *    SQLʸ��ꥯ����ȯ�Ԥ��� *
242     *    @access    public
243     *    @param    string    $sqlid        SQL-ID(+��     *    @return    mixed    DB_Result:�����֥�������Ethna_Error:���顼
244     */
245    function &sqlquery($sqlid)
246    {
247        $args = func_get_args();
248        array_shift($args);
249        $query = $this->sql->get($sqlid, $args);
250
251        return $this->_query($query);
252    }
253
254    /**
255     *    SQLʸ������ *   
256     *    @access    public
257     *    @param    string    $sqlid        SQL-ID
258     *    @return    string    SQLʸ
259     */
260    function sql($sqlid)
261    {
262        $args = func_get_args();
263        array_shift($args);
264        $query = $this->sql->get($sqlid, $args);
265
266        return $query;
267    }
268
269    /**
270     *    �ơ��֥��������� *
271     *    @access    public
272     *    @param    mixed    ������ݥơ��֥�
273     *    @return    mixed    DB_Result:�����֥�������Ethna_Error:���顼
274     */
275    function lock($tables)
276    {
277        $this->message = null;
278
279        $sql = "";
280        foreach (to_array($tables) as $table) {
281            if ($sql != "") {
282                $sql .= ", ";
283            }
284            $sql .= "$table WRITE";
285        }
286
287        return $this->query("LOCK TABLES $sql");
288    }
289
290    /**
291     *    �ơ��֥��������     *
292     *    @access    public
293     *    @return    mixed    DB_Result:�����֥�������Ethna_Error:���顼
294     */
295    function unlock()
296    {
297        $this->message = null;
298        return $this->query("UNLOCK TABLES");
299    }
300
301    /**
302     *    ������ȯ�Ԥ��� *
303     *    @access    private
304     *    @param    string    $query    SQLʸ
305     *    @return    mixed    DB_Result:�����֥�������Ethna_Error:���顼
306     */
307    function &_query($query)
308    {
309        $this->logger->log(LOG_DEBUG, "$query");
310        $r =& $this->db->query($query);
311        if (DB::isError($r)) {
312            if ($r->getCode() == DB_ERROR_ALREADY_EXISTS) {
313                $error = Ethna::raiseNotice('�����������顼 SQL[%s]', E_DB_DUPENT, $query, $this->db->errorNative(), $r->getUserInfo());
314            } else {
315                $error = Ethna::raiseError('�����ꥨ�顼 SQL[%s] CODE[%d] MESSAGE[%s]', E_DB_QUERY, $query, $this->db->errorNative(), $r->getUserInfo());
316            }
317            return $error;
318        }
319        return $r;
320    }
321    // }}}
322}
323// }}}
324?>
Note: See TracBrowser for help on using the browser.