You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Axis (Jira)" <ji...@apache.org> on 2020/01/10 02:24:00 UTC

[jira] [Updated] (CALCITE-3720) Failed to validate the field in MATCH_RECOGNIZE phase

     [ https://issues.apache.org/jira/browse/CALCITE-3720?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Axis updated CALCITE-3720:
--------------------------
    Summary: Failed to validate the field in MATCH_RECOGNIZE phase  (was: Failed to validate the field in match_recognize phase)

> Failed to validate the field in MATCH_RECOGNIZE phase
> -----------------------------------------------------
>
>                 Key: CALCITE-3720
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3720
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.21.0
>            Reporter: Axis
>            Priority: Major
>
> hello, everyone
>     the following case is failed when we run it:
> {code:java}
> @Test public void testMatchRecognize10() {
>   final String sql = "select *\n"
>       + "  from (select * from emp, unnest(multiset(select*from dept)) where empno > 10) match_recognize\n"
>       + "  (\n"
>       + "    partition by job, sal\n"
>       + "    order by job asc, sal desc, empno\n"
>       + "    pattern (strt down+ up+)\n"
>       + "    define\n"
>       + "      down as down.mgr < PREV(down.mgr),\n"
>       + "      up as up.mgr > prev(up.mgr)) as mr";
>   sql(sql).ok();
> }
> {code}
> the error message is :
> {code:java}
> Cycle detected during type-checkingCycle detected during type-checkingjava.lang.AssertionError: Cycle detected during type-checking at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:93) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1057) at org.apache.calcite.sql.validate.AbstractNamespace.getRowType(AbstractNamespace.java:115) at org.apache.calcite.sql.validate.MatchRecognizeNamespace.getRowType(MatchRecognizeNamespace.java:26) at org.apache.calcite.sql.validate.DelegatingScope.resolveInNamespace(DelegatingScope.java:101) at org.apache.calcite.sql.validate.ListScope.resolve(ListScope.java:191) at org.apache.calcite.sql.validate.DelegatingScope.resolve(DelegatingScope.java:89){code}
>  
> After checking the calcite code, we found that
> when calcite resolve the field `empno` in condition `where empno > 10`, calcite will try to find all the definitions in scope chain(current scope and parent scopes). If the `empno` is not find in current scope(Because of the `unnest`), calcite will try to use the parent scope(SelectScope) to resolve this field, but unluckily ParentScope can see the MatchRecognize namespace, and triggle this error(because MatchRecognize is still validating).
> Now we use the `where emp.empno > 10` to avoid this error, but i still think it is the bug of calcite.
>  
> {code:java}
>  {code}
>  



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