From 00cb5de0ab834ba1d989590ea33c57e891b1dbe5 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Tue, 2 Dec 2008 21:01:37 +0000 Subject: MFH: - Fixed memory leaks - Added new tests (Coverage++) --- ext/pdo_sqlite/sqlite_driver.c | 7 +++-- .../tests/pdo_sqlite_createaggregate.phpt | 29 +++++++++++++++++ .../tests/pdo_sqlite_createfunction.phpt | 36 ++++++++++++++++++++++ ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt | 30 ++++++++++++++++++ ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt | 26 ++++++++++++++++ 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt create mode 100644 ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt create mode 100644 ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt create mode 100644 ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt (limited to 'ext/pdo_sqlite') diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c index b03a8bcbdd..9a7ff54cbb 100644 --- a/ext/pdo_sqlite/sqlite_driver.c +++ b/ext/pdo_sqlite/sqlite_driver.c @@ -368,8 +368,8 @@ static int do_callback(struct pdo_sqlite_fci *fc, zval *cb, } /* clean up the params */ - if (argc) { - for (i = is_agg; i < argc; i++) { + if (zargs) { + for (i = is_agg; i < fake_argc; i++) { zval_ptr_dtor(zargs[i]); efree(zargs[i]); } @@ -498,6 +498,7 @@ static PHP_METHOD(SQLite, sqliteCreateFunction) MAKE_STD_ZVAL(func->func); *(func->func) = *callback; zval_copy_ctor(func->func); + INIT_PZVAL(func->func); func->argc = argc; @@ -576,10 +577,12 @@ static PHP_METHOD(SQLite, sqliteCreateAggregate) MAKE_STD_ZVAL(func->step); *(func->step) = *step_callback; zval_copy_ctor(func->step); + INIT_PZVAL(func->step); MAKE_STD_ZVAL(func->fini); *(func->fini) = *fini_callback; zval_copy_ctor(func->fini); + INIT_PZVAL(func->fini); func->argc = argc; diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt new file mode 100644 index 0000000000..aa268a9330 --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt @@ -0,0 +1,29 @@ +--TEST-- +PDO_sqlite: Testing sqliteCreateAggregate() +--FILE-- +query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)'); + +$db->query('INSERT INTO foobar VALUES (NULL, "PHP")'); +$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")'); + +$db->sqliteCreateAggregate('testing', function(&$a, $b) { $a .= $b; return $a; }, function(&$v) { return $v; }); + + +foreach ($db->query('SELECT testing(name) FROM foobar') as $row) { + var_dump($row); +} + +$db->query('DROP TABLE foobar'); + +?> +--EXPECTF-- +array(2) { + ["testing(name)"]=> + %string|unicode%(2) "12" + [0]=> + %string|unicode%(2) "12" +} diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt new file mode 100644 index 0000000000..8a93002e67 --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt @@ -0,0 +1,36 @@ +--TEST-- +PDO_sqlite: Testing sqliteCreateFunction() +--FILE-- +query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)'); + +$db->query('INSERT INTO foobar VALUES (NULL, "PHP")'); +$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")'); + + +$db->sqliteCreateFunction('testing', function($v) { return strtolower($v); }); + + +foreach ($db->query('SELECT testing(name) FROM foobar') as $row) { + var_dump($row); +} + +$db->query('DROP TABLE foobar'); + +?> +--EXPECTF-- +array(2) { + ["testing(name)"]=> + %string|unicode%(3) "php" + [0]=> + %string|unicode%(3) "php" +} +array(2) { + ["testing(name)"]=> + %string|unicode%(4) "php6" + [0]=> + %string|unicode%(4) "php6" +} diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt new file mode 100644 index 0000000000..8fc309d94b --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt @@ -0,0 +1,30 @@ +--TEST-- +PDO_sqlite: Testing lastInsertId() +--FILE-- +query('CREATE TABLE IF NOT EXISTS foo (id INT AUTO INCREMENT, name TEXT)'); +$db->query('INSERT INTO foo VALUES (NULL, "PHP")'); +$db->query('INSERT INTO foo VALUES (NULL, "PHP6")'); +var_dump($db->query('SELECT * FROM foo')); +var_dump($db->errorInfo()); +var_dump($db->lastInsertId()); + +$db->query('DROP TABLE foo'); + +?> +--EXPECTF-- +object(PDOStatement)#2 (1) { + ["queryString"]=> + %string|unicode%(17) "SELECT * FROM foo" +} +array(3) { + [0]=> + %string|unicode%(5) "00000" + [1]=> + NULL + [2]=> + NULL +} +%string|unicode%(1) "2" diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt new file mode 100644 index 0000000000..75f4169870 --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt @@ -0,0 +1,26 @@ +--TEST-- +PDO_sqlite: Testing transaction +--FILE-- +beginTransaction(); + +$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)'); +$db->commit(); + +$db->beginTransaction(); +$db->query('INSERT INTO foobar VALUES (NULL, "PHP")'); +$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")'); +$db->rollback(); + +$r = $db->query('SELECT COUNT(*) FROM foobar'); +var_dump($r->rowCount()); + + +$db->query('DROP TABLE foobar'); + +?> +--EXPECTF-- +int(0) -- cgit v1.2.1