Traversing targetlist to find accessed columns - Mailing list pgsql-hackers

From Amin
Subject Traversing targetlist to find accessed columns
Date
Msg-id CAF-KA88taQOdRs5-SPJRoS0qEKbr=wg7XvPbf5Hy_NSaHYGnPg@mail.gmail.com
Whole thread Raw
Responses Re: Traversing targetlist to find accessed columns  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
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
    }
 )

pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Using AF_UNIX sockets always for tests on Windows
Next
From: Thomas Munro
Date:
Subject: Re: Using WaitEventSet in the postmaster