Skip to content

Commit 7f0b7f2

Browse files
committed
v.0.0.2
1 parent 0344e04 commit 7f0b7f2

26 files changed

+685
-148
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ npm-debug.log*
1717
.tmp/
1818
.versions/
1919

20+
.ng_pkg_build/
21+
.sonarlint/
22+
.vscode/
23+
2024
node_modules/
2125

2226
.DS_Store
@@ -25,3 +29,6 @@ UserInterfaceState.xcuserstate
2529

2630
*.js
2731
*.d.ts
32+
33+
dist.tgz
34+
dist/

README.md

Lines changed: 218 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,219 @@
11
# ionic-database-builder
2-
Extended library from database-builder to assist in creating and maintaining SQL commands with integrate execute commands in SQLite ('@ionic-native/sqlite').
2+
Extended library from [database-builder](https://github.com/fernandocode/database-builder) to assist in creating and maintaining SQL commands with integrate execute commands in SQLite ('@ionic-native/sqlite').
3+
4+
# Getting Started
5+
6+
### Step 1: Install npm module
7+
8+
```bash
9+
npm install --save ionic-database-builder
10+
```
11+
This will install the current stable version of `ionic-database-builder` in your `node_modules` directory and save the entry in `package.json`.
12+
13+
### Step 2: Add Module in App and Settings
14+
15+
#### Simple Setup
16+
17+
```ts
18+
import { DatabaseModule } from 'ionic-database-builder';
19+
20+
@NgModule({
21+
...
22+
imports: [
23+
DatabaseModule.forRootValue(
24+
// object to simple settings database
25+
new DatabaseSettingsFactoryDefault(
26+
1, // version database
27+
"database1", // name database
28+
// mapper for database
29+
new MappersTableSimple(new DatabaseHelper(), {
30+
references: false, // if "true" generate column for serialize object reference to JSON.
31+
// Example in "TestClazz", create column "testClazzRef" to serialize "TestClazzRef" object
32+
referencesId: true, // if "true" generate column for id reference.
33+
// Example in "TestClazz", create column "testClazzRef_id" to save "TestClazzRef" property "id"
34+
referencesIdRecursive: false, // if "true" generate column for id reference recursive for all references inner.
35+
referencesIdColumn: "id" // name id column references
36+
})
37+
.mapper(
38+
false, // readonly
39+
void 0, // keyColumn: default "id"
40+
// Type models for mapper
41+
TestClazz,
42+
TestClazzRef
43+
)),
44+
// implementation of "DatabaseMigrationContract" to estrategy migration upgrade versions database
45+
DatabaseMigration
46+
)
47+
...
48+
],
49+
...
50+
})
51+
export class AppModule { }
52+
53+
```
54+
55+
**`DatabaseMigration`**
56+
57+
```ts
58+
import { Observable } from 'rxjs/Observable';
59+
import { Injectable } from '@angular/core';
60+
import { SQLiteTransaction } from '@ionic-native/sqlite';
61+
import { Ddl } from 'database-builder';
62+
import { DatabaseMigrationContract, Database, MappersTableBase } from 'ionic-database-builder';
63+
import { Version } from 'ionic-database-builder/src/model/version-model';
64+
65+
@Injectable()
66+
export class DatabaseMigration extends DatabaseMigrationContract {
67+
68+
// implemented of "DatabaseMigrationContract"
69+
public to(version: Version, transation: SQLiteTransaction, mappers: MappersTableBase): Observable<any>[] {
70+
let observablesNested: Observable<any>[] = [];
71+
72+
if (version.oldVersion < 2.0) {
73+
observablesNested.push(this.migration_v2_0(transation, version, mappers));
74+
}
75+
76+
return observablesNested;
77+
}
78+
79+
private migration_v2_0(transation: SQLiteTransaction, version: Version, mappers: MappersTableBase): Observable<any> {
80+
let observablesWait: Observable<any>[] = [];
81+
82+
let ddl = new Ddl(transation, mappers, true);
83+
84+
// drop tables deprecated
85+
observablesWait.push(Observable.fromPromise(ddl.drop(OldModel).execute()));
86+
87+
// create new tables
88+
observablesWait.push(Observable.fromPromise(ddl.create(TestClazzRef).execute()));
89+
90+
return Observable.forkJoin(observablesWait);
91+
}
92+
}
93+
```
94+
95+
#### Advanced Setup
96+
97+
```ts
98+
import { DatabaseModule } from 'ionic-database-builder';
99+
100+
@NgModule({
101+
...
102+
imports: [
103+
DatabaseModule.forRoot(
104+
DatabaseSettingsFactory,
105+
DatabaseMigration
106+
)
107+
...
108+
],
109+
...
110+
})
111+
export class AppModule { }
112+
113+
```
114+
115+
**`DatabaseSettingsFactory`**
116+
117+
```ts
118+
import { EnvironmentService } from './../providers/environment-service';
119+
import { Injector } from '@angular/core';
120+
import { DatabaseSettingsFactoryContract, MappersTableBase } from "ionic-database-builder";
121+
import { MappersTable } from './mappers-table';
122+
123+
export class DatabaseSettingsFactory extends DatabaseSettingsFactoryContract {
124+
125+
databaseName(injector: Injector): string {
126+
let environmentService: EnvironmentService = injector.get(EnvironmentService);
127+
return `database_${environmentService.isProdution ? 'prod' : 'test'}`;
128+
}
129+
130+
version(injector: Injector): number {
131+
return 2.0;
132+
}
133+
134+
mapper(injector: Injector): MappersTableBase {
135+
return injector.get(MappersTable);
136+
}
137+
138+
}
139+
```
140+
141+
**`MappersTable`**
142+
143+
```ts
144+
import { MappersTableSimple, DatabaseHelperService } from "ionic-database-builder";
145+
import { Injectable } from "@angular/core";
146+
147+
@Injectable()
148+
export class MappersTable extends MappersTableSimple {
149+
150+
constructor(_databaseHelper: DatabaseHelperService) {
151+
super(
152+
_databaseHelper,
153+
{
154+
references: false,
155+
referencesId: true,
156+
referencesIdRecursive: false,
157+
referencesIdColumn: void 0
158+
}
159+
);
160+
161+
this.mapper(false, void 0, this._defaultSettings,
162+
// Type models for mapper
163+
TestClazz,
164+
TestClazzRef
165+
);
166+
167+
this.add(TestClazzAdvanced, false, void 0, {
168+
references: false,
169+
referencesId: false,
170+
referencesIdRecursive: false
171+
}, metadata => {
172+
metadata
173+
// add column reference1_id
174+
.mapper(x => x.reference1.id)
175+
// add column reference1_anything
176+
.mapper(x => x.reference1.anything);
177+
});
178+
}
179+
}
180+
```
181+
182+
### Step 3: Use `Database` in Components
183+
184+
`DatabaseModule` provides the injection of `Database` in its components and services, as can be seen in the following example:
185+
186+
**`MyApp`**
187+
188+
```ts
189+
import { Database } from 'ionic-database-builder';
190+
import { Component } from '@angular/core';
191+
192+
@Component({
193+
templateUrl: 'app.html'
194+
})
195+
export class MyApp {
196+
197+
constructor(
198+
// inject "Database"
199+
database: Database
200+
) {
201+
database.query(TestClazz).then(query => {
202+
query
203+
.select(x => x.description)
204+
.where(where => where.equal(x => x.id, 1));
205+
console.log(query.compile());
206+
/**
207+
* {
208+
* params: [1],
209+
* query: "SELECT tes.description AS description FROM TestClazz AS tes WHERE tes.id > ?"
210+
* }
211+
*/
212+
// to execute in database return promise with result
213+
query.toList();
214+
});
215+
}
216+
}
217+
```
218+
219+
[**More documentation on database-builder (Query, Crud, etc)**](https://github.com/fernandocode/database-builder).

dist.tgz

10.3 KB
Binary file not shown.

dist/README.md

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,139 @@
11
# ionic-database-builder
22
Extended library from database-builder to assist in creating and maintaining SQL commands with integrate execute commands in SQLite ('@ionic-native/sqlite').
3+
4+
# Getting Started
5+
6+
### Step 1: Install npm module
7+
8+
```bash
9+
npm install --save ionic-database-builder
10+
```
11+
This will install the current stable version of `ionic-database-builder` in your `node_modules` directory and save the entry in `package.json`.
12+
13+
### Step 2: Add Module in App and Settings
14+
15+
#### Simple Setup
16+
17+
```ts
18+
import { DatabaseModule } from 'ionic-database-builder';
19+
20+
@NgModule({
21+
...
22+
imports: [
23+
DatabaseModule.forRootValue(
24+
// object to simple settings database
25+
new DatabaseSettingsFactoryDefault(
26+
1, // version database
27+
"database1", // name database
28+
// mapper for database
29+
new MappersTableSimple(new DatabaseHelper(), {
30+
references: false, // if "true" generate column for serialize object reference to JSON.
31+
// Example in "TestClazz", create column "testClazzRef" to serialize "TestClazzRef" object
32+
referencesId: true, // if "true" generate column for id reference.
33+
// Example in "TestClazz", create column "testClazzRef_id" to save "TestClazzRef" property "id"
34+
referencesIdRecursive: false, // if "true" generate column for id reference recursive for all references inner.
35+
referencesIdColumn: "id" // name id column references
36+
})
37+
.mapper(
38+
false, // readonly
39+
void 0, // keyColumn: default "id"
40+
// Type models for mapper
41+
TestClazz,
42+
TestClazzRef
43+
)),
44+
// implementation of "DatabaseMigrationContract" to estrategy migration upgrade versions database
45+
DatabaseMigration
46+
)
47+
...
48+
],
49+
...
50+
})
51+
export class AppModule { }
52+
53+
```
54+
55+
**DatabaseMigration**
56+
57+
```ts
58+
import { Observable } from 'rxjs/Observable';
59+
import { Injectable } from '@angular/core';
60+
import { SQLiteTransaction } from '@ionic-native/sqlite';
61+
import { Ddl } from 'database-builder';
62+
import { DatabaseMigrationContract, Database, MappersTableBase } from 'ionic-database-builder';
63+
import { Version } from 'ionic-database-builder/src/model/version-model';
64+
65+
@Injectable()
66+
export class DatabaseMigration extends DatabaseMigrationContract {
67+
68+
// implemented of "DatabaseMigrationContract"
69+
public to(version: Version, transation: SQLiteTransaction, mappers: MappersTableBase): Observable<any>[] {
70+
let observablesNested: Observable<any>[] = [];
71+
72+
if (version.oldVersion < 2.0) {
73+
observablesNested.push(this.migration_v2_0(transation, version, mappers));
74+
}
75+
76+
return observablesNested;
77+
}
78+
79+
private migration_v2_0(transation: SQLiteTransaction, version: Version, mappers: MappersTableBase): Observable<any> {
80+
let observablesWait: Observable<any>[] = [];
81+
82+
let ddl = new Ddl(transation, mappers, true);
83+
84+
// drop tables deprecated
85+
observablesWait.push(Observable.fromPromise(ddl.drop(OldModel).execute()));
86+
87+
// create new tables
88+
observablesWait.push(Observable.fromPromise(ddl.create(TestClazzRef).execute()));
89+
90+
return Observable.forkJoin(observablesWait);
91+
}
92+
}
93+
```
94+
95+
#### Advanced Setup
96+
97+
```ts
98+
import { DatabaseModule } from 'ionic-database-builder';
99+
100+
@NgModule({
101+
...
102+
imports: [
103+
DatabaseModule.forRoot(
104+
DatabaseSettingsFactory,
105+
DatabaseMigration
106+
)
107+
...
108+
],
109+
...
110+
})
111+
export class AppModule { }
112+
113+
```
114+
115+
**DatabaseSettingsFactory**
116+
117+
```ts
118+
import { EnvironmentService } from './../providers/environment-service';
119+
import { Injector } from '@angular/core';
120+
import { DatabaseSettingsFactoryContract, MappersTableBase } from "ionic-database-builder";
121+
import { MappersTable } from './mappers-table';
122+
123+
export class DatabaseSettingsFactory extends DatabaseSettingsFactoryContract {
124+
125+
databaseName(injector: Injector): string {
126+
let environmentService: EnvironmentService = injector.get(EnvironmentService);
127+
return `database_${environmentService.isProdution ? 'prod' : 'test'}`;
128+
}
129+
130+
version(injector: Injector): number {
131+
return 2.0;
132+
}
133+
134+
mapper(injector: Injector): MappersTableBase {
135+
return injector.get(MappersTable);
136+
}
137+
138+
}
139+
```

0 commit comments

Comments
 (0)