<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("This test tests that SQLResultSet.rowsAffected attribute is correct in success callback for executeSql().");

function errorCallback(transaction, error)
{
    testFailed("Database error code: " + error.code + ", message: " + error.message);
}

function rowsAffectedShouldBe(resultSet, expected)
{
    rowsAffected = resultSet.rowsAffected;
    shouldBe("rowsAffected", expected);
}

function runTest()
{
    if (window.testRunner)
        testRunner.clearAllDatabases();

    db = openDatabase("RowsAffectedTest", "1.0", "", 1);
    db.transaction(function (t) {
        t.executeSql("CREATE TABLE IF NOT EXISTS RowsAffectedTest (Foo INT, text TEXT)");
        t.executeSql("INSERT INTO RowsAffectedTest VALUES (1, 'a')", null, function(t, r) { rowsAffectedShouldBe(r, "1"); }, errorCallback);
        t.executeSql("INSERT INTO RowsAffectedTest VALUES (2, 'b')", null, function(t, r) { rowsAffectedShouldBe(r, "1"); }, errorCallback);
        t.executeSql("UPDATE RowsAffectedTest SET text = 'c'", null, function(t, r) { rowsAffectedShouldBe(r, "2"); }, errorCallback);
        t.executeSql("SELECT * FROM RowsAffectedTest", null, function(t, r) { rowsAffectedShouldBe(r, "0"); }, errorCallback);
        t.executeSql("DELETE FROM RowsAffectedTest", null, function(t, r) { rowsAffectedShouldBe(r, "2"); }, errorCallback);
        t.executeSql("DELETE FROM RowsAffectedTest", null, function(t, r) { rowsAffectedShouldBe(r, "0"); }, errorCallback);
        t.executeSql("SELECT * FROM RowsAffectedTest", null, function(t, r) { rowsAffectedShouldBe(r, "0"); }, errorCallback);
    }, function(error) { errorCallback(null, error); finishJSTest(); }, finishJSTest);
}

runTest();
window.jsTestIsAsync = true;
</script>

<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</body>
</html>
