From f806b9d6755230f1c1f20a46efc411701d481063 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 28 Nov 2019 19:54:05 +0100 Subject: [PATCH] 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 | 52 ++++++++++++++++++++++++++++++---------------- wcs_olap/feeder.py | 12 ++++++++--- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/tests/olap.model b/tests/olap.model index 8d4dc1e..2d5ab9f 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": "left" }, { "detail" : "id", "master" : "formdef_id", "name" : "formdef", - "table" : "formdef" + "table" : "formdef", + "kind": "left" }, { "detail" : "id", @@ -107,20 +110,22 @@ "detail" : "id", "master" : "hour_id", "name" : "hour", - "table" : "hour" + "table" : "hour", + "kind": "right" }, { "detail" : "id", "master" : "generic_status_id", "name" : "generic_status", - "table" : "status" + "table" : "status", + "kind": "left" }, { "detail" : "id", - "kind" : "inner", "master" : "first_agent_id", "name" : "agent", - "table" : "agent" + "table" : "agent", + "kind" : "left" } ], "json_field" : "json_data", @@ -290,69 +295,80 @@ "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" : "left" }, { "detail" : "id", "master" : "formdef_id", "name" : "formdef", - "table" : "formdef" + "table" : "formdef", + "kind" : "left" }, { "detail" : "id", "kind" : "left", "master" : "formdef.category_id", "name" : "category", - "table" : "category" + "table" : "category", + "kind" : "left" }, { "detail" : "id", "master" : "hour_id", "name" : "hour", - "table" : "hour" + "table" : "hour", + "kind" : "right" }, { "detail" : "id", "master" : "generic_status_id", "name" : "generic_status", - "table" : "status" + "table" : "status", + "kind" : "left" }, { "detail" : "id", "kind" : "inner", "master" : "first_agent_id", "name" : "agent", - "table" : "agent" + "table" : "agent", + "kind" : "left" }, { "detail" : "id", "master" : "status_id", "name" : "status", - "table" : "\"status_demande\"" + "table" : "\"status_demande\"", + "kind" : "left" }, { "detail" : "id", "master" : "\"function__receiver\"", "name" : "function__receiver", - "table" : "role" + "table" : "role", + "kind" : "left" }, { "detail" : "id", "master" : "\"field_item\"", "name" : "item", - "table" : "\"formdata_demande_field_item\"" + "table" : "\"formdata_demande_field_item\"", + "kind" : "left" }, { "detail" : "id", "master" : "\"field_itemOpen\"", "name" : "itemOpen", - "table" : "\"formdata_demande_field_itemOpen\"" + "table" : "\"formdata_demande_field_itemOpen\"", + "kind" : "left" } ], "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