From ad67f3131cb616f8a6ff9d65214fa462ff69b15d Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 7 Aug 2019 09:46:51 +0200 Subject: [PATCH] schemas: handle case of an unique IS NULL filter (#32476) --- bijoe/schemas.py | 20 ++++++++++++++------ tests/test_schema1.py | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/bijoe/schemas.py b/bijoe/schemas.py index 80bbc67..20f73ee 100644 --- a/bijoe/schemas.py +++ b/bijoe/schemas.py @@ -276,13 +276,21 @@ class Dimension(Base): values = [int(v) for v in filter_values] else: values = filter_values - s = ', '.join(['%s'] * len(values)) - if self.filter_expression: - expression = self.filter_expression % s - else: - expression = '%s IN (%s)' % (value, s) + expressions = [] + if values: + s = ', '.join(['%s'] * len(values)) + if self.filter_expression: + expressions.append(self.filter_expression % s) + else: + expressions.append('%s IN (%s)' % (value, s)) if is_none: - expression = '((%s) OR (%s IS NULL))' % (expression, value) + expressions.append('%s IS NULL' % value) + if len(expressions) == 0: + expression = 'FALSE' + elif len(expressions) == 1: + expression = expressions[0] + else: + expression = ' OR '.join('(%s)' % e for e in expressions) return expression, values diff --git a/tests/test_schema1.py b/tests/test_schema1.py index 097ba0e..49e62fe 100644 --- a/tests/test_schema1.py +++ b/tests/test_schema1.py @@ -87,6 +87,25 @@ def test_string_dimension(schema1, app, admin): assert get_table(response) == [['String', 'a', 'b', 'Aucun(e)'], ['number of rows', '11', '2', '1']] +def test_item_dimension(schema1, app, admin): + login(app, admin) + response = app.get('/').follow() + response = response.click('Facts 1') + form = response.form + form.set('representation', 'table') + form.set('measure', 'simple_count') + form.set('drilldown_x', 'outersubcategory') + response = form.submit('visualize') + assert get_table(response) == [ + ['Outer SubCategory', u'sub\xe94', u'sub\xe95', u'sub\xe96', u'sub\xe98', + u'sub\xe99', u'sub\xe97', u'sub\xe92', u'sub\xe93', u'sub\xe91', '0'], + ['number of rows', '0', '0', '0', '0', '0', '0', '0', '1', '15', '1'] + ] + form.set('filter__outersubcategory', ['__none__']) + response = form.submit('visualize') + assert get_table(response) == [['Outer SubCategory', '0'], ['number of rows', '1']] + + def test_yearmonth_drilldown(schema1, app, admin): login(app, admin) response = app.get('/').follow() -- 2.22.0