[ https://issues.apache.org/jira/browse/CALCITE-4606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17360721#comment-17360721 ]
Jacky Yin edited comment on CALCITE-4606 at 6/10/21, 10:36 AM: --------------------------------------------------------------- Fixed in [[https://github.com/apache/calcite/commit/8213277dc3e4e1ea0ddb64f7df9b34bf73305e3d]|https://github.com/apache/calcite/commit/8213277dc3e4e1ea0ddb64f7df9b34bf73305e3d]Thanks [~amaliujia] for review. was (Author: jackyyin): Fixed in [[https://github.com/apache/calcite/commit/8213277dc3e4e1ea0ddb64f7df9b34bf73305e3d]] Thanks [~amaliujia] for review. > Test case "countStar" throws exception in AggregationTest of Elasticsearch > adapter > ---------------------------------------------------------------------------------- > > Key: CALCITE-4606 > URL: https://issues.apache.org/jira/browse/CALCITE-4606 > Project: Calcite > Issue Type: Bug > Components: elasticsearch-adapter > Affects Versions: 1.26.0 > Reporter: Jacky Yin > Priority: Critical > Labels: pull-request-available > Fix For: 1.27.0 > > Time Spent: 3h > Remaining Estimate: 0h > > Currently, the "AggregationTest" of elastic-search adapter is disabled. If we > enable it, the test case "countStar" will throw exception as below. It is > because that the filter "cat1 in ('a', 'b')" will be simplified from > "[OR(=($0, 'a'), =($0, 'b'))]" to "[SEARCH(ITEM($0, 'cat1'), Sarg['a', > 'b']:CHAR(1))]" which is not supported by PredicateAnalyzerTranslator of > ElasticSearchFilter. > {noformat} > Error while executing SQL "select count(*) from view where cat1 in ('a', > 'b')": Unable to implement ElasticsearchToEnumerableConverter: rowcount = > 1.0, cumulative cost = \{12.7125 rows, 20.200000000000003 cpu, 0.0 io}, id = > 262Error while executing SQL "select count(*) from view where cat1 in ('a', > 'b')": Unable to implement ElasticsearchToEnumerableConverter: rowcount = > 1.0, cumulative cost = \{12.7125 rows, 20.200000000000003 cpu, 0.0 io}, id = > 262 ElasticsearchAggregate(group=[{}], EXPR$0=[COUNT()]): rowcount = 1.0, > cumulative cost = \{12.6125 rows, 20.1 cpu, 0.0 io}, id = 260 > ElasticsearchFilter(condition=[SEARCH(ITEM($0, 'cat1'), Sarg['a', > 'b']:CHAR(1))]): rowcount = 25.0, cumulative cost = \{12.5 rows, 20.1 cpu, > 0.0 io}, id = 258 ElasticsearchTableScan(table=[[elastic, aggs]]): > rowcount = 100.0, cumulative cost = \{10.0 rows, 10.100000000000001 cpu, 0.0 > io}, id = 182 > java.sql.SQLException: Error while executing SQL "select count(*) from view > where cat1 in ('a', 'b')": Unable to implement > ElasticsearchToEnumerableConverter: rowcount = 1.0, cumulative cost = > \{12.7125 rows, 20.200000000000003 cpu, 0.0 io}, id = 262 > ElasticsearchAggregate(group=[{}], EXPR$0=[COUNT()]): rowcount = 1.0, > cumulative cost = \{12.6125 rows, 20.1 cpu, 0.0 io}, id = 260 > ElasticsearchFilter(condition=[SEARCH(ITEM($0, 'cat1'), Sarg['a', > 'b']:CHAR(1))]): rowcount = 25.0, cumulative cost = \{12.5 rows, 20.1 cpu, > 0.0 io}, id = 258 ElasticsearchTableScan(table=[[elastic, aggs]]): > rowcount = 100.0, cumulative cost = \{10.0 rows, 10.100000000000001 cpu, 0.0 > io}, id = 182 > at org.apache.calcite.avatica.Helper.createException(Helper.java:56) at > org.apache.calcite.avatica.Helper.createException(Helper.java:41) at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163) > at > org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227) > at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:535) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.lambda$returns$1(CalciteAssert.java:1547) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.withConnection(CalciteAssert.java:1486) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1545) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1535) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1498) > at > org.apache.calcite.adapter.elasticsearch.AggregationTest.countStar(AggregationTest.java:132) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) at > org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675) > at > org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) > at > org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125) > at > org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46) > at > org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:139) > at > org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:131) > at > org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:81) > at > org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) > at > org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) > at > org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104) > at > org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62) > at > org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43) > at > org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35) > at > org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) > at > org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) > at > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198) > at > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) > at > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) > at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) > at > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171) > at > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) > at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) > at > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171) > at > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) > at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) > at > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) > at > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) > at > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171) > at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) at > java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at > java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) > at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at > java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) > Suppressed: org.apache.calcite.util.TestUtil$ExtraInformation: With > materializationsEnabled=false, limit=0 at > org.apache.calcite.util.TestUtil.rethrow(TestUtil.java:341) at > org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:567) ... > 64 moreCaused by: java.lang.IllegalStateException: Unable to implement > ElasticsearchToEnumerableConverter: rowcount = 1.0, cumulative cost = > \{12.7125 rows, 20.200000000000003 cpu, 0.0 io}, id = 262 > ElasticsearchAggregate(group=[{}], EXPR$0=[COUNT()]): rowcount = 1.0, > cumulative cost = \{12.6125 rows, 20.1 cpu, 0.0 io}, id = 260 > ElasticsearchFilter(condition=[SEARCH(ITEM($0, 'cat1'), Sarg['a', > 'b']:CHAR(1))]): rowcount = 25.0, cumulative cost = \{12.5 rows, 20.1 cpu, > 0.0 io}, id = 258 ElasticsearchTableScan(table=[[elastic, aggs]]): > rowcount = 100.0, cumulative cost = \{10.0 rows, 10.100000000000001 cpu, 0.0 > io}, id = 182 > at > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:114) > at > org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:113) > at > org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1130) > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:318) at > org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:215) at > org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:647) > at > org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:513) > at > org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:483) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:249) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:623) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) > ... 66 more Suppressed: > org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer$PredicateAnalyzerException: > Unsupported call: [SEARCH(ITEM($0, 'cat1'), Sarg['a', 'b']:CHAR(1))] at > org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer$Visitor.visitCall(PredicateAnalyzer.java:193) > at > org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer$Visitor.visitCall(PredicateAnalyzer.java:119) > at org.apache.calcite.rex.RexCall.accept(RexCall.java:189) at > org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer.analyze(PredicateAnalyzer.java:104) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$PredicateAnalyzerTranslator.translateMatch(ElasticsearchFilter.java:105) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter.implement(ElasticsearchFilter.java:70) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:129) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchAggregate.implement(ElasticsearchAggregate.java:128) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:129) > at > org.apache.calcite.adapter.elasticsearch.ElasticsearchToEnumerableConverter.implement(ElasticsearchToEnumerableConverter.java:67) > at > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:111) > ... 77 more > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)