db-wrapper 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,528 +1,530 @@
1
1
  import { __decorate, __awaiter, __generator } from 'tslib';
2
2
  import { Injectable, InjectionToken, NgModule } from '@angular/core';
3
3
 
4
- var WindowService = /** @class */ (function () {
5
- function WindowService() {
6
- }
7
- Object.defineProperty(WindowService.prototype, "nativeWindow", {
8
- get: function () {
9
- return _window();
10
- },
11
- enumerable: true,
12
- configurable: true
13
- });
14
- WindowService = __decorate([
15
- Injectable()
16
- ], WindowService);
17
- return WindowService;
18
- }());
19
- function _window() {
20
- // Return the global native browser window object
21
- return typeof window !== 'undefined' ? window : undefined;
4
+ var WindowService = /** @class */ (function () {
5
+ function WindowService() {
6
+ }
7
+ Object.defineProperty(WindowService.prototype, "nativeWindow", {
8
+ get: function () {
9
+ return _window();
10
+ },
11
+ enumerable: true,
12
+ configurable: true
13
+ });
14
+ WindowService = __decorate([
15
+ Injectable()
16
+ ], WindowService);
17
+ return WindowService;
18
+ }());
19
+ function _window() {
20
+ // Return the global native browser window object
21
+ return typeof window !== 'undefined' ? window : undefined;
22
22
  }
23
23
 
24
- var DbWrapperService = /** @class */ (function () {
25
- function DbWrapperService(dbConfig, dbSchema) {
26
- var _this = this;
27
- this._dbName = dbConfig.dbName;
28
- this._location = dbConfig.location || 'default';
29
- this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
30
- var window = (new WindowService()).nativeWindow;
31
- if (dbSchema) {
32
- this.schema = dbSchema;
33
- }
34
- this._readyPromise = new Promise(function (resolve, reject) {
35
- if (typeof window.cordova === 'undefined') {
36
- setTimeout(function () {
37
- _this.init(dbSchema).then(function () {
38
- resolve();
39
- })
40
- .catch(function (err) {
41
- reject(err);
42
- });
43
- }, 500);
44
- }
45
- else {
46
- document.addEventListener('deviceready', function () {
47
- console.log('dbWrapper: device ready.');
48
- _this.initDevice(dbSchema).then(function () { return resolve(); }).catch(function (err) { return reject(err); });
49
- });
50
- }
51
- });
52
- }
53
- DbWrapperService.prototype.ready = function () {
54
- return this._readyPromise;
55
- };
56
- DbWrapperService.prototype.initDevice = function (dbSchema) {
57
- var _this = this;
58
- var window = (new WindowService()).nativeWindow;
59
- return new Promise(function (resolve, reject) {
60
- _this.db = window.sqlitePlugin.openDatabase({
61
- name: _this._dbName,
62
- location: _this._location,
63
- androidLockWorkaround: 1
64
- });
65
- if (dbSchema) {
66
- _this.generate(dbSchema).catch(function (err) {
67
- reject(err);
68
- }).then(function () { resolve(); });
69
- }
70
- else {
71
- resolve();
72
- }
73
- });
74
- };
75
- DbWrapperService.prototype.init = function (dbSchema) {
76
- var _this = this;
77
- var window = (new WindowService()).nativeWindow;
78
- return new Promise(function (resolve, reject) {
79
- _this.db = window.openDatabase(_this._dbName, '1.0', 'database', -1);
80
- if (dbSchema) {
81
- _this.generate(dbSchema).catch(function (err) {
82
- reject(err);
83
- }).then(function () {
84
- resolve();
85
- });
86
- }
87
- else {
88
- resolve();
89
- }
90
- });
91
- };
92
- DbWrapperService.prototype.generate = function (schema) {
93
- var _this = this;
94
- var sentences = [];
95
- this.schema = schema;
96
- if (schema.tables) {
97
- schema.tables.forEach(function (table) {
98
- sentences.push(_this.createTable(table));
99
- });
100
- }
101
- if (schema.views) {
102
- schema.views.forEach(function (view) {
103
- sentences.push(_this.createView(view));
104
- });
105
- }
106
- if (sentences.length === 0) {
107
- throw new Error('Esquema de la base de datos vacia.');
108
- }
109
- return Promise.all(sentences);
110
- };
111
- DbWrapperService.prototype.createTable = function (table) {
112
- return __awaiter(this, void 0, void 0, function () {
113
- var sql, onConflictPrimary, sentences, newColumns, tableDDL;
114
- var _this = this;
115
- return __generator(this, function (_a) {
116
- switch (_a.label) {
117
- case 0:
118
- sql = '';
119
- sentences = [], newColumns = [];
120
- return [4 /*yield*/, this._tableExists(table.name)];
121
- case 1:
122
- tableDDL = _a.sent();
123
- if (tableDDL) {
124
- table.columns.forEach(function (col) {
125
- if (!_this._columnExists(tableDDL, col.name)) {
126
- newColumns.push(_this.addColumn(table.name, col));
127
- }
128
- });
129
- }
130
- else {
131
- table.columns.forEach(function (col) {
132
- sentences.push(_this.defColumn(col));
133
- });
134
- }
135
- onConflictPrimary = 'on conflict fail';
136
- if (Array.isArray(table.primary)) {
137
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary);
138
- }
139
- if (typeof table.primary === 'string') {
140
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary);
141
- }
142
- if (table.uniques) {
143
- table.uniques.forEach(function (uniq) {
144
- sentences.push(_this.defUnique(uniq));
145
- });
146
- }
147
- if (table.foreigns) {
148
- table.foreigns.forEach(function (fore) {
149
- sentences.push(_this.defForeign(fore));
150
- });
151
- }
152
- if (tableDDL && newColumns.length !== 0) {
153
- return [2 /*return*/, Promise.all(newColumns)
154
- .then(function () { console.log("Table " + table.name + " altered."); })
155
- .catch(function (err) {
156
- console.error("Table " + table.name + ": " + err.message);
157
- throw new Error("Table " + table.name + ": " + err.message);
158
- })];
159
- }
160
- else if (!tableDDL) {
161
- sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';
162
- return [2 /*return*/, this.query(sql)
163
- .then(function () { console.log("Table " + table.name + " created."); })
164
- .catch(function (err) {
165
- console.error("Table " + table.name + ": " + err.message);
166
- throw new Error("Table " + table.name + ": " + err.message);
167
- })];
168
- }
169
- else {
170
- return [2 /*return*/, Promise.resolve().then(function () { console.log("Table " + table.name + " initialized."); })];
171
- }
172
- return [2 /*return*/];
173
- }
174
- });
175
- });
176
- };
177
- DbWrapperService.prototype.createView = function (view) {
178
- var sql;
179
- sql = 'CREATE VIEW IF NOT EXISTS ' + view.name
180
- + ' AS ' + view.sql;
181
- return this.query(sql);
182
- };
183
- DbWrapperService.prototype.getSchemaTable = function (tableName) {
184
- var res;
185
- this.schema.tables.forEach(function (table) {
186
- if (table.name === tableName) {
187
- res = table;
188
- }
189
- });
190
- return res;
191
- };
192
- DbWrapperService.prototype.getUniquesTable = function (table) {
193
- var res;
194
- table.uniques.forEach(function (uniq) {
195
- res[uniq.name] = uniq;
196
- });
197
- return res;
198
- };
199
- DbWrapperService.prototype.query = function (query, bindings) {
200
- var _this = this;
201
- if (bindings === void 0) { bindings = []; }
202
- return new Promise(function (resolve, reject) {
203
- if (query.indexOf('select') === 0) {
204
- _this.db.readTransaction(function (transaction) {
205
- transaction.executeSql(query, bindings, function (transaction, result) {
206
- resolve(result);
207
- }, function (transaction, error) {
208
- reject(error);
209
- });
210
- }, function (err) { return reject(err); });
211
- }
212
- else {
213
- _this.db.transaction(function (transaction) {
214
- transaction.executeSql(query, bindings, function (transaction, result) {
215
- resolve(result);
216
- }, function (transaction, error) {
217
- reject(error);
218
- });
219
- }, function (err) { return reject(err); });
220
- }
221
- });
222
- };
223
- DbWrapperService.prototype.Count = function (query, bindings) {
224
- var _this = this;
225
- if (bindings === void 0) { bindings = []; }
226
- return this.query(query, bindings).then(function (rows) {
227
- return _this.rowsCount(rows);
228
- });
229
- };
230
- DbWrapperService.prototype.insert = function (table, bindings) {
231
- var _this = this;
232
- var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
233
- sql = sql + 'insert into ' + table + ' ';
234
- for (var index in bindings) {
235
- if (bindings.hasOwnProperty(index)) {
236
- sqlKeys.push(index);
237
- sqlValues.push(bindings[index]);
238
- sqlBinds.push('?');
239
- }
240
- }
241
- sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';
242
- return new Promise(function (resolve, reject) {
243
- _this.db.transaction(function (transaction) {
244
- transaction.executeSql(sql, sqlValues, function (transaction, result) {
245
- resolve(result);
246
- }, function (transaction, error) {
247
- reject(error);
248
- });
249
- });
250
- });
251
- };
252
- DbWrapperService.prototype.update = function (table, bindings, where) {
253
- var _this = this;
254
- var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
255
- sql = sql + 'update ' + table + ' set ';
256
- for (var index in bindings) {
257
- if (bindings.hasOwnProperty(index)) {
258
- var newObj = bindings[index];
259
- if (typeof newObj === 'object' && newObj !== null) {
260
- sqlValues.push(newObj.value);
261
- if (newObj.ifnull) {
262
- sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');
263
- }
264
- else if (newObj.operator) {
265
- sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');
266
- }
267
- else {
268
- sqlBinds.push(index + ' = ?');
269
- }
270
- }
271
- else {
272
- sqlBinds.push(index + ' = ?');
273
- sqlValues.push(bindings[index]);
274
- }
275
- }
276
- }
277
- for (var index in where) {
278
- if (where.hasOwnProperty(index)) {
279
- if (typeof where[index] === 'object' && where[index] !== null) {
280
- sqlKeys.push(index + ' ' + where[index].operator + ' ?');
281
- sqlValues.push(where[index].value);
282
- }
283
- else {
284
- sqlKeys.push(index + ' = ?');
285
- sqlValues.push(where[index]);
286
- }
287
- }
288
- }
289
- sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');
290
- return new Promise(function (resolve, reject) {
291
- _this.db.transaction(function (transaction) {
292
- transaction.executeSql(sql, sqlValues, function (transaction, result) {
293
- resolve(result);
294
- }, function (transaction, error) {
295
- reject(error);
296
- });
297
- });
298
- });
299
- };
300
- DbWrapperService.prototype.dropTable = function (tables) {
301
- var _this = this;
302
- var cont = 1;
303
- cont = tables.length;
304
- return new Promise(function (resolve, reject) {
305
- tables.some(function (table) {
306
- if (cont !== 0) {
307
- _this.query('DROP TABLE ' + table)
308
- .then(function () {
309
- if (cont === 1) {
310
- resolve();
311
- }
312
- else {
313
- cont--;
314
- }
315
- }, function (err) {
316
- cont = 0;
317
- reject(err);
318
- return true;
319
- });
320
- return false;
321
- }
322
- });
323
- });
324
- };
325
- DbWrapperService.prototype.fetchAll = function (result) {
326
- var output = [];
327
- for (var i = 0; i < result.rows.length; i++) {
328
- output.push(result.rows.item(i));
329
- }
330
- return output;
331
- };
332
- DbWrapperService.prototype.fetch = function (result) {
333
- var objeto = undefined, newObj = undefined;
334
- if (result.rows.length !== 0) {
335
- objeto = result.rows.item(0);
336
- newObj = {};
337
- var keys = Object.keys(objeto);
338
- for (var key in keys) {
339
- newObj[keys[key]] = objeto[keys[key]];
340
- }
341
- }
342
- return newObj;
343
- };
344
- DbWrapperService.prototype.rowsCount = function (result) {
345
- return result.rows.length;
346
- };
347
- DbWrapperService.prototype.tableExists = function (table) {
348
- var _this = this;
349
- return this.query('select sql from sqlite_master ' +
350
- 'where type=\'table\' and name=\'' + table + '\'')
351
- .then(function (result) { return (_this.rowsCount(result) === 1); });
352
- };
353
- DbWrapperService.prototype.columnExists = function (table, column) {
354
- var _this = this;
355
- return this._tableExists(table)
356
- .then(function (tableDDL) {
357
- if (tableDDL) {
358
- return _this._columnExists(tableDDL, column);
359
- }
360
- else {
361
- return false;
362
- }
363
- });
364
- };
365
- /* Private */
366
- DbWrapperService.prototype.defColumn = function (col) {
367
- var colSql;
368
- colSql = col.name + ' ' + col.type;
369
- if (!col.isNullable) {
370
- colSql += ' NOT NULL ';
371
- }
372
- if (col.default) {
373
- colSql += ' DEFAULT ' + col.default + ' ';
374
- }
375
- if (col.type === 'text' && col.length) {
376
- colSql += " CONSTRAINT " + col.name + "_length CHECK ( ";
377
- if (col.isNullable) {
378
- colSql += col.name + " is null OR ";
379
- }
380
- colSql += "length(" + col.name + ") <= " + col.length + " )";
381
- }
382
- return colSql;
383
- };
384
- DbWrapperService.prototype.defUnique = function (unique) {
385
- var uniqSql;
386
- // depende del entorno, producción o desarrollo
387
- var onConflictUnique = 'on conflict replace';
388
- if (Array.isArray(unique.fields)) {
389
- uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields.join(',') + " ) " + onConflictUnique + " ";
390
- }
391
- if (typeof unique.fields === 'string') {
392
- uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields + " ) " + onConflictUnique + " ";
393
- }
394
- return uniqSql;
395
- };
396
- DbWrapperService.prototype.defForeign = function (fore) {
397
- var foreSql;
398
- if (Array.isArray(fore.foreignKey)) {
399
- foreSql = " FOREIGN KEY ( " + fore.foreignKey.join(',') + " ) ";
400
- }
401
- if (typeof fore.foreignKey === 'string') {
402
- foreSql = " FOREIGN KEY ( " + fore.foreignKey + " ) ";
403
- }
404
- if (Array.isArray(fore.primaryKey)) {
405
- foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey.join(',') + " ) ";
406
- }
407
- if (typeof fore.primaryKey === 'string') {
408
- foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey + " ) ";
409
- }
410
- return foreSql;
411
- };
412
- DbWrapperService.prototype._tableExists = function (table) {
413
- var _this = this;
414
- return this.query('select sql from sqlite_master ' +
415
- 'where type=\'table\' and name=\'' + table + '\'')
416
- .then(function (result) {
417
- if (_this.rowsCount(result) === 1) {
418
- return _this.fetch(result).sql;
419
- }
420
- else {
421
- return false;
422
- }
423
- });
424
- };
425
- DbWrapperService.prototype._columnExists = function (tableDDL, column) {
426
- if (tableDDL.indexOf(column) === -1) {
427
- return false;
428
- }
429
- else {
430
- return true;
431
- }
432
- };
433
- DbWrapperService.prototype.addColumn = function (table, col) {
434
- var colSql = this.defColumn(col);
435
- var query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;
436
- return this.query(query);
437
- };
438
- return DbWrapperService;
439
- }());
440
- var DB_CONFIG = new InjectionToken('dbWrapperConfig');
441
- var DB_SCHEMA = new InjectionToken('dbWrapperSchema');
442
- function getDefaultDbConfig() {
443
- return {
444
- dbName: 'db.sqlite',
445
- location: 'default',
446
- iosDatabaseLocation: 'Library'
447
- };
448
- }
449
- function provideDbWrapper(dbConfig, dbSchema) {
450
- var config = !!dbConfig ? dbConfig : getDefaultDbConfig();
451
- return new DbWrapperService(config, dbSchema);
24
+ var DbWrapperService = /** @class */ (function () {
25
+ function DbWrapperService(dbConfig, dbSchema) {
26
+ var _this = this;
27
+ this._dbName = dbConfig.dbName;
28
+ this._location = dbConfig.location || 'default';
29
+ this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
30
+ this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';
31
+ var window = (new WindowService()).nativeWindow;
32
+ if (dbSchema) {
33
+ this.schema = dbSchema;
34
+ }
35
+ this._readyPromise = new Promise(function (resolve, reject) {
36
+ if (typeof window.cordova === 'undefined') {
37
+ setTimeout(function () {
38
+ _this.init(dbSchema).then(function () {
39
+ resolve();
40
+ })
41
+ .catch(function (err) {
42
+ reject(err);
43
+ });
44
+ }, 500);
45
+ }
46
+ else {
47
+ document.addEventListener('deviceready', function () {
48
+ console.log('dbWrapper: device ready.');
49
+ _this.initDevice(dbSchema).then(function () { return resolve(); }).catch(function (err) { return reject(err); });
50
+ });
51
+ }
52
+ });
53
+ }
54
+ DbWrapperService.prototype.ready = function () {
55
+ return this._readyPromise;
56
+ };
57
+ DbWrapperService.prototype.initDevice = function (dbSchema) {
58
+ var _this = this;
59
+ var window = (new WindowService()).nativeWindow;
60
+ return new Promise(function (resolve, reject) {
61
+ _this.db = window.sqlitePlugin.openDatabase({
62
+ name: _this._dbName,
63
+ location: _this._location,
64
+ androidLockWorkaround: 1,
65
+ androidDatabaseProvider: _this._androidDatabaseProvider,
66
+ });
67
+ if (dbSchema) {
68
+ _this.generate(dbSchema).catch(function (err) {
69
+ reject(err);
70
+ }).then(function () { resolve(); });
71
+ }
72
+ else {
73
+ resolve();
74
+ }
75
+ });
76
+ };
77
+ DbWrapperService.prototype.init = function (dbSchema) {
78
+ var _this = this;
79
+ var window = (new WindowService()).nativeWindow;
80
+ return new Promise(function (resolve, reject) {
81
+ _this.db = window.openDatabase(_this._dbName, '1.0', 'database', -1);
82
+ if (dbSchema) {
83
+ _this.generate(dbSchema).catch(function (err) {
84
+ reject(err);
85
+ }).then(function () {
86
+ resolve();
87
+ });
88
+ }
89
+ else {
90
+ resolve();
91
+ }
92
+ });
93
+ };
94
+ DbWrapperService.prototype.generate = function (schema) {
95
+ var _this = this;
96
+ var sentences = [];
97
+ this.schema = schema;
98
+ if (schema.tables) {
99
+ schema.tables.forEach(function (table) {
100
+ sentences.push(_this.createTable(table));
101
+ });
102
+ }
103
+ if (schema.views) {
104
+ schema.views.forEach(function (view) {
105
+ sentences.push(_this.createView(view));
106
+ });
107
+ }
108
+ if (sentences.length === 0) {
109
+ throw new Error('Esquema de la base de datos vacia.');
110
+ }
111
+ return Promise.all(sentences);
112
+ };
113
+ DbWrapperService.prototype.createTable = function (table) {
114
+ return __awaiter(this, void 0, void 0, function () {
115
+ var sql, onConflictPrimary, sentences, newColumns, tableDDL;
116
+ var _this = this;
117
+ return __generator(this, function (_a) {
118
+ switch (_a.label) {
119
+ case 0:
120
+ sql = '';
121
+ sentences = [], newColumns = [];
122
+ return [4 /*yield*/, this._tableExists(table.name)];
123
+ case 1:
124
+ tableDDL = _a.sent();
125
+ if (tableDDL) {
126
+ table.columns.forEach(function (col) {
127
+ if (!_this._columnExists(tableDDL, col.name)) {
128
+ newColumns.push(_this.addColumn(table.name, col));
129
+ }
130
+ });
131
+ }
132
+ else {
133
+ table.columns.forEach(function (col) {
134
+ sentences.push(_this.defColumn(col));
135
+ });
136
+ }
137
+ onConflictPrimary = 'on conflict fail';
138
+ if (Array.isArray(table.primary)) {
139
+ sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary);
140
+ }
141
+ if (typeof table.primary === 'string') {
142
+ sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary);
143
+ }
144
+ if (table.uniques) {
145
+ table.uniques.forEach(function (uniq) {
146
+ sentences.push(_this.defUnique(uniq));
147
+ });
148
+ }
149
+ if (table.foreigns) {
150
+ table.foreigns.forEach(function (fore) {
151
+ sentences.push(_this.defForeign(fore));
152
+ });
153
+ }
154
+ if (tableDDL && newColumns.length !== 0) {
155
+ return [2 /*return*/, Promise.all(newColumns)
156
+ .then(function () { console.log("Table " + table.name + " altered."); })
157
+ .catch(function (err) {
158
+ console.error("Table " + table.name + ": " + err.message);
159
+ throw new Error("Table " + table.name + ": " + err.message);
160
+ })];
161
+ }
162
+ else if (!tableDDL) {
163
+ sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';
164
+ return [2 /*return*/, this.query(sql)
165
+ .then(function () { console.log("Table " + table.name + " created."); })
166
+ .catch(function (err) {
167
+ console.error("Table " + table.name + ": " + err.message);
168
+ throw new Error("Table " + table.name + ": " + err.message);
169
+ })];
170
+ }
171
+ else {
172
+ return [2 /*return*/, Promise.resolve().then(function () { console.log("Table " + table.name + " initialized."); })];
173
+ }
174
+ return [2 /*return*/];
175
+ }
176
+ });
177
+ });
178
+ };
179
+ DbWrapperService.prototype.createView = function (view) {
180
+ var sql;
181
+ sql = 'CREATE VIEW IF NOT EXISTS ' + view.name
182
+ + ' AS ' + view.sql;
183
+ return this.query(sql);
184
+ };
185
+ DbWrapperService.prototype.getSchemaTable = function (tableName) {
186
+ var res;
187
+ this.schema.tables.forEach(function (table) {
188
+ if (table.name === tableName) {
189
+ res = table;
190
+ }
191
+ });
192
+ return res;
193
+ };
194
+ DbWrapperService.prototype.getUniquesTable = function (table) {
195
+ var res;
196
+ table.uniques.forEach(function (uniq) {
197
+ res[uniq.name] = uniq;
198
+ });
199
+ return res;
200
+ };
201
+ DbWrapperService.prototype.query = function (query, bindings) {
202
+ var _this = this;
203
+ if (bindings === void 0) { bindings = []; }
204
+ return new Promise(function (resolve, reject) {
205
+ if (query.indexOf('select') === 0) {
206
+ _this.db.readTransaction(function (transaction) {
207
+ transaction.executeSql(query, bindings, function (transaction, result) {
208
+ resolve(result);
209
+ }, function (transaction, error) {
210
+ reject(error);
211
+ });
212
+ }, function (err) { return reject(err); });
213
+ }
214
+ else {
215
+ _this.db.transaction(function (transaction) {
216
+ transaction.executeSql(query, bindings, function (transaction, result) {
217
+ resolve(result);
218
+ }, function (transaction, error) {
219
+ reject(error);
220
+ });
221
+ }, function (err) { return reject(err); });
222
+ }
223
+ });
224
+ };
225
+ DbWrapperService.prototype.Count = function (query, bindings) {
226
+ var _this = this;
227
+ if (bindings === void 0) { bindings = []; }
228
+ return this.query(query, bindings).then(function (rows) {
229
+ return _this.rowsCount(rows);
230
+ });
231
+ };
232
+ DbWrapperService.prototype.insert = function (table, bindings) {
233
+ var _this = this;
234
+ var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
235
+ sql = sql + 'insert into ' + table + ' ';
236
+ for (var index in bindings) {
237
+ if (bindings.hasOwnProperty(index)) {
238
+ sqlKeys.push(index);
239
+ sqlValues.push(bindings[index]);
240
+ sqlBinds.push('?');
241
+ }
242
+ }
243
+ sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';
244
+ return new Promise(function (resolve, reject) {
245
+ _this.db.transaction(function (transaction) {
246
+ transaction.executeSql(sql, sqlValues, function (transaction, result) {
247
+ resolve(result);
248
+ }, function (transaction, error) {
249
+ reject(error);
250
+ });
251
+ });
252
+ });
253
+ };
254
+ DbWrapperService.prototype.update = function (table, bindings, where) {
255
+ var _this = this;
256
+ var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
257
+ sql = sql + 'update ' + table + ' set ';
258
+ for (var index in bindings) {
259
+ if (bindings.hasOwnProperty(index)) {
260
+ var newObj = bindings[index];
261
+ if (typeof newObj === 'object' && newObj !== null) {
262
+ sqlValues.push(newObj.value);
263
+ if (newObj.ifnull) {
264
+ sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');
265
+ }
266
+ else if (newObj.operator) {
267
+ sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');
268
+ }
269
+ else {
270
+ sqlBinds.push(index + ' = ?');
271
+ }
272
+ }
273
+ else {
274
+ sqlBinds.push(index + ' = ?');
275
+ sqlValues.push(bindings[index]);
276
+ }
277
+ }
278
+ }
279
+ for (var index in where) {
280
+ if (where.hasOwnProperty(index)) {
281
+ if (typeof where[index] === 'object' && where[index] !== null) {
282
+ sqlKeys.push(index + ' ' + where[index].operator + ' ?');
283
+ sqlValues.push(where[index].value);
284
+ }
285
+ else {
286
+ sqlKeys.push(index + ' = ?');
287
+ sqlValues.push(where[index]);
288
+ }
289
+ }
290
+ }
291
+ sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');
292
+ return new Promise(function (resolve, reject) {
293
+ _this.db.transaction(function (transaction) {
294
+ transaction.executeSql(sql, sqlValues, function (transaction, result) {
295
+ resolve(result);
296
+ }, function (transaction, error) {
297
+ reject(error);
298
+ });
299
+ });
300
+ });
301
+ };
302
+ DbWrapperService.prototype.dropTable = function (tables) {
303
+ var _this = this;
304
+ var cont = 1;
305
+ cont = tables.length;
306
+ return new Promise(function (resolve, reject) {
307
+ tables.some(function (table) {
308
+ if (cont !== 0) {
309
+ _this.query('DROP TABLE ' + table)
310
+ .then(function () {
311
+ if (cont === 1) {
312
+ resolve();
313
+ }
314
+ else {
315
+ cont--;
316
+ }
317
+ }, function (err) {
318
+ cont = 0;
319
+ reject(err);
320
+ return true;
321
+ });
322
+ return false;
323
+ }
324
+ });
325
+ });
326
+ };
327
+ DbWrapperService.prototype.fetchAll = function (result) {
328
+ var output = [];
329
+ for (var i = 0; i < result.rows.length; i++) {
330
+ output.push(result.rows.item(i));
331
+ }
332
+ return output;
333
+ };
334
+ DbWrapperService.prototype.fetch = function (result) {
335
+ var objeto = undefined, newObj = undefined;
336
+ if (result.rows.length !== 0) {
337
+ objeto = result.rows.item(0);
338
+ newObj = {};
339
+ var keys = Object.keys(objeto);
340
+ for (var key in keys) {
341
+ newObj[keys[key]] = objeto[keys[key]];
342
+ }
343
+ }
344
+ return newObj;
345
+ };
346
+ DbWrapperService.prototype.rowsCount = function (result) {
347
+ return result.rows.length;
348
+ };
349
+ DbWrapperService.prototype.tableExists = function (table) {
350
+ var _this = this;
351
+ return this.query('select sql from sqlite_master ' +
352
+ 'where type=\'table\' and name=\'' + table + '\'')
353
+ .then(function (result) { return (_this.rowsCount(result) === 1); });
354
+ };
355
+ DbWrapperService.prototype.columnExists = function (table, column) {
356
+ var _this = this;
357
+ return this._tableExists(table)
358
+ .then(function (tableDDL) {
359
+ if (tableDDL) {
360
+ return _this._columnExists(tableDDL, column);
361
+ }
362
+ else {
363
+ return false;
364
+ }
365
+ });
366
+ };
367
+ /* Private */
368
+ DbWrapperService.prototype.defColumn = function (col) {
369
+ var colSql;
370
+ colSql = col.name + ' ' + col.type;
371
+ if (!col.isNullable) {
372
+ colSql += ' NOT NULL ';
373
+ }
374
+ if (col.default) {
375
+ colSql += ' DEFAULT ' + col.default + ' ';
376
+ }
377
+ if (col.type === 'text' && col.length) {
378
+ colSql += " CONSTRAINT " + col.name + "_length CHECK ( ";
379
+ if (col.isNullable) {
380
+ colSql += col.name + " is null OR ";
381
+ }
382
+ colSql += "length(" + col.name + ") <= " + col.length + " )";
383
+ }
384
+ return colSql;
385
+ };
386
+ DbWrapperService.prototype.defUnique = function (unique) {
387
+ var uniqSql;
388
+ // depende del entorno, producción o desarrollo
389
+ var onConflictUnique = 'on conflict replace';
390
+ if (Array.isArray(unique.fields)) {
391
+ uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields.join(',') + " ) " + onConflictUnique + " ";
392
+ }
393
+ if (typeof unique.fields === 'string') {
394
+ uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields + " ) " + onConflictUnique + " ";
395
+ }
396
+ return uniqSql;
397
+ };
398
+ DbWrapperService.prototype.defForeign = function (fore) {
399
+ var foreSql;
400
+ if (Array.isArray(fore.foreignKey)) {
401
+ foreSql = " FOREIGN KEY ( " + fore.foreignKey.join(',') + " ) ";
402
+ }
403
+ if (typeof fore.foreignKey === 'string') {
404
+ foreSql = " FOREIGN KEY ( " + fore.foreignKey + " ) ";
405
+ }
406
+ if (Array.isArray(fore.primaryKey)) {
407
+ foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey.join(',') + " ) ";
408
+ }
409
+ if (typeof fore.primaryKey === 'string') {
410
+ foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey + " ) ";
411
+ }
412
+ return foreSql;
413
+ };
414
+ DbWrapperService.prototype._tableExists = function (table) {
415
+ var _this = this;
416
+ return this.query('select sql from sqlite_master ' +
417
+ 'where type=\'table\' and name=\'' + table + '\'')
418
+ .then(function (result) {
419
+ if (_this.rowsCount(result) === 1) {
420
+ return _this.fetch(result).sql;
421
+ }
422
+ else {
423
+ return false;
424
+ }
425
+ });
426
+ };
427
+ DbWrapperService.prototype._columnExists = function (tableDDL, column) {
428
+ if (tableDDL.indexOf(column) === -1) {
429
+ return false;
430
+ }
431
+ else {
432
+ return true;
433
+ }
434
+ };
435
+ DbWrapperService.prototype.addColumn = function (table, col) {
436
+ var colSql = this.defColumn(col);
437
+ var query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;
438
+ return this.query(query);
439
+ };
440
+ return DbWrapperService;
441
+ }());
442
+ var DB_CONFIG = new InjectionToken('dbWrapperConfig');
443
+ var DB_SCHEMA = new InjectionToken('dbWrapperSchema');
444
+ function getDefaultDbConfig() {
445
+ return {
446
+ dbName: 'db.sqlite',
447
+ location: 'default',
448
+ iosDatabaseLocation: 'Library'
449
+ };
450
+ }
451
+ function provideDbWrapper(dbConfig, dbSchema) {
452
+ var config = !!dbConfig ? dbConfig : getDefaultDbConfig();
453
+ return new DbWrapperService(config, dbSchema);
452
454
  }
