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.
@@ -223,520 +223,522 @@
223
223
  return value;
224
224
  }
225
225
 
226
- var WindowService = /** @class */ (function () {
227
- function WindowService() {
228
- }
229
- Object.defineProperty(WindowService.prototype, "nativeWindow", {
230
- get: function () {
231
- return _window();
232
- },
233
- enumerable: true,
234
- configurable: true
235
- });
236
- WindowService = __decorate([
237
- core.Injectable()
238
- ], WindowService);
239
- return WindowService;
240
- }());
241
- function _window() {
242
- // Return the global native browser window object
243
- return typeof window !== 'undefined' ? window : undefined;
226
+ var WindowService = /** @class */ (function () {
227
+ function WindowService() {
228
+ }
229
+ Object.defineProperty(WindowService.prototype, "nativeWindow", {
230
+ get: function () {
231
+ return _window();
232
+ },
233
+ enumerable: true,
234
+ configurable: true
235
+ });
236
+ WindowService = __decorate([
237
+ core.Injectable()
238
+ ], WindowService);
239
+ return WindowService;
240
+ }());
241
+ function _window() {
242
+ // Return the global native browser window object
243
+ return typeof window !== 'undefined' ? window : undefined;
244
244
  }
245
245
 
246
- var DbWrapperService = /** @class */ (function () {
247
- function DbWrapperService(dbConfig, dbSchema) {
248
- var _this = this;
249
- this._dbName = dbConfig.dbName;
250
- this._location = dbConfig.location || 'default';
251
- this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
252
- var window = (new WindowService()).nativeWindow;
253
- if (dbSchema) {
254
- this.schema = dbSchema;
255
- }
256
- this._readyPromise = new Promise(function (resolve, reject) {
257
- if (typeof window.cordova === 'undefined') {
258
- setTimeout(function () {
259
- _this.init(dbSchema).then(function () {
260
- resolve();
261
- })
262
- .catch(function (err) {
263
- reject(err);
264
- });
265
- }, 500);
266
- }
267
- else {
268
- document.addEventListener('deviceready', function () {
269
- console.log('dbWrapper: device ready.');
270
- _this.initDevice(dbSchema).then(function () { return resolve(); }).catch(function (err) { return reject(err); });
271
- });
272
- }
273
- });
274
- }
275
- DbWrapperService.prototype.ready = function () {
276
- return this._readyPromise;
277
- };
278
- DbWrapperService.prototype.initDevice = function (dbSchema) {
279
- var _this = this;
280
- var window = (new WindowService()).nativeWindow;
281
- return new Promise(function (resolve, reject) {
282
- _this.db = window.sqlitePlugin.openDatabase({
283
- name: _this._dbName,
284
- location: _this._location,
285
- androidLockWorkaround: 1
286
- });
287
- if (dbSchema) {
288
- _this.generate(dbSchema).catch(function (err) {
289
- reject(err);
290
- }).then(function () { resolve(); });
291
- }
292
- else {
293
- resolve();
294
- }
295
- });
296
- };
297
- DbWrapperService.prototype.init = function (dbSchema) {
298
- var _this = this;
299
- var window = (new WindowService()).nativeWindow;
300
- return new Promise(function (resolve, reject) {
301
- _this.db = window.openDatabase(_this._dbName, '1.0', 'database', -1);
302
- if (dbSchema) {
303
- _this.generate(dbSchema).catch(function (err) {
304
- reject(err);
305
- }).then(function () {
306
- resolve();
307
- });
308
- }
309
- else {
310
- resolve();
311
- }
312
- });
313
- };
314
- DbWrapperService.prototype.generate = function (schema) {
315
- var _this = this;
316
- var sentences = [];
317
- this.schema = schema;
318
- if (schema.tables) {
319
- schema.tables.forEach(function (table) {
320
- sentences.push(_this.createTable(table));
321
- });
322
- }
323
- if (schema.views) {
324
- schema.views.forEach(function (view) {
325
- sentences.push(_this.createView(view));
326
- });
327
- }
328
- if (sentences.length === 0) {
329
- throw new Error('Esquema de la base de datos vacia.');
330
- }
331
- return Promise.all(sentences);
332
- };
333
- DbWrapperService.prototype.createTable = function (table) {
334
- return __awaiter(this, void 0, void 0, function () {
335
- var sql, onConflictPrimary, sentences, newColumns, tableDDL;
336
- var _this = this;
337
- return __generator(this, function (_a) {
338
- switch (_a.label) {
339
- case 0:
340
- sql = '';
341
- sentences = [], newColumns = [];
342
- return [4 /*yield*/, this._tableExists(table.name)];
343
- case 1:
344
- tableDDL = _a.sent();
345
- if (tableDDL) {
346
- table.columns.forEach(function (col) {
347
- if (!_this._columnExists(tableDDL, col.name)) {
348
- newColumns.push(_this.addColumn(table.name, col));
349
- }
350
- });
351
- }
352
- else {
353
- table.columns.forEach(function (col) {
354
- sentences.push(_this.defColumn(col));
355
- });
356
- }
357
- onConflictPrimary = 'on conflict fail';
358
- if (Array.isArray(table.primary)) {
359
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary);
360
- }
361
- if (typeof table.primary === 'string') {
362
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary);
363
- }
364
- if (table.uniques) {
365
- table.uniques.forEach(function (uniq) {
366
- sentences.push(_this.defUnique(uniq));
367
- });
368
- }
369
- if (table.foreigns) {
370
- table.foreigns.forEach(function (fore) {
371
- sentences.push(_this.defForeign(fore));
372
- });
373
- }
374
- if (tableDDL && newColumns.length !== 0) {
375
- return [2 /*return*/, Promise.all(newColumns)
376
- .then(function () { console.log("Table " + table.name + " altered."); })
377
- .catch(function (err) {
378
- console.error("Table " + table.name + ": " + err.message);
379
- throw new Error("Table " + table.name + ": " + err.message);
380
- })];
381
- }
382
- else if (!tableDDL) {
383
- sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';
384
- return [2 /*return*/, this.query(sql)
385
- .then(function () { console.log("Table " + table.name + " created."); })
386
- .catch(function (err) {
387
- console.error("Table " + table.name + ": " + err.message);
388
- throw new Error("Table " + table.name + ": " + err.message);
389
- })];
390
- }
391
- else {
392
- return [2 /*return*/, Promise.resolve().then(function () { console.log("Table " + table.name + " initialized."); })];
393
- }
394
- return [2 /*return*/];
395
- }
396
- });
397
- });
398
- };
399
- DbWrapperService.prototype.createView = function (view) {
400
- var sql;
401
- sql = 'CREATE VIEW IF NOT EXISTS ' + view.name
402
- + ' AS ' + view.sql;
403
- return this.query(sql);
404
- };
405
- DbWrapperService.prototype.getSchemaTable = function (tableName) {
406
- var res;
407
- this.schema.tables.forEach(function (table) {
408
- if (table.name === tableName) {
409
- res = table;
410
- }
411
- });
412
- return res;
413
- };
414
- DbWrapperService.prototype.getUniquesTable = function (table) {
415
- var res;
416
- table.uniques.forEach(function (uniq) {
417
- res[uniq.name] = uniq;
418
- });
419
- return res;
420
- };
421
- DbWrapperService.prototype.query = function (query, bindings) {
422
- var _this = this;
423
- if (bindings === void 0) { bindings = []; }
424
- return new Promise(function (resolve, reject) {
425
- if (query.indexOf('select') === 0) {
426
- _this.db.readTransaction(function (transaction) {
427
- transaction.executeSql(query, bindings, function (transaction, result) {
428
- resolve(result);
429
- }, function (transaction, error) {
430
- reject(error);
431
- });
432
- }, function (err) { return reject(err); });
433
- }
434
- else {
435
- _this.db.transaction(function (transaction) {
436
- transaction.executeSql(query, bindings, function (transaction, result) {
437
- resolve(result);
438
- }, function (transaction, error) {
439
- reject(error);
440
- });
441
- }, function (err) { return reject(err); });
442
- }
443
- });
444
- };
445
- DbWrapperService.prototype.Count = function (query, bindings) {
446
- var _this = this;
447
- if (bindings === void 0) { bindings = []; }
448
- return this.query(query, bindings).then(function (rows) {
449
- return _this.rowsCount(rows);
450
- });
451
- };
452
- DbWrapperService.prototype.insert = function (table, bindings) {
453
- var _this = this;
454
- var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
455
- sql = sql + 'insert into ' + table + ' ';
456
- for (var index in bindings) {
457
- if (bindings.hasOwnProperty(index)) {
458
- sqlKeys.push(index);
459
- sqlValues.push(bindings[index]);
460
- sqlBinds.push('?');
461
- }
462
- }
463
- sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';
464
- return new Promise(function (resolve, reject) {
465
- _this.db.transaction(function (transaction) {
466
- transaction.executeSql(sql, sqlValues, function (transaction, result) {
467
- resolve(result);
468
- }, function (transaction, error) {
469
- reject(error);
470
- });
471
- });
472
- });
473
- };
474
- DbWrapperService.prototype.update = function (table, bindings, where) {
475
- var _this = this;
476
- var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
477
- sql = sql + 'update ' + table + ' set ';
478
- for (var index in bindings) {
479
- if (bindings.hasOwnProperty(index)) {
480
- var newObj = bindings[index];
481
- if (typeof newObj === 'object' && newObj !== null) {
482
- sqlValues.push(newObj.value);
483
- if (newObj.ifnull) {
484
- sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');
485
- }
486
- else if (newObj.operator) {
487
- sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');
488
- }
489
- else {
490
- sqlBinds.push(index + ' = ?');
491
- }
492
- }
493
- else {
494
- sqlBinds.push(index + ' = ?');
495
- sqlValues.push(bindings[index]);
496
- }
497
- }
498
- }
499
- for (var index in where) {
500
- if (where.hasOwnProperty(index)) {
501
- if (typeof where[index] === 'object' && where[index] !== null) {
502
- sqlKeys.push(index + ' ' + where[index].operator + ' ?');
503
- sqlValues.push(where[index].value);
504
- }
505
- else {
506
- sqlKeys.push(index + ' = ?');
507
- sqlValues.push(where[index]);
508
- }
509
- }
510
- }
511
- sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');
512
- return new Promise(function (resolve, reject) {
513
- _this.db.transaction(function (transaction) {
514
- transaction.executeSql(sql, sqlValues, function (transaction, result) {
515
- resolve(result);
516
- }, function (transaction, error) {
517
- reject(error);
518
- });
519
- });
520
- });
521
- };
522
- DbWrapperService.prototype.dropTable = function (tables) {
523
- var _this = this;
524
- var cont = 1;
525
- cont = tables.length;
526
- return new Promise(function (resolve, reject) {
527
- tables.some(function (table) {
528
- if (cont !== 0) {
529
- _this.query('DROP TABLE ' + table)
530
- .then(function () {
531
- if (cont === 1) {
532
- resolve();
533
- }
534
- else {
535
- cont--;
536
- }
537
- }, function (err) {
538
- cont = 0;
539
- reject(err);
540
- return true;
541
- });
542
- return false;
543
- }
544
- });
545
- });
546
- };
547
- DbWrapperService.prototype.fetchAll = function (result) {
548
- var output = [];
549
- for (var i = 0; i < result.rows.length; i++) {
550
- output.push(result.rows.item(i));
551
- }
552
- return output;
553
- };
554
- DbWrapperService.prototype.fetch = function (result) {
555
- var objeto = undefined, newObj = undefined;
556
- if (result.rows.length !== 0) {
557
- objeto = result.rows.item(0);
558
- newObj = {};
559
- var keys = Object.keys(objeto);
560
- for (var key in keys) {
561
- newObj[keys[key]] = objeto[keys[key]];
562
- }
563
- }
564
- return newObj;
565
- };
566
- DbWrapperService.prototype.rowsCount = function (result) {
567
- return result.rows.length;
568
- };
569
- DbWrapperService.prototype.tableExists = function (table) {
570
- var _this = this;
571
- return this.query('select sql from sqlite_master ' +
572
- 'where type=\'table\' and name=\'' + table + '\'')
573
- .then(function (result) { return (_this.rowsCount(result) === 1); });
574
- };
575
- DbWrapperService.prototype.columnExists = function (table, column) {
576
- var _this = this;
577
- return this._tableExists(table)
578
- .then(function (tableDDL) {
579
- if (tableDDL) {
580
- return _this._columnExists(tableDDL, column);
581
- }
582
- else {
583
- return false;
584
- }
585
- });
586
- };
587
- /* Private */
588
- DbWrapperService.prototype.defColumn = function (col) {
589
- var colSql;
590
- colSql = col.name + ' ' + col.type;
591
- if (!col.isNullable) {
592
- colSql += ' NOT NULL ';
593
- }
594
- if (col.default) {
595
- colSql += ' DEFAULT ' + col.default + ' ';
596
- }
597
- if (col.type === 'text' && col.length) {
598
- colSql += " CONSTRAINT " + col.name + "_length CHECK ( ";
599
- if (col.isNullable) {
600
- colSql += col.name + " is null OR ";
601
- }
602
- colSql += "length(" + col.name + ") <= " + col.length + " )";
603
- }
604
- return colSql;
605
- };
606
- DbWrapperService.prototype.defUnique = function (unique) {
607
- var uniqSql;
608
- // depende del entorno, producción o desarrollo
609
- var onConflictUnique = 'on conflict replace';
610
- if (Array.isArray(unique.fields)) {
611
- uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields.join(',') + " ) " + onConflictUnique + " ";
612
- }
613
- if (typeof unique.fields === 'string') {
614
- uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields + " ) " + onConflictUnique + " ";
615
- }
616
- return uniqSql;
617
- };
618
- DbWrapperService.prototype.defForeign = function (fore) {
619
- var foreSql;
620
- if (Array.isArray(fore.foreignKey)) {
621
- foreSql = " FOREIGN KEY ( " + fore.foreignKey.join(',') + " ) ";
622
- }
623
- if (typeof fore.foreignKey === 'string') {
624
- foreSql = " FOREIGN KEY ( " + fore.foreignKey + " ) ";
625
- }
626
- if (Array.isArray(fore.primaryKey)) {
627
- foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey.join(',') + " ) ";
628
- }
629
- if (typeof fore.primaryKey === 'string') {
630
- foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey + " ) ";
631
- }
632
- return foreSql;
633
- };
634
- DbWrapperService.prototype._tableExists = function (table) {
635
- var _this = this;
636
- return this.query('select sql from sqlite_master ' +
637
- 'where type=\'table\' and name=\'' + table + '\'')
638
- .then(function (result) {
639
- if (_this.rowsCount(result) === 1) {
640
- return _this.fetch(result).sql;
641
- }
642
- else {
643
- return false;
644
- }
645
- });
646
- };
647
- DbWrapperService.prototype._columnExists = function (tableDDL, column) {
648
- if (tableDDL.indexOf(column) === -1) {
649
- return false;
650
- }
651
- else {
652
- return true;
653
- }
654
- };
655
- DbWrapperService.prototype.addColumn = function (table, col) {
656
- var colSql = this.defColumn(col);
657
- var query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;
658
- return this.query(query);
659
- };
660
- return DbWrapperService;
661
- }());
662
- var DB_CONFIG = new core.InjectionToken('dbWrapperConfig');
663
- var DB_SCHEMA = new core.InjectionToken('dbWrapperSchema');
664
- function getDefaultDbConfig() {
665
- return {
666
- dbName: 'db.sqlite',
667
- location: 'default',
668
- iosDatabaseLocation: 'Library'
669
- };
670
- }
671
- function provideDbWrapper(dbConfig, dbSchema) {
672
- var config = !!dbConfig ? dbConfig : getDefaultDbConfig();
673
- return new DbWrapperService(config, dbSchema);
246
+ var DbWrapperService = /** @class */ (function () {
247
+ function DbWrapperService(dbConfig, dbSchema) {
248
+ var _this = this;
249
+ this._dbName = dbConfig.dbName;
250
+ this._location = dbConfig.location || 'default';
251
+ this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
252
+ this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';
253
+ var window = (new WindowService()).nativeWindow;
254
+ if (dbSchema) {
255
+ this.schema = dbSchema;
256
+ }
257
+ this._readyPromise = new Promise(function (resolve, reject) {
258
+ if (typeof window.cordova === 'undefined') {
259
+ setTimeout(function () {
260
+ _this.init(dbSchema).then(function () {
261
+ resolve();
262
+ })
263
+ .catch(function (err) {
264
+ reject(err);
265
+ });
266
+ }, 500);
267
+ }
268
+ else {
269
+ document.addEventListener('deviceready', function () {
270
+ console.log('dbWrapper: device ready.');
271
+ _this.initDevice(dbSchema).then(function () { return resolve(); }).catch(function (err) { return reject(err); });
272
+ });
273
+ }
274
+ });
275
+ }
276
+ DbWrapperService.prototype.ready = function () {
277
+ return this._readyPromise;
278
+ };
279
+ DbWrapperService.prototype.initDevice = function (dbSchema) {
280
+ var _this = this;
281
+ var window = (new WindowService()).nativeWindow;
282
+ return new Promise(function (resolve, reject) {
283
+ _this.db = window.sqlitePlugin.openDatabase({
284
+ name: _this._dbName,
285
+ location: _this._location,
286
+ androidLockWorkaround: 1,
287
+ androidDatabaseProvider: _this._androidDatabaseProvider,
288
+ });
289
+ if (dbSchema) {
290
+ _this.generate(dbSchema).catch(function (err) {
291
+ reject(err);
292
+ }).then(function () { resolve(); });
293
+ }
294
+ else {
295
+ resolve();
296
+ }
297
+ });
298
+ };
299
+ DbWrapperService.prototype.init = function (dbSchema) {
300
+ var _this = this;
301
+ var window = (new WindowService()).nativeWindow;
302
+ return new Promise(function (resolve, reject) {
303
+ _this.db = window.openDatabase(_this._dbName, '1.0', 'database', -1);
304
+ if (dbSchema) {
305
+ _this.generate(dbSchema).catch(function (err) {
306
+ reject(err);
307
+ }).then(function () {
308
+ resolve();
309
+ });
310
+ }
311
+ else {
312
+ resolve();
313
+ }
314
+ });
315
+ };
316
+ DbWrapperService.prototype.generate = function (schema) {
317
+ var _this = this;
318
+ var sentences = [];
319
+ this.schema = schema;
320
+ if (schema.tables) {
321
+ schema.tables.forEach(function (table) {
322
+ sentences.push(_this.createTable(table));
323
+ });
324
+ }
325
+ if (schema.views) {
326
+ schema.views.forEach(function (view) {
327
+ sentences.push(_this.createView(view));
328
+ });
329
+ }
330
+ if (sentences.length === 0) {
331
+ throw new Error('Esquema de la base de datos vacia.');
332
+ }
333
+ return Promise.all(sentences);
334
+ };
335
+ DbWrapperService.prototype.createTable = function (table) {
336
+ return __awaiter(this, void 0, void 0, function () {
337
+ var sql, onConflictPrimary, sentences, newColumns, tableDDL;
338
+ var _this = this;
339
+ return __generator(this, function (_a) {
340
+ switch (_a.label) {
341
+ case 0:
342
+ sql = '';
343
+ sentences = [], newColumns = [];
344
+ return [4 /*yield*/, this._tableExists(table.name)];
345
+ case 1:
346
+ tableDDL = _a.sent();
347
+ if (tableDDL) {
348
+ table.columns.forEach(function (col) {
349
+ if (!_this._columnExists(tableDDL, col.name)) {
350
+ newColumns.push(_this.addColumn(table.name, col));
351
+ }
352
+ });
353
+ }
354
+ else {
355
+ table.columns.forEach(function (col) {
356
+ sentences.push(_this.defColumn(col));
357
+ });
358
+ }
359
+ onConflictPrimary = 'on conflict fail';
360
+ if (Array.isArray(table.primary)) {
361
+ sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary);
362
+ }
363
+ if (typeof table.primary === 'string') {
364
+ sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary);
365
+ }
366
+ if (table.uniques) {
367
+ table.uniques.forEach(function (uniq) {
368
+ sentences.push(_this.defUnique(uniq));
369
+ });
370
+ }
371
+ if (table.foreigns) {
372
+ table.foreigns.forEach(function (fore) {
373
+ sentences.push(_this.defForeign(fore));
374
+ });
375
+ }
376
+ if (tableDDL && newColumns.length !== 0) {
377
+ return [2 /*return*/, Promise.all(newColumns)
378
+ .then(function () { console.log("Table " + table.name + " altered."); })
379
+ .catch(function (err) {
380
+ console.error("Table " + table.name + ": " + err.message);
381
+ throw new Error("Table " + table.name + ": " + err.message);
382
+ })];
383
+ }
384
+ else if (!tableDDL) {
385
+ sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';
386
+ return [2 /*return*/, this.query(sql)
387
+ .then(function () { console.log("Table " + table.name + " created."); })
388
+ .catch(function (err) {
389
+ console.error("Table " + table.name + ": " + err.message);
390
+ throw new Error("Table " + table.name + ": " + err.message);
391
+ })];
392
+ }
393
+ else {
394
+ return [2 /*return*/, Promise.resolve().then(function () { console.log("Table " + table.name + " initialized."); })];
395
+ }
396
+ return [2 /*return*/];
397
+ }
398
+ });
399
+ });
400
+ };
401
+ DbWrapperService.prototype.createView = function (view) {
402
+ var sql;
403
+ sql = 'CREATE VIEW IF NOT EXISTS ' + view.name
404
+ + ' AS ' + view.sql;
405
+ return this.query(sql);
406
+ };
407
+ DbWrapperService.prototype.getSchemaTable = function (tableName) {
408
+ var res;
409
+ this.schema.tables.forEach(function (table) {
410
+ if (table.name === tableName) {
411
+ res = table;
412
+ }
413
+ });
414
+ return res;
415
+ };
416
+ DbWrapperService.prototype.getUniquesTable = function (table) {
417
+ var res;
418
+ table.uniques.forEach(function (uniq) {
419
+ res[uniq.name] = uniq;
420
+ });
421
+ return res;
422
+ };
423
+ DbWrapperService.prototype.query = function (query, bindings) {
424
+ var _this = this;
425
+ if (bindings === void 0) { bindings = []; }
426
+ return new Promise(function (resolve, reject) {
427
+ if (query.indexOf('select') === 0) {
428
+ _this.db.readTransaction(function (transaction) {
429
+ transaction.executeSql(query, bindings, function (transaction, result) {
430
+ resolve(result);
431
+ }, function (transaction, error) {
432
+ reject(error);
433
+ });
434
+ }, function (err) { return reject(err); });
435
+ }
436
+ else {
437
+ _this.db.transaction(function (transaction) {
438
+ transaction.executeSql(query, bindings, function (transaction, result) {
439
+ resolve(result);
440
+ }, function (transaction, error) {
441
+ reject(error);
442
+ });
443
+ }, function (err) { return reject(err); });
444
+ }
445
+ });
446
+ };
447
+ DbWrapperService.prototype.Count = function (query, bindings) {
448
+ var _this = this;
449
+ if (bindings === void 0) { bindings = []; }
450
+ return this.query(query, bindings).then(function (rows) {
451
+ return _this.rowsCount(rows);
452
+ });
453
+ };
454
+ DbWrapperService.prototype.insert = function (table, bindings) {
455
+ var _this = this;
456
+ var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
457
+ sql = sql + 'insert into ' + table + ' ';
458
+ for (var index in bindings) {
459
+ if (bindings.hasOwnProperty(index)) {
460
+ sqlKeys.push(index);
461
+ sqlValues.push(bindings[index]);
462
+ sqlBinds.push('?');
463
+ }
464
+ }
465
+ sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';
466
+ return new Promise(function (resolve, reject) {
467
+ _this.db.transaction(function (transaction) {
468
+ transaction.executeSql(sql, sqlValues, function (transaction, result) {
469
+ resolve(result);
470
+ }, function (transaction, error) {
471
+ reject(error);
472
+ });
473
+ });
474
+ });
475
+ };
476
+ DbWrapperService.prototype.update = function (table, bindings, where) {
477
+ var _this = this;
478
+ var sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
479
+ sql = sql + 'update ' + table + ' set ';
480
+ for (var index in bindings) {
481
+ if (bindings.hasOwnProperty(index)) {
482
+ var newObj = bindings[index];
483
+ if (typeof newObj === 'object' && newObj !== null) {
484
+ sqlValues.push(newObj.value);
485
+ if (newObj.ifnull) {
486
+ sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');
487
+ }
488
+ else if (newObj.operator) {
489
+ sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');
490
+ }
491
+ else {
492
+ sqlBinds.push(index + ' = ?');
493
+ }
494
+ }
495
+ else {
496
+ sqlBinds.push(index + ' = ?');
497
+ sqlValues.push(bindings[index]);
498
+ }
499
+ }
500
+ }
501
+ for (var index in where) {
502
+ if (where.hasOwnProperty(index)) {
503
+ if (typeof where[index] === 'object' && where[index] !== null) {
504
+ sqlKeys.push(index + ' ' + where[index].operator + ' ?');
505
+ sqlValues.push(where[index].value);
506
+ }
507
+ else {
508
+ sqlKeys.push(index + ' = ?');
509
+ sqlValues.push(where[index]);
510
+ }
511
+ }
512
+ }
513
+ sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');
514
+ return new Promise(function (resolve, reject) {
515
+ _this.db.transaction(function (transaction) {
516
+ transaction.executeSql(sql, sqlValues, function (transaction, result) {
517
+ resolve(result);
518
+ }, function (transaction, error) {
519
+ reject(error);
520
+ });
521
+ });
522
+ });
523
+ };
524
+ DbWrapperService.prototype.dropTable = function (tables) {
525
+ var _this = this;
526
+ var cont = 1;
527
+ cont = tables.length;
528
+ return new Promise(function (resolve, reject) {
529
+ tables.some(function (table) {
530
+ if (cont !== 0) {
531
+ _this.query('DROP TABLE ' + table)
532
+ .then(function () {
533
+ if (cont === 1) {
534
+ resolve();
535
+ }
536
+ else {
537
+ cont--;
538
+ }
539
+ }, function (err) {
540
+ cont = 0;
541
+ reject(err);
542
+ return true;
543
+ });
544
+ return false;
545
+ }
546
+ });
547
+ });
548
+ };
549
+ DbWrapperService.prototype.fetchAll = function (result) {
550
+ var output = [];
551
+ for (var i = 0; i < result.rows.length; i++) {
552
+ output.push(result.rows.item(i));
553
+ }
554
+ return output;
555
+ };
556
+ DbWrapperService.prototype.fetch = function (result) {
557
+ var objeto = undefined, newObj = undefined;
558
+ if (result.rows.length !== 0) {
559
+ objeto = result.rows.item(0);
560
+ newObj = {};
561
+ var keys = Object.keys(objeto);
562
+ for (var key in keys) {
563
+ newObj[keys[key]] = objeto[keys[key]];
564
+ }
565
+ }
566
+ return newObj;
567
+ };
568
+ DbWrapperService.prototype.rowsCount = function (result) {
569
+ return result.rows.length;
570
+ };
571
+ DbWrapperService.prototype.tableExists = function (table) {
572
+ var _this = this;
573
+ return this.query('select sql from sqlite_master ' +
574
+ 'where type=\'table\' and name=\'' + table + '\'')
575
+ .then(function (result) { return (_this.rowsCount(result) === 1); });
576
+ };
577
+ DbWrapperService.prototype.columnExists = function (table, column) {
578
+ var _this = this;
579
+ return this._tableExists(table)
580
+ .then(function (tableDDL) {
581
+ if (tableDDL) {
582
+ return _this._columnExists(tableDDL, column);
583
+ }
584
+ else {
585
+ return false;
586
+ }
587
+ });
588
+ };
589
+ /* Private */
590
+ DbWrapperService.prototype.defColumn = function (col) {
591
+ var colSql;
592
+ colSql = col.name + ' ' + col.type;
593
+ if (!col.isNullable) {
594
+ colSql += ' NOT NULL ';
595
+ }
596
+ if (col.default) {
597
+ colSql += ' DEFAULT ' + col.default + ' ';
598
+ }
599
+ if (col.type === 'text' && col.length) {
600
+ colSql += " CONSTRAINT " + col.name + "_length CHECK ( ";
601
+ if (col.isNullable) {
602
+ colSql += col.name + " is null OR ";
603
+ }
604
+ colSql += "length(" + col.name + ") <= " + col.length + " )";
605
+ }
606
+ return colSql;
607
+ };
608
+ DbWrapperService.prototype.defUnique = function (unique) {
609
+ var uniqSql;
610
+ // depende del entorno, producción o desarrollo
611
+ var onConflictUnique = 'on conflict replace';
612
+ if (Array.isArray(unique.fields)) {
613
+ uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields.join(',') + " ) " + onConflictUnique + " ";
614
+ }
615
+ if (typeof unique.fields === 'string') {
616
+ uniqSql = " CONSTRAINT " + unique.name + " UNIQUE ( " + unique.fields + " ) " + onConflictUnique + " ";
617
+ }
618
+ return uniqSql;
619
+ };
620
+ DbWrapperService.prototype.defForeign = function (fore) {
621
+ var foreSql;
622
+ if (Array.isArray(fore.foreignKey)) {
623
+ foreSql = " FOREIGN KEY ( " + fore.foreignKey.join(',') + " ) ";
624
+ }
625
+ if (typeof fore.foreignKey === 'string') {
626
+ foreSql = " FOREIGN KEY ( " + fore.foreignKey + " ) ";
627
+ }
628
+ if (Array.isArray(fore.primaryKey)) {
629
+ foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey.join(',') + " ) ";
630
+ }
631
+ if (typeof fore.primaryKey === 'string') {
632
+ foreSql = " REFERENCES " + fore.referenceTable + " ( " + fore.primaryKey + " ) ";
633
+ }
634
+ return foreSql;
635
+ };
636
+ DbWrapperService.prototype._tableExists = function (table) {
637
+ var _this = this;
638
+ return this.query('select sql from sqlite_master ' +
639
+ 'where type=\'table\' and name=\'' + table + '\'')
640
+ .then(function (result) {
641
+ if (_this.rowsCount(result) === 1) {
642
+ return _this.fetch(result).sql;
643
+ }
644
+ else {
645
+ return false;
646
+ }
647
+ });
648
+ };
649
+ DbWrapperService.prototype._columnExists = function (tableDDL, column) {
650
+ if (tableDDL.indexOf(column) === -1) {
651
+ return false;
652
+ }
653
+ else {
654
+ return true;
655
+ }
656
+ };
657
+ DbWrapperService.prototype.addColumn = function (table, col) {
658
+ var colSql = this.defColumn(col);
659
+ var query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;
660
+ return this.query(query);
661
+ };
662
+ return DbWrapperService;
663
+ }());
664
+ var DB_CONFIG = new core.InjectionToken('dbWrapperConfig');
665
+ var DB_SCHEMA = new core.InjectionToken('dbWrapperSchema');
666
+ function getDefaultDbConfig() {
667
+ return {
668
+ dbName: 'db.sqlite',
669
+ location: 'default',
670
+ iosDatabaseLocation: 'Library'
671
+ };
672
+ }
673
+ function provideDbWrapper(dbConfig, dbSchema) {
674
+ var config = !!dbConfig ? dbConfig : getDefaultDbConfig();
675
+ return new DbWrapperService(config, dbSchema);
674
676
  }
