Hi,

Having a query, I am trying to find out all the columns that need to be
accessed (their varattno and vartype). I have access to a targetlist
representing a tree like this. So, I am looking for a function that
recursively traverses the tree and gives me the VARs. So, for SELECT
a,b,b+c from tab; I am interested in [a,b]. Is such a function currently
implemented in postgresql? How can I use it?

:targetlist (
>    {TARGETENTRY
>    :expr
>       {VAR
>       :varno 1
>       :varattno 1
>       :vartype 23
>       :vartypmod -1
>       :varcollid 0
>       :varlevelsup 0
>       :varnosyn 1
>       :varattnosyn 1
>       :location 7
>       }
>    :resno 1
>    :resname l_orderkey
>    :ressortgroupref 0
>    :resorigtbl 24805
>    :resorigcol 1
>    :resjunk false
>    }
>    {TARGETENTRY
>    :expr
>       {VAR
>       :varno 1
>       :varattno 2
>       :vartype 23
>       :vartypmod -1
>       :varcollid 0
>       :varlevelsup 0
>       :varnosyn 1
>       :varattnosyn 2
>       :location 18
>       }
>    :resno 2
>    :resname l_partkey
>    :ressortgroupref 0
>    :resorigtbl 24805
>    :resorigcol 2
>    :resjunk false
>    }
>    {TARGETENTRY
>    :expr
>       {OPEXPR
>       :opno 551
>       :opfuncid 177
>       :opresulttype 23
>       :opretset false
>       :opcollid 0
>       :inputcollid 0
>       :args (
>          {OPEXPR
>          :opno 551
>          :opfuncid 177
>          :opresulttype 23
>          :opretset false
>          :opcollid 0
>          :inputcollid 0
>          :args (
>             {VAR
>             :varno 1
>             :varattno 1
>             :vartype 23
>             :vartypmod -1
>             :varcollid 0
>             :varlevelsup 0
>             :varnosyn 1
>             :varattnosyn 1
>             :location 28
>             }
>             {VAR
>             :varno 1
>             :varattno 2
>             :vartype 23
>             :vartypmod -1
>             :varcollid 0
>             :varlevelsup 0
>             :varnosyn 1
>             :varattnosyn 2
>              :location 39
>              }
>           )
>           :location 38
>           }
>           {VAR
>           :varno 1
>           :varattno 3
>           :vartype 23
>           :vartypmod -1
>           :varcollid 0
>           :varlevelsup 0
>           :varnosyn 1
>           :varattnosyn 3
>           :location 49
>           }
>        )
>        :location 48
>        }
>     :resno 3
>     :resname ?column?
>     :ressortgroupref 0
>     :resorigtbl 0
>     :resorigcol 0
>     :resjunk false
>     }
>  )
>

Reply via email to