Bug 394789 - Add a finalize() method to mozStorageStatement. r=neil, r=sspitzer, a=bzbarsky

git-svn-id: svn://10.0.0.236/trunk@236283 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
sdwilsh%shawnwilsher.com 2007-09-19 03:26:52 +00:00
parent 3fca4c8294
commit 4f837b3ba3
14 changed files with 141 additions and 9 deletions

View File

@ -45,7 +45,7 @@ interface nsISimpleEnumerator;
[ptr] native sqlite3stmtptr(struct sqlite3_stmt); [ptr] native sqlite3stmtptr(struct sqlite3_stmt);
[scriptable, uuid(80e5210f-c0da-4f37-b5f9-d9925a75612a)] [scriptable, uuid(1a95a6ec-e4b0-4d0b-947b-d2f40b04d057)]
interface mozIStorageStatement : mozIStorageValueArray { interface mozIStorageStatement : mozIStorageValueArray {
/** /**
* Initialize this query with the given SQL statement. * Initialize this query with the given SQL statement.
@ -54,6 +54,13 @@ interface mozIStorageStatement : mozIStorageValueArray {
void initialize(in mozIStorageConnection aDBConnection, void initialize(in mozIStorageConnection aDBConnection,
in AUTF8String aSQLStatement); in AUTF8String aSQLStatement);
/**
* Finalizes a statement so you can successfully close a database connection.
* This method does not need to be used from native callers since you can just
* set the statement to null, but is extremely useful to JS callers.
*/
void finalize();
/** /**
* Create a clone of this statement, by initializing a new statement * Create a clone of this statement, by initializing a new statement
* with the same connection and same SQL statement as this one. It * with the same connection and same SQL statement as this one. It

View File

@ -192,8 +192,7 @@ mozStorageStatement::Initialize(mozIStorageConnection *aDBConnection, const nsAC
mozStorageStatement::~mozStorageStatement() mozStorageStatement::~mozStorageStatement()
{ {
if (mDBStatement) (void)Finalize();
sqlite3_finalize (mDBStatement);
} }
/* mozIStorageStatement clone (); */ /* mozIStorageStatement clone (); */
@ -211,6 +210,18 @@ mozStorageStatement::Clone(mozIStorageStatement **_retval)
return NS_OK; return NS_OK;
} }
/* void finalize(); */
NS_IMETHODIMP
mozStorageStatement::Finalize()
{
if (mDBStatement) {
int srv = sqlite3_finalize(mDBStatement);
mDBStatement = NULL;
return ConvertResultCode(srv);
}
return NS_OK;
}
/* readonly attribute unsigned long parameterCount; */ /* readonly attribute unsigned long parameterCount; */
NS_IMETHODIMP NS_IMETHODIMP
mozStorageStatement::GetParameterCount(PRUint32 *aParameterCount) mozStorageStatement::GetParameterCount(PRUint32 *aParameterCount)

View File

@ -51,10 +51,19 @@ function getTestDB()
function cleanup() function cleanup()
{ {
// close the connection
print("*** Storage Tests: Trying to close!");
getOpenedDatabase().close();
// we need to null out the database variable to get a new connection the next
// time getOpenedDatabase is called
gDBConn = null;
// removing test db // removing test db
print("*** Storage Tests: Trying to remove file!");
var dbFile = getTestDB(); var dbFile = getTestDB();
if (dbFile.exists()) if (dbFile.exists())
try { dbFile.remove(true); } catch(e) { /* stupid windows box */ } try { dbFile.remove(false); } catch(e) { /* stupid windows box */ }
} }
function getService() function getService()
@ -65,7 +74,10 @@ function getService()
var gDBConn = null; var gDBConn = null;
function getOpenedDatabase() function getOpenedDatabase()
{ {
return gDBConn ? gDBConn : gDBConn = getService().openDatabase(getTestDB()); if (!gDBConn) {
gDBConn = getService().openDatabase(getTestDB());
}
return gDBConn;
} }
function createStatement(aSQL) function createStatement(aSQL)