453
455
 
454
- var DbWrapperModule = /** @class */ (function () {
455
- function DbWrapperModule() {
456
- }
457
- DbWrapperModule_1 = DbWrapperModule;
458
- DbWrapperModule.forRoot = function (dbConfig, schema) {
459
- return {
460
- ngModule: DbWrapperModule_1,
461
- providers: [
462
- { provide: DB_CONFIG, useValue: dbConfig },
463
- { provide: DB_SCHEMA, useValue: schema },
464
- { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }
465
- ]
466
- };
467
- };
468
- var DbWrapperModule_1;
469
- DbWrapperModule = DbWrapperModule_1 = __decorate([
470
- NgModule()
471
- ], DbWrapperModule);
472
- return DbWrapperModule;
456
+ var DbWrapperModule = /** @class */ (function () {
457
+ function DbWrapperModule() {
458
+ }
459
+ DbWrapperModule_1 = DbWrapperModule;
460
+ DbWrapperModule.forRoot = function (dbConfig, schema) {
461
+ return {
462
+ ngModule: DbWrapperModule_1,
463
+ providers: [
464
+ { provide: DB_CONFIG, useValue: dbConfig },
465
+ { provide: DB_SCHEMA, useValue: schema },
466
+ { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }
467
+ ]
468
+ };
469
+ };
470
+ var DbWrapperModule_1;
471
+ DbWrapperModule = DbWrapperModule_1 = __decorate([
472
+ NgModule()
473
+ ], DbWrapperModule);
474
+ return DbWrapperModule;
473
475
  }());
474
476
 
475
- var DataType;
476
- (function (DataType) {
477
- DataType["Integer"] = "integer";
478
- DataType["Int"] = "integer";
479
- DataType["TinyInt"] = "integer";
480
- DataType["SmallInt"] = "integer";
481
- DataType["BigInt"] = "integer";
482
- DataType["Text"] = "text";
483
- DataType["Char"] = "text";
484
- DataType["NChar"] = "text";
485
- DataType["VarChar"] = "text";
486
- DataType["NVarChar"] = "text";
487
- DataType["CLOB"] = "text";
488
- DataType["BLOB"] = "blob";
489
- DataType["Real"] = "real";
490
- DataType["Double"] = "real";
491
- DataType["Decimal"] = "real";
492
- DataType["Float"] = "real";
493
- DataType["Boolean"] = "integer";
494
- DataType["DateTime"] = "text";
495
- DataType["Date"] = "text";
496
- })(DataType || (DataType = {}));
497
- var DefaultType;
498
- (function (DefaultType) {
499
- DefaultType["Integer"] = "0";
500
- DefaultType["Int"] = "0";
501
- DefaultType["TinyInt"] = "0";
502
- DefaultType["SmallInt"] = "0";
503
- DefaultType["BigInt"] = "0";
504
- DefaultType["Text"] = "''";
505
- DefaultType["Char"] = "''";
506
- DefaultType["NChar"] = "''";
507
- DefaultType["VarChar"] = "''";
508
- DefaultType["NVarChar"] = "''";
509
- DefaultType["CLOB"] = "''";
510
- DefaultType["BLOB"] = "0";
511
- DefaultType["Real"] = "0.0";
512
- DefaultType["Double"] = "0.0";
513
- DefaultType["Decimal"] = "0.0";
514
- DefaultType["Float"] = "0.0";
515
- DefaultType["Boolean"] = "0";
516
- DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
517
- DefaultType["Date"] = "(date('now', 'localtime'))";
477
+ var DataType;
478
+ (function (DataType) {
479
+ DataType["Integer"] = "integer";
480
+ DataType["Int"] = "integer";
481
+ DataType["TinyInt"] = "integer";
482
+ DataType["SmallInt"] = "integer";
483
+ DataType["BigInt"] = "integer";
484
+ DataType["Text"] = "text";
485
+ DataType["Char"] = "text";
486
+ DataType["NChar"] = "text";
487
+ DataType["VarChar"] = "text";
488
+ DataType["NVarChar"] = "text";
489
+ DataType["CLOB"] = "text";
490
+ DataType["BLOB"] = "blob";
491
+ DataType["Real"] = "real";
492
+ DataType["Double"] = "real";
493
+ DataType["Decimal"] = "real";
494
+ DataType["Float"] = "real";
495
+ DataType["Boolean"] = "integer";
496
+ DataType["DateTime"] = "text";
497
+ DataType["Date"] = "text";
498
+ })(DataType || (DataType = {}));
499
+ var DefaultType;
500
+ (function (DefaultType) {
501
+ DefaultType["Integer"] = "0";
502
+ DefaultType["Int"] = "0";
503
+ DefaultType["TinyInt"] = "0";
504
+ DefaultType["SmallInt"] = "0";
505
+ DefaultType["BigInt"] = "0";
506
+ DefaultType["Text"] = "''";
507
+ DefaultType["Char"] = "''";
508
+ DefaultType["NChar"] = "''";
509
+ DefaultType["VarChar"] = "''";
510
+ DefaultType["NVarChar"] = "''";
511
+ DefaultType["CLOB"] = "''";
512
+ DefaultType["BLOB"] = "0";
513
+ DefaultType["Real"] = "0.0";
514
+ DefaultType["Double"] = "0.0";
515
+ DefaultType["Decimal"] = "0.0";
516
+ DefaultType["Float"] = "0.0";
517
+ DefaultType["Boolean"] = "0";
518
+ DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
519
+ DefaultType["Date"] = "(date('now', 'localtime'))";
518
520
  })(DefaultType || (DefaultType = {}));
519
521
 
520
- /*
521
- * Public API Surface of db-wrapper
522
+ /*
523
+ * Public API Surface of db-wrapper
522
524
  */
523
525
 
524
- /**
525
- * Generated bundle index. Do not edit.
526
+ /**
527
+ * Generated bundle index. Do not edit.
526
528
  */
527
529
 
528
530
  export { DB_CONFIG, DB_SCHEMA, DataType, DbWrapperModule, DbWrapperService, DefaultType, getDefaultDbConfig, provideDbWrapper };