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
86 lines • 14.2 kB
JavaScript
import { Injectable, Injector, Optional, Inject } from '@angular/core';
import { Ddl, forkJoinSafe } from 'database-builder';
import { DatabaseMigrationContract } from './database-migration-contract';
import { DatabaseMigrationBase } from '../utils/database-migration-base';
import { DatabaseSettingsFactoryContract } from '../utils/database-settings-factory-contract';
import { Observable } from 'rxjs';
import { DATABASE_MIGRATION } from '../utils/dependency-injection-definition';
export class DatabaseMigration extends DatabaseMigrationBase {
constructor(_injector, _databaseMigrationContract) {
super();
this._injector = _injector;
this._databaseMigrationContract = _databaseMigrationContract;
// tslint:disable-next-line: deprecation
this._settings = _injector.get(DatabaseSettingsFactoryContract);
}
reset(database) {
// tslint:disable-next-line:no-console
console.info('database reset');
const observablesWait = [];
const mappers = this._settings.mapper(this._injector);
// remove dados offline da versão anterior, pois o formato dos dados foi alterado de uma versão para a outra
const ddl = new Ddl({ database, getMapper: mappers, enableLog: true });
mappers.forEachMapper((value, key) => {
if (!value.readOnly) {
observablesWait.push(ddl.drop(value.newable).execute());
observablesWait.push(ddl.create(value.newable).execute());
}
});
return forkJoinSafe(observablesWait);
}
migrationExecute(database, version) {
return new Observable((observer) => {
let observablesNested = [];
if (this._databaseMigrationContract) {
this._databaseMigrationContract.onStart();
const toObservables = this._databaseMigrationContract.to(version, database, this._settings.mapper(this._injector), this);
if (toObservables && toObservables.length > 0) {
observablesNested = observablesNested.concat(toObservables);
}
}
if (observablesNested.length === 0 && version.oldVersion < 1) {
observablesNested.push(this.reset(database));
}
if (observablesNested.length > 0) {
this._databaseMigrationContract.onProgress();
}
this.callNested(observablesNested, 0)
.subscribe((result) => {
observer.next(result);
observer.complete();
}, (error) => {
observer.error(error);
observer.complete();
}, () => {
this._databaseMigrationContract.onFinish();
});
});
}
callNested(observablesNested, nextIndex) {
return new Observable((observer) => {
if (observablesNested.length > nextIndex) {
observablesNested[nextIndex].subscribe((result) => {
this.callNested(observablesNested, ++nextIndex).subscribe((_) => {
observer.next(true);
observer.complete();
}, (error) => {
observer.error(error);
observer.complete();
});
});
}
else {
observer.next(true);
observer.complete();
}
});
}
}
DatabaseMigration.decorators = [
{ type: Injectable }
];
DatabaseMigration.ctorParameters = () => [
{ type: Injector },
{ type: DatabaseMigrationContract, decorators: [{ type: Optional }, { type: Inject, args: [DATABASE_MIGRATION,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IkM6L1RyYWJhbGhvRmVybmFuZG8vUHJvamV0b3MvaW9uaWMtZGF0YWJhc2UtYnVpbGRlci9wcm9qZWN0cy9pb25pYy1kYXRhYmFzZS1idWlsZGVyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9kYXRhYmFzZS1taWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFrQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzlFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxxQkFBcUI7SUFJeEQsWUFDWSxTQUFtQixFQUNxQiwwQkFBcUQ7UUFFckcsS0FBSyxFQUFFLENBQUM7UUFIQSxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ3FCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBMkI7UUFHckcsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBd0I7UUFFakMsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvQixNQUFNLGVBQWUsR0FBMkIsRUFBRSxD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VyxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDakUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QixDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTt3QkFDZCxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN0QixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3ZCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUF6RkosVUFBVTs7O1lBVFUsUUFBUTtZQUVwQix5QkFBeUIsdUJBY3pCLFFBQVEsWUFBSSxNQUFNLFNBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJy4vLi4vbW9kZWwvdmVyc2lvbi1tb2RlbCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERkbCwgRGF0YWJhc2VPYmplY3QsIGZvcmtKb2luU2FmZSB9IGZyb20gJ2RhdGFiYXNlLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBEYXRhYmFzZU1pZ3JhdGlvbkNvbnRyYWN0IH0gZnJvbSAnLi9kYXRhYmFzZS1taWdyYXRpb24tY29udHJhY3QnO1xyXG5pbXBvcnQgeyBEYXRhYmFzZU1pZ3JhdGlvbkJhc2UgfSBmcm9tICcuLi91dGlscy9kYXRhYmFzZS1taWdyYXRpb24tYmFzZSc7XHJcbmltcG9ydCB7IERhdGFiYXNlUmVzZXR0YWJsZUNvbnRyYWN0IH0gZnJvbSAnLi9kYXRhYmFzZS1yZXNldHRhYmxlLWNvbnRyYWN0JztcclxuaW1wb3J0IHsgRGF0YWJhc2VTZXR0aW5nc0ZhY3RvcnlDb250cmFjdCB9IGZyb20gJy4uL3V0aWxzL2RhdGFiYXNlLXNldHRpbmdzLWZhY3RvcnktY29udHJhY3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEQVRBQkFTRV9NSUdSQVRJT04gfSBmcm9tICcuLi91dGlscy9kZXBlbmRlbmN5LWluamVjdGlvbi1kZWZpbml0aW9uJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERhdGFiYXNlTWlncmF0aW9uIGV4dGVuZHMgRGF0YWJhc2VNaWdyYXRpb25CYXNlIGltcGxlbWVudHMgRGF0YWJhc2VSZXNldHRhYmxlQ29udHJhY3Qge1xyXG5cclxuICAgIHByaXZhdGUgX3NldHRpbmdzOiBEYXRhYmFzZVNldHRpbmdzRmFjdG9yeUNvbnRyYWN0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFCQVNFX01JR1JBVElPTikgcHJpdmF0ZSBfZGF0YWJhc2VNaWdyYXRpb25Db250cmFjdDogRGF0YWJhc2VNaWdyYXRpb25Db250cmFjdFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBfaW5qZWN0b3IuZ2V0KERhdGFiYXNlU2V0dGluZ3NGYWN0b3J5Q29udHJhY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldChkYXRhYmFzZTogRGF0YWJhc2VPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbygnZGF0YWJhc2UgcmVzZXQnKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXNXYWl0OiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcHBlcnMgPSB0aGlzLl9zZXR0aW5ncy5tYXBwZXIodGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgICAgICAvLyByZW1vdmUgZGFkb3Mgb2ZmbGluZSBkYSB2ZXJzw6NvIGFudGVyaW9yLCBwb2lzIG8gZm9ybWF0byBkb3MgZGFkb3MgZm9pIGFsdGVyYWRvIGRlIHVtYSB2ZXJzw6NvIHBhcmEgYSBvdXRyYVxyXG4gICAgICAgIGNvbnN0IGRkbCA9IG5ldyBEZGwoeyBkYXRhYmFzZSwgZ2V0TWFwcGVyOiBtYXBwZXJzLCBlbmFibGVMb2c6IHRydWUgfSk7XHJcbiAgICAgICAgbWFwcGVycy5mb3JFYWNoTWFwcGVyKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdmFsdWUucmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmFibGVzV2FpdC5wdXNoKGRkbC5kcm9wKHZhbHVlLm5ld2FibGUpLmV4ZWN1dGUoKSk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlc1dhaXQucHVzaChkZGwuY3JlYXRlKHZhbHVlLm5ld2FibGUpLmV4ZWN1dGUoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luU2FmZShvYnNlcnZhYmxlc1dhaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtaWdyYXRpb25FeGVjdXRlKGRhdGFiYXNlOiBEYXRhYmFzZU9iamVjdCwgdmVyc2lvbjogVmVyc2lvbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPGJvb2xlYW4+KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgb2JzZXJ2YWJsZXNOZXN0ZWQ6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFiYXNlTWlncmF0aW9uQ29udHJhY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlTWlncmF0aW9uQ29udHJhY3Qub25TdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9PYnNlcnZhYmxlcyA9IHRoaXMuX2RhdGFiYXNlTWlncmF0aW9uQ29udHJhY3QudG8oXHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tYXBwZXIodGhpcy5faW5qZWN0b3IpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAodG9PYnNlcnZhYmxlcyAmJiB0b09ic2VydmFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlc05lc3RlZCA9IG9ic2VydmFibGVzTmVzdGVkLmNvbmNhdCh0b09ic2VydmFibGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGVzTmVzdGVkLmxlbmd0aCA9PT0gMCAmJiB2ZXJzaW9uLm9sZFZlcnNpb24gPCAxKSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlc05lc3RlZC5wdXNoKHRoaXMucmVzZXQoZGF0YWJhc2UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGVzTmVzdGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlTWlncmF0aW9uQ29udHJhY3Qub25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbE5lc3RlZChvYnNlcnZhYmxlc05lc3RlZCwgMClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFzZU1pZ3JhdGlvbkNvbnRyYWN0Lm9uRmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGxOZXN0ZWQob2JzZXJ2YWJsZXNOZXN0ZWQ6IEFycmF5PE9ic2VydmFibGU8YW55Pj4sIG5leHRJbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8Ym9vbGVhbj4pID0+IHtcclxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGVzTmVzdGVkLmxlbmd0aCA+IG5leHRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZXNOZXN0ZWRbbmV4dEluZGV4XS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsTmVzdGVkKG9ic2VydmFibGVzTmVzdGVkLCArK25leHRJbmRleCkuc3Vic2NyaWJlKChfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==