You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "hongbin ma (JIRA)" <ji...@apache.org> on 2017/04/13 12:04:41 UTC

[jira] [Created] (CALCITE-1754) queries grouping by timestampadd throws ClassCastException

hongbin ma created CALCITE-1754:
-----------------------------------

             Summary: queries grouping by timestampadd throws ClassCastException
                 Key: CALCITE-1754
                 URL: https://issues.apache.org/jira/browse/CALCITE-1754
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.12.0
            Reporter: hongbin ma
            Assignee: Julian Hyde


using CSVTest:

{code}
    checkSql("model","select count(*),  JOINEDAT from EMPS group by JOINEDAT ");
{code}

works well, however 

{code}
    checkSql("model","select count(*), {fn timestampadd(SQL_TSI_DAY, 1, JOINEDAT) }  from EMPS group by {fn timestampadd(SQL_TSI_DAY, 1, JOINEDAT ) } ");
{code}

throws 

{code}
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date
	at Baz$3.apply(ANONYMOUS.java:88)
	at Baz$3.apply(ANONYMOUS.java)
	at org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:832)
	at org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:761)
	at org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302)
	at Baz.bind(Baz.java:70)
	at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:331)
	at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:294)
	at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:553)
	at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:544)
	at org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:193)
	at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:67)
	at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44)
	at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:607)
	at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:600)
	at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:615)
	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:148)

{code}

the generated code is:

{code}

/*   1 */ public static class Record1_0 implements java.io.Serializable {
/*   2 */   public long f0;
/*   3 */   public Record1_0() {}
/*   4 */   public boolean equals(Object o) {
/*   5 */     if (this == o) {
/*   6 */       return true;
/*   7 */     }
/*   8 */     if (!(o instanceof Record1_0)) {
/*   9 */       return false;
/*  10 */     }
/*  11 */     return this.f0 == ((Record1_0) o).f0;
/*  12 */   }
/*  13 */ 
/*  14 */   public int hashCode() {
/*  15 */     int h = 0;
/*  16 */     h = org.apache.calcite.runtime.Utilities.hash(h, this.f0);
/*  17 */     return h;
/*  18 */   }
/*  19 */ 
/*  20 */   public int compareTo(Record1_0 that) {
/*  21 */     final int c;
/*  22 */     c = org.apache.calcite.runtime.Utilities.compare(this.f0, that.f0);
/*  23 */     if (c != 0) {
/*  24 */       return c;
/*  25 */     }
/*  26 */     return 0;
/*  27 */   }
/*  28 */ 
/*  29 */   public String toString() {
/*  30 */     return "{f0=" + this.f0 + "}";
/*  31 */   }
/*  32 */ 
/*  33 */ }
/*  34 */ 
/*  35 */ org.apache.calcite.DataContext root;
/*  36 */ 
/*  37 */ public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root0) {
/*  38 */   root = root0;
/*  39 */   final org.apache.calcite.rel.RelNode v0stashed = (org.apache.calcite.rel.RelNode) root.get("v0stashed");
/*  40 */   final org.apache.calcite.interpreter.Interpreter interpreter = new org.apache.calcite.interpreter.Interpreter(
/*  41 */     root,
/*  42 */     v0stashed);
/*  43 */   final org.apache.calcite.linq4j.AbstractEnumerable child = new org.apache.calcite.linq4j.AbstractEnumerable(){
/*  44 */     public org.apache.calcite.linq4j.Enumerator enumerator() {
/*  45 */       return new org.apache.calcite.linq4j.Enumerator(){
/*  46 */           public final org.apache.calcite.linq4j.Enumerator inputEnumerator = interpreter.enumerator();
/*  47 */           public void reset() {
/*  48 */             inputEnumerator.reset();
/*  49 */           }
/*  50 */ 
/*  51 */           public boolean moveNext() {
/*  52 */             return inputEnumerator.moveNext();
/*  53 */           }
/*  54 */ 
/*  55 */           public void close() {
/*  56 */             inputEnumerator.close();
/*  57 */           }
/*  58 */ 
/*  59 */           public Object current() {
/*  60 */             final Object[] current = (Object[]) inputEnumerator.current();
/*  61 */             return (java.sql.Date) current[9] == null ? (Integer) null : Integer.valueOf(org.apache.calcite.runtime.SqlFunctions.toInt(current[9]) + (int) $L4J$C$86400000L_1_86400000L);
/*  62 */           }
/*  63 */ 
/*  64 */           static final long $L4J$C$86400000L_1 = 86400000L * 1;
/*  65 */           static final long $L4J$C$86400000L_1_86400000L = $L4J$C$86400000L_1 / 86400000L;
/*  66 */         };
/*  67 */     }
/*  68 */ 
/*  69 */   };
/*  70 */   final org.apache.calcite.linq4j.Enumerable _inputEnumerable = child.groupBy(org.apache.calcite.linq4j.function.Functions.identitySelector(), new org.apache.calcite.linq4j.function.Function0() {
/*  71 */     public Object apply() {
/*  72 */       long COUNTa0s0;
/*  73 */       COUNTa0s0 = 0L;
/*  74 */       Record1_0 record0;
/*  75 */       record0 = new Record1_0();
/*  76 */       record0.f0 = COUNTa0s0;
/*  77 */       return record0;
/*  78 */     }
/*  79 */   }
/*  80 */   , new org.apache.calcite.linq4j.function.Function2() {
/*  81 */     public Record1_0 apply(Record1_0 acc, java.sql.Date in) {
/*  82 */       acc.f0++;
/*  83 */       return acc;
/*  84 */     }
/*  85 */     public Record1_0 apply(Object acc, Object in) {
/*  86 */       return apply(
/*  87 */         (Record1_0) acc,
/*  88 */         (java.sql.Date) in);
/*  89 */     }
/*  90 */   }
/*  91 */   , new org.apache.calcite.linq4j.function.Function2() {
/*  92 */     public Object[] apply(java.sql.Date key, Record1_0 acc) {
/*  93 */       return new Object[] {
/*  94 */           key,
/*  95 */           acc.f0};
/*  96 */     }
/*  97 */     public Object[] apply(Object key, Object acc) {
/*  98 */       return apply(
/*  99 */         (java.sql.Date) key,
/* 100 */         (Record1_0) acc);
/* 101 */     }
/* 102 */   }
/* 103 */   );
/* 104 */   return new org.apache.calcite.linq4j.AbstractEnumerable(){
/* 105 */       public org.apache.calcite.linq4j.Enumerator enumerator() {
/* 106 */         return new org.apache.calcite.linq4j.Enumerator(){
/* 107 */             public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable.enumerator();
/* 108 */             public void reset() {
/* 109 */               inputEnumerator.reset();
/* 110 */             }
/* 111 */ 
/* 112 */             public boolean moveNext() {
/* 113 */               return inputEnumerator.moveNext();
/* 114 */             }
/* 115 */ 
/* 116 */             public void close() {
/* 117 */               inputEnumerator.close();
/* 118 */             }
/* 119 */ 
/* 120 */             public Object current() {
/* 121 */               final Object[] current = (Object[]) inputEnumerator.current();
/* 122 */               return new Object[] {
/* 123 */                   current[1],
/* 124 */                   current[0]};
/* 125 */             }
/* 126 */ 
/* 127 */           };
/* 128 */       }
/* 129 */ 
/* 130 */     };
/* 131 */ }
/* 132 */ 
/* 133 */ 
/* 134 */ public Class getElementType() {
/* 135 */   return java.lang.Object[].class;
/* 136 */ }
/* 137 */ 
/* 138 */ 
{code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)