scottmac                Tue Jan 20 09:57:34 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/sqlite3/tests  bug47159.phpt 

  Modified files:              
    /php-src/ext/sqlite3        sqlite3.c 
  Log:
  MFH Fix bug #47159 - Any SQLite3 statement prepared should be added to the 
freelist
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/sqlite3.c?r1=1.1.2.27&r2=1.1.2.28&diff_format=u
Index: php-src/ext/sqlite3/sqlite3.c
diff -u php-src/ext/sqlite3/sqlite3.c:1.1.2.27 
php-src/ext/sqlite3/sqlite3.c:1.1.2.28
--- php-src/ext/sqlite3/sqlite3.c:1.1.2.27      Tue Jan 20 00:24:13 2009
+++ php-src/ext/sqlite3/sqlite3.c       Tue Jan 20 09:57:34 2009
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite3.c,v 1.1.2.27 2009/01/20 00:24:13 scottmac Exp $ */
+/* $Id: sqlite3.c,v 1.1.2.28 2009/01/20 09:57:34 scottmac Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -370,6 +370,8 @@
        zval *object = getThis();
        char *sql;
        int sql_len, errcode;
+       php_sqlite3_free_list *free_item;
+
        db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object 
TSRMLS_CC);
 
        SQLITE3_CHECK_INITIALIZED(db_obj->initialised, SQLite3)
@@ -388,14 +390,21 @@
        stmt_obj->db_obj_zval = getThis();
 
        Z_ADDREF_P(object);
-       
+
        errcode = sqlite3_prepare_v2(db_obj->db, sql, sql_len, 
&(stmt_obj->stmt), NULL);
        if (errcode != SQLITE_OK) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to prepare 
statement: %d, %s", errcode, sqlite3_errmsg(db_obj->db));
                zval_dtor(return_value);
                RETURN_FALSE;
        }
+
        stmt_obj->initialised = 1;
+
+       free_item = emalloc(sizeof(php_sqlite3_free_list));
+       free_item->stmt_obj = stmt_obj;
+       free_item->stmt_obj_zval = return_value;
+
+       zend_llist_add_element(&(db_obj->free_list), &free_item);
 }
 /* }}} */
 
@@ -1067,7 +1076,6 @@
        zval *object = getThis();
        int return_code = 0;
        struct php_sqlite3_bound_param *param;
-       php_sqlite3_free_list *free_item;
 
        stmt_obj = (php_sqlite3_stmt *)zend_object_store_get_object(object 
TSRMLS_CC);
 
@@ -1142,11 +1150,6 @@
        }
 
        return_code = sqlite3_step(stmt_obj->stmt);
-       free_item = emalloc(sizeof(php_sqlite3_free_list));
-       free_item->stmt_obj = stmt_obj;
-       free_item->stmt_obj_zval = getThis();
-
-       zend_llist_add_element(&(stmt_obj->db_obj->free_list), &free_item);
 
        switch (return_code) {
                case SQLITE_ROW: /* Valid Row */
@@ -1189,6 +1192,7 @@
        char *sql;
        int sql_len, errcode;
        zend_error_handling error_handling;
+       php_sqlite3_free_list *free_item;
 
        stmt_obj = (php_sqlite3_stmt *)zend_object_store_get_object(object 
TSRMLS_CC);
        zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
@@ -1220,6 +1224,12 @@
                RETURN_FALSE;
        }
        stmt_obj->initialised = 1;
+
+       free_item = emalloc(sizeof(php_sqlite3_free_list));
+       free_item->stmt_obj = stmt_obj;
+       free_item->stmt_obj_zval = getThis();
+
+       zend_llist_add_element(&(db_obj->free_list), &free_item);
 }
 /* }}} */
 

http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/tests/bug47159.phpt?view=markup&rev=1.1
Index: php-src/ext/sqlite3/tests/bug47159.phpt
+++ php-src/ext/sqlite3/tests/bug47159.phpt
--TEST--
Bug #45798 (sqlite3 doesn't track unexecuted statements)
--SKIPIF--
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
--FILE--
<?php

require_once(dirname(__FILE__) . '/new_db.inc');

class MyStmt extends SQLite3Stmt
{
}

$stmt = $db->prepare("SELECT 1");

var_dump($stmt->close());

var_dump($db->close());

print "done";

?>
--EXPECT--
bool(true)
bool(true)
done



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

Reply via email to