Skip to content

Commit 1ff8874

Browse files
author
fernandocode
committed
v.0.3.4
alteração para permitir incorporar platform ready na inialização da base de dados, evitando que uma conexão tente ser criada antes da platform está preparada. Adicionado especialmente para o Ionic que só tem o plugin SQLite disponivel após a inicialização da platform.
1 parent 0a6c89b commit 1ff8874

15 files changed

+103
-121
lines changed

projects/ionic-database-builder/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ionic-database-builder",
3-
"version": "0.3.3",
3+
"version": "0.3.4",
44
"description": "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 implementation of 'DatabaseObject'.",
55
"repository": {
66
"type": "git",

projects/ionic-database-builder/src/lib/defaults/database-factory-default.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Inject, Injectable } from "@angular/core";
2-
import { DatabaseFactoryContract } from "../utils/database-factory-contract";
3-
import { DatabaseObject, DatabaseCreatorContract } from "database-builder";
4-
import { Observable, Observer } from "rxjs";
1+
import { Inject, Injectable } from '@angular/core';
2+
import { DatabaseFactoryContract } from '../utils/database-factory-contract';
3+
import { DatabaseObject, DatabaseCreatorContract } from 'database-builder';
4+
import { Observable, Observer } from 'rxjs';
55
import { DATABASE_CREATOR, IS_AVAILABLE_DATABASE } from '../utils/dependency-injection-definition';
66

