UNPKG

ionic-database-builder

Version:

Extended library from database-builder to assist in creating and maintaining SQL commands. Allowing integrate execute commands with SQLite ('@ionic-native/sqlite'), Web Sql, etc. Through the interface injection 'DatabaseCreatorContract' returning an imple

91 lines 14.4 kB
import * as momentNs from 'moment'; const moment = momentNs; import { Observable } from 'rxjs'; export class DatabaseMigrationBase { version(database, version) { return new Observable((observer) => { this.checkTableVersion(database) .subscribe(_ => { this.checkVersion(database, version) .subscribe((result) => { this.migration(database, result) .subscribe(r => { observer.next(r); observer.complete(); }, err => this.error(err, observer)); }, err => this.error(err, observer)); }, err => this.error(err, observer)); }); } error(error, observer) { // tslint:disable-next-line:no-console console.error(error); observer.error(error); observer.complete(); } checkTableVersion(database) { return new Observable((observer) => { // return new Promise<any>((resolve, reject) => { const scriptTableVersion = `CREATE TABLE IF NOT EXISTS MigrationVersion( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT , data INTEGER , version TEXT );`; database.executeSql(scriptTableVersion, {}) .then(result => { observer.next(result); observer.complete(); }, err => this.error(err, observer)); }); } checkVersion(database, newVersion) { return new Observable((observer) => { this.getVersion(database).subscribe((oldVersion) => { if (oldVersion > 0) { if (newVersion > oldVersion) { // tslint:disable-next-line:no-console console.info(`Version old: ${oldVersion}`); database.executeSql(`UPDATE MigrationVersion SET (data, version) = (?, ?);`, [moment().unix(), newVersion]) .then() .catch(err => this.error(err, observer)); } } else { database.executeSql(`INSERT INTO MigrationVersion (data, version) VALUES (?, ?)`, [moment().unix(), newVersion]) .then() .catch(err => this.error(err, observer)); } observer.next({ oldVersion, newVersion }); observer.complete(); }); }); } getVersion(database) { return new Observable((observer) => { database.executeSql(`SELECT * FROM MigrationVersion`, {}) .then((result) => { let version = 0; if (result.rows.length > 0) { version = Number.parseFloat(result.rows.item(0).version); } observer.next(version); observer.complete(); }) .catch(err => this.error(err, observer)); }); } migration(database, control) { return new Observable((observer) => { this.migrationExecute(database, control) .subscribe(result => { observer.next(result); observer.complete(); }, err => this.error(err, observer)); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWlncmF0aW9uLWJhc2UuanMiLCJzb3VyY2VSb290IjoiQzovVHJhYmFsaG9GZXJuYW5kby9Qcm9qZXRvcy9pb25pYy1kYXRhYmFzZS1idWlsZGVyL3Byb2plY3RzL2lvbmljLWRhdGFiYXNlLWJ1aWxkZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2RhdGFiYXNlLW1pZ3JhdGlvbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxRQUFRLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUV4QixPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE1BQU0sT0FBZ0IscUJBQXFCO0lBRWhDLE9BQU8sQ0FBQyxRQUF3QixFQUFFLE9BQWU7UUFDcEQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQTJCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO2lCQUMzQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO3FCQUMvQixTQUFTLENBQUMsQ0FBQyxNQUFtRCxFQUFFLEVBQUU7b0JBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzt5QkFDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFB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Q0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDNUQ7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFNBQVMsQ0FBQyxRQUF3QixFQUFFLE9BQW1EO1FBQzNGLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUEyQixFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7aUJBQ25DLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBtb21lbnROcyBmcm9tICdtb21lbnQnO1xyXG5jb25zdCBtb21lbnQgPSBtb21lbnROcztcclxuaW1wb3J0IHsgRGF0YWJhc2VPYmplY3QgfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhYmFzZU1pZ3JhdGlvbkJhc2Uge1xyXG5cclxuICAgIHB1YmxpYyB2ZXJzaW9uKGRhdGFiYXNlOiBEYXRhYmFzZU9iamVjdCwgdmVyc2lvbjogbnVtYmVyKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8Ym9vbGVhbj4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RhYmxlVmVyc2lvbihkYXRhYmFzZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZlcnNpb24oZGF0YWJhc2UsIHZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBvbGRWZXJzaW9uOiBudW1iZXI7IG5ld1ZlcnNpb246IG51bWJlcjsgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWdyYXRpb24oZGF0YWJhc2UsIHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGVyciA9PiB0aGlzLmVycm9yKGVyciwgb2JzZXJ2ZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBlcnJvcihlcnJvcjogc3RyaW5nLCBvYnNlcnZlcjogT2JzZXJ2ZXI8YW55Pikge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IG1pZ3JhdGlvbkV4ZWN1dGUoXHJcbiAgICAgICAgZGF0YWJhc2U6IERhdGFiYXNlT2JqZWN0LCBjb250cm9sOiB7IG9sZFZlcnNpb246IG51bWJlciwgbmV3VmVyc2lvbjogbnVtYmVyIH1cclxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1RhYmxlVmVyc2lvbihkYXRhYmFzZTogRGF0YWJhc2VPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPGFueT4pID0+IHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JpcHRUYWJsZVZlcnNpb24gPSBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgTWlncmF0aW9uVmVyc2lvbihcclxuICAgICAgICAgICAgICAgICAgICBpZCBJTlRFR0VSIE5PVCBOVUxMIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlRcclxuICAgICAgICAgICAgICAgICAgICAsIGRhdGEgSU5URUdFUlxyXG4gICAgICAgICAgICAgICAgICAgICwgdmVyc2lvbiBURVhUXHJcbiAgICAgICAgICAgICAgICAgICAgKTtgO1xyXG4gICAgICAgICAgICBkYXRhYmFzZS5leGVjdXRlU3FsKHNjcmlwdFRhYmxlVmVyc2lvbiwge30pXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tWZXJzaW9uKGRhdGFiYXNlOiBEYXRhYmFzZU9iamVjdCwgbmV3VmVyc2lvbjogbnVtYmVyKTogT2JzZXJ2YWJsZTx7IG9sZFZlcnNpb246IG51bWJlciwgbmV3VmVyc2lvbjogbnVtYmVyIH0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmVyc2lvbihkYXRhYmFzZSkuc3Vic2NyaWJlKChvbGRWZXJzaW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvbGRWZXJzaW9uID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzaW9uID4gb2xkVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oYFZlcnNpb24gb2xkOiAke29sZFZlcnNpb259YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLmV4ZWN1dGVTcWwoYFVQREFURSBNaWdyYXRpb25WZXJzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUIChkYXRhLCB2ZXJzaW9uKSA9ICg/LCA/KTtgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vbWVudCgpLnVuaXgoKSwgbmV3VmVyc2lvbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UuZXhlY3V0ZVNxbChgSU5TRVJUIElOVE8gTWlncmF0aW9uVmVyc2lvbiAoZGF0YSwgdmVyc2lvbikgVkFMVUVTICg/LCA/KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb21lbnQoKS51bml4KCksIG5ld1ZlcnNpb25dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5lcnJvcihlcnIsIG9ic2VydmVyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBvbGRWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZlcnNpb25cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRWZXJzaW9uKGRhdGFiYXNlOiBEYXRhYmFzZU9iamVjdCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8bnVtYmVyPikgPT4ge1xyXG4gICAgICAgICAgICBkYXRhYmFzZS5leGVjdXRlU3FsKGBTRUxFQ1QgKiBGUk9NIE1pZ3JhdGlvblZlcnNpb25gLCB7fSlcclxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmVyc2lvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IE51bWJlci5wYXJzZUZsb2F0KHJlc3VsdC5yb3dzLml0ZW0oMCkudmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWlncmF0aW9uKGRhdGFiYXNlOiBEYXRhYmFzZU9iamVjdCwgY29udHJvbDogeyBvbGRWZXJzaW9uOiBudW1iZXIsIG5ld1ZlcnNpb246IG51bWJlciB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8Ym9vbGVhbj4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5taWdyYXRpb25FeGVjdXRlKGRhdGFiYXNlLCBjb250cm9sKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHRoaXMuZXJyb3IoZXJyLCBvYnNlcnZlcikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==