Skip to content

Commit 914065f

Browse files
author
fernandocode
committed
v.0.3.4
Adicionado tratamento para busca de informções de referencias que não é possivel encontrar o alias automaticamente, exigindo que o mesmo seja explicitamente informado. Adicionado novos testes de cobertura.
1 parent 5ccfd93 commit 914065f

File tree

5 files changed

+131
-12
lines changed

5 files changed

+131
-12
lines changed

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.3.3",
3+
"version": "0.3.4",
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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ export class RowResult<T> {
5454
): TReader {
5555
if (alias === void 0 && this._query && MapperUtils.resolveKey(typeT) !== this._query.tablename) {
5656
alias = this._query.getAlias(typeT);
57+
if (alias === void 0) {
58+
throw new DatabaseBuilderError(`alias not found for the reference of "${MapperUtils.resolveKey(typeT)}", you can enter an alias explicitly in the last parameter`);
59+
}
5760
}
5861
const mapperTable: MapperTable = this.getMapper(typeT);
5962

src/test/models/base-import.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
export class BaseImport<TKey> {
3-
3+
44
constructor(public codeImport: TKey) {
55
}
66
}

src/test/sqlite.spec.ts

Lines changed: 104 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,44 @@ describe("SQLite", async () => {
2222
const crud = new Crud(database, mapper, false);
2323
const ddl = new Ddl(database, mapper, false);
2424

25+
const insertUf = async () => {
26+
await ddl.create(Uf).execute().toPromise();
27+
const itemExist = await crud.query(Uf)
28+
.where(w => w.equal(x => x.codeImport, ObjectToTest.uf.codeImport))
29+
.firstOrDefault().toPromise();
30+
if (!itemExist) {
31+
const insert = crud.insert(Uf, ObjectToTest.uf);
32+
const insertedResult = await insert.execute().toPromise();
33+
expect(insertedResult[0].rowsAffected).to.equal(1);
34+
}
35+
};
36+
37+
const insertSubRegiao = async () => {
38+
await ddl.create(SubRegiao).execute().toPromise();
39+
const itemExist = await crud.query(SubRegiao)
40+
.where(w => w.equal(x => x.codeImport, ObjectToTest.subRegiao.codeImport))
41+
.firstOrDefault().toPromise();
42+
if (!itemExist) {
43+
console.log(`insert subregião: ${ObjectToTest.subRegiao}`);
44+
const insert = crud.insert(SubRegiao, ObjectToTest.subRegiao);
45+
const insertedResult = await insert.execute().toPromise();
46+
console.log(insertedResult);
47+
expect(insertedResult[0].rowsAffected).to.equal(1);
48+
}
49+
};
50+
51+
const insertRegiao = async () => {
52+
await ddl.create(Regiao).execute().toPromise();
53+
const itemExist = await crud.query(Regiao)
54+
.where(w => w.equal(x => x.codeImport, ObjectToTest.regiao.codeImport))
55+
.firstOrDefault().toPromise();
56+
if (!itemExist) {
57+
const insert = crud.insert(Regiao, ObjectToTest.regiao);
58+
const insertedResult = await insert.execute().toPromise();
59+
expect(insertedResult[0].rowsAffected).to.equal(1);
60+
}
61+
};
62+
2563
it("GuidClazz", async () => {
2664

2765
await ddl.create(GuidClazz).execute().toPromise();
@@ -111,20 +149,76 @@ describe("SQLite", async () => {
111149
expect(queryResultNull.length).to.equal(1);
112150
});
113151

152+
it("Cidade read reference without join", async () => {
153+
154+
await insertUf();
155+
156+
await insertSubRegiao();
157+
158+
await insertRegiao();
159+
160+
const model = {
161+
codeImport: 120,
162+
nome: "Teste 120",
163+
population: 12,
164+
uf: ObjectToTest.uf,
165+
subRegiao: ObjectToTest.subRegiao,
166+
} as Cidade;
167+
168+
const insert = crud.insert(Cidade, model);
169+
const insertResult4 = await insert.execute().toPromise();
170+
expect(insertResult4[0].rowsAffected).to.equal(1);
171+
172+
const query = await crud.query(Cidade)
173+
.projection(p => p.all())
174+
.where(where => where.equal(x => x.codeImport, model.codeImport));
175+
let joinSubRegiao: JoinQueryBuilder<SubRegiao>;
176+
query.join(
177+
SubRegiao,
178+
on => on.equal(x => x.codeImport, query.ref(x => x.subRegiao.codeImport)),
179+
join => {
180+
join.projection(projection => {
181+
projection.add(x => x.nome);
182+
});
183+
joinSubRegiao = join;
184+
}
185+
);
186+
query.join(
187+
Regiao,
188+
on => on.equal(x => x.codeImport, joinSubRegiao.ref(x => x.regiao.codeImport)),
189+
join => {
190+
join.projection(projection => {
191+
projection.all();
192+
});
193+
}
194+
);
195+
const queryResult = await query.mapper<Cidade>(row => {
196+
const result = row
197+
.map()
198+
.map(Uf, x => x.uf, "uf")
199+
.map(SubRegiao, x => x.subRegiao)
200+
.map(Regiao, x => x.subRegiao.regiao)
201+
.result();
202+
return result;
203+
}).toPromise();
204+
expect(queryResult.length).to.equal(1);
205+
expect(queryResult[0].codeImport).to.equal(model.codeImport);
206+
expect(queryResult[0].nome).to.equal(model.nome);
207+
expect(queryResult[0].population).to.equal(model.population);
208+
expect(queryResult[0].uf.codeImport).to.equal(model.uf.codeImport);
209+
expect(queryResult[0].subRegiao.codeImport).to.equal(model.subRegiao.codeImport);
210+
expect(queryResult[0].subRegiao.nome).to.equal(model.subRegiao.nome);
211+
expect(queryResult[0].subRegiao.regiao.codeImport).to.equal(model.subRegiao.regiao.codeImport);
212+
expect(queryResult[0].subRegiao.regiao.nome).to.equal(model.subRegiao.regiao.nome);
213+
});
214+
114215
it("Cidade join to mappper", async () => {
115216

116-
await ddl.create(Uf).execute().toPromise();
117-
const insertUf = crud.insert(Uf, ObjectToTest.uf);
118-
const insertResultUf = await insertUf.execute().toPromise();
119-
expect(insertResultUf[0].rowsAffected).to.equal(1);
217+
await insertUf();
120218

121-
await ddl.create(SubRegiao).execute().toPromise();
122-
const insertResulSubRegiao = await crud.insert(SubRegiao, ObjectToTest.subRegiao).execute().toPromise();
123-
expect(insertResulSubRegiao[0].rowsAffected).to.equal(1);
219+
await insertSubRegiao();
124220

125-
await ddl.create(Regiao).execute().toPromise();
126-
const insertResultRegiao = await crud.insert(Regiao, ObjectToTest.regiao).execute().toPromise();
127-
expect(insertResultRegiao[0].rowsAffected).to.equal(1);
221+
await insertRegiao();
128222

129223
const model = {
130224
codeImport: 101,

src/test/update.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,28 @@ describe("Update", () => {
9393
expect(result[0].query).to.equal("UPDATE Marca SET codeImport = ?, descricao = ?");
9494
});
9595

96+
it("Marca (parcial update)", () => {
97+
const marcaCodeImport = 2;
98+
const result = new Update(Marca, void 0, mapper.get(Marca).mapperTable)
99+
.columns(c => c.setValue(x => x.codeImport, marcaCodeImport))
100+
.compile();
101+
expect(result[0].params.toString()).to.equal([
102+
marcaCodeImport
103+
].toString());
104+
expect(result[0].query).to.equal("UPDATE Marca SET codeImport = ?");
105+
});
106+
107+
it("Marca (parcial update by model)", () => {
108+
const marcaParcial: Marca = { codeImport: 2 } as any;
109+
const result = new Update(Marca, marcaParcial, mapper.get(Marca).mapperTable)
110+
.columns(c => c.set(x => x.codeImport))
111+
.compile();
112+
expect(result[0].params.toString()).to.equal([
113+
marcaParcial.codeImport
114+
].toString());
115+
expect(result[0].query).to.equal("UPDATE Marca SET codeImport = ?");
116+
});
117+
96118
it("CondicaoPagamento", () => {
97119
const result = new Update(CondicaoPagamento, ObjectToTest.condicaoPagamento, mapper.get(CondicaoPagamento).mapperTable)
98120
.where(where => where.equal(x => x.codeImport, ObjectToTest.condicaoPagamento.codeImport))

0 commit comments

Comments
 (0)