· 7 years ago · Dec 11, 2018, 08:58 PM
1(function () {
2
3var appdb = Titanium.Database.open('appdb');
4
5/* Define a key/value abstraction layer
6 * with CRUD API on top of Titanium SQLite
7 * just like Lawnchair would do*/
8
9function KvTable (tableName) {
10 this.tableName = tableName;
11 _.bindAll (this, 'init', 'drop', 'save', 'get', 'remove', 'nuke', 'all');
12}
13
14KvTable.prototype = {
15 init: function () {
16 var query = "CREATE TABLE IF NOT EXISTS '" + this.tableName +
17 "' (key STRING PRIMARY KEY, value TEXT);";
18 var r = appdb.execute (query);
19 if (r) { r.close (); }
20 return true;
21 },
22
23 drop: function () {
24 var query = "DROP TABLE IF EXISTS " + this.tableName;
25 var r = appdb.execute (query);
26 if (r) { r.close (); }
27 },
28
29 save: function (key, value) {
30 try {
31 this.remove (key);
32 } catch (e) {
33 Ti.API.debug (e);
34 }
35 value = JSON.stringify (value);
36 var query = "INSERT INTO " + this.tableName + " (key, value) VALUES (?, ?)";
37 var r = appdb.execute (query, key, value);
38 if (r) { r.close (); }
39 return true;
40 },
41
42 get: function (key) {
43 var query = "SELECT value FROM " + this.tableName + " WHERE key = ?";
44 var result = appdb.execute (query, key);
45 if (!result.isValidRow ()) {
46 result.close ();
47 return null;
48 }
49 var res = result.field (0);
50 res = JSON.parse (res);
51 if (result) { result.close (); }
52 return res;
53 },
54
55 remove: function (key) {
56 var query = "DELETE FROM " + this.tableName + " WHERE key = ?";
57 var r = appdb.execute (query, key);
58 if (r) { r.close (); }
59 return true;
60 },
61
62 nuke: function () {
63 var query = "DELETE FROM " + this.tableName;
64 try {
65 var r = appdb.execute (query);
66 if (r) { r.close (); }
67 } catch (e) {
68 Ti.API.debug (e);
69 }
70 return true;
71 },
72
73 all: function () {
74 var query = "SELECT value from " + this.tableName;
75 rows = appdb.execute (query);
76 var result = [];
77 while (rows.isValidRow ()) {
78 var item = rows.field (0);
79 item = JSON.parse (item);
80 result.push (item);
81 rows.next ();
82 }
83 if (rows) { rows.close (); }
84 return result;
85 }
86};
87
88app.db.KvTable = KvTable;
89app.db.exampleDb = new KvTable ("exampleDb");
90app.db.exampleDb.init ();
91
92}) ();