Обсуждение: Expressions without type

Поиск
Список
Период
Сортировка

Expressions without type

От
Ashutosh Bapat
Дата:
Hi All,<br />I need to check type of expressions appearing in a Query tree and I am using exprType() for that. But for
certainexpressions their type is not defined like List, FromExpr, JoinExpr. Such expressions are acceptable in the
code,but expressions which have a type need to obey certain criteria like they can not be composite type etc.
exprType()throws error when it's passed expressions which do not have type and hence I can not use it directly. Is
therea function, which would tell me whether a given expression can have a type or not?<br clear="all" /><br />-- <br
/>BestWishes,<br />Ashutosh Bapat<br />EntepriseDB Corporation<br />The Enterprise Postgres Company<br /><br /> 

Re: Expressions without type

От
Tom Lane
Дата:
Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> writes:
> I need to check type of expressions appearing in a Query tree and I am
> using exprType() for that. But for certain expressions their type is not
> defined like List, FromExpr, JoinExpr. Such expressions are acceptable in
> the code, but expressions which have a type need to obey certain criteria
> like they can not be composite type etc. exprType() throws error when it's
> passed expressions which do not have type and hence I can not use it
> directly. Is there a function, which would tell me whether a given
> expression can have a type or not?

It seems to me that this is the result of fuzzy thinking.  Neither
FromExpr nor JoinExpr can possibly occur in random places in a query
tree: they only appear in the join tree, all of which can be thought of
as returning SETOF RECORD if you want, but it doesn't seem very helpful
to apply exprType to the jointree.  Lists likewise don't occur in any
context where it seems helpful to associate a type with the node tree.
So I think you need to think a bit harder about what you need to
accomplish and which parts of a query you need to accomplish it on.
        regards, tom lane