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.
Julian
Am 31.10.18, 11:28 schrieb "Shashwat Kumar" <[email protected]>:
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 <
[email protected]> 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" <[email protected]>:
>
> 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
>
>
>
--
Regards
Shashwat Kumar