[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to modify select identifiers

Hi Shashwat,

the implementation to use should be SqlBasicCall.
And to achieve what you want to do I would use

SqlParserPos pos = yourNode.getParserPosition();
SqlNode aliased = new SqlBasicCall(SqlStdOperatorTable.AS, new SqlNode[]{yourNode, new SqlIdentifier(Collections.singletonList("v", pos), pos)}

Note, I did not check above lines so perhaps you have to modify it a bit or play around, but this should be the general direction, I think.


Am 31.10.18, 11:28 schrieb "Shashwat Kumar" <shashwatkmr.001@xxxxxxxxx>:

    Hi Julian,
    Thank you for quick response.
    SqlCall is abstract class so I am not able to find which concrete subclass
    of it I should instantiate. Could you please give some more hint or code
    snippet to do it? Also how to modify the identifier name. Say I want to
    change value to _MAP['value'] e.g.
    SELECT _MAP['value'] as v FROM Data
    On Wed, Oct 31, 2018 at 3:42 PM Julian Feinauer <
    j.feinauer@xxxxxxxxxxxxxxxxx> wrote:
    > Hi Shashwat,
    > Calcite does this by a Call to the "AS" Operator (basically value as v is
    > just syntactic sugar for AS(value, v)).
    > So you need to create a call node (SqlCall) with the AS Operator
    > (SqlStdOperatorTable.AS) and as operands you node and an SqlIdentifier for
    > the Alias.
    > But your visitor should then return SqlNode not String, or?
    I'll will change it to SqlNode.
    > Best
    > Julian
    > Am 31.10.18, 11:07 schrieb "Shashwat Kumar" <shashwatkmr.001@xxxxxxxxx>:
    >     I want to modify select identifiers in sql statement. For example
    >     SELECT value FROM Data
    >     to
    >     SELECT value as v FROM Data
    >     I am able to get SqlNode for select identifiers as follows.
    >     public String visit(SqlCall sqlCall) {
    >             SqlNodeList selectList = ((SqlSelect) sqlCall).getSelectList();
    >             for (SqlNode sqlNode : selectList) {
    >                 *// do something with sqlNode*
    >             }
    >     }
    >     Now how to change sqlNode as per requirement?
    >     --
    >     Regards
    >     Shashwat Kumar
    Shashwat Kumar