File tree 3 files changed +25
-14
lines changed
tests/sqllogictests/suites/base/03_common
3 files changed +25
-14
lines changed Original file line number Diff line number Diff line change @@ -396,20 +396,13 @@ impl<'a> Evaluator<'a> {
396
396
validity. clone ( ) ,
397
397
options,
398
398
) ? {
399
- // remove wrapped null values.
400
- let new_value = match new_value {
401
- Value :: Scalar ( scalar) => {
402
- if scalar == Scalar :: Null {
403
- Value :: Scalar ( Scalar :: default_value ( dest_type) )
404
- } else {
405
- Value :: Scalar ( scalar)
406
- }
407
- }
408
- Value :: Column ( column) => {
409
- let nullable_column = column. as_nullable ( ) . unwrap ( ) ;
410
- Value :: Column ( nullable_column. column . clone ( ) )
411
- }
412
- } ;
399
+ let ( new_value, has_null) = new_value. remove_nullable ( ) ;
400
+ if has_null {
401
+ return Err ( ErrorCode :: BadArguments ( format ! (
402
+ "unable to cast type `{src_type}` to type `{dest_type}`, result has null values"
403
+ ) )
404
+ . set_span ( span) ) ;
405
+ }
413
406
Ok ( new_value)
414
407
} else {
415
408
Err ( ErrorCode :: BadArguments ( format ! (
Original file line number Diff line number Diff line change @@ -345,6 +345,18 @@ impl Value<AnyType> {
345
345
}
346
346
}
347
347
348
+ // returns result without nullable and has_null flag
349
+ pub fn remove_nullable ( self ) -> ( Self , bool ) {
350
+ match self {
351
+ Value :: Scalar ( Scalar :: Null ) => ( Value :: Scalar ( Scalar :: Null ) , true ) ,
352
+ Value :: Column ( Column :: Nullable ( box nullable_column) ) => (
353
+ Value :: Column ( nullable_column. column ) ,
354
+ nullable_column. validity . null_count ( ) > 0 ,
355
+ ) ,
356
+ other => ( other, false ) ,
357
+ }
358
+ }
359
+
348
360
pub fn domain ( & self , data_type : & DataType ) -> Domain {
349
361
match self {
350
362
Value :: Scalar ( scalar) => scalar. as_ref ( ) . domain ( data_type) ,
Original file line number Diff line number Diff line change @@ -142,5 +142,11 @@ SELECT * FROM t5;
142
142
{"user_id":1} 1
143
143
{"user_id":2} 2
144
144
145
+ statement ok
146
+ INSERT INTO t4 values('{}');
147
+
148
+ statement error
149
+ INSERT INTO t5 SELECT data, data:user_id AS user_id FROM t4;
150
+
145
151
statement ok
146
152
DROP DATABASE db1
You can’t perform that action at this time.
0 commit comments