- Fixed memory leaks

- Added new tests (Coverage++)
This commit is contained in:
Felipe Pena 2008-12-02 21:00:23 +00:00
parent 61f0a0ddd4
commit fbf7cc72aa
5 changed files with 126 additions and 2 deletions

View file

@ -392,8 +392,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]);
}
@ -519,6 +519,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;
@ -592,10 +593,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;

View file

@ -0,0 +1,29 @@
--TEST--
PDO_sqlite: Testing sqliteCreateAggregate()
--FILE--
<?php
$db = new pdo('sqlite:memory');
$db->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"
}

View file

@ -0,0 +1,36 @@
--TEST--
PDO_sqlite: Testing sqliteCreateFunction()
--FILE--
<?php
$db = new pdo('sqlite:memory');
$db->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"
}

View file

@ -0,0 +1,30 @@
--TEST--
PDO_sqlite: Testing lastInsertId()
--FILE--
<?php
$db = new pdo('sqlite:memory');
$db->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"

View file

@ -0,0 +1,26 @@
--TEST--
PDO_sqlite: Testing transaction
--FILE--
<?php
$db = new pdo('sqlite:memory');
$db->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)