git.net

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

Re: How to modify select identifiers


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.feinauer@xxxxxxxxxxxxxxxxx> 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.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
>     >
>     >
>     >
>
>     --
>     Regards
>     Shashwat Kumar
>
>
>

-- 
Regards
Shashwat Kumar