Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SQL: Resolve attributes recursively for improved subquery support (#69765) #70322

Merged
merged 1 commit into from
Mar 11, 2021

Commits on Mar 11, 2021

  1. SQL: Resolve attributes recursively for improved subquery support (el…

    …astic#69765)
    
    Previously we did not resolve the attributes recursively which meant that if a field or expression was re-aliased multiple times (through multiple levels of subqueries), the aliases were only resolved one level down. This led to failed query translation because `ReferenceAttribute`s were pointing to non-existing attributes during query translation.
    
    For example the query
    
    ```sql
    SELECT i AS j FROM ( SELECT int AS i FROM test) ORDER BY j
    ```
    
    failed during translation because the `OrderBy` resolved the `j` ReferenceAttribute to another `i` ReferenceAttribute that was later removed by an Optimization:
    
    ```
    OrderBy[[Order[j{r}elastic#4,ASC,LAST]]]                                             ! OrderBy[[Order[i{r}elastic#2,ASC,LAST]]]
    \_Project[[j]]                                                                = \_Project[[j]]
      \_Project[[i]]                                                              !   \_EsRelation[test][date{f}elastic#6, some{f}elastic#7, some.string{f}elastic#8, some.string..]
        \_EsRelation[test][date{f}elastic#6, some{f}elastic#7, some.string{f}elastic#8, some.string..] ! 
    ```
    
    By resolving the `Attributes` recursively both `j{r}` and `i{r}` will resolve to `test.int{f}` above:
    
    ```
    OrderBy[[Order[test.int{f}elastic#22,ASC,LAST]]]                                     = OrderBy[[Order[test.int{f}elastic#22,ASC,LAST]]]
    \_Project[[j]]                                                                = \_Project[[j]]
      \_Project[[i]]                                                              !   \_EsRelation[test][date{f}elastic#6, some{f}elastic#7, some.string{f}elastic#8, some.string..]
        \_EsRelation[test][date{f}elastic#6, some{f}elastic#7, some.string{f}elastic#8, some.string..] ! 
     ```
    
    The scope of recursive resolution depends on how the `AttributeMap` is constructed and populated.
    
    Fixes elastic#67237
    Andras Palinkas committed Mar 11, 2021
    Configuration menu
    Copy the full SHA
    93563a9 View commit details
    Browse the repository at this point in the history