@@ -203,6 +203,21 @@ fn alias_set_expr(set_expr: &mut SetExpr, schema: &DFSchemaRef) {
203203// This helps with set expression queries where the right side has duplicate expressions,
204204// but the left side has unique column names, which control the output schema anyway.
205205fn alias_select_items ( items : & mut [ SelectItem ] , schema : & DFSchemaRef ) {
206+ // Figure out how many (qualified) wildcards we got. We only handle
207+ // the case of a single unqualified wildcard; for multiple or qualified
208+ // wildcards we can't reliably determine column counts, so bail out.
209+ let ( wildcard_count, qualified_wildcard_count) =
210+ items. iter ( ) . fold ( ( 0 , 0 ) , |( wc, qwc) , item| match item {
211+ SelectItem :: Wildcard ( _) => ( wc + 1 , qwc) ,
212+ SelectItem :: QualifiedWildcard ( _, _) => ( wc, qwc + 1 ) ,
213+ _ => ( wc, qwc) ,
214+ } ) ;
215+ if qualified_wildcard_count > 0 || wildcard_count > 1 {
216+ return ;
217+ }
218+
219+ let wildcard_expansion = schema. fields ( ) . len ( ) . saturating_sub ( items. len ( ) - 1 ) ;
220+
206221 let mut col_idx = 0 ;
207222 for item in items. iter_mut ( ) {
208223 match item {
@@ -222,8 +237,11 @@ fn alias_select_items(items: &mut [SelectItem], schema: &DFSchemaRef) {
222237 SelectItem :: ExprWithAlias { .. } => {
223238 col_idx += 1 ;
224239 }
225- SelectItem :: Wildcard ( _) | SelectItem :: QualifiedWildcard ( _, _) => {
226- // Wildcards expand to multiple columns - skip position tracking
240+ SelectItem :: Wildcard ( _) => {
241+ col_idx += wildcard_expansion;
242+ }
243+ SelectItem :: QualifiedWildcard ( _, _) => {
244+ unreachable ! ( "qualified wildcards are handled above" )
227245 }
228246 }
229247 }
0 commit comments