comphead commented on code in PR #4608:
URL: https://github.com/apache/datafusion-comet/pull/4608#discussion_r3392059387


##########
spark/src/test/resources/sql-tests/expressions/cast/cast_complex.sql:
##########
@@ -0,0 +1,107 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+statement
+CREATE TABLE test_cast_complex(
+  id int,
+  struct_arr struct<items:array<int>,label:string>,
+  deep 
struct<outer:struct<middle:struct<value:string,flag:boolean>,numbers:array<string>>,note:string>,
+  arr_struct array<struct<id:int,score:string>>
+) USING parquet
+
+statement
+INSERT INTO test_cast_complex VALUES
+  (
+    1,
+    named_struct(
+      'items', array(1, 2, cast(null as int)),
+      'label', 'first'),
+    named_struct(
+      'outer',
+      named_struct(
+        'middle', named_struct('value', '1', 'flag', true),
+        'numbers', array('2', '3')),
+      'note', 'alpha'),
+    array(
+      named_struct('id', 1, 'score', '10'),
+      named_struct('id', 2, 'score', cast(null as string)))
+  ),
+  (
+    2,
+    named_struct(
+      'items', cast(array() as array<int>),
+      'label', cast(null as string)),
+    named_struct(
+      'outer',
+      named_struct(
+        'middle', named_struct('value', cast(null as string), 'flag', false),
+        'numbers', array(cast(null as string))),
+      'note', cast(null as string)),
+    array(named_struct('id', cast(null as int), 'score', '30'))
+  ),
+  (
+    3,
+    cast(null as struct<items:array<int>,label:string>),
+    cast(null as
+      
struct<outer:struct<middle:struct<value:string,flag:boolean>,numbers:array<string>>,
+      note:string>),
+    cast(array() as array<struct<id:int,score:string>>)
+  ),
+  (
+    4,
+    named_struct(
+      'items', array(-1, 0, 2147483647),
+      'label', 'edge'),
+    named_struct(
+      'outer',
+      named_struct(
+        'middle', named_struct('value', '-4', 'flag', true),
+        'numbers', array('-5', '0')),
+      'note', 'omega'),
+    cast(null as array<struct<id:int,score:string>>)
+  )
+
+-- struct field containing an array
+query
+SELECT cast(struct_arr as struct<items:array<string>,label:string>), id
+FROM test_cast_complex
+ORDER BY id
+
+-- deeply nested struct to struct
+query
+SELECT cast(deep as
+  
struct<outer:struct<middle:struct<value:int,flag:string>,numbers:array<int>>,note:string>),
 id
+FROM test_cast_complex
+ORDER BY id
+
+-- deeply nested struct to string
+query
+SELECT cast(deep as string), id
+FROM test_cast_complex
+ORDER BY id
+
+-- array of structs to array of structs
+query
+SELECT cast(arr_struct as array<struct<id:bigint,score:int>>), id
+FROM test_cast_complex
+ORDER BY id
+
+-- array of structs to string
+query

Review Comment:
   we prob also need some negative scenarios. 
   
   Nested cast is super deep topic, WDYT if we can have more test combinations? 
   structs can be tested to cast to objects with missing, extra, renamed, 
different order fields. 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to