The main role of the column resolver is to find the exact column in a relation or a temporal column to which a variable name points. We have used a monolithic column resolver to deal with lots of cases.
But, resolving a name should play different roles according to at which the name is placed.
For example, 1) a column name in select list always points one of fields in relations, 2) a column name in WHERE clause can point to one of fields in relations or one of aliased temporal fields in select list. If there are duplicated, the column name firstly chooses the field in relations. 3) a column name in ORDER BY clause is similar to that in WHERE clause, but it firstly chooses one of aliased temporal fields in select list.
The current column resolver does not consider the above rules. As a result, it works incorrectly in some cases where a sql statement includes the same name references, actually indicating one field in relation and one aliased temporal field in select list. We should fix it.