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" <shashwatkmr....@gmail.com>: 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.feina...@pragmaticminds.de> 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....@gmail.com>: > > 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