<html>
<head>
<script src="../../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="../../resources/js-test-post.js"></script>
</body>
</body>
</html>
