@@ -4826,3 +4826,88 @@ async fn avro_explain() {
48264826    ] ; 
48274827    assert_eq ! ( expected,  actual) ; 
48284828} 
4829+ 
4830+ #[ tokio:: test]  
4831+ async  fn  query_get_indexed_field ( )  -> Result < ( ) >  { 
4832+     let  mut  ctx = ExecutionContext :: new ( ) ; 
4833+     let  schema = Arc :: new ( Schema :: new ( vec ! [ Field :: new( 
4834+         "some_list" , 
4835+         DataType :: List ( Box :: new( Field :: new( "item" ,  DataType :: Int64 ,  true ) ) ) , 
4836+         false , 
4837+     ) ] ) ) ; 
4838+     let  builder = PrimitiveBuilder :: < Int64Type > :: new ( 3 ) ; 
4839+     let  mut  lb = ListBuilder :: new ( builder) ; 
4840+     for  int_vec in  vec ! [ 
4841+         vec![ 0  as  i64 ,  1 ,  2 ] , 
4842+         vec![ 4  as  i64 ,  5 ,  6 ] , 
4843+         vec![ 7  as  i64 ,  8 ,  9 ] , 
4844+     ]  { 
4845+         let  builder = lb. values ( ) ; 
4846+         for  int in  int_vec { 
4847+             builder. append_value ( int) ; 
4848+         } 
4849+         lb. append ( true ) ; 
4850+     } 
4851+ 
4852+     let  data = RecordBatch :: try_new ( schema. clone ( ) ,  vec ! [ Arc :: new( lb. finish( ) ) ] ) ?; 
4853+     let  table = MemTable :: try_new ( schema,  vec ! [ vec![ data] ] ) ?; 
4854+     let  table_a = Arc :: new ( table) ; 
4855+ 
4856+     ctx. register_table ( "ints" ,  table_a) ?; 
4857+ 
4858+     // Original column is micros, convert to millis and check timestamp 
4859+     let  sql = "SELECT some_list[0] as i0 FROM ints LIMIT 3" ; 
4860+     let  actual = execute ( & mut  ctx,  sql) . await ; 
4861+     let  expected = vec ! [ vec![ "0" ] ,  vec![ "4" ] ,  vec![ "7" ] ] ; 
4862+     assert_eq ! ( expected,  actual) ; 
4863+     Ok ( ( ) ) 
4864+ } 
4865+ 
4866+ #[ tokio:: test]  
4867+ async  fn  query_nested_get_indexed_field ( )  -> Result < ( ) >  { 
4868+     let  mut  ctx = ExecutionContext :: new ( ) ; 
4869+     let  schema = Arc :: new ( Schema :: new ( vec ! [ Field :: new( 
4870+         "some_list" , 
4871+         DataType :: List ( Box :: new( Field :: new( 
4872+             "item" , 
4873+             DataType :: List ( Box :: new( Field :: new( "item" ,  DataType :: Int64 ,  true ) ) ) , 
4874+             true , 
4875+         ) ) ) , 
4876+         false , 
4877+     ) ] ) ) ; 
4878+     let  builder = PrimitiveBuilder :: < Int64Type > :: new ( 3 ) ; 
4879+     let  nested_lb = ListBuilder :: new ( builder) ; 
4880+     let  mut  lb = ListBuilder :: new ( nested_lb) ; 
4881+     for  int_vec_vec in  vec ! [ 
4882+         vec![ vec![ 0  as  i64 ,  1 ] ,  vec![ 2 ,  3 ] ,  vec![ 3 ,  4 ] ] , 
4883+         vec![ vec![ 5  as  i64 ,  6 ] ,  vec![ 7 ,  8 ] ,  vec![ 9 ,  10 ] ] , 
4884+         vec![ vec![ 11  as  i64 ,  12 ] ,  vec![ 13 ,  14 ] ,  vec![ 15 ,  16 ] ] , 
4885+     ]  { 
4886+         let  nested_builder = lb. values ( ) ; 
4887+         for  int_vec in  int_vec_vec { 
4888+             let  mut  builder = nested_builder. values ( ) ; 
4889+             for  int in  int_vec { 
4890+                 builder. append_value ( int) ; 
4891+             } 
4892+             nested_builder. append ( true ) ; 
4893+         } 
4894+         lb. append ( true ) ; 
4895+     } 
4896+ 
4897+     let  data = RecordBatch :: try_new ( schema. clone ( ) ,  vec ! [ Arc :: new( lb. finish( ) ) ] ) ?; 
4898+     let  table = MemTable :: try_new ( schema,  vec ! [ vec![ data] ] ) ?; 
4899+     let  table_a = Arc :: new ( table) ; 
4900+ 
4901+     ctx. register_table ( "ints" ,  table_a) ?; 
4902+ 
4903+     // Original column is micros, convert to millis and check timestamp 
4904+     let  sql = "SELECT some_list[0] as i0 FROM ints LIMIT 3" ; 
4905+     let  actual = execute ( & mut  ctx,  sql) . await ; 
4906+     let  expected = vec ! [ vec![ "[0, 1]" ] ,  vec![ "[5, 6]" ] ,  vec![ "[11, 12]" ] ] ; 
4907+     assert_eq ! ( expected,  actual) ; 
4908+     let  sql = "SELECT some_list[0][0] as i0 FROM ints LIMIT 3" ; 
4909+     let  actual = execute ( & mut  ctx,  sql) . await ; 
4910+     let  expected = vec ! [ vec![ "0" ] ,  vec![ "5" ] ,  vec![ "11" ] ] ; 
4911+     assert_eq ! ( expected,  actual) ; 
4912+     Ok ( ( ) ) 
4913+ } 
0 commit comments