Projet

Général

Profil

0002-feeder-define-all-joins-38066.patch

Benjamin Dauvergne, 03 décembre 2019 15:40

Télécharger (4,81 ko)

Voir les différences:

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(-)
tests/olap.model
82 82
               "detail" : "date",
83 83
               "master" : "receipt_time",
84 84
               "name" : "receipt_time",
85
               "table" : "dates"
85
               "table" : "dates",
86
               "kind": "right"
86 87
            },
87 88
            {
88 89
               "detail" : "id",
89 90
               "master" : "channel_id",
90 91
               "name" : "channel",
91
               "table" : "channel"
92
               "table" : "channel",
93
               "kind": "full"
92 94
            },
93 95
            {
94 96
               "detail" : "id",
95 97
               "master" : "formdef_id",
96 98
               "name" : "formdef",
97 99
               "table" : "formdef"
100
               "kind": "full",
98 101
            },
99 102
            {
100 103
               "detail" : "id",
......
346 349
               "detail" : "id",
347 350
               "master" : "\"field_item\"",
348 351
               "name" : "item",
349
               "table" : "\"formdata_demande_field_item\""
352
               "table" : "\"formdata_demande_field_item\"",
353
               "kind" : "full"
350 354
            },
351 355
            {
352 356
               "detail" : "id",
353 357
               "master" : "\"field_itemOpen\"",
354 358
               "name" : "itemOpen",
355
               "table" : "\"formdata_demande_field_itemOpen\""
359
               "table" : "\"formdata_demande_field_itemOpen\"",
360
               "kind" : "full"
356 361
            }
357 362
         ],
358 363
         "key" : "id",
wcs_olap/feeder.py
121 121
                    'table': 'dates',
122 122
                    'detail': 'date',
123 123
                    'master': 'receipt_time',
124
                    'kind': 'right',
124 125
                },
125 126
                {
126 127
                    'name': 'channel',
127 128
                    'table': 'channel',
128 129
                    'master': 'channel_id',
129 130
                    'detail': 'id',
131
                    'kind': 'left',
130 132
                },
131 133
                {
132 134
                    'name': 'formdef',
133 135
                    'table': 'formdef',
134 136
                    'master': 'formdef_id',
135 137
                    'detail': 'id',
138
                    'kind': 'left',
136 139
                },
137 140
                {
138 141
                    'name': 'category',
......
146 149
                    'table': 'hour',
147 150
                    'master': 'hour_id',
148 151
                    'detail': 'id',
152
                    'kind': 'right',
149 153
                },
150 154
                {
151 155
                    'name': 'generic_status',
152 156
                    'table': 'status',
153 157
                    'master': 'generic_status_id',
154 158
                    'detail': 'id',
159
                    'kind': 'left',
155 160
                },
156 161
                {
157 162
                    'name': 'agent',
158 163
                    'table': 'agent',
159 164
                    'master': 'first_agent_id',
160 165
                    'detail': 'id',
161
                    'kind': 'inner',
166
                    'kind': 'left',
162 167
                },
163 168
            ],
164 169
            'dimensions': [
......
930 935
            'table': quote(self.status_table_name),
931 936
            'master': 'status_id',
932 937
            'detail': 'id',
938
            'kind': 'left',
933 939
        })
934 940
        cube['dimensions'].append({
935 941
            'name': 'status',
......
948 954
                'table': 'role',
949 955
                'master': quote(at),
950 956
                'detail': 'id',
957
                'kind': 'left',
951 958
            })
952 959
            cube['dimensions'].append({
953 960
                'name': at,
......
998 1005
                    'table': quote(table_name),
999 1006
                    'master': quote('field_%s' % field.varname),
1000 1007
                    'detail': 'id',
1008
                    'kind': 'left',
1001 1009
                }
1002
                if not field.required:
1003
                    join['kind'] = 'full'
1004 1010
                dimension = {
1005 1011
                    'name': field.varname,
1006 1012
                    'label': field.label.lower(),
1007
-