Please have a look in the SqlDialect class:
/**
* A dialect useful for generating SQL which can be parsed by the
* Calcite parser, in particular quoting literals and identifiers. If you
* want a dialect that knows the full capabilities of the database, create
* one from a connection.
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.toSqlS
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),
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.
S
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
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();