Hi Julian, I have been able to successfully implement your above suggestions and got properly modifed SqlNode in the end. Now I want to convert SqlNode to sqlquery which I want to pass to JDBC connection. Could you please help in that?
sqlNode.toString() is not giving proper query. sqlNode.toSqlString(SqlDialect dialect) seems to be appropriate solution but what should I pass as dialect? On Wed, Oct 31, 2018 at 4:05 PM Julian Feinauer < j.feina...@pragmaticminds.de> wrote: > 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 > > > -- Regards Shashwat Kumar