Skip to content

Commit e51f31f

Browse files
committed
Add in RowResult, autoParse e parse
1 parent a064e9b commit e51f31f

7 files changed

Lines changed: 65 additions & 34 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "database-builder",
3-
"version": "0.0.29",
3+
"version": "0.0.32",
44
"description": "Library to assist in creating and maintaining SQL commands.",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",

src/core/row-result.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,29 @@
1+
import { MapperTable } from "./../mapper-table";
12
import { ExpressionOrColumn, Utils } from "./utils";
3+
import { DatabaseHelper } from "..";
4+
import { FieldType } from "./enums/field-type";
25

36
export class RowResult<T> {
7+
private _databaseHelper: DatabaseHelper;
48

5-
constructor(private _valueT: T) {
9+
constructor(private _valueT: T, private _mapper?: MapperTable) {
10+
this._databaseHelper = new DatabaseHelper();
11+
}
12+
13+
public parse<TReturn>(expression: ExpressionOrColumn<TReturn, T>, type: FieldType): TReturn {
14+
const value = Utils.getValue(this._valueT, expression);
15+
return this._databaseHelper.databaseToValue(value, type);
16+
}
617

18+
public autoParse<TReturn>(expression: ExpressionOrColumn<TReturn, T>): TReturn {
19+
if (this._mapper) {
20+
const column = Utils.getColumn(expression);
21+
const value = Utils.getValue(this._valueT, column);
22+
return this._databaseHelper.databaseToValue(value, this._mapper.columns.find(x => x.column === column).fieldType);
23+
}
24+
// tslint:disable-next-line:no-console
25+
console.warn(`Auto parse not possible. (MapperTable not found)`);
26+
return this.get(expression);
727
}
828

929
public get<TReturn>(expression: ExpressionOrColumn<TReturn, T>): TReturn {
@@ -15,10 +35,4 @@ export class RowResult<T> {
1535
// tslint:disable-next-line:triple-equals
1636
return value == void 0 ? defaultValue : value;
1737
}
18-
19-
// public coalesceTTT<R>(expression: ExpressionOrColumnTTT<T, R>, defaultValue: R) {
20-
// const value = this.get(expression);
21-
// // tslint:disable-next-line:triple-equals
22-
// return value == void 0 ? defaultValue : value;
23-
// }
2438
}

src/crud/query/query-readable-builder-base.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ export class QueryReadableBuilderBase {
3535

3636
public mapper(
3737
cursor: DatabaseResult,
38+
mapperTable: MapperTable,
3839
mapper: (row: RowResult<any>) => any,
3940
): any {
4041
const items: any[] = [];
4142
this.forCursor(cursor, (item) => {
42-
items.push(mapper(new RowResult(item)));
43+
items.push(mapper(new RowResult(item, mapperTable)));
4344
});
4445
return items;
4546
}

src/crud/query/query.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,12 @@ export class Query<T> implements QueryCompilable {
193193
}
194194

195195
public mapper(mapper: (row: RowResult<any>) => any): Promise<any[]> {
196+
const metadata = this.getMetadata();
197+
const mapperTable = metadata ? metadata.mapperTable : void 0;
196198
return new Promise((resolve, reject) => {
197199
this.execute()
198200
.then((cursor) => {
199-
resolve(this._queryReadableBuilder.mapper(cursor, mapper));
201+
resolve(this._queryReadableBuilder.mapper(cursor, mapperTable, mapper));
200202
})
201203
.catch(reject);
202204
});
@@ -227,7 +229,7 @@ export class Query<T> implements QueryCompilable {
227229
return result;
228230
}
229231

230-
private getMetadata(metadata: MetadataTable<T>): MetadataTable<T> {
232+
private getMetadata(metadata?: MetadataTable<T>): MetadataTable<T> {
231233
const result = (metadata ? metadata : this._metadata);
232234
if (!result) {
233235
throw new DatabaseBuilderError("MetadataTable not specified in query. Call 'executeAndRead'.");

src/test/models/test-clazz.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ export class TestClazz {
88
public disabled: boolean = false;
99
public date: number = 0;
1010
public dateMoment: moment.Moment = moment();
11+
public dateDate: Date = new Date();
12+
public numero = 0;
1113
}

src/test/projections.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ describe("Projections", () => {
3131
});
3232
const result = query.compile();
3333
expect(result.params.length).to.equal(0);
34-
expect(result.query).to.equal("SELECT tes.id AS id, tes.description AS description, tes.disabled AS disabled, tes.date AS date, tes.dateMoment AS dateMoment, tes.referenceTest_id AS referenceTest_id FROM TestClazz AS tes");
34+
expect(result.query).to.equal("SELECT tes.id AS id, tes.description AS description, tes.disabled AS disabled, tes.date AS date, tes.dateMoment AS dateMoment, tes.dateDate AS dateDate, tes.numero AS numero, tes.referenceTest_id AS referenceTest_id FROM TestClazz AS tes");
3535
});
3636

3737
it("add column", () => {

src/test/row-result.spec.ts

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
import { TestClazzRef } from "./models/test-clazz-ref";
12
import { RowResult } from "./../core/row-result";
23
import { expect } from "chai";
4+
import { MappersTable } from "./mappers-table";
5+
import { TestClazz } from "./models/test-clazz";
6+
import * as moment from "moment";
7+
import { FieldType } from "../core/enums/field-type";
38

49
describe("Row Result", () => {
510

@@ -22,27 +27,34 @@ describe("Row Result", () => {
2227
expect(rowResult.coalesce(x => x.d, new Date())).to.equal(model.d);
2328
});
2429

25-
// it("Query", () => {
26-
// const query = new Query(TestClazz);
27-
28-
// const model = {
29-
// id: 1,
30-
// description: "Descrição",
31-
// referenceTest: {
32-
// id: 2,
33-
// description: "Referencia"
34-
// } as TestClazzRef,
35-
// disabled: false
36-
// } as TestClazz;
37-
38-
// query.mapper((row: RowResult<any>) => {
39-
// expect(row.get("description")).to.equal(model.description);
40-
// expect(row.get(x => x.id)).to.equal(model.id);
41-
// expect(row.get(x => x.test)).to.equal(model.test);
42-
// expect(row.get("ttt")).to.equal(void 0);
43-
// expect(row.coalesce("ttt", 123)).to.equal(123);
44-
// expect(row.coalesce(x => x.age, 123)).to.equal(model.age);
45-
// });
46-
// });
30+
const mappersTable = new MappersTable();
31+
32+
it("With Mapper", () => {
33+
const defaultMoment = moment.utc();
34+
35+
const model: any = {};
36+
model.id = 1;
37+
model.description = "Abc";
38+
model.disabled = true;
39+
model.numero = 10;
40+
model.dateMoment = defaultMoment.unix();
41+
model.dateDate = void 0;
42+
model.date = 1;
43+
model.referenceTest = new TestClazzRef();
44+
45+
const rowResult = new RowResult(model, mappersTable.getMapper(TestClazz).mapperTable);
46+
expect(rowResult.get(x => x.description)).to.equal(model.description);
47+
expect(rowResult.get(x => x.id)).to.equal(model.id);
48+
expect(rowResult.get(x => x.disabled)).to.equal(model.disabled);
49+
expect(rowResult.get("ttt")).to.equal(void 0);
50+
expect(rowResult.coalesce("ttt", 123)).to.equal(123);
51+
expect(rowResult.coalesce(x => x.numero, 123)).to.equal(model.numero);
52+
expect(rowResult.get(x => x.dateDate)).to.equal(model.dateDate);
53+
expect(rowResult.get(x => x.dateMoment)).to.equal(defaultMoment.unix());
54+
expect(rowResult.autoParse(x => x.dateMoment).format("DD/MM/YYYY")).to.equal(defaultMoment.format("DD/MM/YYYY"));
55+
expect(rowResult.parse(x => x.dateMoment, FieldType.DATE).format("DD/MM/YYYY")).to.equal(defaultMoment.format("DD/MM/YYYY"));
56+
const defaultDate = new Date();
57+
expect(rowResult.coalesce(x => x.dateDate, defaultDate)).to.equal(defaultDate);
58+
});
4759

4860
});

0 commit comments

Comments
 (0)