Skip to content

Commit 66e9a98

Browse files
committed
Handle NULLs in ClickHouse !=
1 parent 9b7a718 commit 66e9a98

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

daffodil/clickhouse_query_delegate.pyx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ cdef class ClickHouseQueryDelegate(BaseDaffodilDelegate):
7676
return f"{cast_expr} NOT IN {val_expr}"
7777
else:
7878
val_expr = self._format_value(val_obj)
79+
if op == "!=":
80+
return f"({key_expr} != {val_expr}) OR ({key_expr} IS NULL)"
7981
return f"{key_expr} {op} {val_expr}"
8082

8183
def call(self, predicate, query=None):

test/test_clickhouse.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ def test_existence_false(self):
4343
sql = self._render('zip_code ?= false')
4444
self.assertEqual(sql, "(isNull(hs_data.zip_code))")
4545

46+
def test_not_equal_with_null(self):
47+
fltr = '{\n "uni_valspar_qx_thanks" ?= true\n "wave" != "post"\n}'
48+
expected = "((isNotNull(hs_data.uni_valspar_qx_thanks)) AND ((hs_data.wave != 'post') OR (hs_data.wave IS NULL)))"
49+
self.assertEqual(self._render(fltr), expected)
50+
4651

4752
if __name__ == '__main__':
4853
unittest.main()

0 commit comments

Comments
 (0)