Skip to content

Commit 7ea6e7f

Browse files
authored
fix: pivot extra columns on projection (#18994)
* fix: fix pivot extra columns on projection * chore: fix parse unit test
1 parent 70b0760 commit 7ea6e7f

File tree

12 files changed

+213
-38
lines changed

12 files changed

+213
-38
lines changed

src/query/ast/src/ast/query.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,8 @@ impl Display for TableReference {
11041104
pub struct TableAlias {
11051105
pub name: Identifier,
11061106
pub columns: Vec<Identifier>,
1107+
/// When true, keep the original database name on bound columns even after aliasing.
1108+
pub keep_database_name: bool,
11071109
}
11081110

11091111
impl Display for TableAlias {

src/query/ast/src/parser/query.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@ pub fn table_alias(i: Input) -> IResult<TableAlias> {
662662
|(name, opt_columns)| TableAlias {
663663
name,
664664
columns: opt_columns.map(|(_, cols, _)| cols).unwrap_or_default(),
665+
keep_database_name: false,
665666
},
666667
)
667668
.parse(i)
@@ -673,6 +674,7 @@ pub fn table_alias_without_as(i: Input) -> IResult<TableAlias> {
673674
|(name, opt_columns)| TableAlias {
674675
name,
675676
columns: opt_columns.map(|(_, cols, _)| cols).unwrap_or_default(),
677+
keep_database_name: false,
676678
},
677679
)
678680
.parse(i)

src/query/ast/src/parser/statement.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5336,6 +5336,7 @@ pub fn table_reference_with_alias(i: Input) -> IResult<TableReference> {
53365336
alias: alias.map(|v| TableAlias {
53375337
name: v,
53385338
columns: vec![],
5339+
keep_database_name: false,
53395340
}),
53405341
temporal: None,
53415342
with_options: None,

src/query/ast/tests/it/testdata/query.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,7 @@ Query {
815815
ident_type: None,
816816
},
817817
columns: [],
818+
keep_database_name: false,
818819
},
819820
),
820821
temporal: None,
@@ -900,6 +901,7 @@ Query {
900901
ident_type: None,
901902
},
902903
columns: [],
904+
keep_database_name: false,
903905
},
904906
),
905907
temporal: Some(
@@ -1035,6 +1037,7 @@ Query {
10351037
ident_type: None,
10361038
},
10371039
columns: [],
1040+
keep_database_name: false,
10381041
},
10391042
),
10401043
temporal: Some(
@@ -1985,6 +1988,7 @@ Query {
19851988
ident_type: None,
19861989
},
19871990
],
1991+
keep_database_name: false,
19881992
},
19891993
user_specified_materialized: false,
19901994
materialized: false,
@@ -2224,6 +2228,7 @@ Query {
22242228
ident_type: None,
22252229
},
22262230
],
2231+
keep_database_name: false,
22272232
},
22282233
user_specified_materialized: true,
22292234
materialized: false,
@@ -2454,6 +2459,7 @@ Query {
24542459
ident_type: None,
24552460
},
24562461
columns: [],
2462+
keep_database_name: false,
24572463
},
24582464
user_specified_materialized: false,
24592465
materialized: false,
@@ -2693,6 +2699,7 @@ Query {
26932699
ident_type: None,
26942700
},
26952701
],
2702+
keep_database_name: false,
26962703
},
26972704
user_specified_materialized: true,
26982705
materialized: false,
@@ -2783,6 +2790,7 @@ Query {
27832790
ident_type: None,
27842791
},
27852792
columns: [],
2793+
keep_database_name: false,
27862794
},
27872795
user_specified_materialized: true,
27882796
materialized: false,
@@ -2861,6 +2869,7 @@ Query {
28612869
ident_type: None,
28622870
},
28632871
columns: [],
2872+
keep_database_name: false,
28642873
},
28652874
user_specified_materialized: false,
28662875
materialized: false,
@@ -3238,6 +3247,7 @@ Query {
32383247
ident_type: None,
32393248
},
32403249
],
3250+
keep_database_name: false,
32413251
},
32423252
user_specified_materialized: false,
32433253
materialized: false,
@@ -3513,6 +3523,7 @@ Query {
35133523
ident_type: None,
35143524
},
35153525
],
3526+
keep_database_name: false,
35163527
},
35173528
user_specified_materialized: false,
35183529
materialized: false,
@@ -3887,6 +3898,7 @@ Query {
38873898
ident_type: None,
38883899
},
38893900
columns: [],
3901+
keep_database_name: false,
38903902
},
38913903
),
38923904
temporal: None,
@@ -4167,6 +4179,7 @@ Query {
41674179
ident_type: None,
41684180
},
41694181
columns: [],
4182+
keep_database_name: false,
41704183
},
41714184
),
41724185
pivot: None,
@@ -6237,6 +6250,7 @@ Query {
62376250
ident_type: None,
62386251
},
62396252
columns: [],
6253+
keep_database_name: false,
62406254
},
62416255
),
62426256
pivot: None,
@@ -6379,6 +6393,7 @@ Query {
63796393
ident_type: None,
63806394
},
63816395
columns: [],
6396+
keep_database_name: false,
63826397
},
63836398
),
63846399
pivot: None,
@@ -6553,6 +6568,7 @@ Query {
65536568
ident_type: None,
65546569
},
65556570
columns: [],
6571+
keep_database_name: false,
65566572
},
65576573
),
65586574
pivot: None,
@@ -8812,6 +8828,7 @@ Query {
88128828
ident_type: None,
88138829
},
88148830
columns: [],
8831+
keep_database_name: false,
88158832
},
88168833
),
88178834
pivot: None,
@@ -8963,6 +8980,7 @@ Query {
89638980
ident_type: None,
89648981
},
89658982
],
8983+
keep_database_name: false,
89668984
},
89678985
),
89688986
pivot: None,
@@ -9390,6 +9408,7 @@ Query {
93909408
ident_type: None,
93919409
},
93929410
columns: [],
9411+
keep_database_name: false,
93939412
},
93949413
),
93959414
sample: None,