675
677
 
676
- var DbWrapperModule = /** @class */ (function () {
677
- function DbWrapperModule() {
678
- }
679
- DbWrapperModule_1 = DbWrapperModule;
680
- DbWrapperModule.forRoot = function (dbConfig, schema) {
681
- return {
682
- ngModule: DbWrapperModule_1,
683
- providers: [
684
- { provide: DB_CONFIG, useValue: dbConfig },
685
- { provide: DB_SCHEMA, useValue: schema },
686
- { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }
687
- ]
688
- };
689
- };
690
- var DbWrapperModule_1;
691
- DbWrapperModule = DbWrapperModule_1 = __decorate([
692
- core.NgModule()
693
- ], DbWrapperModule);
694
- return DbWrapperModule;
678
+ var DbWrapperModule = /** @class */ (function () {
679
+ function DbWrapperModule() {
680
+ }
681
+ DbWrapperModule_1 = DbWrapperModule;
682
+ DbWrapperModule.forRoot = function (dbConfig, schema) {
683
+ return {
684
+ ngModule: DbWrapperModule_1,
685
+ providers: [
686
+ { provide: DB_CONFIG, useValue: dbConfig },
687
+ { provide: DB_SCHEMA, useValue: schema },
688
+ { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }
689
+ ]
690
+ };
691
+ };
692
+ var DbWrapperModule_1;
693
+ DbWrapperModule = DbWrapperModule_1 = __decorate([
694
+ core.NgModule()
695
+ ], DbWrapperModule);
696
+ return DbWrapperModule;
695
697
  }());
696
698
 
697
-
698
- (function (DataType) {
699
- DataType["Integer"] = "integer";
700
- DataType["Int"] = "integer";
701
- DataType["TinyInt"] = "integer";
702
- DataType["SmallInt"] = "integer";
703
- DataType["BigInt"] = "integer";
704
- DataType["Text"] = "text";
705
- DataType["Char"] = "text";
706
- DataType["NChar"] = "text";
707
- DataType["VarChar"] = "text";
708
- DataType["NVarChar"] = "text";
709
- DataType["CLOB"] = "text";
710
- DataType["BLOB"] = "blob";
711
- DataType["Real"] = "real";
712
- DataType["Double"] = "real";
713
- DataType["Decimal"] = "real";
714
- DataType["Float"] = "real";
715
- DataType["Boolean"] = "integer";
716
- DataType["DateTime"] = "text";
717
- DataType["Date"] = "text";
718
- })(exports.DataType || (exports.DataType = {}));
719
-
720
- (function (DefaultType) {
721
- DefaultType["Integer"] = "0";
722
- DefaultType["Int"] = "0";
723
- DefaultType["TinyInt"] = "0";
724
- DefaultType["SmallInt"] = "0";
725
- DefaultType["BigInt"] = "0";
726
- DefaultType["Text"] = "''";
727
- DefaultType["Char"] = "''";
728
- DefaultType["NChar"] = "''";
729
- DefaultType["VarChar"] = "''";
730
- DefaultType["NVarChar"] = "''";
731
- DefaultType["CLOB"] = "''";
732
- DefaultType["BLOB"] = "0";
733
- DefaultType["Real"] = "0.0";
734
- DefaultType["Double"] = "0.0";
735
- DefaultType["Decimal"] = "0.0";
736
- DefaultType["Float"] = "0.0";
737
- DefaultType["Boolean"] = "0";
738
- DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
739
- DefaultType["Date"] = "(date('now', 'localtime'))";
699
+
700
+ (function (DataType) {
701
+ DataType["Integer"] = "integer";
702
+ DataType["Int"] = "integer";
703
+ DataType["TinyInt"] = "integer";
704
+ DataType["SmallInt"] = "integer";
705
+ DataType["BigInt"] = "integer";
706
+ DataType["Text"] = "text";
707
+ DataType["Char"] = "text";
708
+ DataType["NChar"] = "text";
709
+ DataType["VarChar"] = "text";
710
+ DataType["NVarChar"] = "text";
711
+ DataType["CLOB"] = "text";
712
+ DataType["BLOB"] = "blob";
713
+ DataType["Real"] = "real";
714
+ DataType["Double"] = "real";
715
+ DataType["Decimal"] = "real";
716
+ DataType["Float"] = "real";
717
+ DataType["Boolean"] = "integer";
718
+ DataType["DateTime"] = "text";
719
+ DataType["Date"] = "text";
720
+ })(exports.DataType || (exports.DataType = {}));
721
+
722
+ (function (DefaultType) {
723
+ DefaultType["Integer"] = "0";
724
+ DefaultType["Int"] = "0";
725
+ DefaultType["TinyInt"] = "0";
726
+ DefaultType["SmallInt"] = "0";
727
+ DefaultType["BigInt"] = "0";
728
+ DefaultType["Text"] = "''";
729
+ DefaultType["Char"] = "''";
730
+ DefaultType["NChar"] = "''";
731
+ DefaultType["VarChar"] = "''";
732
+ DefaultType["NVarChar"] = "''";
733
+ DefaultType["CLOB"] = "''";
734
+ DefaultType["BLOB"] = "0";
735
+ DefaultType["Real"] = "0.0";
736
+ DefaultType["Double"] = "0.0";
737
+ DefaultType["Decimal"] = "0.0";
738
+ DefaultType["Float"] = "0.0";
739
+ DefaultType["Boolean"] = "0";
740
+ DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
741
+ DefaultType["Date"] = "(date('now', 'localtime'))";
740
742
  })(exports.DefaultType || (exports.DefaultType = {}));
741
743
 
742
744
  exports.DB_CONFIG = DB_CONFIG;