Skip to content

Commit 544e2cd

Browse files
committed
Added method allByMap in select projection
1 parent 77f63f2 commit 544e2cd

2 files changed

Lines changed: 51 additions & 9 deletions

File tree

src/crud/projection-builder.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { MapperTable } from './../mapper-table';
12
import { QueryCompiled } from "./../core/query-compiled";
23
import { WhereBuilder } from "./where-builder";
34
import { ExpressionOrColumn, ProjectionOrValue, Utils, ValueType, ValueTypeToParse, ProjectionCompiledOrValue } from "./../core/utils";
@@ -7,6 +8,7 @@ import { WhereCompiled } from "./where-compiled";
78
import { ProjectionCompiled } from "./projection-compiled";
89
import { Projection } from "./enums/projection";
910
import { ProjectionCase } from "./projection-case";
11+
import { MetadataTable } from '../metadata-table';
1012

1113
export class ProjectionBuilder<T> {
1214
private static readonly WILDCARD = "*";
@@ -23,6 +25,19 @@ export class ProjectionBuilder<T> {
2325
this.buildProjection(void 0, ProjectionBuilder.WILDCARD);
2426
}
2527

28+
public allByMap(metadade: MetadataTable<T>) {
29+
this.selectAllColumns(metadade.mapperTable)
30+
}
31+
32+
private selectAllColumns(mapper: MapperTable): void {
33+
for (const key in mapper.columns) {
34+
if (mapper.columns.hasOwnProperty(key)) {
35+
const column = mapper.columns[key];
36+
this.add(column.column);
37+
}
38+
}
39+
}
40+
2641
public create(): ProjectionBuilder<T> {
2742
return new ProjectionBuilder(this._typeT, this._aliasTable);
2843
}
@@ -347,6 +362,8 @@ export class ProjectionBuilder<T> {
347362
}
348363

349364
private defaultAliasAs(column: string): string {
365+
if (column == ProjectionBuilder.WILDCARD)
366+
return "";
350367
return this._addAliasTableToAlias
351368
? `${this._aliasTable}_${column}`
352369
: column;
@@ -368,9 +385,10 @@ export class ProjectionBuilder<T> {
368385
column: string,
369386
alias: string = this.defaultAliasAs(column),
370387
): ProjectionCompiled {
371-
if (alias === ProjectionBuilder.WILDCARD) {
372-
return new ProjectionCompiled(column, []);
373-
}
388+
// defaultAliasAs check WILDCARD
389+
// if (alias === ProjectionBuilder.WILDCARD) {
390+
// return new ProjectionCompiled(column, []);
391+
// }
374392
if (alias && alias.length) {
375393
return new ProjectionCompiled(`${column} AS ${alias}`, []);
376394
}

src/test/test.spec.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import { Operator } from '../crud/enums/operator';
1212
import { Crud, Insert } from '../index';
1313
import { MappersTable } from './mappers-table';
1414

15+
const mappersTable = new MappersTable();
16+
1517
describe("Query method", () => {
1618

1719
it("test simple select", () => {
@@ -68,7 +70,7 @@ describe("Query method", () => {
6870
x => x.razaoSocial,
6971
x => x.id
7072
);
71-
select.add(x => x.desativo, 'inativo')
73+
select.add(x => x.desativo, 'inativo');
7274
})
7375
.where(where => {
7476
where.not().equalValue(x => x.razaoSocial, "ABC");
@@ -81,7 +83,7 @@ describe("Query method", () => {
8183
join => {
8284
join.select(select => {
8385
select.add(x => x.nome, "cidade_nome");
84-
select.add(x => x.id)
86+
select.add(x => x.id) // cid_id
8587
})
8688
}
8789
)
@@ -126,8 +128,7 @@ describe("Query method", () => {
126128
onWhere.equal(x => x.id, query.ref(x => x.cidade.id)),
127129
join => {
128130
join.select(select => {
129-
select.add(x => x.nome, "cidade_nome");
130-
select.add(x => x.id)
131+
select.all();
131132
})
132133
}
133134
)
@@ -138,7 +139,30 @@ describe("Query method", () => {
138139
expect(result.params[0]).to.equal(1);
139140
expect(result.params[1]).to.equal("ABC");
140141
expect(result.params[2]).to.equal(10);
141-
expect(result.query).to.equal(`SELECT cli.desativo AS inativo, CASE WHEN SUM(cli.classificacao_id) > ? THEN (SUM(cli.classificacao_id) * 2) ELSE 0 END AS classificacaoTest, cid.nome AS cidade_nome, cid.id AS cid_id FROM Cliente AS cli LEFT JOIN Cidade AS cid ON (cid.id = cli.cidade_id) WHERE cli.razaoSocial = ? AND cli.id >= ?`);
142+
expect(result.query).to.equal(`SELECT cli.desativo AS inativo, CASE WHEN SUM(cli.classificacao_id) > ? THEN (SUM(cli.classificacao_id) * 2) ELSE 0 END AS classificacaoTest, cid.* FROM Cliente AS cli LEFT JOIN Cidade AS cid ON (cid.id = cli.cidade_id) WHERE cli.razaoSocial = ? AND cli.id >= ?`);
143+
});
144+
145+
146+
147+
it("test select all by mapper", () => {
148+
let query = new Query(Cliente);
149+
query
150+
.select(select => {
151+
select.allByMap(mappersTable.getMapper(Cliente))
152+
})
153+
.join(Cidade,
154+
onWhere =>
155+
onWhere.equal(x => x.id, query.ref(x => x.cidade.id)),
156+
join => {
157+
join.select(select => {
158+
select.allByMap(mappersTable.getMapper(Cidade));
159+
})
160+
});
161+
162+
const result = query.compile();
163+
164+
expect(result.params.length).to.equal(0);
165+
expect(result.query).to.equal(`SELECT cli.id AS id, cli.razaoSocial AS razaoSocial, cli.apelido AS apelido, cli.desativo AS desativo, cli.cidade_id AS cidade_id, cli.classificacao_id AS classificacao_id, cid.id AS cid_id, cid.nome AS cid_nome, cid.uf_id AS cid_uf_id, cid.subRegiao_id AS cid_subRegiao_id FROM Cliente AS cli LEFT JOIN Cidade AS cid ON (cid.id = cli.cidade_id)`);
142166
});
143167

144168
// TODO: query from query
@@ -175,7 +199,7 @@ describe("Mapper", () => {
175199
};
176200

177201
it("Test mapper insert", () => {
178-
const result = new Insert(Cliente, clienteToSave, new MappersTable().clienteMapper).compile();
202+
const result = new Insert(Cliente, clienteToSave, mappersTable.clienteMapper).compile();
179203
expect(result.params.toString()).to.equal([1, 'Razão', 'Apelido', false, 2, 3].toString());
180204
expect(result.query).to.equal("INSERT INTO Cliente (id, razaoSocial, apelido, desativo, cidade_id, classificacao_id) VALUES (?, ?, ?, ?, ?, ?)");
181205
});

0 commit comments

Comments
 (0)