Skip to content

Commit fe44d7f

Browse files
committed
Add custom beam/postgres operators
1 parent 3aa1dbb commit fe44d7f

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

lib/mobility-core/src/Kernel/Storage/ClickhouseV2/Internal/Types.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ data Column (a :: IsAggregated) t v where
5757
Distinct :: (ClickhouseTable t, ClickhouseValue v) => Column a t v -> Column a t v -- should not be used in where clause
5858
Max :: (ClickhouseTable t, ClickhouseValue v) => Column a t v -> Column a t v
5959
Add :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t v
60+
Sub :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t v
61+
Mul :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t v
62+
Div :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t Double
6063
CoerceNum :: (ClickhouseTable t, ClickhouseNum v1, ClickhouseNum v2) => Column a t v1 -> Column a t v2
6164
ToDate :: (ClickhouseTable t, ClickhouseValue DateTime, ClickhouseValue Time.Day) => Column a t DateTime -> Column a t Time.Day -- FIXME create some generic constructor for different clickhouse functions
6265
ToHour :: (ClickhouseTable t, ClickhouseValue DateTime, ClickhouseValue Int) => Column a t DateTime -> Column a t Int
@@ -266,6 +269,9 @@ showColumn (Avg column) = "AVG" <> addBrackets' (showColumn column)
266269
showColumn (Distinct column) = "DISTINCT" <> addBrackets' (showColumn column)
267270
showColumn (Max column) = "MAX" <> addBrackets' (showColumn column)
268271
showColumn (Add column1 column2) = addBrackets' (showColumn column1 <> "+" <> showColumn column2)
272+
showColumn (Sub column1 column2) = addBrackets' (showColumn column1 <> "-" <> showColumn column2)
273+
showColumn (Mul column1 column2) = addBrackets' (showColumn column1 <> "*" <> showColumn column2)
274+
showColumn (Div column1 column2) = addBrackets' (showColumn column1 <> "/" <> showColumn column2)
269275
showColumn (CoerceNum column) = showColumn column
270276
showColumn (ToDate column) = "toDate" <> addBrackets' (showColumn column)
271277
showColumn (ToHour column) = "toHour" <> addBrackets' (showColumn column)

lib/mobility-core/src/Kernel/Storage/ClickhouseV2/Operators.hs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,21 @@ max = Max
194194

195195
infixl 6 +.
196196

197+
(-.) :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t v
198+
(-.) = Sub
199+
200+
infixl 6 -.
201+
202+
(*.) :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t v
203+
(*.) = Mul
204+
205+
infixl 7 *.
206+
207+
(/.) :: (ClickhouseTable t, ClickhouseNum v) => Column a t v -> Column a t v -> Column a t Double
208+
(/.) = Div
209+
210+
infixl 7 /.
211+
197212
-- for example we can use for columns sum with different types
198213
unsafeCoerceNum :: forall v1 v2 a t. (ClickhouseTable t, ClickhouseNum v1, ClickhouseNum v2) => Column a t v1 -> Column a t v2
199214
unsafeCoerceNum = CoerceNum

0 commit comments

Comments
 (0)