Skip to content

Commit f256924

Browse files
author
fernandocode
committed
manager transaction
1 parent 5997203 commit f256924

File tree

4 files changed

+120
-53
lines changed

4 files changed

+120
-53
lines changed

package-lock.json

Lines changed: 13 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@angular/platform-browser-dynamic": "~7.2.0",
2424
"@angular/router": "~7.2.0",
2525
"core-js": "^2.5.4",
26-
"database-builder": "^0.4.8",
26+
"database-builder": "^0.5.0-alpha.3",
2727
"moment": "^2.22.0",
2828
"rxjs": "6.4.0",
2929
"tslib": "^1.9.0",

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

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { DatabaseBaseTransaction, DatabaseResult } from 'database-builder';
22
import { DatabaseManager } from './database-manager';
33
import { Crud, DatabaseObject, Ddl, ExecutableBuilder, GetMapper, Query, QueryCompiled } from 'database-builder';
44
import { DatabaseFactoryContract } from './database-factory-contract';
5-
import { Observable, Observer } from 'rxjs';
5+
import { Observable, Observer, from, of } from 'rxjs';
6+
import { mergeMap } from 'rxjs/operators';
67
import { PlatformLoad } from './platform-load';
8+
import { ManagedTransaction } from 'database-builder/src/transaction/managed-transaction';
79

810
export abstract class BuildableDatabaseManager extends DatabaseManager {
911

@@ -51,6 +53,24 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
5153
});
5254
}
5355

56+
public managedTransaction(): Observable<ManagedTransaction> {
57+
return from(this.databaseInstance()).pipe(mergeMap(database => of(database.managedTransaction())));
58+
// return new Observable<ManagedTransaction>((observer) => {
59+
// const database = await this.databaseInstance();
60+
// // this.newTransaction(successTransaction)
61+
// // .subscribe((transaction) => {
62+
// // observer.next(new Crud(transaction, this._mapper, this.enableLog));
63+
// // observer.complete();
64+
// // }, error => {
65+
// // observer.error(error);
66+
// // observer.complete();
67+
// // });
68+
// });
69+
}
70+
71+
/**
72+
* @deprecated Use managedTransaction()
73+
*/
5474
public transaction(successTransaction: () => void): Observable<Crud> {
5575
return new Observable((observer: Observer<Crud>) => {
5676
this.newTransaction(successTransaction)
@@ -64,6 +84,9 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
6484
});
6585
}
6686

87+
/**
88+
* @deprecated Use managedTransaction()
89+
*/
6790
public beginTransaction(): Observable<Crud> {
6891
return new Observable((observer: Observer<Crud>) => {
6992
this.sql('BEGIN TRANSACTION')
@@ -83,6 +106,9 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
83106
});
84107
}
85108

109+
/**
110+
* @deprecated Use managedTransaction()
111+
*/
86112
public commitTransaction(): Observable<boolean> {
87113
return new Observable((observer: Observer<boolean>) => {
88114
this.sql('COMMIT')
@@ -96,6 +122,9 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
96122
});
97123
}
98124

125+
/**
126+
* @deprecated Use managedTransaction()
127+
*/
99128
public rollbackTransaction(): Observable<boolean> {
100129
return new Observable((observer: Observer<boolean>) => {
101130
this.sql('ROLLBACK')
@@ -120,27 +149,27 @@ export abstract class BuildableDatabaseManager extends DatabaseManager {
120149
});
121150
}
122151

123-
public batch(compiled: QueryCompiled[]): Observable<DatabaseResult[]> {
124-
return new Observable((observer: Observer<DatabaseResult[]>) => {
125-
this.databaseInstance()
126-
.then(database => {
127-
const executable = new ExecutableBuilder(this.enableLog);
128-
console.log('batch ::: ', database);
129-
executable.executeBatch(compiled, database)
130-
.subscribe((cursor: DatabaseResult[]) => {
131-
observer.next(cursor);
132-
observer.complete();
133-
}, err => {
134-
observer.error(err);
135-
observer.complete();
136-
});
137-
})
138-
.catch(err => {
139-
observer.error(err);
140-
observer.complete();
141-
});
142-
});
143-
}
152+
// public batch(compiled: QueryCompiled[]): Observable<DatabaseResult[]> {
153+
// return new Observable((observer: Observer<DatabaseResult[]>) => {
154+
// this.databaseInstance()
155+
// .then(database => {
156+
// const executable = new ExecutableBuilder(this.enableLog);
157+
// console.log('batch ::: ', database);
158+
// executable.executeBatch(compiled, database)
159+
// .subscribe((cursor: DatabaseResult[]) => {
160+
// observer.next(cursor);
161+
// observer.complete();
162+
// }, err => {
163+
// observer.error(err);
164+
// observer.complete();
165+
// });
166+
// })
167+
// .catch(err => {
168+
// observer.error(err);
169+
// observer.complete();
170+
// });
171+
// });
172+
// }
144173

145174
public sql(sql: string, params: any[] = []): Observable<DatabaseResult> {
146175
return new Observable((observer: Observer<DatabaseResult>) => {
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { Cidade } from './database/models/cidade';
2+
import { TestBed, async } from '@angular/core/testing';
3+
import { DatabaseSettingsFactory } from './database/factory/database-settings-factory';
4+
import { TableMapper } from './database/mapper/table-mapper';
5+
import { IonicDatabaseBuilderModule, Database, IS_ENABLE_LOG, DATABASE_CREATOR, DatabaseMockService, WebSqlDatabaseService } from 'ionic-database-builder';
6+
import { DatabaseMigrationService } from './database/provider/database-migration-service';
7+
import { ManagedTransaction } from 'database-builder/src/transaction/managed-transaction';
8+
9+
describe('ManagedTransaction', () => {
10+
beforeAll(async(() => {
11+
const isMock = false;
12+
13+
TestBed.configureTestingModule({
14+
imports: [
15+
IonicDatabaseBuilderModule.forRoot(
16+
DatabaseSettingsFactory,
17+
WebSqlDatabaseService,
18+
DatabaseMigrationService
19+
)
20+
],
21+
providers: [
22+
TableMapper,
23+
{ provide: IS_ENABLE_LOG, useValue: true },
24+
{
25+
provide: DATABASE_CREATOR,
26+
useFactory: (
27+
mock: DatabaseMockService,
28+
sqlBrowser: WebSqlDatabaseService
29+
) => {
30+
return isMock ? mock : sqlBrowser;
31+
},
32+
deps: [DatabaseMockService, WebSqlDatabaseService]
33+
},
34+
WebSqlDatabaseService,
35+
DatabaseMockService
36+
],
37+
});
38+
}));
39+
40+
it('Transaction Simple', async () => {
41+
const database: Database = TestBed.get(Database);
42+
expect(database).toBeTruthy();
43+
44+
database.commitTransaction
45+
const crud = await database.crud().toPromise();
46+
47+
await crud.delete(Cidade).execute().toPromise();
48+
49+
const cidade: Cidade = new Cidade();
50+
cidade.nome = 'Cidade Test';
51+
const insertResult = await crud.insert(Cidade, cidade).execute().toPromise();
52+
expect(insertResult[0].insertId).toBeGreaterThan(0);
53+
expect(insertResult[0].rowsAffected).toEqual(1);
54+
});
55+
});

0 commit comments

Comments
 (0)