[ https://issues.apache.org/jira/browse/CALCITE-1569?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15823028#comment-15823028 ]
zhen wang commented on CALCITE-1569: ------------------------------------ hmm, what will this line look like in your mind `/* 115 */ if (org.apache.calcite.runtime.SqlFunctions.internalToDate(current[1]) != null && org.apache.calcite.runtime.SqlFunctions.internalToDate(current[0]) != null && (Integer) current[1] >= (Integer) current[0]) {` is it `/* 115 */ if (org.apache.calcite.runtime.SqlFunctions.toInt(current[1]) != null && org.apache.calcite.runtime.SqlFunctions.toInt(current[0]) != null && (Integer) toInt(current[1]) >= (Integer) toInt( current[0])) {` ? > Date condition can generates Integer == Integer, which is always false > ---------------------------------------------------------------------- > > Key: CALCITE-1569 > URL: https://issues.apache.org/jira/browse/CALCITE-1569 > Project: Calcite > Issue Type: Bug > Affects Versions: 1.10.0 > Reporter: liyang > Assignee: Julian Hyde > > Run the below query on calcite 1.10. > {code} > select > l.cal_dt > , sum(left_join_gvm) as left_join_sum > , sum(inner_join_gvm) as inner_join_sum > from > ( > select test_kylin_fact.cal_dt, sum(price) as left_join_gvm > from test_kylin_fact > group by test_kylin_fact.cal_dt > ) l > , > ( > select test_kylin_fact.cal_dt, sum(price) as inner_join_gvm > from test_kylin_fact > group by test_kylin_fact.cal_dt > ) i > where > l.cal_dt = i.cal_dt -- this condition > group by > l.cal_dt > {code} > The where condition generates Baz code like below. > {code} > /* 284 */ final org.apache.calcite.linq4j.AbstractEnumerable child1 = new > org.apache.calcite.linq4j.AbstractEnumerable(){ > /* 285 */ public org.apache.calcite.linq4j.Enumerator enumerator() { > /* 286 */ return new org.apache.calcite.linq4j.Enumerator(){ > /* 287 */ public final org.apache.calcite.linq4j.Enumerator > inputEnumerator = _inputEnumerable1.enumerator(); > /* 288 */ public void reset() { > /* 289 */ inputEnumerator.reset(); > /* 290 */ } > /* 291 */ > /* 292 */ public boolean moveNext() { > /* 293 */ while (inputEnumerator.moveNext()) { > /* 294 */ final Object[] current = (Object[]) > inputEnumerator.current(); > /* 295 */ final Integer inp0_ = (Integer) current[0]; > /* 296 */ final Integer inp2_ = (Integer) current[2]; > /* 297 */ if (inp0_ != null && inp2_ != null && inp0_ == inp2_) > { > /* 298 */ return true; > /* 299 */ } > /* 300 */ } > /* 301 */ return false; > /* 302 */ } > /* 303 */ > /* 304 */ public void close() { > /* 305 */ inputEnumerator.close(); > /* 306 */ } > /* 307 */ > /* 308 */ public Object current() { > /* 309 */ final Object[] current = (Object[]) > inputEnumerator.current(); > /* 310 */ return new Object[] { > /* 311 */ current[0], > /* 312 */ current[1], > /* 313 */ current[3]}; > /* 314 */ } > /* 315 */ > /* 316 */ }; > /* 317 */ } > /* 318 */ > /* 319 */ }; > {code} > The problem is {code} if (inp0_ != null && inp2_ != null && inp0_ == inp2_) > {code} is always false, by using == to compare two Integers. -- This message was sent by Atlassian JIRA (v6.3.4#6332)