View File

@ -32,6 +32,7 @@ function run_test() {
wrapper.initialize(statement); wrapper.initialize(statement);
} finally { } finally {
statement.reset(); statement.reset();
statement.finalize();
} }
} }
} }

View File

@ -48,6 +48,7 @@ function setup()
var stmt = createStatement("INSERT INTO t1 (x) VALUES ('a')"); var stmt = createStatement("INSERT INTO t1 (x) VALUES ('a')");
stmt.execute(); stmt.execute();
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_vacuum() function test_vacuum()
@ -55,6 +56,7 @@ function test_vacuum()
var stmt = createStatement("VACUUM;"); var stmt = createStatement("VACUUM;");
stmt.executeStep(); stmt.executeStep();
stmt.reset(); stmt.reset();
stmt.finalize();
} }
var tests = [test_vacuum]; var tests = [test_vacuum];

View File

@ -46,40 +46,51 @@ function setup()
var stmt = createStatement("INSERT INTO t1 (x) VALUES ('a')"); var stmt = createStatement("INSERT INTO t1 (x) VALUES ('a')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('ab')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('ab')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('abc')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('abc')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('abcd')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('abcd')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('acd')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('acd')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('abd')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('abd')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('bc')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('bc')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('bcd')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('bcd')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('xyz')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('xyz')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('ABC')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('ABC')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('CDE')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('CDE')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES ('ABC abc xyz')"); stmt = createStatement("INSERT INTO t1 (x) VALUES ('ABC abc xyz')");
stmt.execute(); stmt.execute();
stmt.reset(); stmt.finalize();
} }
function test_count() function test_count()
@ -88,6 +99,7 @@ function test_count()
do_check_true(stmt.executeStep()); do_check_true(stmt.executeStep());
do_check_eq(stmt.getInt32(0), 12); do_check_eq(stmt.getInt32(0), 12);
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_1() function test_like_1()
@ -100,6 +112,7 @@ function test_like_1()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_2() function test_like_2()
@ -112,6 +125,7 @@ function test_like_2()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_3() function test_like_3()
@ -124,6 +138,7 @@ function test_like_3()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_4() function test_like_4()
@ -140,6 +155,7 @@ function test_like_4()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_5() function test_like_5()
@ -152,6 +168,7 @@ function test_like_5()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_6() function test_like_6()
@ -164,6 +181,7 @@ function test_like_6()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_7() function test_like_7()
@ -180,6 +198,7 @@ function test_like_7()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_8() function test_like_8()
@ -192,6 +211,7 @@ function test_like_8()
do_check_true(solutions.indexOf(stmt.getString(0)) != -1); do_check_true(solutions.indexOf(stmt.getString(0)) != -1);
do_check_false(stmt.executeStep()); do_check_false(stmt.executeStep());
stmt.reset(); stmt.reset();
stmt.finalize();
} }
var tests = [test_count, test_like_1, test_like_2, test_like_3, test_like_4, var tests = [test_count, test_like_1, test_like_2, test_like_3, test_like_4,

View File

@ -44,11 +44,13 @@ function setup()
var stmt = createStatement("INSERT INTO t1 (x) VALUES ('foo/bar_baz%20cheese')"); var stmt = createStatement("INSERT INTO t1 (x) VALUES ('foo/bar_baz%20cheese')");
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("INSERT INTO t1 (x) VALUES (?1)"); stmt = createStatement("INSERT INTO t1 (x) VALUES (?1)");
// insert LATIN_ae, but search on LATIN_AE // insert LATIN_ae, but search on LATIN_AE
stmt.bindStringParameter(0, "foo%20" + LATIN1_ae + "/_bar"); stmt.bindStringParameter(0, "foo%20" + LATIN1_ae + "/_bar");
stmt.execute(); stmt.execute();
stmt.finalize();
} }
function test_escape_for_like_ascii() function test_escape_for_like_ascii()
@ -61,6 +63,7 @@ function test_escape_for_like_ascii()
stmt.bindStringParameter(0, "%" + paramForLike + "%"); stmt.bindStringParameter(0, "%" + paramForLike + "%");
stmt.executeStep(); stmt.executeStep();
do_check_eq("foo/bar_baz%20cheese", stmt.getString(0)); do_check_eq("foo/bar_baz%20cheese", stmt.getString(0));
stmt.finalize();
} }
function test_escape_for_like_non_ascii() function test_escape_for_like_non_ascii()
@ -73,6 +76,7 @@ function test_escape_for_like_non_ascii()
stmt.bindStringParameter(0, "%" + paramForLike + "%"); stmt.bindStringParameter(0, "%" + paramForLike + "%");
stmt.executeStep(); stmt.executeStep();
do_check_eq("foo%20" + LATIN1_ae + "/_bar", stmt.getString(0)); do_check_eq("foo%20" + LATIN1_ae + "/_bar", stmt.getString(0));
stmt.finalize();
} }
var tests = [test_escape_for_like_ascii, test_escape_for_like_non_ascii]; var tests = [test_escape_for_like_ascii, test_escape_for_like_non_ascii];

