You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vladimir Sitnikov (JIRA)" <ji...@apache.org> on 2015/01/06 14:27:35 UTC
[jira] [Reopened] (CALCITE-486) Fast-path for EnumerableCalc in
case of trivial program
[ https://issues.apache.org/jira/browse/CALCITE-486?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vladimir Sitnikov reopened CALCITE-486:
---------------------------------------
Assignee: Vladimir Sitnikov (was: Julian Hyde)
> Fast-path for EnumerableCalc in case of trivial program
> -------------------------------------------------------
>
> Key: CALCITE-486
> URL: https://issues.apache.org/jira/browse/CALCITE-486
> Project: Calcite
> Issue Type: Bug
> Reporter: Vladimir Sitnikov
> Assignee: Vladimir Sitnikov
> Labels: newbie
>
> It looks like in case when row type differs just in the column names, enumerable is still processed.
> {{JdbcTest.testInnerJoinValues}}, {{...SELECT * FROM (VALUES (10, 'SameName')) AS t (id, desc)...}}
> Note how input "VALUES" is passed through custom enumerable that has no meaning.
> This should be optimized.
> {code:java}
> /* 5 */ final org.apache.calcite.linq4j.Enumerable _inputEnumerable = org.apache.calcite.linq4j.Linq4j.asEnumerable(new Object[] {
> /* 6 */ new Object[] {
> /* 7 */ 10,
> /* 8 */ "SameName"}});
> ...
> /* 25 */ public Object current() {
> /* 26 */ final Object[] current = (Object[]) inputEnumerator.current();
> /* 27 */ return new Object[] {
> /* 28 */ current[0],
> /* 29 */ current[1]};
> /* 30 */ }
> {code}
> Full code
> {code:java}
> /* 1 */ org.apache.calcite.DataContext root;
> /* 2 */
> /* 3 */ public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root0) {
> /* 4 */ root = root0;
> /* 5 */ final org.apache.calcite.linq4j.Enumerable _inputEnumerable = org.apache.calcite.linq4j.Linq4j.asEnumerable(new Object[] {
> /* 6 */ new Object[] {
> /* 7 */ 10,
> /* 8 */ "SameName"}});
> /* 9 */ final org.apache.calcite.linq4j.AbstractEnumerable left = new org.apache.calcite.linq4j.AbstractEnumerable(){
> /* 10 */ public org.apache.calcite.linq4j.Enumerator enumerator() {
> /* 11 */ return new org.apache.calcite.linq4j.Enumerator(){
> /* 12 */ public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable.enumerator();
> /* 13 */ public void reset() {
> /* 14 */ inputEnumerator.reset();
> /* 15 */ }
> /* 16 */
> /* 17 */ public boolean moveNext() {
> /* 18 */ return inputEnumerator.moveNext();
> /* 19 */ }
> /* 20 */
> /* 21 */ public void close() {
> /* 22 */ inputEnumerator.close();
> /* 23 */ }
> /* 24 */
> /* 25 */ public Object current() {
> /* 26 */ final Object[] current = (Object[]) inputEnumerator.current();
> /* 27 */ return new Object[] {
> /* 28 */ current[0],
> /* 29 */ current[1]};
> /* 30 */ }
> /* 31 */
> /* 32 */ };
> /* 33 */ }
> /* 34 */
> /* 35 */ };
> /* 36 */ final org.apache.calcite.linq4j.Enumerable _inputEnumerable0 = left.join(org.apache.calcite.linq4j.Linq4j.asEnumerable(((org.apache.calcite.test.JdbcTest.LingualSchema) ((org.apache.calcite.adapter.java.ReflectiveSchema) root.getRootSchema().getSubSchema("SALES").unwrap(org.apache.calcite.adapter.java.ReflectiveSchema.class)).getTarget()).EMPS), new org.apache.calcite.linq4j.function.Function1() {
> /* 37 */ public java.util.List apply(Object[] v1) {
> /* 38 */ return java.util.Collections.EMPTY_LIST;
> /* 39 */ }
> /* 40 */ public Object apply(Object v1) {
> /* 41 */ return apply(
> /* 42 */ (Object[]) v1);
> /* 43 */ }
> /* 44 */ }
> /* 45 */ , new org.apache.calcite.linq4j.function.Function1() {
> /* 46 */ public java.util.List apply(org.apache.calcite.test.JdbcTest.LingualEmp v1) {
> /* 47 */ return java.util.Collections.EMPTY_LIST;
> /* 48 */ }
> /* 49 */ public Object apply(Object v1) {
> /* 50 */ return apply(
> /* 51 */ (org.apache.calcite.test.JdbcTest.LingualEmp) v1);
> /* 52 */ }
> /* 53 */ }
> /* 54 */ , new org.apache.calcite.linq4j.function.Function2() {
> /* 55 */ public Object[] apply(Object[] left, org.apache.calcite.test.JdbcTest.LingualEmp right) {
> /* 56 */ return new Object[] {
> /* 57 */ left[0],
> /* 58 */ left[1],
> /* 59 */ right.EMPNO,
> /* 60 */ right.DEPTNO};
> /* 61 */ }
> /* 62 */ public Object[] apply(Object left, Object right) {
> /* 63 */ return apply(
> /* 64 */ (Object[]) left,
> /* 65 */ (org.apache.calcite.test.JdbcTest.LingualEmp) right);
> /* 66 */ }
> /* 67 */ }
> /* 68 */ , null, false, false);
> /* 69 */ final org.apache.calcite.linq4j.AbstractEnumerable child = new org.apache.calcite.linq4j.AbstractEnumerable(){
> /* 70 */ public org.apache.calcite.linq4j.Enumerator enumerator() {
> /* 71 */ return new org.apache.calcite.linq4j.Enumerator(){
> /* 72 */ public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable0.enumerator();
> /* 73 */ public void reset() {
> /* 74 */ inputEnumerator.reset();
> /* 75 */ }
> /* 76 */
> /* 77 */ public boolean moveNext() {
> /* 78 */ while (inputEnumerator.moveNext()) {
> /* 79 */ final Object[] current = (Object[]) inputEnumerator.current();
> /* 80 */ if (org.apache.calcite.runtime.SqlFunctions.toInt(current[3]) == org.apache.calcite.runtime.SqlFunctions.toInt(current[0]) && org.apache.calcite.runtime.SqlFunctions.eq(current[1] == null ? (String) null : current[1].toString(), "SameName")) {
> /* 81 */ return true;
> /* 82 */ }
> /* 83 */ }
> /* 84 */ return false;
> /* 85 */ }
> /* 86 */
> /* 87 */ public void close() {
> /* 88 */ inputEnumerator.close();
> /* 89 */ }
> /* 90 */
> /* 91 */ public Object current() {
> /* 92 */ final Object[] current = (Object[]) inputEnumerator.current();
> /* 93 */ return new Object[] {
> /* 94 */ current[2],
> /* 95 */ current[1]};
> /* 96 */ }
> /* 97 */
> /* 98 */ };
> /* 99 */ }
> /* 100 */
> /* 101 */ };
> /* 102 */ return child.distinct(org.apache.calcite.linq4j.function.Functions.arrayComparer());
> /* 103 */ }
> /* 104 */
> /* 105 */
> /* 106 */ public java.lang.reflect.Type getElementType() {
> /* 107 */ return java.lang.Object[].class;
> /* 108 */ }
> /* 109 */
> /* 110 */
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)