Roger Shi created KYLIN-2930:
--------------------------------

             Summary: Selecting one column in union causes compile error
                 Key: KYLIN-2930
                 URL: https://issues.apache.org/jira/browse/KYLIN-2930
             Project: Kylin
          Issue Type: Bug
            Reporter: Roger Shi


Query like
{code:sql}
select count(*) as cnt from TEST_KYLIN_FACT where TRANS_ID < 1000 union select 
count(*) as cnt from TEST_KYLIN_FACT where TRANS_ID > 9000
{code}
make kylin throw exception:

{code:java}
Error while executing SQL "select count() from KYLIN_SALES union select count() 
from KYLIN_SALES LIMIT 50000": Error while compiling generated Java code: 
public static class Record1_0 implements java.io.Serializable { public long f0; 
public Record1_0() {} public boolean equals(Object o) { if (this == o) { return 
true; } if (!(o instanceof Record1_0)) { return false; } return this.f0 == 
((Record1_0) o).f0; } public int hashCode() { int h = 0; h = 
org.apache.calcite.runtime.Utilities.hash(h, this.f0); return h; } public int 
compareTo(Record1_0 that) { final int c; c = 
org.apache.calcite.runtime.Utilities.compare(this.f0, that.f0); if (c != 0) { 
return c; } return 0; } public String toString() { return "{f0=" + this.f0 + 
"}"; } } org.apache.calcite.DataContext root; public 
org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext 
root0) { root = root0; final org.apache.calcite.linq4j.Enumerable 
_inputEnumerable = ((org.apache.kylin.query.schema.OLAPTable) 
root.getRootSchema().getSubSchema("DEFAULT").getTable("KYLIN_SALES")).executeOLAPQuery(root,
 1); final org.apache.calcite.linq4j.AbstractEnumerable child = new 
org.apache.calcite.linq4j.AbstractEnumerable(){ public 
org.apache.calcite.linq4j.Enumerator enumerator() { return new 
org.apache.calcite.linq4j.Enumerator(){ public final 
org.apache.calcite.linq4j.Enumerator inputEnumerator = 
_inputEnumerable.enumerator(); public void reset() { inputEnumerator.reset(); } 
public boolean moveNext() { return inputEnumerator.moveNext(); } public void 
close() { inputEnumerator.close(); } public Object current() { return 
org.apache.calcite.runtime.SqlFunctions.toLong(((Object[]) 
inputEnumerator.current())[10]); } }; } }; final 
org.apache.calcite.linq4j.Enumerable _inputEnumerable0 = 
((org.apache.kylin.query.schema.OLAPTable) 
root.getRootSchema().getSubSchema("DEFAULT").getTable("KYLIN_SALES")).executeOLAPQuery(root,
 2); final org.apache.calcite.linq4j.AbstractEnumerable child1 = new 
org.apache.calcite.linq4j.AbstractEnumerable(){ public 
org.apache.calcite.linq4j.Enumerator enumerator() { return new 
org.apache.calcite.linq4j.Enumerator(){ public final 
org.apache.calcite.linq4j.Enumerator inputEnumerator = 
inputEnumerable0.enumerator(); public void reset() { inputEnumerator.reset(); } 
public boolean moveNext() { return inputEnumerator.moveNext(); } public void 
close() { inputEnumerator.close(); } public Object current() { return 
((Record12_1) inputEnumerator.current()).KY_COUNT; } }; } }; return 
org.apache.calcite.linq4j.Linq4j.singletonEnumerable(child.aggregate(new 
org.apache.calcite.linq4j.function.Function0() { public Object apply() { long 
a0s0; a0s0 = 0; Record1_0 record0; record0 = new Record1_0(); record0.f0 = 
a0s0; return record0; } } .apply(), new 
org.apache.calcite.linq4j.function.Function2() { public Record1_0 
apply(Record1_0 acc, long in) { acc.f0 = acc.f0 + in; return acc; } public 
Record1_0 apply(Record1_0 acc, Long in) { return apply( acc, in.longValue()); } 
public Record1_0 apply(Object acc, Object in) { return apply( (Record1_0) acc, 
(Long) in); } } , 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); } } 
)).union(org.apache.calcite.linq4j.Linq4j.singletonEnumerable(child1.aggregate(new
 org.apache.calcite.linq4j.function.Function0() { public Object apply() { long 
a0s0; a0s0 = 0; Record1_0 record0; record0 = new Record1_0(); record0.f0 = 
a0s0; return record0; } } .apply(), new 
org.apache.calcite.linq4j.function.Function2() { public Record1_0 
apply(Record1_0 acc, long in) { acc.f0 = acc.f0 + in; return acc; } public 
Record1_0 apply(Record1_0 acc, Long in) { return apply( acc, in.longValue()); } 
public Record1_0 apply(Object acc, Object in) { return apply( (Record1_0) acc, 
(Long) in); } } , 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); } } ))).take(50000); } public Class 
getElementType() { return long.class; }
{code}




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to