| <!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> |