| <!DOCTYPE HTML> | |
| <html> | |
| <title>Pseudo-random transactions</title> | |
| <script src="../head.js"></script> | |
| <script src="../common.js"></script> | |
| <script> | |
| var SELECT_STATEMENT_IN_READ_TRANSACTION = 0; | |
| var SELECT_STATEMENT_IN_TRANSACTION = 1; | |
| var INSERT_STATEMENT = 2; | |
| var UPDATE_STATEMENT = 3; | |
| var DELETE_STATEMENT = 4; | |
| var STATEMENTS = | |
| [2, 0, 4, 2, 2, 2, 2, 2, 1, 4, 1, 1, 0, 2, 0, 0, 2, 1, 2, 0, | |
| 4, 4, 2, 3, 3, 4, 3, 1, 3, 3, 2, 4, 3, 3, 2, 3, 1, 1, 4, 2, | |
| 4, 1, 4, 2, 3, 0, 4, 2, 4, 0, 4, 3, 3, 2, 0, 2, 1, 4, 4, 4, | |
| 4, 2, 3, 2, 0, 3, 3, 0, 4, 4, 4, 2, 3, 1, 4, 2, 4, 2, 3, 0, | |
| 2, 4, 0, 4, 2, 2, 4, 0, 3, 2, 3, 2, 3, 2, 0, 0, 4, 0, 2, 0]; | |
| var transactionsCompleted = 0; | |
| var startTime = 0; | |
| function statementSuccessCallback(tx, data) {} | |
| function statementErrorCallback(tx, error) {} | |
| function transactionSuccessCallback() { | |
| if (++transactionsCompleted == TRANSACTIONS) | |
| testComplete(Date.now() - startTime); | |
| } | |
| function transactionErrorCallback(error) { | |
| testComplete(TEST_FAILED); | |
| } | |
| function customRunTransactions(db) { | |
| var selectIDCounter = 0; | |
| var insertIDCounter = 0; | |
| var updateIDCounter = 0; | |
| var deleteIDCounter = 0; | |
| var randomString = getRandomString(); | |
| var randomStringForUpdates = getRandomString(); | |
| startTime = Date.now(); | |
| for (var i = 0; i < TRANSACTIONS; i++) { | |
| switch (STATEMENTS[i % STATEMENTS.length]) { | |
| case SELECT_STATEMENT_IN_READ_TRANSACTION: | |
| db.readTransaction( | |
| function(tx) { | |
| tx.executeSql('SELECT * FROM Test WHERE ID = ?', | |
| [selectIDCounter++], | |
| statementSuccessCallback, statementErrorCallback); | |
| }, transactionErrorCallback, transactionSuccessCallback); | |
| break; | |
| case SELECT_STATEMENT_IN_TRANSACTION: | |
| db.transaction( | |
| function(tx) { | |
| tx.executeSql('SELECT * FROM Test WHERE ID = ?', | |
| [selectIDCounter++], | |
| statementSuccessCallback, statementErrorCallback); | |
| }, transactionErrorCallback, transactionSuccessCallback); | |
| break; | |
| case INSERT_STATEMENT: | |
| db.transaction( | |
| function(tx) { | |
| tx.executeSql('INSERT INTO Test VALUES (?, ?)', | |
| [insertIDCounter++, randomString], | |
| statementSuccessCallback, statementErrorCallback); | |
| }, transactionErrorCallback, transactionSuccessCallback); | |
| break; | |
| case UPDATE_STATEMENT: | |
| db.transaction( | |
| function(tx) { | |
| tx.executeSql('UPDATE Test SET Foo = ? WHERE ID = ?', | |
| [randomStringForUpdates, updateIDCounter++], | |
| statementSuccessCallback, statementErrorCallback); | |
| }, transactionErrorCallback, transactionSuccessCallback); | |
| break; | |
| case DELETE_STATEMENT: | |
| db.transaction( | |
| function(tx) { | |
| tx.executeSql('DELETE FROM Test WHERE ID = ?', | |
| [deleteIDCounter++], | |
| statementSuccessCallback, statementErrorCallback); | |
| }, transactionErrorCallback, transactionSuccessCallback); | |
| break; | |
| default: | |
| testComplete(TEST_FAILED); | |
| return; | |
| } | |
| } | |
| } | |
| </script> | |
| <body> | |
| <script> | |
| runPerformanceTest({ | |
| dbName: "PseudoRandomTransactions", | |
| readOnly: false, | |
| insertRowsAtSetup: true, | |
| transactionCallback: null, | |
| customRunTransactions: customRunTransactions | |
| }); | |
| </script> | |
| </body> | |
| </html> |