Skip to main content

reifydb_evaluate/expression/arith/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4macro_rules! dispatch_arith {
5
6	(
7		$left:expr, $right:expr;
8		fixed: $fh:ident, arb: $ah:ident ($ctx:expr, $target:expr, $fragment:expr);
9		$($extra:tt)*
10	) => {
11		dispatch_arith!(@rows
12			($left, $right) $fh $ah ($ctx, $target, $fragment)
13			[Float4 Float8 Int1 Int2 Int4 Int8 Int16 Uint1 Uint2 Uint4 Uint8 Uint16]
14			{$($extra)*}
15			{}
16		)
17	};
18
19
20	(@rows
21		($left:expr, $right:expr) $fh:ident $ah:ident ($ctx:expr, $target:expr, $fragment:expr)
22		[$L:ident $($rest:ident)*]
23		{$($extra:tt)*}
24		{$($acc:tt)*}
25	) => {
26		dispatch_arith!(@rows
27			($left, $right) $fh $ah ($ctx, $target, $fragment)
28			[$($rest)*]
29			{$($extra)*}
30			{
31				$($acc)*
32				(ColumnBuffer::$L(l), ColumnBuffer::Float4(r)) => $fh($ctx, l, r, $target, $fragment),
33				(ColumnBuffer::$L(l), ColumnBuffer::Float8(r)) => $fh($ctx, l, r, $target, $fragment),
34				(ColumnBuffer::$L(l), ColumnBuffer::Int1(r)) => $fh($ctx, l, r, $target, $fragment),
35				(ColumnBuffer::$L(l), ColumnBuffer::Int2(r)) => $fh($ctx, l, r, $target, $fragment),
36				(ColumnBuffer::$L(l), ColumnBuffer::Int4(r)) => $fh($ctx, l, r, $target, $fragment),
37				(ColumnBuffer::$L(l), ColumnBuffer::Int8(r)) => $fh($ctx, l, r, $target, $fragment),
38				(ColumnBuffer::$L(l), ColumnBuffer::Int16(r)) => $fh($ctx, l, r, $target, $fragment),
39				(ColumnBuffer::$L(l), ColumnBuffer::Uint1(r)) => $fh($ctx, l, r, $target, $fragment),
40				(ColumnBuffer::$L(l), ColumnBuffer::Uint2(r)) => $fh($ctx, l, r, $target, $fragment),
41				(ColumnBuffer::$L(l), ColumnBuffer::Uint4(r)) => $fh($ctx, l, r, $target, $fragment),
42				(ColumnBuffer::$L(l), ColumnBuffer::Uint8(r)) => $fh($ctx, l, r, $target, $fragment),
43				(ColumnBuffer::$L(l), ColumnBuffer::Uint16(r)) => $fh($ctx, l, r, $target, $fragment),
44				(ColumnBuffer::$L(l), ColumnBuffer::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
45				(ColumnBuffer::$L(l), ColumnBuffer::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
46				(ColumnBuffer::$L(l), ColumnBuffer::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
47			}
48		)
49	};
50
51
52	(@rows
53		($left:expr, $right:expr) $fh:ident $ah:ident ($ctx:expr, $target:expr, $fragment:expr)
54		[]
55		{$($extra:tt)*}
56		{$($acc:tt)*}
57	) => {
58		match ($left, $right) {
59
60			$($acc)*
61
62
63			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
64			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
65			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
66			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
67			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
68			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
69			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
70			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
71			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
72			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
73			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
74			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
75			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
76			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
77			(ColumnBuffer::Int { container: l, .. }, ColumnBuffer::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
78
79			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
80			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
81			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
82			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
83			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
84			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
85			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
86			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
87			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
88			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
89			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
90			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
91			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
92			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
93			(ColumnBuffer::Uint { container: l, .. }, ColumnBuffer::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
94
95			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
96			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
97			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
98			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
99			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
100			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
101			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
102			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
103			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
104			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
105			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
106			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
107			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
108			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
109			(ColumnBuffer::Decimal { container: l, .. }, ColumnBuffer::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
110
111
112			$($extra)*
113		}
114	};
115}
116
117pub mod add;
118pub mod div;
119pub mod mul;
120pub mod rem;
121pub mod sub;