You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "jibiyr (Jira)" <ji...@apache.org> on 2021/03/25 01:11:00 UTC

[jira] [Comment Edited] (CALCITE-4548) SqlToRelConverter#convertExpression can not convert SqlNode which has subQuery

    [ https://issues.apache.org/jira/browse/CALCITE-4548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17308271#comment-17308271 ] 

jibiyr edited comment on CALCITE-4548 at 3/25/21, 1:10 AM:
-----------------------------------------------------------

[~julianhyde] thanks for your reply.

Just the javadoc of SqlToRelConverter has mentioned, it said convertExpression is one of the public entry point. In addition flink use it to parse table column, It just call convertExpression without wrapper. 

[FLINK-20084|https://issues.apache.org/jira/browse/FLINK-20884]
 


was (Author: yr):
[~julianhyde] thanks for your reply.

Just the javadoc of SqlToRelConverter has mentioned, it said convertExpression is one of the public entry point.

> SqlToRelConverter#convertExpression can not convert SqlNode which has subQuery
> ------------------------------------------------------------------------------
>
>                 Key: CALCITE-4548
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4548
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.26.0
>            Reporter: jibiyr
>            Priority: Major
>
> hi community, when I use  *SqlToRelConverter* to convertExpression,I found it does  not registery subQuery before convertExpression, so the convertExpression throw npe.
> here is the executable example
>  
> {code:java}
> // code placeholder
> CalciterHelper calciterHelper = new CalciterHelper(config);
> SqlNode parse = calciterHelper.parseExpression("ID IN (1, 2, 3)");
> HashMap<String, RexNode> nameToNodeMap = new HashMap<>();
> nameToNodeMap.put("ID",new RexInputRef(0, calciterHelper.getTypeFactory().createSqlType(SqlTypeName.INTEGER)));
> final Map<String, RelDataType> nameToTypeMap = new HashMap<>();
> for (Map.Entry<String, RexNode> entry : nameToNodeMap.entrySet()) {
>   nameToTypeMap.put(entry.getKey(), entry.getValue().getType());
> }
> SqlValidatorImpl orCreateValidator = calciterHelper.getOrCreateValidator();
> orCreateValidator.validateCall((SqlCall) parse,new ParameterScope(orCreateValidator,nameToTypeMap));
> SqlToRelConverter orCreateSqlToRelConverter = calciterHelper.getOrCreateSqlToRelConverter();
> orCreateSqlToRelConverter.convertExpression(parse,nameToNodeMap);
> {code}
>  
>  
> and the npe,
>  
> {code:java}
> // code placeholder
> Exception in thread "main" java.lang.NullPointerExceptionException in thread "main" java.lang.NullPointerException 
> at java.util.Objects.requireNonNull(Objects.java:203) 
> at org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4914)
> {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)