Skip to content

Commit de4665a

Browse files
authored
Turn jsonb stringify functions into separate functions (#32055)
Some of the jsonb functions can be used in contexts where the output is either jsonb or strings. Previously, we'd encode this as part of the function call by supplying a `bool` field. This is an abstraction leak and instead it would be better to have separate functions. This change absorbs the `stringify` parameter into different functions. No behavior change expected. Signed-off-by: Moritz Hoffmann <mh@materialize.com>
1 parent db936d7 commit de4665a

File tree

10 files changed

+101
-85
lines changed

10 files changed

+101
-85
lines changed

src/buf.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ breaking:
5555
- compute-types/src/sinks.proto
5656
# reason: Ignore because plans are currently not persisted.
5757
- expr/src/relation.proto
58+
# reason: Ignore because plans are currently not persisted.
59+
- expr/src/scalar.proto
5860
# reason: we very carefully evolve these protobuf definitions
5961
- persist-client/src/internal/state.proto
6062
# reason: does currently not require backward-compatibility

src/expr-test-util/tests/testdata/scalar

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ build-scalar
3838
case when (#0 > -2) then substr(#1, 1, 4) else "hello" end
3939

4040
build-scalar
41-
(call_binary (jsonb_get_string true) #2 ("field1" string))
41+
(call_binary (jsonb_get_string_stringify) #2 ("field1" string))
4242
----
4343
(#2 ->> "field1")
4444

src/expr/src/interpret.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -688,12 +688,12 @@ impl SpecialBinary {
688688
}
689689

690690
match func {
691-
BinaryFunc::JsonbGetString { stringify } => Some(SpecialBinary {
692-
map_fn: if *stringify {
693-
|l, r| jsonb_get_string(l, r, true)
694-
} else {
695-
|l, r| jsonb_get_string(l, r, false)
696-
},
691+
BinaryFunc::JsonbGetString => Some(SpecialBinary {
692+
map_fn: |l, r| jsonb_get_string(l, r, false),
693+
pushdownable: (true, false),
694+
}),
695+
BinaryFunc::JsonbGetStringStringify => Some(SpecialBinary {
696+
map_fn: |l, r| jsonb_get_string(l, r, true),
697697
pushdownable: (true, false),
698698
}),
699699
BinaryFunc::Eq => Some(SpecialBinary {
@@ -1177,8 +1177,8 @@ mod tests {
11771177
Lte,
11781178
Gte,
11791179
DateTruncTimestamp,
1180-
JsonbGetString { stringify: true },
1181-
JsonbGetString { stringify: false },
1180+
JsonbGetString,
1181+
JsonbGetStringStringify,
11821182
]
11831183
};
11841184

@@ -1200,7 +1200,7 @@ mod tests {
12001200
.scalar_type
12011201
.base_eq(&ScalarType::Timestamp { precision: None })
12021202
}
1203-
JsonbGetString { .. } => {
1203+
JsonbGetString | JsonbGetStringStringify => {
12041204
arg0.scalar_type.base_eq(&ScalarType::Jsonb)
12051205
&& arg1.scalar_type.base_eq(&ScalarType::String)
12061206
}
@@ -1567,7 +1567,7 @@ mod tests {
15671567
let expr = MirScalarExpr::CallUnary {
15681568
func: UnaryFunc::CastJsonbToNumeric(CastJsonbToNumeric(None)),
15691569
expr: Box::new(MirScalarExpr::CallBinary {
1570-
func: BinaryFunc::JsonbGetString { stringify: false },
1570+
func: BinaryFunc::JsonbGetString,
15711571
expr1: Box::new(MirScalarExpr::Column(0)),
15721572
expr2: Box::new(MirScalarExpr::Literal(
15731573
Ok(Row::pack_slice(&["ts".into()])),

src/expr/src/scalar.proto

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
// See https://developers.google.com/protocol-buffers for what's going on here.
1111

12+
// buf breaking: ignore (Ignore because plans are currently not persisted.)
13+
1214
syntax = "proto3";
1315

1416
package mz_expr.scalar;
@@ -574,9 +576,12 @@ message ProtoBinaryFunc {
574576
google.protobuf.Empty timezone_interval_timestamp_tz = 95;
575577
google.protobuf.Empty timezone_interval_time = 96;
576578
google.protobuf.Empty text_concat = 97;
577-
bool jsonb_get_int64 = 98;
578-
bool jsonb_get_string = 99;
579-
bool jsonb_get_path = 100;
579+
google.protobuf.Empty jsonb_get_int64 = 98;
580+
google.protobuf.Empty jsonb_get_int64_stringify = 197;
581+
google.protobuf.Empty jsonb_get_string = 99;
582+
google.protobuf.Empty jsonb_get_string_stringify = 198;
583+
google.protobuf.Empty jsonb_get_path = 100;
584+
google.protobuf.Empty jsonb_get_path_stringify = 199;
580585
google.protobuf.Empty jsonb_contains_string = 101;
581586
google.protobuf.Empty jsonb_concat = 102;
582587
google.protobuf.Empty jsonb_contains_jsonb = 103;

src/expr/src/scalar/func.rs

Lines changed: 66 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,15 +2310,12 @@ pub enum BinaryFunc {
23102310
TimezoneIntervalTime,
23112311
TimezoneOffset,
23122312
TextConcat,
2313-
JsonbGetInt64 {
2314-
stringify: bool,
2315-
},
2316-
JsonbGetString {
2317-
stringify: bool,
2318-
},
2319-
JsonbGetPath {
2320-
stringify: bool,
2321-
},
2313+
JsonbGetInt64,
2314+
JsonbGetInt64Stringify,
2315+
JsonbGetString,
2316+
JsonbGetStringStringify,
2317+
JsonbGetPath,
2318+
JsonbGetPathStringify,
23222319
JsonbContainsString,
23232320
JsonbConcat,
23242321
JsonbContainsJsonb,
@@ -2577,15 +2574,12 @@ impl BinaryFunc {
25772574
BinaryFunc::TimezoneIntervalTime => timezone_interval_time(a, b),
25782575
BinaryFunc::TimezoneOffset => timezone_offset(a, b, temp_storage),
25792576
BinaryFunc::TextConcat => Ok(text_concat_binary(a, b, temp_storage)),
2580-
BinaryFunc::JsonbGetInt64 { stringify } => {
2581-
Ok(jsonb_get_int64(a, b, temp_storage, *stringify))
2582-
}
2583-
BinaryFunc::JsonbGetString { stringify } => {
2584-
Ok(jsonb_get_string(a, b, temp_storage, *stringify))
2585-
}
2586-
BinaryFunc::JsonbGetPath { stringify } => {
2587-
Ok(jsonb_get_path(a, b, temp_storage, *stringify))
2588-
}
2577+
BinaryFunc::JsonbGetInt64 => Ok(jsonb_get_int64(a, b, temp_storage, false)),
2578+
BinaryFunc::JsonbGetInt64Stringify => Ok(jsonb_get_int64(a, b, temp_storage, true)),
2579+
BinaryFunc::JsonbGetString => Ok(jsonb_get_string(a, b, temp_storage, false)),
2580+
BinaryFunc::JsonbGetStringStringify => Ok(jsonb_get_string(a, b, temp_storage, true)),
2581+
BinaryFunc::JsonbGetPath => Ok(jsonb_get_path(a, b, temp_storage, false)),
2582+
BinaryFunc::JsonbGetPathStringify => Ok(jsonb_get_path(a, b, temp_storage, true)),
25892583
BinaryFunc::JsonbContainsString => Ok(jsonb_contains_string(a, b)),
25902584
BinaryFunc::JsonbConcat => Ok(jsonb_concat(a, b, temp_storage)),
25912585
BinaryFunc::JsonbContainsJsonb => Ok(jsonb_contains_jsonb(a, b)),
@@ -2783,13 +2777,13 @@ impl BinaryFunc {
27832777

27842778
MzRenderTypmod | TextConcat => ScalarType::String.nullable(in_nullable),
27852779

2786-
JsonbGetInt64 { stringify: true }
2787-
| JsonbGetString { stringify: true }
2788-
| JsonbGetPath { stringify: true } => ScalarType::String.nullable(true),
2780+
JsonbGetInt64Stringify
2781+
| JsonbGetStringStringify
2782+
| JsonbGetPathStringify => ScalarType::String.nullable(true),
27892783

2790-
JsonbGetInt64 { stringify: false }
2791-
| JsonbGetString { stringify: false }
2792-
| JsonbGetPath { stringify: false }
2784+
JsonbGetInt64
2785+
| JsonbGetString
2786+
| JsonbGetPath
27932787
| JsonbConcat
27942788
| JsonbDeleteInt64
27952789
| JsonbDeleteString => ScalarType::Jsonb.nullable(true),
@@ -3067,9 +3061,12 @@ impl BinaryFunc {
30673061
| RegexpReplace { .. }
30683062
| StartsWith => false,
30693063

3070-
JsonbGetInt64 { .. }
3071-
| JsonbGetString { .. }
3072-
| JsonbGetPath { .. }
3064+
JsonbGetInt64
3065+
| JsonbGetInt64Stringify
3066+
| JsonbGetString
3067+
| JsonbGetStringStringify
3068+
| JsonbGetPath
3069+
| JsonbGetPathStringify
30733070
| JsonbConcat
30743071
| JsonbDeleteInt64
30753072
| JsonbDeleteString
@@ -3184,9 +3181,12 @@ impl BinaryFunc {
31843181
| Gte
31853182
| JsonbConcat
31863183
| JsonbContainsJsonb
3187-
| JsonbGetInt64 { .. }
3188-
| JsonbGetString { .. }
3189-
| JsonbGetPath { .. }
3184+
| JsonbGetInt64
3185+
| JsonbGetInt64Stringify
3186+
| JsonbGetString
3187+
| JsonbGetStringStringify
3188+
| JsonbGetPath
3189+
| JsonbGetPathStringify
31903190
| JsonbContainsString
31913191
| JsonbDeleteInt64
31923192
| JsonbDeleteString
@@ -3330,9 +3330,12 @@ impl BinaryFunc {
33303330
| BinaryFunc::BitShiftRightUInt16
33313331
| BinaryFunc::BitShiftRightUInt32
33323332
| BinaryFunc::BitShiftRightUInt64 => false,
3333-
BinaryFunc::JsonbGetInt64 { .. }
3334-
| BinaryFunc::JsonbGetString { .. }
3335-
| BinaryFunc::JsonbGetPath { .. }
3333+
BinaryFunc::JsonbGetInt64
3334+
| BinaryFunc::JsonbGetInt64Stringify
3335+
| BinaryFunc::JsonbGetString
3336+
| BinaryFunc::JsonbGetStringStringify
3337+
| BinaryFunc::JsonbGetPath
3338+
| BinaryFunc::JsonbGetPathStringify
33363339
| BinaryFunc::JsonbContainsString
33373340
| BinaryFunc::JsonbConcat
33383341
| BinaryFunc::JsonbContainsJsonb
@@ -3493,9 +3496,12 @@ impl BinaryFunc {
34933496
| BinaryFunc::TimezoneIntervalTimestampTz
34943497
| BinaryFunc::TimezoneIntervalTime
34953498
| BinaryFunc::TimezoneOffset => (false, false),
3496-
BinaryFunc::JsonbGetInt64 { .. }
3497-
| BinaryFunc::JsonbGetString { .. }
3498-
| BinaryFunc::JsonbGetPath { .. }
3499+
BinaryFunc::JsonbGetInt64
3500+
| BinaryFunc::JsonbGetInt64Stringify
3501+
| BinaryFunc::JsonbGetString
3502+
| BinaryFunc::JsonbGetStringStringify
3503+
| BinaryFunc::JsonbGetPath
3504+
| BinaryFunc::JsonbGetPathStringify
34993505
| BinaryFunc::JsonbContainsString
35003506
| BinaryFunc::JsonbConcat
35013507
| BinaryFunc::JsonbContainsJsonb
@@ -3697,12 +3703,12 @@ impl fmt::Display for BinaryFunc {
36973703
BinaryFunc::TimezoneIntervalTime => f.write_str("timezoneit"),
36983704
BinaryFunc::TimezoneOffset => f.write_str("timezone_offset"),
36993705
BinaryFunc::TextConcat => f.write_str("||"),
3700-
BinaryFunc::JsonbGetInt64 { stringify: false } => f.write_str("->"),
3701-
BinaryFunc::JsonbGetInt64 { stringify: true } => f.write_str("->>"),
3702-
BinaryFunc::JsonbGetString { stringify: false } => f.write_str("->"),
3703-
BinaryFunc::JsonbGetString { stringify: true } => f.write_str("->>"),
3704-
BinaryFunc::JsonbGetPath { stringify: false } => f.write_str("#>"),
3705-
BinaryFunc::JsonbGetPath { stringify: true } => f.write_str("#>>"),
3706+
BinaryFunc::JsonbGetInt64 => f.write_str("->"),
3707+
BinaryFunc::JsonbGetInt64Stringify => f.write_str("->>"),
3708+
BinaryFunc::JsonbGetString => f.write_str("->"),
3709+
BinaryFunc::JsonbGetStringStringify => f.write_str("->>"),
3710+
BinaryFunc::JsonbGetPath => f.write_str("#>"),
3711+
BinaryFunc::JsonbGetPathStringify => f.write_str("#>>"),
37063712
BinaryFunc::JsonbContainsString | BinaryFunc::MapContainsKey => f.write_str("?"),
37073713
BinaryFunc::JsonbConcat => f.write_str("||"),
37083714
BinaryFunc::JsonbContainsJsonb | BinaryFunc::MapContainsMap => f.write_str("@>"),
@@ -3925,15 +3931,12 @@ impl Arbitrary for BinaryFunc {
39253931
Just(BinaryFunc::TimezoneIntervalTime).boxed(),
39263932
Just(BinaryFunc::TimezoneOffset).boxed(),
39273933
Just(BinaryFunc::TextConcat).boxed(),
3928-
bool::arbitrary()
3929-
.prop_map(|stringify| BinaryFunc::JsonbGetInt64 { stringify })
3930-
.boxed(),
3931-
bool::arbitrary()
3932-
.prop_map(|stringify| BinaryFunc::JsonbGetString { stringify })
3933-
.boxed(),
3934-
bool::arbitrary()
3935-
.prop_map(|stringify| BinaryFunc::JsonbGetPath { stringify })
3936-
.boxed(),
3934+
Just(BinaryFunc::JsonbGetInt64).boxed(),
3935+
Just(BinaryFunc::JsonbGetInt64Stringify).boxed(),
3936+
Just(BinaryFunc::JsonbGetString).boxed(),
3937+
Just(BinaryFunc::JsonbGetStringStringify).boxed(),
3938+
Just(BinaryFunc::JsonbGetPath).boxed(),
3939+
Just(BinaryFunc::JsonbGetPathStringify).boxed(),
39373940
Just(BinaryFunc::JsonbContainsString).boxed(),
39383941
Just(BinaryFunc::JsonbConcat).boxed(),
39393942
Just(BinaryFunc::JsonbContainsJsonb).boxed(),
@@ -4125,9 +4128,12 @@ impl RustType<ProtoBinaryFunc> for BinaryFunc {
41254128
BinaryFunc::TimezoneIntervalTime => TimezoneIntervalTime(()),
41264129
BinaryFunc::TimezoneOffset => TimezoneOffset(()),
41274130
BinaryFunc::TextConcat => TextConcat(()),
4128-
BinaryFunc::JsonbGetInt64 { stringify } => JsonbGetInt64(*stringify),
4129-
BinaryFunc::JsonbGetString { stringify } => JsonbGetString(*stringify),
4130-
BinaryFunc::JsonbGetPath { stringify } => JsonbGetPath(*stringify),
4131+
BinaryFunc::JsonbGetInt64 => JsonbGetInt64(()),
4132+
BinaryFunc::JsonbGetInt64Stringify => JsonbGetInt64Stringify(()),
4133+
BinaryFunc::JsonbGetString => JsonbGetString(()),
4134+
BinaryFunc::JsonbGetStringStringify => JsonbGetStringStringify(()),
4135+
BinaryFunc::JsonbGetPath => JsonbGetPath(()),
4136+
BinaryFunc::JsonbGetPathStringify => JsonbGetPathStringify(()),
41314137
BinaryFunc::JsonbContainsString => JsonbContainsString(()),
41324138
BinaryFunc::JsonbConcat => JsonbConcat(()),
41334139
BinaryFunc::JsonbContainsJsonb => JsonbContainsJsonb(()),
@@ -4344,9 +4350,12 @@ impl RustType<ProtoBinaryFunc> for BinaryFunc {
43444350
TimezoneIntervalTime(()) => Ok(BinaryFunc::TimezoneIntervalTime),
43454351
TimezoneOffset(()) => Ok(BinaryFunc::TimezoneOffset),
43464352
TextConcat(()) => Ok(BinaryFunc::TextConcat),
4347-
JsonbGetInt64(stringify) => Ok(BinaryFunc::JsonbGetInt64 { stringify }),
4348-
JsonbGetString(stringify) => Ok(BinaryFunc::JsonbGetString { stringify }),
4349-
JsonbGetPath(stringify) => Ok(BinaryFunc::JsonbGetPath { stringify }),
4353+
JsonbGetInt64(()) => Ok(BinaryFunc::JsonbGetInt64),
4354+
JsonbGetInt64Stringify(()) => Ok(BinaryFunc::JsonbGetInt64Stringify),
4355+
JsonbGetString(()) => Ok(BinaryFunc::JsonbGetString),
4356+
JsonbGetStringStringify(()) => Ok(BinaryFunc::JsonbGetStringStringify),
4357+
JsonbGetPath(()) => Ok(BinaryFunc::JsonbGetPath),
4358+
JsonbGetPathStringify(()) => Ok(BinaryFunc::JsonbGetPathStringify),
43504359
JsonbContainsString(()) => Ok(BinaryFunc::JsonbContainsString),
43514360
JsonbConcat(()) => Ok(BinaryFunc::JsonbConcat),
43524361
JsonbContainsJsonb(()) => Ok(BinaryFunc::JsonbContainsJsonb),

src/expr/tests/testdata/interpret

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ interpret
5858
[
5959
[("{\"created_ms\": 1000}" jsonb) ("{\"created_ms\": 2000}" jsonb) ("{\"created_ms\": 3000}" jsonb)]
6060
]
61-
(call_binary (jsonb_get_string false) #0 ("created_ms" string))
61+
(call_binary (jsonb_get_string) #0 ("created_ms" string))
6262
[(0 numeric) (2050 numeric) (4000 numeric) null]
6363
----
6464
may contain: [2050]
@@ -70,7 +70,7 @@ interpret
7070
[
7171
[("{\"code\": \"00135\"}" jsonb) ("{\"code\": \"22122\"}" jsonb) ("{\"code\": \"34153\"}" jsonb)]
7272
]
73-
(call_binary (jsonb_get_string true) #0 ("code" string))
73+
(call_binary (jsonb_get_string_stringify) #0 ("code" string))
7474
["00000" "20000" "2" "80000" null]
7575
----
7676
may contain: ["20000" "2"]
@@ -82,7 +82,7 @@ interpret
8282
[
8383
[("{\"created_ms\": 1000}" jsonb) ("{\"created_ms\": 2000}" jsonb) ("{\"created_ms\": 3000}" jsonb)]
8484
]
85-
(call_binary (jsonb_get_string true) #0 ("created_ms" string))
85+
(call_binary (jsonb_get_string_stringify) #0 ("created_ms" string))
8686
["00000" "20000" "2" "80000" null]
8787
----
8888
may contain: ["00000" "20000" "2" "80000"]
@@ -94,7 +94,7 @@ interpret
9494
[
9595
[null null null]
9696
]
97-
(call_binary (jsonb_get_string false) #0 ("created_ms" string))
97+
(call_binary (jsonb_get_string) #0 ("created_ms" string))
9898
["00000" "foo" null true]
9999
----
100100
may contain: [null]

src/expr/tests/testdata/reduce

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ false
5050

5151
reduce
5252
(call_unary is_null
53-
(call_binary (jsonb_get_int64 false) #1 #0))
53+
(call_binary (jsonb_get_int64) #1 #0))
5454
[(jsonb false) (int64 false)]
5555
----
5656
((#1 -> #0)) IS NULL

src/sql/src/func.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4765,19 +4765,19 @@ pub static OP_IMPLS: LazyLock<BTreeMap<&'static str, Func>> = LazyLock::new(|| {
47654765

47664766
// JSON, MAP, RANGE, LIST, ARRAY
47674767
"->" => Scalar {
4768-
params!(Jsonb, Int64) => JsonbGetInt64 { stringify: false } => Jsonb, 3212;
4769-
params!(Jsonb, String) => JsonbGetString { stringify: false } => Jsonb, 3211;
4768+
params!(Jsonb, Int64) => JsonbGetInt64 => Jsonb, 3212;
4769+
params!(Jsonb, String) => JsonbGetString => Jsonb, 3211;
47704770
params!(MapAny, String) => MapGetValue => Any, oid::OP_GET_VALUE_MAP_OID;
47714771
},
47724772
"->>" => Scalar {
4773-
params!(Jsonb, Int64) => JsonbGetInt64 { stringify: true } => String, 3481;
4774-
params!(Jsonb, String) => JsonbGetString { stringify: true } => String, 3477;
4773+
params!(Jsonb, Int64) => JsonbGetInt64Stringify => String, 3481;
4774+
params!(Jsonb, String) => JsonbGetStringStringify => String, 3477;
47754775
},
47764776
"#>" => Scalar {
4777-
params!(Jsonb, ScalarType::Array(Box::new(ScalarType::String))) => JsonbGetPath { stringify: false } => Jsonb, 3213;
4777+
params!(Jsonb, ScalarType::Array(Box::new(ScalarType::String))) => JsonbGetPath => Jsonb, 3213;
47784778
},
47794779
"#>>" => Scalar {
4780-
params!(Jsonb, ScalarType::Array(Box::new(ScalarType::String))) => JsonbGetPath { stringify: true } => String, 3206;
4780+
params!(Jsonb, ScalarType::Array(Box::new(ScalarType::String))) => JsonbGetPathStringify => String, 3206;
47814781
},
47824782
"@>" => Scalar {
47834783
params!(Jsonb, Jsonb) => JsonbContainsJsonb => Bool, 3246;

src/sql/src/plan/query.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4374,7 +4374,7 @@ fn plan_subscript_jsonb(
43744374
},
43754375
exprs,
43764376
},
4377-
BinaryFunc::JsonbGetPath { stringify: false },
4377+
BinaryFunc::JsonbGetPath,
43784378
);
43794379
Ok(expr.into())
43804380
}

test/sqllogictest/distinct_arrangements.slt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -984,8 +984,8 @@ Arrange␠export␠iterative 2
984984
Arrange␠export␠iterative␠err 2
985985
Arrange␠recursive␠err 3
986986
ArrangeAccumulable␠[val:␠empty] 10
987-
ArrangeBy[[CallBinary␠{␠func:␠JsonbGetString␠{␠stringify:␠true␠},␠expr1:␠Column(1),␠expr2:␠Literal(Ok(Row{[String("id")]}),␠ColumnType␠{␠scalar_type:␠String,␠nullable:␠false␠})␠}]] 2
988-
ArrangeBy[[CallBinary␠{␠func:␠JsonbGetString␠{␠stringify:␠true␠},␠expr1:␠Column(2),␠expr2:␠Literal(Ok(Row{[String("id")]}),␠ColumnType␠{␠scalar_type:␠String,␠nullable:␠false␠})␠}]] 1
987+
ArrangeBy[[CallBinary␠{␠func:␠JsonbGetStringStringify,␠expr1:␠Column(1),␠expr2:␠Literal(Ok(Row{[String("id")]}),␠ColumnType␠{␠scalar_type:␠String,␠nullable:␠false␠})␠}]] 2
988+
ArrangeBy[[CallBinary␠{␠func:␠JsonbGetStringStringify,␠expr1:␠Column(2),␠expr2:␠Literal(Ok(Row{[String("id")]}),␠ColumnType␠{␠scalar_type:␠String,␠nullable:␠false␠})␠}]] 1
989989
ArrangeBy[[CallVariadic␠{␠func:␠Coalesce,␠exprs:␠[Column(2),␠Column(3)]␠}]] 2
990990
ArrangeBy[[Column(0),␠CallUnary␠{␠func:␠CastInt32ToNumeric(CastInt32ToNumeric(None)),␠expr:␠Column(1)␠}]] 1
991991
ArrangeBy[[Column(0),␠CallUnary␠{␠func:␠CastUint64ToNumeric(CastUint64ToNumeric(None)),␠expr:␠Column(2)␠}]] 1

0 commit comments

Comments
 (0)