@@ -146,6 +146,7 @@ impl CubeScanWrapperNode {
146146 transport,
147147 load_request_meta,
148148 self . wrapped_plan . clone ( ) ,
149+ false ,
149150 )
150151 . await
151152 . and_then ( |SqlGenerationResult { data_source, mut sql, .. } | -> result:: Result < _ , CubeError > {
@@ -174,6 +175,7 @@ impl CubeScanWrapperNode {
174175 transport : Arc < dyn TransportService > ,
175176 load_request_meta : Arc < LoadRequestMeta > ,
176177 node : Arc < LogicalPlan > ,
178+ can_rename_columns : bool ,
177179 ) -> Pin < Box < dyn Future < Output = result:: Result < SqlGenerationResult , CubeError > > + Send > > {
178180 Box :: pin ( async move {
179181 match node. as_ref ( ) {
@@ -279,6 +281,7 @@ impl CubeScanWrapperNode {
279281 transport. clone ( ) ,
280282 load_request_meta. clone ( ) ,
281283 from. clone ( ) ,
284+ true ,
282285 )
283286 . await ?;
284287 let mut next_remapping = HashMap :: new ( ) ;
@@ -303,6 +306,7 @@ impl CubeScanWrapperNode {
303306 generator. clone ( ) ,
304307 & column_remapping,
305308 & mut next_remapping,
309+ can_rename_columns,
306310 )
307311 . await ?;
308312 let ( group_by, sql) = Self :: generate_column_expr (
@@ -313,6 +317,7 @@ impl CubeScanWrapperNode {
313317 generator. clone ( ) ,
314318 & column_remapping,
315319 & mut next_remapping,
320+ can_rename_columns,
316321 )
317322 . await ?;
318323 let ( aggregate, mut sql) = Self :: generate_column_expr (
@@ -323,6 +328,7 @@ impl CubeScanWrapperNode {
323328 generator. clone ( ) ,
324329 & column_remapping,
325330 & mut next_remapping,
331+ can_rename_columns,
326332 )
327333 . await ?;
328334 let resulting_sql = generator
@@ -387,19 +393,31 @@ impl CubeScanWrapperNode {
387393 generator : Arc < dyn SqlGenerator > ,
388394 column_remapping : & Option < HashMap < Column , Column > > ,
389395 next_remapping : & mut HashMap < Column , Column > ,
396+ can_rename_columns : bool ,
390397 ) -> result:: Result < ( Vec < AliasedColumn > , SqlQuery ) , CubeError > {
391398 let non_id_regex = Regex :: new ( r"[^a-zA-Z0-9_]" )
392399 . map_err ( |e| CubeError :: internal ( format ! ( "Can't parse regex: {}" , e) ) ) ?;
393400 let mut aliased_columns = Vec :: new ( ) ;
394401 for expr in exprs {
395402 let expr = if let Some ( column_remapping) = column_remapping. as_ref ( ) {
396- replace_col (
397- expr. clone ( ) ,
403+ let original_expr = expr;
404+ let mut expr = replace_col (
405+ original_expr. clone ( ) ,
398406 & column_remapping. iter ( ) . map ( |( k, v) | ( k, v) ) . collect ( ) ,
399407 )
400408 . map_err ( |_| {
401- CubeError :: internal ( format ! ( "Can't rename columns for expr: {:?}" , expr) )
402- } ) ?
409+ CubeError :: internal ( format ! (
410+ "Can't rename columns for expr: {:?}" ,
411+ original_expr
412+ ) )
413+ } ) ?;
414+ if !can_rename_columns {
415+ let original_alias = expr_name ( & original_expr, & schema) ?;
416+ if original_alias != expr_name ( & expr, & schema) ? {
417+ expr = Expr :: Alias ( Box :: new ( expr) , original_alias. clone ( ) ) ;
418+ }
419+ }
420+ expr
403421 } else {
404422 expr
405423 } ;
@@ -409,15 +427,21 @@ impl CubeScanWrapperNode {
409427 sql = new_sql_query;
410428
411429 let original_alias = expr_name ( & expr, & schema) ?;
412- let mut truncated_alias = non_id_regex. replace_all ( & original_alias, "_" ) . to_string ( ) ;
413- truncated_alias. truncate ( 16 ) ;
414- let mut alias = truncated_alias. clone ( ) ;
415- for i in 1 ..10000 {
416- if !next_remapping. contains_key ( & Column :: from_name ( & alias) ) {
417- break ;
430+ let alias = if can_rename_columns {
431+ let mut truncated_alias =
432+ non_id_regex. replace_all ( & original_alias, "_" ) . to_string ( ) ;
433+ truncated_alias. truncate ( 16 ) ;
434+ let mut alias = truncated_alias. clone ( ) ;
435+ for i in 1 ..10000 {
436+ if !next_remapping. contains_key ( & Column :: from_name ( & alias) ) {
437+ break ;
438+ }
439+ alias = format ! ( "{}_{}" , truncated_alias, i) ;
418440 }
419- alias = format ! ( "{}_{}" , truncated_alias, i) ;
420- }
441+ alias
442+ } else {
443+ original_alias. clone ( )
444+ } ;
421445 if original_alias != alias {
422446 if !next_remapping. contains_key ( & Column :: from_name ( & alias) ) {
423447 next_remapping. insert (
0 commit comments