src/query/ast/tests/it/testdata/stmt.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11598,6 +11598,7 @@ Query(
1159811598
ident_type: None,
1159911599
},
1160011600
columns: [],
11601+
keep_database_name: false,
1160111602
},
1160211603
),
1160311604
pivot: None,
@@ -20570,6 +20571,7 @@ Query(
2057020571
ident_type: None,
2057120572
},
2057220573
columns: [],
20574+
keep_database_name: false,
2057320575
},
2057420576
),
2057520577
},
@@ -20714,6 +20716,7 @@ Query(
2071420716
ident_type: None,
2071520717
},
2071620718
columns: [],
20719+
keep_database_name: false,
2071720720
},
2071820721
),
2071920722
},
@@ -20839,6 +20842,7 @@ Query(
2083920842
ident_type: None,
2084020843
},
2084120844
columns: [],
20845+
keep_database_name: false,
2084220846
},
2084320847
),
2084420848
},
@@ -27439,6 +27443,7 @@ Query(
2743927443
ident_type: None,
2744027444
},
2744127445
columns: [],
27446+
keep_database_name: false,
2744227447
},
2744327448
user_specified_materialized: false,
2744427449
materialized: false,

src/query/sql/src/planner/binder/bind_context.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,9 @@ pub fn apply_alias_for_columns(
683683
name_resolution_ctx: &NameResolutionContext,
684684
) -> Result<()> {
685685
for column in columns.iter_mut() {
686-
column.database_name = None;
686+
if !alias.keep_database_name {
687+
column.database_name = None;
688+
}
687689
column.table_name = Some(normalize_identifier(&alias.name, name_resolution_ctx).name);
688690
}
689691

0 commit comments

Comments
 (0)