Skip to content

Commit 674b7b5

Browse files
author
fernandocode
committed
add executeObserver in ddl
1 parent 34b4386 commit 674b7b5

6 files changed

Lines changed: 93 additions & 46 deletions

File tree

package-lock.json

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

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"lambda-expression": ">=0.1.3",
1616
"lodash": "^4.17.11",
1717
"moment": ">=2.22.0",
18-
"uuid": ">=3.3.2"
18+
"uuid": ">=3.3.2",
19+
"rxjs": ">=5.5.9"
1920
},
2021
"devDependencies": {
2122
"@types/chai": "^4.1.1",

src/core/executable-builder.ts

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
1-
import { DatabaseBaseTransaction } from "./../definitions/database-definition";
2-
import { DatabaseBase, DatabaseObject, DatabaseResult, DatabaseTransaction } from "../definitions/database-definition";
1+
import { DatabaseBase, DatabaseResult } from "../definitions/database-definition";
32
import { QueryCompiled } from "./query-compiled";
43
import { ReplacementParam } from "./replacement-param";
4+
import { Observable, Observer } from "rxjs";
55

66
export class ExecutableBuilder {
77

88
constructor(public enableLog: boolean = true) {
99

1010
}
1111

12+
public executeObserver(
13+
compiled: QueryCompiled[],
14+
database: DatabaseBase,
15+
): Observable<DatabaseResult[]> {
16+
return Observable.create((observer: Observer<DatabaseResult[]>) => {
17+
this.executorLinked(compiled, [], database)
18+
.then(result => {
19+
observer.next(result);
20+
observer.complete();
21+
})
22+
.catch(err => {
23+
observer.error(err);
24+
observer.complete();
25+
});
26+
});
27+
}
28+
1229
public execute(
1330
compiled: QueryCompiled[],
1431
database: DatabaseBase,
1532
): Promise<DatabaseResult[]> {
16-
// this.log(compiled);
1733
return this.executorLinked(compiled, [], database);
18-
// return this.executeSql(database, compiled);
1934
}
2035

2136
private executeSql(
@@ -26,41 +41,6 @@ export class ExecutableBuilder {
2641
compiled.query,
2742
compiled.params,
2843
);
29-
// return new Promise<DatabaseResult>((resolve, reject) => {
30-
// const resultPromise = (database as DatabaseBaseTransaction).executeSql(
31-
// compiled.query,
32-
// compiled.params,
33-
// (tx: DatabaseBaseTransaction, result: DatabaseResult) => {
34-
// resolve(result || (tx as any) as DatabaseResult);
35-
// },
36-
// (tx: DatabaseBaseTransaction, error: any) => {
37-
// reject(error || tx);
38-
// },
39-
// ) as any;
40-
// if (resultPromise && (resultPromise as Promise<DatabaseResult>).then) {
41-
// (resultPromise as Promise<DatabaseResult>)
42-
// .then(r => resolve(r))
43-
// .catch(err => reject(err));
44-
// }
45-
// });
46-
// if ((database as DatabaseObject).addTransaction) {
47-
// return (database as DatabaseObject).executeSql(
48-
// compiled.query,
49-
// compiled.params,
50-
// );
51-
// }
52-
// return new Promise<DatabaseResult>((resolve, reject) => {
53-
// (database as DatabaseBaseTransaction).executeSql(
54-
// compiled.query,
55-
// compiled.params,
56-
// (tx: DatabaseBaseTransaction, result: DatabaseResult) => {
57-
// resolve(result);
58-
// },
59-
// (tx: DatabaseBaseTransaction, error: any) => {
60-
// reject(error);
61-
// },
62-
// );
63-
// });
6444
}
6545

6646
private checkParams(

src/crud/where-base-builder.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ export abstract class WhereBaseBuilder<
278278

279279
public lessAndEqual(
280280
expression1: TExpression,
281-
expression2: TExpression,
281+
expression2: TExpression
282282
): TWhere {
283283
this.buildWhereColumn(
284284
[Condition.LessAndEqual],
@@ -294,19 +294,22 @@ export abstract class WhereBaseBuilder<
294294
public betweenValue(
295295
expression: TExpression,
296296
value1: ValueTypeToParse,
297-
value2: ValueTypeToParse,
297+
value2: ValueTypeToParse
298298
): TWhere {
299-
return this.between(expression, value1, value2);
299+
return this.between(expression, value1 as any, value2 as any);
300300
}
301301

302302
public between(
303303
expression: TExpression,
304+
// startExpression: TExpression,
305+
// endExpression: TExpression
304306
value1: ValueTypeToParse,
305307
value2: ValueTypeToParse,
306308
): TWhere {
307309
this.buildWhereColumn(
308310
[Condition.Between],
309311
this.getColumnParams(expression),
312+
// [this.getColumnParams(startExpression), this.getColumnParams(endExpression)]);
310313
[value1, value2]);
311314
return this._getInstance();
312315
}
@@ -390,6 +393,20 @@ export abstract class WhereBaseBuilder<
390393
this.buildWhereColumn(condition, column1, column2);
391394
}
392395

396+
// protected buildWhereColumn(
397+
// condition: Condition[],
398+
// ...values: (ColumnParams | string | ValueTypeToParse[])[],
399+
// // left: ColumnParams | string | ValueTypeToParse[],
400+
// ) {
401+
// const columnRight = this.processParam(right);
402+
// const columnLeft = this.processParam(left);
403+
// this.buildWhereParams(
404+
// condition,
405+
// Utils.addAlias(columnRight.column, this._alias),
406+
// Utils.addAlias(columnLeft.column, this._alias),
407+
// columnRight.params.concat(columnLeft.params)
408+
// );
409+
// }
393410
protected buildWhereColumn(
394411
condition: Condition[],
395412
right: ColumnParams | string | ValueTypeToParse[],
@@ -533,6 +550,7 @@ export abstract class WhereBaseBuilder<
533550
case [Condition.Not, Condition.Between].toString():
534551
// ${column} BETWEEN ? AND ?
535552
if (!Utils.isArray(column2) || column2.length === 2) {
553+
console.log(column2);
536554
return `${column1} ${this.builderConditions(conditions)} ? ${WhereBaseBuilder.AND} ?`;
537555
// return `${column1} ${this.builderConditions(conditions)} ${column2[0]} ${WhereBaseBuilder.AND} ${column2[1]}`;
538556
}

src/ddl/ddl-base.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DatabaseBase, DatabaseResult } from "../definitions/database-definition
44
import { DdlBaseBuilder } from "./ddl-base-builder";
55
import { DatabaseBuilderError } from "../core/errors";
66
import { QueryCompiled } from "../core/query-compiled";
7+
import { Observable, Observer } from "rxjs";
78

89
export class DdlBase<T, TBuilder extends DdlBaseBuilder<T>> {
910

@@ -17,6 +18,29 @@ export class DdlBase<T, TBuilder extends DdlBaseBuilder<T>> {
1718
this._executableBuilder = new ExecutableBuilder(enableLog);
1819
}
1920

21+
public executeObserver(cascade: boolean = true, database: DatabaseBase = void 0): Observable<DatabaseResult[]> {
22+
const compiled = this.compile(cascade);
23+
return this._executableBuilder.executeObserver(
24+
compiled.map(query => {
25+
return {
26+
query,
27+
params: []
28+
} as QueryCompiled;
29+
}),
30+
this.getDatabase(database));
31+
// return Observable.create((observer: Observer<DatabaseResult[]>) => {
32+
// this.execute(cascade, database)
33+
// .then(result => {
34+
// observer.next(result);
35+
// observer.complete();
36+
// })
37+
// .catch(err => {
38+
// observer.error(err);
39+
// observer.complete();
40+
// })
41+
// });
42+
}
43+
2044
public execute(cascade: boolean = true, database: DatabaseBase = void 0): Promise<DatabaseResult[]> {
2145
const compiled = this.compile(cascade);
2246
return this._executableBuilder.execute(

src/test/where.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,23 @@ describe("Where", () => {
416416
expect(result[0].query).to.equal("SELECT tes.internalKey AS internalKey, tes.id AS id, tes.description AS description, tes.date AS date, tes.dateMoment AS dateMoment, tes.dateDate AS dateDate, tes.numero AS numero, tes.referenceTest_id AS referenceTest_id, tes.referenceTestCode_code AS referenceTestCode_code FROM TestClazz AS tes WHERE tes.id NOT BETWEEN ? AND ? OR (tes.description BETWEEN ? AND ? OR tes.disabled BETWEEN ? AND ?) AND tes.dateMoment BETWEEN ? AND ?");
417417
});
418418

419+
// it("between columns", () => {
420+
// const query = crud.query(TestClazz);
421+
// query.select(x => x.id);
422+
// query.where(where => {
423+
// where.between(0.5, query.ref(x => x.date).result(), query.ref(x => x.numero).result())
424+
// where.between(0.2, x => x.date, x => x.numero)
425+
// });
426+
// const result = query.compile();
427+
// console.log(result);
428+
// expect(result[0].params.length).to.equal(4);
429+
// expect(result[0].params[0]).to.equal(0.5);
430+
// expect(result[0].params[1]).to.equal("tes.date");
431+
// expect(result[0].params[2]).to.equal("tes.numero");
432+
// expect(result[0].params[3]).to.equal(0.2);
433+
// expect(result[0].query).to.equal("SELECT tes.id AS id FROM TestClazz AS tes WHERE ? BETWEEN ? AND ? AND ? BETWEEN tes.date AND tes.numero");
434+
// });
435+
419436
it("between (deprecated)", () => {
420437
const query = crud.query(TestClazz);
421438
query.where(where => {

0 commit comments

Comments
 (0)