View File

@ -48,6 +48,7 @@ function setup()
stmt.execute(); stmt.execute();
} }
stmt.reset(); stmt.reset();
stmt.finalize();
} }
var testSquareAndSumFunction = { var testSquareAndSumFunction = {
@ -113,6 +114,7 @@ function test_aggregate_call()
while(stmt.executeStep()); while(stmt.executeStep());
do_check_eq(testNums.length, testSquareAndSumFunction.calls); do_check_eq(testNums.length, testSquareAndSumFunction.calls);
testSquareAndSumFunction.reset(); testSquareAndSumFunction.reset();
stmt.finalize();
} }
function test_aggregate_result() function test_aggregate_result()
@ -125,6 +127,7 @@ function test_aggregate_result()
stmt.executeStep(); stmt.executeStep();
do_check_eq(sas, stmt.getInt32(0)); do_check_eq(sas, stmt.getInt32(0));
testSquareAndSumFunction.reset(); testSquareAndSumFunction.reset();
stmt.finalize();
} }
var tests = [test_aggregate_registration, test_aggregate_no_double_registration, var tests = [test_aggregate_registration, test_aggregate_no_double_registration,

View File

@ -48,6 +48,7 @@ function setup()
stmt.execute(); stmt.execute();
} }
stmt.reset(); stmt.reset();
stmt.finalize();
} }
var testSquareFunction = { var testSquareFunction = {
@ -96,6 +97,7 @@ function test_function_call()
while(stmt.executeStep()); while(stmt.executeStep());
do_check_eq(testNums.length, testSquareFunction.calls); do_check_eq(testNums.length, testSquareFunction.calls);
testSquareFunction.calls = 0; testSquareFunction.calls = 0;
stmt.finalize();
} }
function test_function_result() function test_function_result()
@ -104,6 +106,7 @@ function test_function_result()
stmt.executeStep(); stmt.executeStep();
do_check_eq(42*42, stmt.getInt32(0)); do_check_eq(42*42, stmt.getInt32(0));
testSquareFunction.calls = 0; testSquareFunction.calls = 0;
stmt.finalize();
} }
var tests = [test_function_registration, test_function_no_double_registration, var tests = [test_function_registration, test_function_no_double_registration,

View File

@ -50,6 +50,7 @@ function setup()
} }
stmt.reset(); stmt.reset();
msc.commitTransaction(); msc.commitTransaction();
stmt.finalize();
} }
var testProgressHandler = { var testProgressHandler = {
@ -92,6 +93,7 @@ function test_handler_call()
"SELECT SUM(t1.num * t2.num) FROM handler_tests AS t1, handler_tests AS t2"); "SELECT SUM(t1.num * t2.num) FROM handler_tests AS t1, handler_tests AS t2");
while(stmt.executeStep()); while(stmt.executeStep());
do_check_true(testProgressHandler.calls > 0); do_check_true(testProgressHandler.calls > 0);
stmt.finalize();
} }
function test_handler_abort() function test_handler_abort()
@ -102,13 +104,22 @@ function test_handler_abort()
// Some long-executing request // Some long-executing request
var stmt = createStatement( var stmt = createStatement(
"SELECT SUM(t1.num * t2.num) FROM handler_tests AS t1, handler_tests AS t2"); "SELECT SUM(t1.num * t2.num) FROM handler_tests AS t1, handler_tests AS t2");
const SQLITE_INTERRUPT = 9;
try { try {
while(stmt.executeStep()); while(stmt.executeStep());
do_throw("We shouldn't get here!"); do_throw("We shouldn't get here!");
} catch (e) { } catch (e) {
do_check_eq(Cr.NS_ERROR_ABORT, e.result); do_check_eq(Cr.NS_ERROR_ABORT, e.result);
// Magic value: SQLITE_INTERRUPT do_check_eq(SQLITE_INTERRUPT, msc.lastError);
do_check_eq(msc.lastError, 9); }
try {
stmt.finalize();
do_throw("We shouldn't get here!");
} catch (e) {
// finalize should return the error code since we encountered an error
do_check_eq(Cr.NS_ERROR_ABORT, e.result);
do_check_eq(SQLITE_INTERRUPT, msc.lastError);
} }
} }

