[
https://issues.apache.org/jira/browse/CALCITE-5173?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
itxiangkui updated CALCITE-5173:
--------------------------------
Summary: ProjectableFilterableTable may provoke DefaultEnumerable
“java.lang.Long cannot be cast to java.lang.String” error (was:
ProjectableFilterableTable may provoke DefaultEnumerable “java.lang.Long cannot
be cast to java.lang.String” erro)
> ProjectableFilterableTable may provoke DefaultEnumerable “java.lang.Long
> cannot be cast to java.lang.String” error
> ------------------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-5173
> URL: https://issues.apache.org/jira/browse/CALCITE-5173
> Project: Calcite
> Issue Type: Bug
> Components: core, jdbc-adapter
> Affects Versions: 1.30.0
> Reporter: itxiangkui
> Priority: Major
>
> when i defined a table
> +"implements {color:#4c9aff}ProjectableFilterableTable{color},
> TranslatableTable"+
> then the sql
> {code:java}
> select count(1) from `database`.`table` where c1 is not null; {code}
> may trigger a error like
> {code:java}
> java.lang.ClassCastException: java.lang.Long cannot be cast to
> java.lang.String
> at Baz$1.apply(janino650997550716152417.java:51)
> at Baz$1.apply(janino650997550716152417.java)
> at
> org.apache.calcite.adapter.enumerable.BasicAggregateLambdaFactory$AccumulatorAdderSeq.apply(BasicAggregateLambdaFactory.java:81)
> at
> org.apache.calcite.linq4j.EnumerableDefaults.aggregate(EnumerableDefaults.java:133)
> at
> org.apache.calcite.linq4j.DefaultEnumerable.aggregate(DefaultEnumerable.java:107)
> at Baz.bind(janino650997550716152417.java:68)
> at
> org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:363)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:323)
> {code}
>
> the janino code like
> {code:java}
> public org.apache.calcite.linq4j.Enumerable bind(final
> org.apache.calcite.DataContext root) {
> final org.apache.calcite.rel.RelNode v1stashed =
> (org.apache.calcite.rel.RelNode) root.get("v1stashed");
> final org.apache.calcite.interpreter.Interpreter interpreter = new
> org.apache.calcite.interpreter.Interpreter(
> root,
> v1stashed);
> java.util.List accumulatorAdders = new java.util.LinkedList();
> accumulatorAdders.add(new org.apache.calcite.linq4j.function.Function2() {
> public Record1_0 apply(Record1_0 acc, String in) {
> acc.f0++;
> return acc;
> }
> public Record1_0 apply(Object acc, Object in) {
> return apply(
> (Record1_0) acc,
> (String) in);
> }
> }
> );
> org.apache.calcite.adapter.enumerable.AggregateLambdaFactory lambdaFactory
> = new org.apache.calcite.adapter.enumerable.BasicAggregateLambdaFactory(
> new org.apache.calcite.linq4j.function.Function0() {
> public Object apply() {
> long COUNTa0s0;
> COUNTa0s0 = 0L;
> Record1_0 record0;
> record0 = new Record1_0();
> record0.f0 = COUNTa0s0;
> return record0;
> }
> }
> ,
> accumulatorAdders);
> return
> org.apache.calcite.linq4j.Linq4j.singletonEnumerable(org.apache.calcite.runtime.Enumerables.slice0(interpreter).aggregate(lambdaFactory.accumulatorInitializer().apply(),
> lambdaFactory.accumulatorAdder(),
> lambdaFactory.singleGroupResultSelector(new
> org.apache.calcite.linq4j.function.Function1() {
> public long apply(Record1_0 acc) {
> return acc.f0;
> }
> public Object apply(Object acc) {
> return apply(
> (Record1_0) acc);
> }
> }
> )));
> }
> public Class getElementType() {
> return long.class;
> }
> {code}
>
> and when you define a table
> +"implements {color:#4c9aff}FilterableTable{color}, TranslatableTable"+
> it will be ok!
--
This message was sent by Atlassian Jira
(v8.20.7#820007)