Skip to content

Commit 1548366

Browse files
committed
Turn jsonb stringify functions into separate functions
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 db569b0 commit 1548366

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)