Great! Glad to hear you fixed things. -- Michael Mior [email protected]
2017-11-09 15:59 GMT-05:00 Christian Tzolov <[email protected]>: > Thanks for the hint Michael, > > The problem was in the GeodeUitils#handleStructEntry > method. It use to return the results using the original types from the > underlaying systems. This works for the column/field types because the > schema is > inferred from the entity java class but it doesn't for the aggregated > results > (at lest for some of them) > . I made it convert the result in accordance with > the expected > relDataTypeFields > and this solved it. > --Chees > > > On 9 November 2017 at 17:28, Michael Mior <[email protected]> wrote: > > > Ultimately the result you return from GeodeEnumerator.current needs to > have > > the correct type. It's hard to follow exactly what's going on with the > > reflection that's happening, but you probably need to make some changes > to > > GeodeUtils.handleJavaObjectEntry. > > > > -- > > Michael Mior > > [email protected] > > > > 2017-11-09 11:25 GMT-05:00 Christian Tzolov <[email protected]>: > > > > > Regarding > > > > if you're pushing down > > > > > > aggregations, you should just make sure that you convert > > > > the result your adapter returns to a Long. (e.g. > > > Long.valueOf(count.longValue())) > > > > > > Where to apply the conversion? Inside the GeodeAggregateRel rule? > > > > > > Thanks > > > > > > On 9 November 2017 at 17:21, Christian Tzolov <[email protected]> > > wrote: > > > > > > > Hi Michael, > > > > > > > > You can find current version in my branch here: https://github.com/ > > > > tzolov/calcite/tree/geode-1.3 > > > > > > > > I still have not added geode to the calcite-test-dataset so reproduce > > the > > > > problem you need to do this: > > > > > > > > 1. Download geode-sample-bootstrap-0.0.1-SNAPSHOT.jar from: > > > > https://drive.google.com/file/d/0Bw0P8rbcmBaJaGlVZWVEaWE4Tmc > > > > It is a single-node, self-contained SpringBoot app that embeds apache > > > > geode populates some sample data. > > > > Run it like this: > > > > java -Xmx128M -Dgemfire.name=server1 -Dgemfire.server.port=40405 > > > > -Dgemfire.jmx-manager-port=1199 -Dgemfire.jmx-manager=true > > > > -Dgemfire.jmx-manager-start=true -Dgemfire.locators=localhost[10334] > > > > -Dgemfire.start-locator=localhost[10334] -Dgemfire.use-cluster- > > > configuration=false > > > > -jar ./geode-sample-bootstrap-0.0.1-SNAPSHOT.jar > > > > > > > > 2. Start the sqlline and connect to Geode using the > > > > geode/src/test/resources/model-rel2.json model: > > > > > > > > sqlline> !connect jdbc:calcite:model=/Users/ > > ctzolov/Dev/projects/apache- > > > > calcite-tzolov/geode/src/test/resources/model-rel2.json admin admin > > > > > > > > 0: sqlline> SELECT SUM("retailCost") FROM "BookMaster" GROUP BY > > > > "retailCost"; > > > > > > > > +--------+ > > > > | EXPR$0 | > > > > +--------+ > > > > | 59.99 | > > > > | 11.99 | > > > > | 34.99 | > > > > +--------+ > > > > > > > > 0: sqlline> SELECT COUNT(*) FROM "BookMaster"; > > > > > > > > java.lang.ClassCastException: java.lang.Integer cannot be cast to > > > > java.lang.Long > > > > at org.apache.calcite.avatica.util.AbstractCursor$ > > LongAccessor.getLong( > > > > AbstractCursor.java:550) > > > > at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite.java:306) > > > > at org.apache.calcite.avatica.AvaticaResultSet.getObject( > > > > AvaticaResultSet.java:409) > > > > at sqlline.Rows$Row.<init>(Rows.java:157) > > > > > > > > > > > > Cheers, > > > > Christian > > > > > > > > On 9 November 2017 at 16:45, Michael Mior <[email protected]> > wrote: > > > > > > > >> Christian, > > > >> > > > >> Are you able to share your code for the adapter? This would be > helpful > > > in > > > >> understanding the problem. In short however, if you're pushing down > > > >> aggregations, you should just make sure that you convert the result > > your > > > >> adapter returns to a Long. (e.g. Long.valueOf(count.longValue())) > > > >> > > > >> -- > > > >> Michael Mior > > > >> [email protected] > > > >> > > > >> 2017-11-09 10:41 GMT-05:00 Christian Tzolov <[email protected]>: > > > >> > > > >> > (Calcite 1.15.0-SNASHOT and Avalitca 1.10.0) > > > >> > > > > >> > I'm > > > >> > workin on an adapter for in-memory NoSql > > > >> > data > > > >> > system > > > >> > . The implementations tries to push down all supported > aggregation > > > >> > operations, such as AVG, MAX and COUNT. It works for most of them > > but > > > >> fails > > > >> > for COUNT: > > > >> > > > > >> > > > > >> > 0: jdbc:calcite:model= > > > >> > ... > > > >> > > SELECT COUNT(*) FROM "BookMaster"; > > > >> > > > > >> > java.lang.ClassCastException: java.lang.Integer cannot be cast to > > > >> > java.lang.Long > > > >> > at > > > >> > org.apache.calcite.avatica.util.AbstractCursor$ > > LongAccessor.getLong( > > > >> > AbstractCursor.java:550) > > > >> > at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite. > java:306) > > > >> > at > > > >> > org.apache.calcite.avatica.AvaticaResultSet.getObject( > > > >> > AvaticaResultSet.java:409) > > > >> > at sqlline.Rows$Row.<init>(Rows.java:157) > > > >> > > > > >> > P > > > >> > roblem IMO is that the > > > >> > COUNT result form the > > > >> > underlaying system > > > >> > is of type > > > >> > Integer while > > > >> > C > > > >> > alcite expects Long > > > >> > (e.g. BIGINT) as > > > >> > hardcoded in SqlCountAggFunction > > > >> > .java. > > > >> > > > > >> > I can't alter the SqlCountAggFunction so I wonder what is the > > right > > > >> place > > > >> > in Calcite to implement/configure this type conversion? > > > >> > > > > >> > This issue looks very similar ( > > > >> > https://issues.apache.org/jira/browse/CALCITE-665) but i am not > > > sure i > > > >> > completely understand the resolution? > > > >> > > > > >> > Thanks, > > > >> > Christian > > > >> > > > > >> > > > > > > > > > > > > > > > > -- > > > > Christian Tzolov <http://www.linkedin.com/in/tzolov> | Principle > > > Software > > > > Engineer | Pivotal <http://pivotal.io/> | [email protected] | > > > +31610285517 > > > > > > > > > > > > > > > > -- > > > Christian Tzolov <http://www.linkedin.com/in/tzolov> | Principle > > Software > > > Engineer | Pivotal <http://pivotal.io/> | [email protected] | > > +31610285517 > > > > > > > > > -- > Christian Tzolov <http://www.linkedin.com/in/tzolov> | Principle Software > Engineer | Pivotal <http://pivotal.io/> | [email protected] |+31610285517 >
