iliaa           Tue Sep 20 15:52:24 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /php-src/ext/pdo    php_pdo.h pdo_dbh.c 
    /php-src/ext/pdo_sqlite     sqlite_driver.c 
  Log:
  MFH: Allow overloading of PDO constructor.
  
  
http://cvs.php.net/diff.php/php-src/ext/pdo/php_pdo.h?r1=1.7.2.1&r2=1.7.2.2&ty=u
Index: php-src/ext/pdo/php_pdo.h
diff -u php-src/ext/pdo/php_pdo.h:1.7.2.1 php-src/ext/pdo/php_pdo.h:1.7.2.2
--- php-src/ext/pdo/php_pdo.h:1.7.2.1   Mon Sep 19 20:35:20 2005
+++ php-src/ext/pdo/php_pdo.h   Tue Sep 20 15:52:24 2005
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo.h,v 1.7.2.1 2005/09/20 00:35:20 iliaa Exp $ */
+/* $Id: php_pdo.h,v 1.7.2.2 2005/09/20 19:52:24 iliaa Exp $ */
 
 #ifndef PHP_PDO_H
 #define PHP_PDO_H
@@ -70,6 +70,13 @@
 #define REGISTER_PDO_CLASS_CONST_STRING(const_name, value) \
        zend_declare_class_constant_stringl(pdo_dbh_ce, const_name, 
sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC);
 