View File

@ -46,18 +46,24 @@ function test_parameterCount_none()
{ {
var stmt = createStatement("SELECT * FROM test"); var stmt = createStatement("SELECT * FROM test");
do_check_eq(0, stmt.parameterCount); do_check_eq(0, stmt.parameterCount);
stmt.reset();
stmt.finalize();
} }
function test_parameterCount_one() function test_parameterCount_one()
{ {
var stmt = createStatement("SELECT * FROM test WHERE id = ?1"); var stmt = createStatement("SELECT * FROM test WHERE id = ?1");
do_check_eq(1, stmt.parameterCount); do_check_eq(1, stmt.parameterCount);
stmt.reset();
stmt.finalize();
} }
function test_getParameterName() function test_getParameterName()
{ {
var stmt = createStatement("SELECT * FROM test WHERE id = :id"); var stmt = createStatement("SELECT * FROM test WHERE id = :id");
do_check_eq(":id", stmt.getParameterName(0)); do_check_eq(":id", stmt.getParameterName(0));
stmt.reset();
stmt.finalize();
} }
function test_getParameterIndex_different() function test_getParameterIndex_different()
@ -65,18 +71,24 @@ function test_getParameterIndex_different()
var stmt = createStatement("SELECT * FROM test WHERE id = :id OR name = :name"); var stmt = createStatement("SELECT * FROM test WHERE id = :id OR name = :name");
do_check_eq(0, stmt.getParameterIndex(":id")); do_check_eq(0, stmt.getParameterIndex(":id"));
do_check_eq(1, stmt.getParameterIndex(":name")); do_check_eq(1, stmt.getParameterIndex(":name"));
stmt.reset();
stmt.finalize();
} }
function test_getParameterIndex_same() function test_getParameterIndex_same()
{ {
var stmt = createStatement("SELECT * FROM test WHERE id = @test OR name = @test"); var stmt = createStatement("SELECT * FROM test WHERE id = @test OR name = @test");
do_check_eq(0, stmt.getParameterIndex("@test")); do_check_eq(0, stmt.getParameterIndex("@test"));
stmt.reset();
stmt.finalize();
} }
function test_columnCount() function test_columnCount()
{ {
var stmt = createStatement("SELECT * FROM test WHERE id = ?1 OR name = ?2"); var stmt = createStatement("SELECT * FROM test WHERE id = ?1 OR name = ?2");
do_check_eq(2, stmt.columnCount); do_check_eq(2, stmt.columnCount);
stmt.reset();
stmt.finalize();
} }
function test_getColumnName() function test_getColumnName()
@ -84,6 +96,8 @@ function test_getColumnName()
var stmt = createStatement("SELECT name, id FROM test"); var stmt = createStatement("SELECT name, id FROM test");
do_check_eq("id", stmt.getColumnName(1)); do_check_eq("id", stmt.getColumnName(1));
do_check_eq("name", stmt.getColumnName(0)); do_check_eq("name", stmt.getColumnName(0));
stmt.reset();
stmt.finalize();
} }
function test_getColumnIndex_same_case() function test_getColumnIndex_same_case()
@ -91,6 +105,8 @@ function test_getColumnIndex_same_case()
var stmt = createStatement("SELECT name, id FROM test"); var stmt = createStatement("SELECT name, id FROM test");
do_check_eq(0, stmt.getColumnIndex("name")); do_check_eq(0, stmt.getColumnIndex("name"));
do_check_eq(1, stmt.getColumnIndex("id")); do_check_eq(1, stmt.getColumnIndex("id"));
stmt.reset();
stmt.finalize();
} }
function test_getColumnIndex_different_case() function test_getColumnIndex_different_case()
@ -108,12 +124,16 @@ function test_getColumnIndex_different_case()
} catch (e) { } catch (e) {
do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result); do_check_eq(Cr.NS_ERROR_INVALID_ARG, e.result);
} }
stmt.reset();
stmt.finalize();
} }
function test_state_ready() function test_state_ready()
{ {
var stmt = createStatement("SELECT name, id FROM test"); var stmt = createStatement("SELECT name, id FROM test");
do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state);
stmt.reset();
stmt.finalize();
} }
function test_state_executing() function test_state_executing()
@ -121,6 +141,7 @@ function test_state_executing()
var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')"); var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')");
stmt.execute(); stmt.execute();
stmt.execute(); stmt.execute();
stmt.finalize();
stmt = createStatement("SELECT name, id FROM test"); stmt = createStatement("SELECT name, id FROM test");
stmt.executeStep(); stmt.executeStep();
@ -131,6 +152,15 @@ function test_state_executing()
stmt.state); stmt.state);
stmt.reset(); stmt.reset();
do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state); do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state);
stmt.finalize();
}
function test_state_after_finalize()
{
var stmt = createStatement("SELECT name, id FROM test");
stmt.executeStep();
stmt.finalize();
do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_INVALID, stmt.state);
} }
var tests = [test_parameterCount_none, test_parameterCount_one, var tests = [test_parameterCount_none, test_parameterCount_one,
@ -138,7 +168,7 @@ var tests = [test_parameterCount_none, test_parameterCount_one,
test_getParameterIndex_same, test_columnCount, test_getParameterIndex_same, test_columnCount,
test_getColumnName, test_getColumnIndex_same_case, test_getColumnName, test_getColumnIndex_same_case,
test_getColumnIndex_different_case, test_state_ready, test_getColumnIndex_different_case, test_state_ready,
test_state_executing]; test_state_executing, test_state_after_finalize];
function run_test() function run_test()
{ {

View File

@ -59,16 +59,19 @@ function test_binding_params()
const name = "foo"; const name = "foo";
stmt.params.name = name; stmt.params.name = name;
stmt.execute(); stmt.execute();
stmt.statement.finalize();
stmt = createStatement("SELECT COUNT(*) AS number FROM test"); stmt = createStatement("SELECT COUNT(*) AS number FROM test");
do_check_true(stmt.step()); do_check_true(stmt.step());
do_check_eq(1, stmt.row.number); do_check_eq(1, stmt.row.number);
stmt.reset(); stmt.reset();
stmt.statement.finalize();
stmt = createStatement("SELECT name FROM test WHERE id = 1"); stmt = createStatement("SELECT name FROM test WHERE id = 1");
do_check_true(stmt.step()); do_check_true(stmt.step());
do_check_eq(name, stmt.row.name); do_check_eq(name, stmt.row.name);
stmt.reset(); stmt.reset();
stmt.statement.finalize();
} }
function test_binding_multiple_params() function test_binding_multiple_params()
@ -78,17 +81,20 @@ function test_binding_multiple_params()
const name = "me"; const name = "me";
stmt.params.name = name; stmt.params.name = name;
stmt.execute(); stmt.execute();
stmt.statement.finalize();
stmt = createStatement("SELECT COUNT(*) AS number FROM test"); stmt = createStatement("SELECT COUNT(*) AS number FROM test");
do_check_true(stmt.step()); do_check_true(stmt.step());
do_check_eq(2, stmt.row.number); do_check_eq(2, stmt.row.number);
stmt.reset(); stmt.reset();
stmt.statement.finalize();
stmt = createStatement("SELECT name, alt_name FROM test WHERE id = 2"); stmt = createStatement("SELECT name, alt_name FROM test WHERE id = 2");
do_check_true(stmt.step()); do_check_true(stmt.step());
do_check_eq(name, stmt.row.name); do_check_eq(name, stmt.row.name);
do_check_eq(name, stmt.row.alt_name); do_check_eq(name, stmt.row.alt_name);
stmt.reset(); stmt.reset();
stmt.statement.finalize();
} }
var tests = [test_binding_params, test_binding_multiple_params]; var tests = [test_binding_params, test_binding_multiple_params];

