1 <!DOCTYPE HTML> 2 <html> 3 <title>Pseudo-random transactions</title> 4 <script src="../head.js"></script> 5 <script src="../common.js"></script> 6 <script> 7 var SELECT_STATEMENT_IN_READ_TRANSACTION = 0; 8 var SELECT_STATEMENT_IN_TRANSACTION = 1; 9 var INSERT_STATEMENT = 2; 10 var UPDATE_STATEMENT = 3; 11 var DELETE_STATEMENT = 4; 12 var STATEMENTS = 13 [2, 0, 4, 2, 2, 2, 2, 2, 1, 4, 1, 1, 0, 2, 0, 0, 2, 1, 2, 0, 14 4, 4, 2, 3, 3, 4, 3, 1, 3, 3, 2, 4, 3, 3, 2, 3, 1, 1, 4, 2, 15 4, 1, 4, 2, 3, 0, 4, 2, 4, 0, 4, 3, 3, 2, 0, 2, 1, 4, 4, 4, 16 4, 2, 3, 2, 0, 3, 3, 0, 4, 4, 4, 2, 3, 1, 4, 2, 4, 2, 3, 0, 17 2, 4, 0, 4, 2, 2, 4, 0, 3, 2, 3, 2, 3, 2, 0, 0, 4, 0, 2, 0]; 18 19 var transactionsCompleted = 0; 20 var startTime = 0; 21 22 function statementSuccessCallback(tx, data) {} 23 function statementErrorCallback(tx, error) {} 24 25 function transactionSuccessCallback() { 26 if (++transactionsCompleted == TRANSACTIONS) 27 testComplete(Date.now() - startTime); 28 } 29 30 function transactionErrorCallback(error) { 31 testComplete(TEST_FAILED); 32 } 33 34 function customRunTransactions(db) { 35 var selectIDCounter = 0; 36 var insertIDCounter = 0; 37 var updateIDCounter = 0; 38 var deleteIDCounter = 0; 39 var randomString = getRandomString(); 40 var randomStringForUpdates = getRandomString(); 41 startTime = Date.now(); 42 for (var i = 0; i < TRANSACTIONS; i++) { 43 switch (STATEMENTS[i % STATEMENTS.length]) { 44 case SELECT_STATEMENT_IN_READ_TRANSACTION: 45 db.readTransaction( 46 function(tx) { 47 tx.executeSql('SELECT * FROM Test WHERE ID = ?', 48 [selectIDCounter++], 49 statementSuccessCallback, statementErrorCallback); 50 }, transactionErrorCallback, transactionSuccessCallback); 51 break; 52 case SELECT_STATEMENT_IN_TRANSACTION: 53 db.transaction( 54 function(tx) { 55 tx.executeSql('SELECT * FROM Test WHERE ID = ?', 56 [selectIDCounter++], 57 statementSuccessCallback, statementErrorCallback); 58 }, transactionErrorCallback, transactionSuccessCallback); 59 break; 60 case INSERT_STATEMENT: 61 db.transaction( 62 function(tx) { 63 tx.executeSql('INSERT INTO Test VALUES (?, ?)', 64 [insertIDCounter++, randomString], 65 statementSuccessCallback, statementErrorCallback); 66 }, transactionErrorCallback, transactionSuccessCallback); 67 break; 68 case UPDATE_STATEMENT: 69 db.transaction( 70 function(tx) { 71 tx.executeSql('UPDATE Test SET Foo = ? WHERE ID = ?', 72 [randomStringForUpdates, updateIDCounter++], 73 statementSuccessCallback, statementErrorCallback); 74 }, transactionErrorCallback, transactionSuccessCallback); 75 break; 76 case DELETE_STATEMENT: 77 db.transaction( 78 function(tx) { 79 tx.executeSql('DELETE FROM Test WHERE ID = ?', 80 [deleteIDCounter++], 81 statementSuccessCallback, statementErrorCallback); 82 }, transactionErrorCallback, transactionSuccessCallback); 83 break; 84 default: 85 testComplete(TEST_FAILED); 86 return; 87 } 88 } 89 } 90 </script> 91 92 <body> 93 <script> 94 runPerformanceTest({ 95 dbName: "PseudoRandomTransactions", 96 readOnly: false, 97 insertRowsAtSetup: true, 98 transactionCallback: null, 99 customRunTransactions: customRunTransactions 100 }); 101 </script> 102 </body> 103 </html> 104