+#define PDO_CONSTRUCT_CHECK    \
+       if (!dbh->driver) {     \
+               pdo_raise_impl_error(dbh, NULL, "00000", "PDO constructor was 
not called" TSRMLS_CC);   \
+               return; \
+       }       \
+
+
 #endif /* PHP_PDO_H */
 
 
http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_dbh.c?r1=1.82.2.3&r2=1.82.2.4&ty=u
Index: php-src/ext/pdo/pdo_dbh.c
diff -u php-src/ext/pdo/pdo_dbh.c:1.82.2.3 php-src/ext/pdo/pdo_dbh.c:1.82.2.4
--- php-src/ext/pdo/pdo_dbh.c:1.82.2.3  Mon Sep 19 20:35:20 2005
+++ php-src/ext/pdo/pdo_dbh.c   Tue Sep 20 15:52:24 2005
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dbh.c,v 1.82.2.3 2005/09/20 00:35:20 iliaa Exp $ */
+/* $Id: pdo_dbh.c,v 1.82.2.4 2005/09/20 19:52:24 iliaa Exp $ */
 
 /* The PDO Database Handle Class */
 
@@ -205,7 +205,7 @@
 
 /* {{{ proto object PDO::__construct(string dsn, string username, string 
passwd [, array options])
    */
-static PHP_FUNCTION(dbh_constructor)
+static PHP_METHOD(PDO, dbh_constructor)
 {
        zval *object = getThis();
        pdo_dbh_t *dbh = NULL;
@@ -498,6 +498,7 @@
        }
        
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
 
        if (ZEND_NUM_ARGS() > 1 && SUCCESS == 
zend_hash_index_find(Z_ARRVAL_P(options), PDO_ATTR_STATEMENT_CLASS, 
(void**)&opt)) {
                if (zend_hash_index_find(Z_ARRVAL_PP(opt), 0, (void**)&item) == 
FAILURE
@@ -582,6 +583,8 @@
 {
        pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
 
+       PDO_CONSTRUCT_CHECK;
+
        if (dbh->in_txn) {
                zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, 
"There is already an active transaction");
                RETURN_FALSE;
@@ -610,6 +613,8 @@
 {
        pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
 
+       PDO_CONSTRUCT_CHECK;
+
        if (!dbh->in_txn) {
                zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, 
"There is no active transaction");
                RETURN_FALSE;
@@ -631,6 +636,8 @@
 {
        pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
 
+       PDO_CONSTRUCT_CHECK;
+
        if (!dbh->in_txn) {
                zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, 
"There is no active transaction");
                RETURN_FALSE;
@@ -658,6 +665,8 @@
                RETURN_FALSE;
        }
 
+       PDO_CONSTRUCT_CHECK;
+
        switch (attr) {
                case PDO_ATTR_ERRMODE:
                        convert_to_long(value);
@@ -736,6 +745,7 @@
        }
 
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
 
        /* handle generic PDO-level atributes */
        switch (attr) {
@@ -792,6 +802,7 @@
                RETURN_FALSE;
        }
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
        ret = dbh->methods->doer(dbh, statement, statement_len TSRMLS_CC);
        if(ret == -1) {
                PDO_HANDLE_DBH_ERR();
@@ -816,6 +827,7 @@
        }
 
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
        if (!dbh->methods->last_id) {
                pdo_raise_impl_error(dbh, NULL, "IM001", "driver does not 
support lastInsertId()" TSRMLS_CC);
                RETURN_FALSE;
@@ -840,6 +852,7 @@
        if (ZEND_NUM_ARGS()) {
                RETURN_FALSE;
        }
+       PDO_CONSTRUCT_CHECK;
 
        RETURN_STRING(dbh->error_code, 1);
 }
@@ -854,6 +867,7 @@
        if (ZEND_NUM_ARGS()) {
                RETURN_FALSE;
        }
+       PDO_CONSTRUCT_CHECK;
 
        array_init(return_value);
        add_next_index_string(return_value, dbh->error_code, 1);
@@ -879,6 +893,7 @@
        }
        
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
 
        if (!pdo_stmt_instantiate(dbh, return_value, pdo_dbstmt_ce, NULL 
TSRMLS_CC)) {
                pdo_raise_impl_error(dbh, NULL, "HY000", "failed to instantiate 
user supplied statement class" TSRMLS_CC);
@@ -948,6 +963,7 @@
        }
        
        PDO_DBH_CLEAR_ERR();
+       PDO_CONSTRUCT_CHECK;
        if (!dbh->methods->quoter) {
                pdo_raise_impl_error(dbh, NULL, "IM001", "driver does not 
support quoting" TSRMLS_CC);
                RETURN_FALSE;
@@ -995,7 +1011,7 @@
 
 
 function_entry pdo_dbh_functions[] = {
-       PHP_ME_MAPPING(__construct, dbh_constructor,    NULL)
+       ZEND_MALIAS(PDO, __construct, dbh_constructor,  NULL,                   
ZEND_ACC_PUBLIC)
        PHP_ME(PDO, prepare,            NULL,                                   
ZEND_ACC_PUBLIC)
        PHP_ME(PDO, beginTransaction,NULL,                                      
ZEND_ACC_PUBLIC)
        PHP_ME(PDO, commit,                     NULL,                           
        ZEND_ACC_PUBLIC)
@@ -1132,7 +1148,6 @@
        INIT_CLASS_ENTRY(ce, "PDO", pdo_dbh_functions);
        pdo_dbh_ce = zend_register_internal_class(&ce TSRMLS_CC);
        pdo_dbh_ce->create_object = pdo_dbh_new;
-       pdo_dbh_ce->constructor->common.fn_flags |= ZEND_ACC_FINAL;
 
        memcpy(&pdo_dbh_object_handlers, &std_object_handlers, 
sizeof(zend_object_handlers));
        pdo_dbh_object_handlers.get_method = dbh_method_get;
http://cvs.php.net/diff.php/php-src/ext/pdo_sqlite/sqlite_driver.c?r1=1.20&r2=1.20.2.1&ty=u
Index: php-src/ext/pdo_sqlite/sqlite_driver.c
diff -u php-src/ext/pdo_sqlite/sqlite_driver.c:1.20 
php-src/ext/pdo_sqlite/sqlite_driver.c:1.20.2.1
--- php-src/ext/pdo_sqlite/sqlite_driver.c:1.20 Tue Jul 26 22:35:37 2005
+++ php-src/ext/pdo_sqlite/sqlite_driver.c      Tue Sep 20 15:52:24 2005
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite_driver.c,v 1.20 2005/07/27 02:35:37 iliaa Exp $ */
+/* $Id: sqlite_driver.c,v 1.20.2.1 2005/09/20 19:52:24 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -468,6 +468,7 @@
        }
        
        dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
+       PDO_CONSTRUCT_CHECK;
 
        if (!zend_is_callable(callback, 0, &cbname)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "function '%s' is 
not callable", cbname);
@@ -539,6 +540,7 @@
        }
        
        dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
+       PDO_CONSTRUCT_CHECK;
 
        if (!zend_is_callable(step_callback, 0, &cbname)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "function '%s' is 
not callable", cbname);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to