kopia lustrzana https://github.com/simonw/datasette
add support for ?field__isnull=1 (#107)
* add support for ?field__isnull=1 * Add unit test and conditional formatting for ?field__isnullpull/117/head
rodzic
b9af49be6c
commit
ed2b3f25be
|
|
@ -46,6 +46,7 @@ def build_where_clauses(args):
|
||||||
'lte': '"{}" <= :{}',
|
'lte': '"{}" <= :{}',
|
||||||
'glob': '"{}" glob :{}',
|
'glob': '"{}" glob :{}',
|
||||||
'like': '"{}" like :{}',
|
'like': '"{}" like :{}',
|
||||||
|
'isnull': '"{}" is null',
|
||||||
}[lookup]
|
}[lookup]
|
||||||
numeric_operators = {'gt', 'gte', 'lt', 'lte'}
|
numeric_operators = {'gt', 'gte', 'lt', 'lte'}
|
||||||
value_convert = {
|
value_convert = {
|
||||||
|
|
@ -56,11 +57,15 @@ def build_where_clauses(args):
|
||||||
converted = value_convert(value)
|
converted = value_convert(value)
|
||||||
if lookup in numeric_operators and converted.isdigit():
|
if lookup in numeric_operators and converted.isdigit():
|
||||||
converted = int(converted)
|
converted = int(converted)
|
||||||
param_id = 'p{}'.format(i)
|
if ':{}' in template:
|
||||||
|
param_id = 'p{}'.format(i)
|
||||||
|
params[param_id] = converted
|
||||||
|
tokens = (column, param_id)
|
||||||
|
else:
|
||||||
|
tokens = (column,)
|
||||||
sql_bits.append(
|
sql_bits.append(
|
||||||
template.format(column, param_id)
|
template.format(*tokens)
|
||||||
)
|
)
|
||||||
params[param_id] = converted
|
|
||||||
return sql_bits, params
|
return sql_bits, params
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,15 @@ def test_custom_json_encoder(obj, expected):
|
||||||
['"foo" like :p0', '"zax" glob :p1'],
|
['"foo" like :p0', '"zax" glob :p1'],
|
||||||
['2%2', '3*']
|
['2%2', '3*']
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
'foo__isnull': '1',
|
||||||
|
'baz__isnull': '1',
|
||||||
|
'bar__gt': '10'
|
||||||
|
},
|
||||||
|
['"bar" > :p0', '"baz" is null', '"foo" is null'],
|
||||||
|
[10]
|
||||||
|
),
|
||||||
])
|
])
|
||||||
def test_build_where(args, expected_where, expected_params):
|
def test_build_where(args, expected_where, expected_params):
|
||||||
sql_bits, actual_params = utils.build_where_clauses(args)
|
sql_bits, actual_params = utils.build_where_clauses(args)
|
||||||
|
|
|
||||||
Ładowanie…
Reference in New Issue