77
@Injectable()
@@ -19,7 +19,7 @@ export class DatabaseFactoryDefault extends DatabaseFactoryContract {
1919
if (this._isAvailable) {
2020
this._databaseCreator.create({
2121
name: databaseName,
22-
location: "default"
22+
location: 'default'
2323
})
2424
.then(database => {
2525
observer.next(database);

projects/ionic-database-builder/src/lib/ionic-database-builder.module.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import { DatabaseCreatorContract } from 'database-builder';
22
import { Type, ModuleWithProviders, NgModule, SkipSelf, Optional } from '@angular/core';
33
import { DatabaseMigrationContract } from './services/database-migration-contract';
44
import { DatabaseSettingsFactoryContract } from './utils/database-settings-factory-contract';
5-
import { IS_AVAILABLE_DATABASE, DATABASE_CREATOR, IS_ENABLE_LOG, DATABASE_MIGRATION } from './utils/dependency-injection-definition';
5+
import {
6+
IS_AVAILABLE_DATABASE, DATABASE_CREATOR, IS_ENABLE_LOG, DATABASE_MIGRATION, PLATFORM_LOAD
7+
} from './utils/dependency-injection-definition';
68
import { Database } from './services/database';
79
import { DatabaseMigration } from './services/database-migration';
810
import { DatabaseHelperService } from './services/database-helper.service';
911
import { DatabaseFactoryDefault } from './defaults/database-factory-default';
1012
import { DatabaseFactoryContract } from './utils/database-factory-contract';
13+
import { PlatformLoad } from './utils/platform-load';
1114

1215
@NgModule({
1316
providers: [
@@ -31,13 +34,15 @@ export class IonicDatabaseBuilderModule {
3134

3235
public static forSimple(
3336
isEnableLogProvider: boolean = false,
34-
isAvailableProvider: boolean = true
37+
isAvailableProvider: boolean = true,
38+
platformLoad: PlatformLoad = { ready: () => Promise.resolve() },
3539
): ModuleWithProviders {
3640
return {
3741
ngModule: IonicDatabaseBuilderModule,
3842
providers: [
3943
{ provide: IS_ENABLE_LOG, useValue: isEnableLogProvider },
4044
{ provide: IS_AVAILABLE_DATABASE, useValue: isAvailableProvider },
45+
{ provide: PLATFORM_LOAD, useValue: platformLoad },
4146
]
4247
};
4348
}
@@ -46,6 +51,7 @@ export class IonicDatabaseBuilderModule {
4651
settingsProvider: Type<DatabaseSettingsFactoryContract>,
4752
databaseCreatorProvider: Type<DatabaseCreatorContract>,
4853
databaseMigrationContract: Type<DatabaseMigrationContract>,
54+
platformLoad: PlatformLoad = { ready: () => Promise.resolve() },
4955
isEnableLogProvider: boolean = false,
5056
isAvailableProvider: boolean = true,
5157
): ModuleWithProviders {
@@ -56,6 +62,7 @@ export class IonicDatabaseBuilderModule {
5662
{ provide: DATABASE_CREATOR, useClass: databaseCreatorProvider },
5763
{ provide: DATABASE_MIGRATION, useClass: databaseMigrationContract },
5864
{ provide: IS_ENABLE_LOG, useValue: isEnableLogProvider },
65+
{ provide: PLATFORM_LOAD, useValue: platformLoad },
5966
{ provide: IS_AVAILABLE_DATABASE, useValue: isAvailableProvider },
6067
]
6168
};

projects/ionic-database-builder/src/lib/services/database-abstract-sqlite.service.ts

Lines changed: 0 additions & 52 deletions
This file was deleted.

projects/ionic-database-builder/src/lib/services/database.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { DatabaseMigration } from "./database-migration";
2-
import { Inject, Injectable, Injector } from "@angular/core";
3-
import { BuildableDatabaseManager } from "../utils/buildable-database-manager";
4-
import { DatabaseFactoryContract } from "../utils/database-factory-contract";
5-
import { DatabaseObject } from "database-builder";
1+
import { DatabaseMigration } from './database-migration';
2+
import { Inject, Injectable, Injector } from '@angular/core';
3+
import { BuildableDatabaseManager } from '../utils/buildable-database-manager';
4+
import { DatabaseFactoryContract } from '../utils/database-factory-contract';
5+
import { DatabaseObject } from 'database-builder';
66
import { Observable, Observer } from 'rxjs';
7-
import { IS_AVAILABLE_DATABASE, IS_ENABLE_LOG } from '../utils/dependency-injection-definition';
7+
import { IS_AVAILABLE_DATABASE, IS_ENABLE_LOG, PLATFORM_LOAD } from '../utils/dependency-injection-definition';
88
import { DatabaseSettingsFactoryContract } from '../utils/database-settings-factory-contract';
9+
import { PlatformLoad } from '../utils/platform-load';
910

1011
@Injectable()
1112
export class Database extends BuildableDatabaseManager {
@@ -17,11 +18,13 @@ export class Database extends BuildableDatabaseManager {
1718
@Inject(IS_ENABLE_LOG) isEnableLog: boolean,
1819
private _injector: Injector,
1920
databaseFactory: DatabaseFactoryContract,
20-
private _databaseMigration: DatabaseMigration
21+
private _databaseMigration: DatabaseMigration,
22+
@Inject(PLATFORM_LOAD) platformLoad: PlatformLoad
2123
) {
2224
super(
2325
databaseFactory,
2426
_injector.get(DatabaseSettingsFactoryContract).mapper(_injector),
27+
platformLoad,
2528
isEnableLog
2629
);
2730
this._settings = _injector.get(DatabaseSettingsFactoryContract);

projects/ionic-database-builder/src/lib/utils/buildable-database-manager.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1-
import { DatabaseBaseTransaction, DatabaseResult } from "database-builder";
2-
import { DatabaseManager } from "./database-manager";
3-
import { Crud, DatabaseObject, Ddl, ExecutableBuilder, GetMapper, Query, QueryCompiled } from "database-builder";
4-
import { DatabaseFactoryContract } from "./database-factory-contract";
5-
import { Observable, Observer } from "rxjs";
1+
import { DatabaseBaseTransaction, DatabaseResult } from 'database-builder';
2+
import { DatabaseManager } from './database-manager';
3+
import { Crud, DatabaseObject, Ddl, ExecutableBuilder, GetMapper, Query, QueryCompiled } from 'database-builder';
4+
import { DatabaseFactoryContract } from './database-factory-contract';
5+
import { Observable, Observer } from 'rxjs';
6+
import { PlatformLoad } from './platform-load';
67

78
export abstract class BuildableDatabaseManager extends DatabaseManager {
89

910
constructor(
1011
databaseFactory: DatabaseFactoryContract,
1112
private _mapper: GetMapper,
13+
platformLoad: PlatformLoad,
1214
public enableLog: boolean = true
1315
) {
14-
super(databaseFactory);
16+
super(databaseFactory, platformLoad);
1517
}
1618

1719
public get mapper(): GetMapper {
@@ -21,7 +23,7 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
2123
public databaseInstance(): Promise<DatabaseObject> {
2224
const database = super.databaseInstance(this.databaseName(), this.version());
2325
if (!database) {
24-
throw new Error("SQLite not avaliable!");
26+
throw new Error('SQLite not avaliable!');
2527
}
2628
return database;
2729
}
@@ -64,7 +66,7 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
6466

6567
public beginTransaction(): Observable<Crud> {
6668
return Observable.create((observer: Observer<Crud>) => {
67-
this.sql("BEGIN TRANSACTION")
69+
this.sql('BEGIN TRANSACTION')
6870
.subscribe(r => {
6971
this.crud()
7072
.subscribe(crud => {
@@ -83,7 +85,7 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
8385

8486
public commitTransaction(): Observable<boolean> {
8587
return Observable.create((observer: Observer<boolean>) => {
86-
this.sql("COMMIT")
88+
this.sql('COMMIT')
8789
.subscribe(r => {
8890
observer.next(true);
8991
observer.complete();
@@ -96,7 +98,7 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
9698

9799
public rollbackTransaction(): Observable<boolean> {
98100
return Observable.create((observer: Observer<boolean>) => {
99-
this.sql("ROLLBACK")
101+
this.sql('ROLLBACK')
100102
.subscribe(r => {
101103
observer.next(true);
102104
observer.complete();
@@ -125,7 +127,7 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
125127
const executable = new ExecutableBuilder(this.enableLog);
126128
executable.execute([{
127129
query: sql,
128-
params: params
130+
params
129131
} as QueryCompiled], database)
130132
.subscribe((cursor: DatabaseResult[]) => {
131133
observer.next(cursor[0]);

projects/ionic-database-builder/src/lib/utils/database-factory-contract.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { DatabaseObject } from "database-builder";
2-
import { Observable } from "rxjs";
1+
import { DatabaseObject } from 'database-builder';
2+
import { Observable } from 'rxjs';
33

44
export abstract class DatabaseFactoryContract {
55

projects/ionic-database-builder/src/lib/utils/database-manager.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
import { DatabaseFactoryContract } from "./database-factory-contract";
2-
import { DatabaseObject } from "database-builder";
3-
import { Observable } from "rxjs";
1+
import { DatabaseFactoryContract } from './database-factory-contract';
2+
import { DatabaseObject, DatabaseBuilderError } from 'database-builder';
3+
import { Observable } from 'rxjs';
4+
import { PlatformLoad } from './platform-load';
45

56
export abstract class DatabaseManager {
67

78
private _databases: Map<string, Promise<DatabaseObject>> = new Map<string, Promise<DatabaseObject>>();
89

910
constructor(
10-
protected databaseFactory: DatabaseFactoryContract
11+
protected databaseFactory: DatabaseFactoryContract,
12+
protected _platformLoad: PlatformLoad
1113
) {
1214

1315
}
1416

1517
public cleanDatabaseName(name: string) {
16-
return name.replace(/([^a-z0-9]+)/gi, "-");
18+
return name.replace(/([^a-z0-9]+)/gi, '-');
1719
}
1820

1921
protected addDatabaseNameExtension(databaseName: string): string {
@@ -24,9 +26,8 @@ export abstract class DatabaseManager {
2426
const keyDatabaseName: string = name + version;
2527
return this._databases.has(keyDatabaseName)
2628
? this._databases.get(keyDatabaseName)
27-
: this._databases.set(keyDatabaseName,
28-
this.createDatabase(this.databaseNameFile(name), version))
29-
.get(keyDatabaseName);
29+
: this.setDatabase(keyDatabaseName,
30+
this.createDatabase(this.databaseNameFile(name), version));
3031
}
3132

3233
public invalidateInstance() {
@@ -37,21 +38,36 @@ export abstract class DatabaseManager {
3738

3839
protected abstract migrationVersion(database: DatabaseObject, version: number): Observable<boolean>;
3940

41+
private setDatabase(keyDatabaseName: string, promiseDatabase: Promise<DatabaseObject>): Promise<DatabaseObject> {
42+
if (promiseDatabase) {
43+
return this._databases
44+
.set(keyDatabaseName, promiseDatabase)
45+
.get(keyDatabaseName);
46+
}
47+
throw new DatabaseBuilderError(`Connection with provider of database cannot be created!`);
48+
}
49+
4050
private createDatabase(name: string, version: number): Promise<DatabaseObject> {
4151
return new Promise<DatabaseObject>((resolve, reject) => {
42-
this.databaseFactory.database(name)
43-
.subscribe((database: DatabaseObject) => {
44-
this.migrationVersion(database, version)
45-
.subscribe(_ => {
46-
resolve(database);
52+
this._platformLoad.ready()
53+
.then(() => {
54+
this.databaseFactory.database(name)
55+
.subscribe((database: DatabaseObject) => {
56+
this.migrationVersion(database, version)
57+
.subscribe(_ => {
58+
resolve(database);
59+
}, err => {
60+
reject(err);
61+
});
4762
}, err => {
63+
this.catchException(err);
4864
reject(err);
4965
});
50-
}, err => {
66+
})
67+
.catch(err => {
5168
this.catchException(err);
5269
reject(err);
5370
});
54-
5571
});
5672
}
5773

projects/ionic-database-builder/src/lib/utils/database-migration-base.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

2-
import * as momentNs from "moment";
2+
import * as momentNs from 'moment';
33
const moment = momentNs;
4-
import { DatabaseObject } from "database-builder";
5-
import { Observable, Observer } from "rxjs";
4+
import { DatabaseObject } from 'database-builder';
5+
import { Observable, Observer } from 'rxjs';
66

77
export abstract class DatabaseMigrationBase {
88

@@ -69,8 +69,8 @@ export abstract class DatabaseMigrationBase {
6969
.catch(err => this.error(err, observer));
7070
}
7171
observer.next({
72-
oldVersion: oldVersion,
73-
newVersion: newVersion
72+
oldVersion,
73+
newVersion
7474
});
7575
observer.complete();
7676
});

projects/ionic-database-builder/src/lib/utils/database-settings-factory-contract.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Injector } from "@angular/core";
2-
import { GetMapper } from "database-builder";
1+
import { Injector } from '@angular/core';
2+
import { GetMapper } from 'database-builder';
33

44
export abstract class DatabaseSettingsFactoryContract {
55

0 commit comments

Comments
 (0)