· 10 years ago · Sep 01, 2016, 05:50 AM
1var window = window || {};
2var persistence = (window && window.persistence) ? window.persistence : {};
3window.persistence = persistence;
4
5if(!persistence.store) {
6 persistence.store = {};
7}
8
9persistence.store.kony = {};
10
11persistence.store.kony.config = function(persistence, dbname, dbversion, description, size) {
12 var conn = null;
13
14 /**
15 * Create a transaction
16 *
17 * @param callback,
18 * the callback function to be invoked when the transaction
19 * starts, taking the transaction object as argument
20 */
21 persistence.transaction = function (callback) {
22 if(!conn) {
23 throw new Error("No ongoing database connection, please connect first.");
24 } else {
25 conn.transaction(callback);
26 }
27 };
28
29 persistence.db = persistence.db || {};
30 persistence.db.kony = {};
31 persistence.db.kony.connect = function (dbname, dbversion, description, size) {
32 var that = {};
33 var konyDbId = kony.db.openDatabase(dbname, dbversion, description, size);
34
35 that.transaction = function (fn) {
36 kony.db.transaction(konyDbId, function(konyDbId){
37 fn(persistence.db.kony.transaction(konyDbId));
38 });
39 };
40 return that;
41 };
42
43 persistence.db.kony.transaction = function (txId) {
44 var that = {};
45 that.executeSql = function (query, args, successFn, errorFn) {
46 kony.db.executeSql(txId, query, args, function(tId, konyResults){
47 if (successFn) {
48 var results = [];
49 for (var i = 0; konyResults && i < konyResults.rows.length; i++) {
50 results.push(kony.db.sqlResultsetRowItem(tId, konyResults, i));
51 }
52 successFn(results);
53 }
54 }, function(tId, err){
55 // Call the callback if defined, or rollback by default
56 return errorFn ? errorFn(err) : true;
57 });
58 };
59 return that;
60 };
61
62 ///////////////////////// SQLite dialect
63
64 persistence.store.kony.sqliteDialect = {
65 // columns is an array of arrays, e.g.
66 // [["id", "VARCHAR(32)", "PRIMARY KEY"], ["name", "TEXT"]]
67 createTable: function(tableName, columns) {
68 var tm = persistence.typeMapper;
69 var sql = "CREATE TABLE IF NOT EXISTS `" + tableName + "` (";
70 var defs = [];
71 for(var i = 0; i < columns.length; i++) {
72 var column = columns[i];
73 defs.push("`" + column[0] + "` " + tm.columnType(column[1]) + (column[2] ? " " + column[2] : ""));
74 }
75 sql += defs.join(", ");
76 sql += ')';
77 return sql;
78 },
79
80 // columns is array of column names, e.g.
81 // ["id"]
82 createIndex: function(tableName, columns, options) {
83 options = options || {};
84 return "CREATE "+(options.unique?"UNIQUE ":"")+"INDEX IF NOT EXISTS `" + tableName + "__" + columns.join("_") +
85 "` ON `" + tableName + "` (" +
86 columns.map(function(col) { return "`" + col + "`"; }).join(", ") + ")";
87 }
88 };
89
90 // Configure persistence for generic sql persistence, using sqliteDialect
91 persistence.store.sql.config(persistence, persistence.store.kony.sqliteDialect);
92
93 // Make the connection
94 conn = persistence.db.kony.connect(dbname, dbversion, description, size);
95};
96
97try {
98 //exports.persistence = persistence;
99 kony.persistence = persistence;
100} catch(e) {}