@@ -73,17 +73,30 @@ instance (ClickhouseTable t) => ClickhouseQuery (Clause t) where
7373 toClickhouseQuery (Val b) = RawQuery $ C. toLower <$> show @ String @ Bool b
7474
7575instance ClickhouseValue value => ClickhouseQuery (Term value ) where
76- toClickhouseQuery (In valList) = " IN " <> (addBrackets . intercalate " , " . (valToClickhouseQuery @ value <$> ) $ toList valList )
77- toClickhouseQuery (Eq term) = " = " <> valToClickhouseQuery @ value term
76+ toClickhouseQuery (In valList) = " IN " <> renderInList (toList valList >>= (toList . toClickhouseFilterValues @ value ) )
77+ toClickhouseQuery (Eq term) = eqOrInClickhouseQuery @ value term
7878 toClickhouseQuery NullTerm = " IS NULL"
7979 toClickhouseQuery NotNullTerm = " IS NOT NULL"
80- toClickhouseQuery (NotEq term) = " != " <> valToClickhouseQuery @ value term
80+ toClickhouseQuery (NotEq term) = notEqOrNotInClickhouseQuery @ value term
8181 toClickhouseQuery (GreaterThan term) = " >" <> valToClickhouseQuery @ value term
8282 toClickhouseQuery (GreaterOrEqualThan term) = " >=" <> valToClickhouseQuery @ value term
8383 toClickhouseQuery (LessThan term) = " <" <> valToClickhouseQuery @ value term
8484 toClickhouseQuery (LessOrEqualThan term) = " <=" <> valToClickhouseQuery @ value term
8585 toClickhouseQuery (Like term) = " LIKE " <> valToClickhouseQuery @ value term
8686
87+ eqOrInClickhouseQuery :: forall value . ClickhouseValue value => value -> RawQuery
88+ eqOrInClickhouseQuery term = case toClickhouseFilterValues @ value term of
89+ v :| [] -> " =" <> toClickhouseQuery @ (Value value ) v
90+ vs -> " IN " <> renderInList (toList vs)
91+
92+ notEqOrNotInClickhouseQuery :: forall value . ClickhouseValue value => value -> RawQuery
93+ notEqOrNotInClickhouseQuery term = case toClickhouseFilterValues @ value term of
94+ v :| [] -> " !=" <> toClickhouseQuery @ (Value value ) v
95+ vs -> " NOT IN " <> renderInList (toList vs)
96+
97+ renderInList :: forall value . ClickhouseValue value => [Value value ] -> RawQuery
98+ renderInList = addBrackets . intercalate " ," . (toClickhouseQuery @ (Value value ) <$> )
99+
87100-- do we need quotes for each datatype?
88101valToClickhouseQuery :: forall value . ClickhouseValue value => value -> RawQuery
89102valToClickhouseQuery = toClickhouseQuery @ (Value value ) . toClickhouseValue @ value
0 commit comments