diff --git a/src/adapter/postgres.spec.ts b/src/adapter/postgres.spec.ts index 80167f09c0f07aeb46645ae8dd476ef32cb7e7e9..ffa9b2ab72dba8cc6c0b12bb2af7652ab274f1fd 100644 --- a/src/adapter/postgres.spec.ts +++ b/src/adapter/postgres.spec.ts @@ -376,4 +376,23 @@ describe("postgres adapter", () => { done(); }); }); + + it("should get data from view when joins propaged is in the aggregation", (done) => { + let view = adapterScenario.propagatedClauseAggrView; + adapter.getDataFromView(view, (err, result) => { + expect(err).to.be.a("null"); + expect(result).to.be.an("array"); + expect(result).to.have.length(8); + expect(result[0]).to.be.an("object"); + let keys: string[] = []; + keys = keys.concat(view.metrics.map((item) => item.name)); + keys = keys.concat(view.dimensions.map((item) => item.name)); + result.forEach((row) => { + expect(row).to.be.an("object"); + expect(row).to.have.all.keys(keys); + }); + + done(); + }); + }); }); diff --git a/src/adapter/postgres.ts b/src/adapter/postgres.ts index f2c7a3532b01168d01ab75540b3868fc815143a8..ad6d4285b0a03f710de503b2f7100c2940a5dfc4 100644 --- a/src/adapter/postgres.ts +++ b/src/adapter/postgres.ts @@ -201,7 +201,9 @@ export class PostgresAdapter extends Adapter { notCoveredClauses.push(clausesToCover[j]); } } - clausesToCover = notCoveredClauses; + clausesToCover = notCoveredClauses.filter((clause) => { + return !partialJoin[i].clauses.some((c) => c.id === clause.id); + }); if (dims.length < partialJoin[i].dimensions.length || coveredClauses.length > 0) { const partial = new View({ metrics: partialJoin[i].metrics, diff --git a/test/scenario.ts b/test/scenario.ts index 946f1b7c33e4bf2c52dab0721adf3c1561d4e17c..347ff2bbf85961823972b46e0298d97d21d3612c 100644 --- a/test/scenario.ts +++ b/test/scenario.ts @@ -55,6 +55,7 @@ interface AdapterScenario { unMaterializebleView: View; partialJoinView: View; propagatedClauseView: View; + propagatedClauseAggrView: View; } interface DataCtrlScenario { @@ -364,6 +365,15 @@ const propagatedClauseView = new View({ clauses: [clauses.view7dim5, clauses.view6dim4] }); +const propagatedClauseAggrView = new View({ + metrics: [mets[8], mets[5]], + dimensions: [dims[2]], + materialized: false, + origin: false, + childViews: [views[9], views[6], views[7]], + clauses: [clauses.view7dim5, clauses.view6dim4, clauses.view9dim2] +}); + export const engineScenario: EngineScenario = { metrics: mets, dimensions: dims, @@ -391,7 +401,8 @@ export const adapterScenario: AdapterScenario = { notOriginCount: notOriginCount, unMaterializebleView: unMaterializebleView, partialJoinView: partialJoinView, - propagatedClauseView: propagatedClauseView + propagatedClauseView: propagatedClauseView, + propagatedClauseAggrView: propagatedClauseAggrView }; export const dataCtrlScenario: DataCtrlScenario = {