View File

@ -55,6 +55,7 @@ function setup()
stmt.execute(); stmt.execute();
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getIsNull_for_null() function test_getIsNull_for_null()
@ -66,6 +67,7 @@ function test_getIsNull_for_null()
do_check_true(stmt.getIsNull(0)); // null field do_check_true(stmt.getIsNull(0)); // null field
do_check_true(stmt.getIsNull(1)); // data is null if size is 0 do_check_true(stmt.getIsNull(1)); // data is null if size is 0
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getIsNull_for_non_null() function test_getIsNull_for_non_null()
@ -77,6 +79,7 @@ function test_getIsNull_for_non_null()
do_check_false(stmt.getIsNull(0)); do_check_false(stmt.getIsNull(0));
do_check_false(stmt.getIsNull(1)); do_check_false(stmt.getIsNull(1));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_value_type_null() function test_value_type_null()
@ -88,6 +91,7 @@ function test_value_type_null()
do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_NULL, do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_NULL,
stmt.getTypeOfIndex(0)); stmt.getTypeOfIndex(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_value_type_integer() function test_value_type_integer()
@ -99,6 +103,7 @@ function test_value_type_integer()
do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_INTEGER, do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_INTEGER,
stmt.getTypeOfIndex(0)); stmt.getTypeOfIndex(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_value_type_float() function test_value_type_float()
@ -110,6 +115,7 @@ function test_value_type_float()
do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_FLOAT, do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_FLOAT,
stmt.getTypeOfIndex(0)); stmt.getTypeOfIndex(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_value_type_text() function test_value_type_text()
@ -121,6 +127,7 @@ function test_value_type_text()
do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_TEXT, do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_TEXT,
stmt.getTypeOfIndex(0)); stmt.getTypeOfIndex(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_value_type_blob() function test_value_type_blob()
@ -132,6 +139,7 @@ function test_value_type_blob()
do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_BLOB, do_check_eq(Ci.mozIStorageValueArray.VALUE_TYPE_BLOB,
stmt.getTypeOfIndex(0)); stmt.getTypeOfIndex(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_numEntries_one() function test_numEntries_one()
@ -142,6 +150,7 @@ function test_numEntries_one()
do_check_eq(1, stmt.numEntries); do_check_eq(1, stmt.numEntries);
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_numEntries_all() function test_numEntries_all()
@ -152,6 +161,7 @@ function test_numEntries_all()
do_check_eq(5, stmt.numEntries); do_check_eq(5, stmt.numEntries);
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getInt() function test_getInt()
@ -163,6 +173,7 @@ function test_getInt()
do_check_eq(2, stmt.getInt32(0)); do_check_eq(2, stmt.getInt32(0));
do_check_eq(2, stmt.getInt64(0)); do_check_eq(2, stmt.getInt64(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getDouble() function test_getDouble()
@ -173,6 +184,7 @@ function test_getDouble()
do_check_eq(1.23, stmt.getDouble(0)); do_check_eq(1.23, stmt.getDouble(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getUTF8String() function test_getUTF8String()
@ -183,6 +195,7 @@ function test_getUTF8String()
do_check_eq("foo", stmt.getUTF8String(0)); do_check_eq("foo", stmt.getUTF8String(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getString() function test_getString()
@ -193,6 +206,7 @@ function test_getString()
do_check_eq("", stmt.getString(0)); do_check_eq("", stmt.getString(0));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_getBlob() function test_getBlob()
@ -208,6 +222,7 @@ function test_getBlob()
do_check_eq(1, arr.value[0]); do_check_eq(1, arr.value[0]);
do_check_eq(2, arr.value[1]); do_check_eq(2, arr.value[1]);
stmt.reset(); stmt.reset();
stmt.finalize();
} }
var tests = [test_getIsNull_for_null, test_getIsNull_for_non_null, var tests = [test_getIsNull_for_null, test_getIsNull_for_non_null,

View File

@ -57,6 +57,7 @@ function setup()
stmt.bindStringParameter(0, LATIN1_ae); stmt.bindStringParameter(0, LATIN1_ae);
stmt.bindInt32Parameter(1, 4); stmt.bindInt32Parameter(1, 4);
stmt.execute(); stmt.execute();
stmt.finalize();
} }
function test_upper_ascii() function test_upper_ascii()
@ -66,6 +67,7 @@ function test_upper_ascii()
do_check_eq("A", stmt.getString(0)); do_check_eq("A", stmt.getString(0));
do_check_eq(2, stmt.getInt32(1)); do_check_eq(2, stmt.getInt32(1));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_upper_non_ascii() function test_upper_non_ascii()
@ -76,6 +78,7 @@ function test_upper_non_ascii()
do_check_eq(LATIN1_AE, stmt.getString(0)); do_check_eq(LATIN1_AE, stmt.getString(0));
do_check_eq(1, stmt.getInt32(1)); do_check_eq(1, stmt.getInt32(1));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_lower_ascii() function test_lower_ascii()
@ -85,6 +88,7 @@ function test_lower_ascii()
do_check_eq("b", stmt.getString(0)); do_check_eq("b", stmt.getString(0));
do_check_eq(3, stmt.getInt32(1)); do_check_eq(3, stmt.getInt32(1));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_lower_non_ascii() function test_lower_non_ascii()
@ -95,6 +99,7 @@ function test_lower_non_ascii()
do_check_eq(LATIN1_ae, stmt.getString(0)); do_check_eq(LATIN1_ae, stmt.getString(0));
do_check_eq(4, stmt.getInt32(1)); do_check_eq(4, stmt.getInt32(1));
stmt.reset(); stmt.reset();
stmt.finalize();
} }
function test_like_search_different() function test_like_search_different()
@ -103,6 +108,7 @@ function test_like_search_different()
stmt.bindStringParameter(0, LATIN1_AE); stmt.bindStringParameter(0, LATIN1_AE);
do_check_true(stmt.executeStep()); do_check_true(stmt.executeStep());
do_check_eq(2, stmt.getInt32(0)); do_check_eq(2, stmt.getInt32(0));
stmt.finalize();
} }
function test_like_search_same() function test_like_search_same()
@ -111,6 +117,7 @@ function test_like_search_same()
stmt.bindStringParameter(0, LATIN1_ae); stmt.bindStringParameter(0, LATIN1_ae);
do_check_true(stmt.executeStep()); do_check_true(stmt.executeStep());
do_check_eq(2, stmt.getInt32(0)); do_check_eq(2, stmt.getInt32(0));
stmt.finalize();
} }
var tests = [test_upper_ascii, test_upper_non_ascii, test_lower_ascii, var tests = [test_upper_ascii, test_upper_non_ascii, test_lower_ascii,