From 57b1385996b22e48a46a0d140643c4ad97f12796 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 28 Nov 2019 19:54:05 +0100 Subject: [PATCH 2/2] feeder: define all joins (#38066) * join with the dates table must be inner because we do not want to see results for forms outside the dates table (every form must have a receipt_time), * all other joins must be left because form's schemas are dynamic and dimension can be absent from older forms but we still want to count them. --- tests/olap.model | 13 +++++++++---- wcs_olap/feeder.py | 12 +++++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/tests/olap.model b/tests/olap.model index 8d4dc1e..db04c7d 100644 --- a/tests/olap.model +++ b/tests/olap.model @@ -82,19 +82,22 @@ "detail" : "date", "master" : "receipt_time", "name" : "receipt_time", - "table" : "dates" + "table" : "dates", + "kind": "right" }, { "detail" : "id", "master" : "channel_id", "name" : "channel", - "table" : "channel" + "table" : "channel", + "kind": "full" }, { "detail" : "id", "master" : "formdef_id", "name" : "formdef", "table" : "formdef" + "kind": "full", }, { "detail" : "id", @@ -346,13 +349,15 @@ "detail" : "id", "master" : "\"field_item\"", "name" : "item", - "table" : "\"formdata_demande_field_item\"" + "table" : "\"formdata_demande_field_item\"", + "kind" : "full" }, { "detail" : "id", "master" : "\"field_itemOpen\"", "name" : "itemOpen", - "table" : "\"formdata_demande_field_itemOpen\"" + "table" : "\"formdata_demande_field_itemOpen\"", + "kind" : "full" } ], "key" : "id", diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index 9cf58a1..ca5d77c 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -121,18 +121,21 @@ class WcsOlapFeeder(object): 'table': 'dates', 'detail': 'date', 'master': 'receipt_time', + 'kind': 'right', }, { 'name': 'channel', 'table': 'channel', 'master': 'channel_id', 'detail': 'id', + 'kind': 'left', }, { 'name': 'formdef', 'table': 'formdef', 'master': 'formdef_id', 'detail': 'id', + 'kind': 'left', }, { 'name': 'category', @@ -146,19 +149,21 @@ class WcsOlapFeeder(object): 'table': 'hour', 'master': 'hour_id', 'detail': 'id', + 'kind': 'right', }, { 'name': 'generic_status', 'table': 'status', 'master': 'generic_status_id', 'detail': 'id', + 'kind': 'left', }, { 'name': 'agent', 'table': 'agent', 'master': 'first_agent_id', 'detail': 'id', - 'kind': 'inner', + 'kind': 'left', }, ], 'dimensions': [ @@ -930,6 +935,7 @@ class WcsFormdefFeeder(object): 'table': quote(self.status_table_name), 'master': 'status_id', 'detail': 'id', + 'kind': 'left', }) cube['dimensions'].append({ 'name': 'status', @@ -948,6 +954,7 @@ class WcsFormdefFeeder(object): 'table': 'role', 'master': quote(at), 'detail': 'id', + 'kind': 'left', }) cube['dimensions'].append({ 'name': at, @@ -998,9 +1005,8 @@ class WcsFormdefFeeder(object): 'table': quote(table_name), 'master': quote('field_%s' % field.varname), 'detail': 'id', + 'kind': 'left', } - if not field.required: - join['kind'] = 'full' dimension = { 'name': field.varname, 'label': field.label.lower(), -- 2.23.0