79 lines
2.9 KiB
JavaScript
79 lines
2.9 KiB
JavaScript
var complete = 0;
|
|
|
|
function checkCompletion()
|
|
{
|
|
// The test should end after two transactions
|
|
if (++complete == 2 && window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
// Opens the database used in this test case
|
|
function openTestDatabase()
|
|
{
|
|
return openDatabaseWithSuffix("MultipleTransactionsOnDifferentHandlesTest",
|
|
"1.0",
|
|
"Test to make sure that queueing multiple transactions on different DB handles does not result in a deadlock.",
|
|
32768);
|
|
}
|
|
|
|
function statementSuccessCallback(dbName, statementType)
|
|
{
|
|
log(dbName + " " + statementType + " statement succeeded");
|
|
}
|
|
|
|
function statementErrorCallback(dbName, statementType, error)
|
|
{
|
|
log(dbName + " " + statementType + " statement failed: " + error.message);
|
|
}
|
|
|
|
// Runs a transaction on the given database
|
|
function runTransaction(db, dbName, val)
|
|
{
|
|
db.transaction(function(tx) {
|
|
// Execute a read-only statement
|
|
tx.executeSql("SELECT COUNT(*) FROM Test;", [],
|
|
function(result) { statementSuccessCallback(dbName, "read"); },
|
|
function(tx, error) { statementErrorCallback(dbName, "read", error); });
|
|
|
|
// Execute a write statement to make sure SQLite tries to acquire an exclusive lock on the DB file
|
|
tx.executeSql("INSERT INTO Test VALUES (?);", [val],
|
|
function(result) { statementSuccessCallback(dbName, "write"); },
|
|
function(tx, error) { statementErrorCallback(dbName, "write", error); });
|
|
}, function(error) {
|
|
// Transaction failure callback
|
|
log(dbName + " transaction failed: " + error.message);
|
|
checkCompletion();
|
|
}, function() {
|
|
// Transaction success callback
|
|
log(dbName + " transaction succeeded");
|
|
checkCompletion();
|
|
});
|
|
}
|
|
|
|
// We need to guarantee that the Test table exists before we run our test.
|
|
// Therefore, the test code is in the successCallback of the transaction that creates the table.
|
|
function runTest() {
|
|
try {
|
|
var db = openTestDatabase();
|
|
db.transaction(function(tx) {
|
|
// Create the Test table if it does not exist
|
|
tx.executeSql("CREATE TABLE IF NOT EXISTS Test (Foo int);", [],
|
|
function(result) {}, function(tx, error) {});
|
|
}, function(error) {
|
|
log("Creating the Test table failed: " + error.message);
|
|
}, function() {
|
|
// The Test table was created successfully
|
|
var db1 = openTestDatabase();
|
|
var db2 = openTestDatabase();
|
|
if (db1 == db2)
|
|
log("failure: db1 == db2");
|
|
else {
|
|
runTransaction(db1, "db1", 1);
|
|
runTransaction(db2, "db2", 2);
|
|
}
|
|
});
|
|
} catch(err) {}
|
|
}
|
|
|
|
|