File tree Expand file tree Collapse file tree 2 files changed +26
-3
lines changed
storages/orc/src/copy_into_table/processors Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -395,7 +395,30 @@ pub fn parse_cluster_keys(
395395 table_meta : Arc < dyn Table > ,
396396 ast_exprs : Vec < AExpr > ,
397397) -> Result < Vec < Expr > > {
398- let exprs = parse_ast_exprs ( ctx, table_meta, ast_exprs) ?;
398+ let schema = table_meta. schema ( ) ;
399+ let ( mut bind_context, metadata) = bind_table ( table_meta) ?;
400+ let settings = ctx. get_settings ( ) ;
401+ let name_resolution_ctx = NameResolutionContext :: try_from ( settings. as_ref ( ) ) ?;
402+ let mut type_checker = TypeChecker :: try_create (
403+ & mut bind_context,
404+ ctx,
405+ & name_resolution_ctx,
406+ metadata,
407+ & [ ] ,
408+ false ,
409+ ) ?;
410+
411+ let exprs: Vec < Expr > = ast_exprs
412+ . iter ( )
413+ . map ( |ast| {
414+ let ( scalar, _) = * type_checker. resolve ( ast) ?;
415+ let expr = scalar
416+ . as_expr ( ) ?
417+ . project_column_ref ( |col| schema. index_of ( & col. column_name ) . unwrap ( ) ) ;
418+ Ok ( expr)
419+ } )
420+ . collect :: < Result < _ > > ( ) ?;
421+
399422 let mut res = Vec :: with_capacity ( exprs. len ( ) ) ;
400423 for expr in exprs {
401424 let inner_type = expr. data_type ( ) . remove_nullable ( ) ;
Original file line number Diff line number Diff line change @@ -106,7 +106,7 @@ impl StripeDecoderForCopy {
106106 display_name, id, ..
107107 } = expr
108108 {
109- if display_name. starts_with ( "#!" ) {
109+ if let Some ( display_name) = display_name . strip_prefix ( "#!" ) {
110110 let typs = match field. data_type ( ) {
111111 DataType :: Nullable ( box DataType :: Array ( box DataType :: Nullable (
112112 box DataType :: Tuple ( v) ,
@@ -116,7 +116,7 @@ impl StripeDecoderForCopy {
116116 unreachable ! ( "expect value: array of tuple" )
117117 }
118118 } ;
119- let positions = display_name[ 2 .. ]
119+ let positions = display_name
120120 . split ( ',' )
121121 . map ( |s| s. parse :: < i32 > ( ) . unwrap ( ) )
122122 . collect :: < Vec < i32 > > ( ) ;
You can’t perform that action at this time.
0 commit comments