schemas: handle case of an unique IS NULL filter (#32476)

This commit is contained in:
Benjamin Dauvergne 2019-08-07 09:46:51 +02:00 committed by Frédéric Péters
parent ace7a3407b
commit 80332cfc1b
2 changed files with 33 additions and 6 deletions

View File

@ -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

View File

@ -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()