Skip to content

Commit 9645a54

Browse files
committed
sql: adjust casts and tests for pg compatibility
1 parent fe7267d commit 9645a54

File tree

2 files changed

+53
-28
lines changed

2 files changed

+53
-28
lines changed

src/sql/src/plan/cast.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,10 @@ lazy_static! {
143143
casts! {
144144
// BOOL
145145
(Bool, Explicit(String)) => CastBoolToStringExplicit,
146-
(Bool, Explicit(Jsonb)) => CastJsonbOrNullToJsonb,
147146
(Bool, JsonbAny) => CastJsonbOrNullToJsonb,
148147

149148
//INT32
150149
(Int32, Explicit(Bool)) => CastInt32ToBool,
151-
(Int32, Explicit(Jsonb)) => CastOp::F(|_ecx, e, _to_type| {
152-
e
153-
.call_unary(UnaryFunc::CastInt32ToFloat64)
154-
.call_unary(UnaryFunc::CastJsonbOrNullToJsonb)
155-
}),
156150
(Int32, Implicit(Int64)) => CastInt32ToInt64,
157151
(Int32, Implicit(Float32)) => CastInt32ToFloat32,
158152
(Int32, Implicit(Float64)) => CastInt32ToFloat64,
@@ -198,7 +192,6 @@ lazy_static! {
198192
e.call_binary(s, BinaryFunc::CastFloat64ToDecimal)
199193
}),
200194
(Float64, Explicit(String)) => CastFloat64ToString,
201-
(Float64, Explicit(Jsonb)) => CastJsonbOrNullToJsonb,
202195
(Float64, JsonbAny) => CastJsonbOrNullToJsonb,
203196

204197
// DECIMAL

test/sqllogictest/type-promotion.slt

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ query error Cannot call function char_length\(i32\): arguments cannot be implici
161161
SELECT char_length(321);
162162

163163
# Cannot implicitly cast string to any numeric category
164-
# query error no overload for string + string
165-
# SELECT 'dog'::text + 'cat'::text;
164+
query error no overload for string \+ string
165+
SELECT 'dog'::text + 'cat'::text;
166166

167167
# Cannot implicitly cast f64 to decimal
168168
query error Cannot call function round\(f64, i32\): arguments cannot be implicitly cast to any implementation's parameters; try providing explicit casts
@@ -279,12 +279,17 @@ SELECT 2::int::bigint;
279279
query error CAST does not support casting from interval to i64
280280
SELECT '1'::interval::bigint
281281

282-
# pginvalid
282+
#pginvalid
283283
query T
284284
SELECT '{}'::jsonb::bigint;
285285
----
286286
NULL
287287

288+
query R
289+
SELECT '1'::jsonb::bigint;
290+
----
291+
1
292+
288293
query error invalid input syntax for int8: invalid digit found in string: "dog"
289294
SELECT 'dog'::text::bigint
290295

@@ -297,13 +302,11 @@ SELECT '2002 03-04'::timestamp::bigint
297302
query error CAST does not support casting from timestamptz to i64
298303
SELECT '2003 04-05'::timestamptz::bigint
299304

300-
# pginvalid
301305
query T
302306
SELECT 1::bigint::boolean;
303307
----
304308
true
305309

306-
# should be 't'
307310
query T
308311
SELECT TRUE::boolean::boolean;
309312
----
@@ -321,7 +324,6 @@ SELECT 1.2::double::boolean
321324
query error CAST does not support casting from f64 to bool
322325
SELECT 1.3::real::boolean
323326

324-
# should be 't'
325327
query T
326328
SELECT 2::int::boolean;
327329
----
@@ -330,11 +332,17 @@ true
330332
query error CAST does not support casting from interval to bool
331333
SELECT '1'::interval::boolean
332334

335+
#pginvalid
333336
query T
334337
SELECT '{}'::jsonb::boolean;
335338
----
336339
NULL
337340

341+
query T
342+
SELECT '1'::jsonb::boolean;
343+
----
344+
NULL
345+
338346
query error invalid input syntax for bool: "dog"
339347
SELECT 'dog'::text::boolean
340348

@@ -431,6 +439,11 @@ SELECT '{}'::jsonb::numeric;
431439
----
432440
NULL
433441

442+
query R
443+
SELECT '1'::jsonb::numeric;
444+
----
445+
1.0000
446+
434447
query error invalid input syntax for decimal: malformed numeric literal: dog: "dog"
435448
SELECT 'dog'::text::numeric
436449

@@ -477,11 +490,17 @@ SELECT 2::int::double;
477490
query error CAST does not support casting from interval to f64
478491
SELECT '1'::interval::double
479492

493+
#pginvalid
480494
query T
481495
SELECT '{}'::jsonb::double;
482496
----
483497
NULL
484498

499+
query T
500+
SELECT '1'::jsonb::double;
501+
----
502+
1.000
503+
485504
query error invalid input syntax for float8: invalid float literal: "dog"
486505
SELECT 'dog'::text::double
487506

@@ -528,11 +547,17 @@ SELECT 2::int::real;
528547
query error CAST does not support casting from interval to f64
529548
SELECT '1'::interval::real
530549

550+
#pginvalid
531551
query T
532552
SELECT '{}'::jsonb::real;
533553
----
534554
NULL
535555

556+
query R
557+
SELECT '2'::jsonb::real;
558+
----
559+
2.000
560+
536561
query error invalid input syntax for float8: invalid float literal: "dog"
537562
SELECT 'dog'::text::real
538563

@@ -579,11 +604,17 @@ SELECT 2::int::integer;
579604
query error CAST does not support casting from interval to i32
580605
SELECT '1'::interval::integer
581606

607+
#pginvalid
582608
query T
583609
SELECT '{}'::jsonb::integer;
584610
----
585611
NULL
586612

613+
query R
614+
SELECT '1'::jsonb::integer;
615+
----
616+
1
617+
587618
query error invalid input syntax for int4: invalid digit found in string: "dog"
588619
SELECT 'dog'::text::integer
589620

@@ -642,40 +673,36 @@ SELECT '2003 04-05'::timestamptz::interval
642673
query error CAST does not support casting from i64 to jsonb
643674
SELECT 1::bigint::jsonb
644675

645-
query T
676+
#pginvalid
677+
query error CAST does not support casting from bool to jsonb
646678
SELECT TRUE::boolean::jsonb;
647-
----
648-
true
649679

650680
query error CAST does not support casting from date to jsonb
651681
SELECT '2001 02-03'::date::jsonb
652682

653683
query error CAST does not support casting from decimal\(38, 0\) to jsonb
654684
SELECT 1.1::numeric::jsonb
655685

656-
query T
686+
query error CAST does not support casting from f64 to jsonb
657687
SELECT 1.2::double::jsonb;
658-
----
659-
1.2
660688

661-
query T
662-
SELECT 1.3::real::jsonb;
663-
----
664-
1.3
665-
666-
query T
689+
query error CAST does not support casting from i32 to jsonb
667690
SELECT 2::int::jsonb;
668-
----
669-
2.0
670691

671692
query error CAST does not support casting from interval to jsonb
672693
SELECT '1'::interval::jsonb
673694

674695
query T
675696
SELECT '{}'::jsonb::jsonb;
676697
----
677-
{}
698+
{}
699+
700+
query T
701+
SELECT '1'::jsonb::jsonb;
702+
----
703+
1.0
678704

705+
#pginvalid
679706
query T
680707
SELECT 'dog'::text::jsonb;
681708
----
@@ -735,6 +762,11 @@ SELECT '{}'::jsonb::text;
735762
----
736763
{}
737764

765+
query T
766+
SELECT '1'::jsonb::text;
767+
----
768+
1.0
769+
738770
query T
739771
SELECT 'dog'::text::text;
740772
----

0 commit comments

Comments
 (0)