The index.html
file containing JavaScript that makes use of the
Encrypted SQL API functionality is listed below.
<!DOCTYPE html> <html manifest="manifest.appcache"> <head> <title>WebSQL api sample</title> <link rel="stylesheet" href="../css/style.css" type="text/css" media="all" /> <script type="text/javascript"> var db, dbS; function openDB() { if (db == null) { try { var onCreated = function() { printText('db Created/opened'); } printText("Opening database..."); db = openDatabase('testdb', '1.0', 'my test database', 2 * 1024 * 1024, onCreated); } catch (e) { printText("Error occured in openDB: " + e); } } } function openSharedDB() { if (dbS == null) { try { var onCreated = function() { printText('db Created/opened'); } printText("Opening database..."); dbS = openSharedDatabase('testdb', '2.0', 'my test database', 2 * 1024 * 1024, onCreated); } catch (e) { printText("Error occured in openDB: " + e); } } } function createDBandPopulateSampleData(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } // create schema (using object callbacks) printText("Creating schema..."); dbObj.transaction( function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS testtable (id unique, text)'); }, function (err) { printText("Something went wrong when creating schema: " + err); } ); printText("Schema created"); // populate date (using function callbacks) printText("Inserting data..."); dbObj.transaction( function (tx) { tx.executeSql('INSERT INTO testtable (id, text) VALUES (1, "apple")'); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [2, 'banana']); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [3, 'kiwi'], function(tx, result) { printText('kiwi record insert succeeded.')}, function(tx, error) { printText('kiwi record insert failed.' + error.message)}); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [4, 'orange'], null, function(tx, error) { printText('orange record insert failed.')}); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [5, 'plum'], function(tx, result) { printText('plum record insert succeeded.')}, null); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [6, "an'a'nas"], null, null); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [7, 'gr"a"pe'], undefined, undefined); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [8, "man'go"], function(tx, result) { printText('mango record insert succeeded.')}, undefined); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, null)', [9]); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [10, null]); }, function (err) { printText("Something went wrong when inserting data: " + err); }, function () { printText("Inserting data transaction succeeded"); } ); printText("Data inserted."); } catch (e) { printText("Error occured in createDBandPopulateSampleData: " + e); } } function createDBandPopulateSampleDataWithInnerTransaction(isShared) { try { if (isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } // create schema (using object callbacks) printText("Creating schema..."); dbObj.transaction( function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS testtable (id unique, text)'); }, function(err) { printText("Something went wrong when creating schema: " + err); } ); printText("Schema created"); // populate date (using function callbacks) printText("Inserting data..."); dbObj.transaction( function(tx) { tx.executeSql('INSERT INTO testtable (id, text) VALUES (1, "apple")'); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [2, 'banana'], function(parentTx, results) { console.log("inside banana executeSql callback, parentTx: " + JSON.stringify(parentTx) + ", results: " + results); parentTx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [11, 'bananaInner11']); parentTx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [12, 'bananaInner12']); }, function(err) { console.log("outer banana tx error: " + err); } ); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [3, 'kiwi'], function() { printText('kiwi record insert succeeded.'); }, function(parentTx, error) { printText('kiwi record insert failed.' + error.message); }); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [4, 'orange'], null, function() { printText('orange record insert failed.'); }); console.log("started long loop"); for (var i = 0; i < 4999999; i++) { var t = new Date().getTime(); } console.log("finished long loop"); }, function(err) { printText("Something went wrong when inserting data: " + err); }, function() { printText("Inserting data transaction succeeded"); } ); printText("Data inserted."); } catch(e) { printText("Error occured in createDBandPopulateSampleData: " + e); } } function selectAndPrintAllDataWithCallbackFunction(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } printText("Selecting all data (with a callback function)..."); dbObj.transaction( function (tx) { tx.executeSql('SELECT * FROM testtable', [], function (tx, results) { console.log(results); var len = results.rows.length; for (var i = 0; len > i; i++) { printText("row " + i + ": " + JSON.stringify(results.rows.item(i))); } }, function(tx, result) { printText('Reading data failed: ' + result.message)} ); }, function (err) { printText("Something went wrong when selecting all data (with a callback function): " + err); }, function () { printText("Selecting data transaction succeeded"); } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function selectAndPrintAllDataWithCallbackObject(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } printText("Selecting all data (with a callback object)..."); dbObj.transaction( { handleEvent: function (tx) { tx.executeSql('SELECT * FROM testtable', [], { handleEvent: function (tx, results) { var len = results.rows.length, i; for (i = 0; len > i; i++) { printText("row " + i + ": " + JSON.stringify(results.rows.item(i))); } } } ); } }, { handleEvent: function (err) { printText("Something went wrong when selecting all data (with a callback object): " + err); } } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function deleteDataWithCallbackFunction(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } printText("Deleting all data (with a callback function)..."); dbObj.transaction(function (tx) { printText("Deleting in sequence..."); tx.executeSql("DELETE FROM testtable WHERE id=1"); tx.executeSql("DELETE FROM testtable WHERE id=?", [2]); tx.executeSql("DELETE FROM testtable WHERE id=?", [3], null); tx.executeSql("DELETE FROM testtable WHERE id=?", [4], null, null); tx.executeSql("DELETE FROM testtable WHERE id=?", [5], undefined); tx.executeSql("DELETE FROM testtable WHERE id=?", [6], undefined, undefined); tx.executeSql("DELETE FROM testtable WHERE id=?", [7], function(tx, result) { printText('Record with id=7 deleted.')}); tx.executeSql("DELETE FROM testtable WHERE id=?", [8], null, function(tx, error) { printText('Got an error when deleting record with id=8.')}); }, function (err) { printText("Something went wrong while deleting all data (with a callback function): " + err); }, function () { printText("Deleting data transaction succeeded"); } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function deleteAllDataWithCallbackFunction(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } printText("Deleting all data (with a callback function)..."); dbObj.transaction(function (tx) { printText("Deleting all data..."); tx.executeSql("DELETE FROM testtable", [], function(tx, result) { printText('Deleted data.')}, function(tx, error) { printText('Error occured when deleting data.')} ); }, function (err) { printText("Something went wrong while deleting all data (with a callback function): " + err); }, function () { printText("Deleting data transaction succeeded"); } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function selectAndPrintDataWithNullText(isShared) { try { if(isShared) { openSharedDB(); dbObj = dbS; } else { openDB(); dbObj = db; } printText("Selecting data with null text..."); dbObj.transaction( function (tx) { tx.executeSql('SELECT * FROM testtable WHERE text IS NULL', [], function (tx, results) { var len = results.rows.length, i; for (i = 0; len > i; i++) { printText("row " + i + ": " + JSON.stringify(results.rows.item(i))); } } ); }, function (err) { printText("Something went wrong when selecting data with null text): " + err); } ); } catch (e) { printText("Error occured in selectAndPrintDataWithNullText: " + e); } } function printText(str) { var d = document.getElementById('results'); d.innerHTML += "<br/>" + str; d.scrollTop = d.scrollHeight; console.log(str); } function clearText() { var d = document.getElementById('results'); d.innerHTML = ""; } function changeDBVersion() { openDB(); dbObj = db; dbObj.changeVersion("1.0", "2.0", function (tx) { tx.executeSql('INSERT INTO testtable (id, text) VALUES (11, "apple")'); }); } </script> </head> <body> <header> <h3>Pega Hybrid Container <span>SQL API example</span> </h3> </header> <div style="padding: 10px;"> <div class="info">This Application demonstrates usage of SQL JavaScript API provided by the Pega Hybrid Container.</div> </div> <table width="100%"> <tr> <td width="50%" style="border-right: 1px solid;" align="center"> <div id="simple-activate" onclick="openTabButtons();" style="font-weight: bold;">SIMPLE DATABASE</div> </td> <td width="50%" align="center"> <div id="shared-activate" onclick="openTabButtons(true);">SHARED DATABASE</div> </td> </tr> </table> <div id="simple-buttons" style="display: block;padding: 10px;"> <input type="button" onclick="createDBandPopulateSampleData();" value="Create DB and populate sample data"/> <input type="button" onclick="createDBandPopulateSampleDataWithInnerTransaction();" value="Select and print all data with inner transaction"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackFunction();" value="Select and print all data (callback function)"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackObject();" value="Select and print all data (callback object)"/> <input type="button" onclick="selectAndPrintDataWithNullText();" value="Print data with null text"/> <input type="button" onclick="deleteAllDataWithCallbackFunction();" value="Delete all data"/> <input type="button" onclick="changeDBVersion();" value="Change DB version"/> </div> <div id="shared-buttons" style="display: none;padding: 10px;"> <div class="info">Shared database works only in Pega Hybrid Container container</div> <input type="button" onclick="createDBandPopulateSampleData(true);" value="Create DB and populate sample data"/> <input type="button" onclick="createDBandPopulateSampleDataWithInnerTransaction(true);" value="Select and print all data with inner transaction"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackFunction(true);" value="Select and print all data (callback function)"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackObject(true);" value="Select and print all data (callback object)"/> <input type="button" onclick="selectAndPrintDataWithNullText(true);" value="Select and print data with null text"/> <input type="button" onclick="deleteAllDataWithCallbackFunction(true);" value="Delete all data"/> </div> <div style="padding: 10px;margin-top:-20px;"> <input type="button" onclick="clearText();" value="Clear all text"/> </div> <div id="results"></div> <script type="text/javascript"> function openTabButtons(openShared) { var toOpen = document.getElementById("simple-buttons"); var toClose = document.getElementById("shared-buttons"); var toBold = document.getElementById("simple-activate"); var toUnbold = document.getElementById("shared-activate"); if(openShared) { toOpen = document.getElementById("shared-buttons"); toClose = document.getElementById("simple-buttons"); toBold = document.getElementById("shared-activate"); toUnbold = document.getElementById("simple-activate"); } toOpen.style.display = "block"; toClose.style.display = "none"; toBold.style.fontWeight = "bold"; toUnbold.style.fontWeight = "normal"; } </script> </body> </html>
The contents of the cache manifest file called manifest.appcache
for
this application are listed below:
CACHE MANIFEST CACHE: index.html NETWORK: *