You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Vladimir Sitnikov (JIRA)" <ji...@apache.org> on 2017/07/13 19:03:00 UTC

[jira] [Created] (CALCITE-1890) Override toString() in enumerable generated code to simplify debugging

Vladimir Sitnikov created CALCITE-1890:
------------------------------------------

             Summary: Override toString() in enumerable generated code to simplify debugging
                 Key: CALCITE-1890
                 URL: https://issues.apache.org/jira/browse/CALCITE-1890
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.13.0
            Reporter: Vladimir Sitnikov
            Assignee: Julian Hyde
            Priority: Minor
         Attachments: lookup.png

Currently Enumerable generates lots of {{new AbstractEnumerable}}, and that makes debugging hard as debugger shows enumerables as {{Baz$2@382cb2b0}}.

It would be great to add some sort of {{toString}} to simplify debugging and/or better error reporting.

It might make sense to generate the debugging information in {{-Dcalcite.debug=true}} mode only.

Sample code (e.g. for JdbcTest):
{code:java}
  @Test public void testJoin() {
    CalciteAssert.that()
        .with(CalciteAssert.Config.SCOTT)
        .query("select e.deptno, d.DEPTNO from \"scott\".EMP e join \"scott\".DEPT d on (e.deptno=d.DEPTNO)")
        .explainMatches("  INCLUDING ALL ATTRIBUTES ", checkResultContains("just print explain"))
;
  }
{code}

Output:
{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.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("scott"), java.lang.Object[].class, "DEPT").asEnumerable();
/*   6 */   final org.apache.calcite.linq4j.AbstractEnumerable left = new org.apache.calcite.linq4j.AbstractEnumerable(){
/*   7 */     public org.apache.calcite.linq4j.Enumerator enumerator() {
/*   8 */       return new org.apache.calcite.linq4j.Enumerator(){
/*   9 */           public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable.enumerator();
/*  10 */           public void reset() {
/*  11 */             inputEnumerator.reset();
/*  12 */           }
/*  13 */ 
/*  14 */           public boolean moveNext() {
/*  15 */             return inputEnumerator.moveNext();
/*  16 */           }
/*  17 */ 
/*  18 */           public void close() {
/*  19 */             inputEnumerator.close();
/*  20 */           }
/*  21 */ 
/*  22 */           public Object current() {
/*  23 */             return org.apache.calcite.runtime.SqlFunctions.toByte(((Object[]) inputEnumerator.current())[0]);
/*  24 */           }
/*  25 */ 
/*  26 */         };
/*  27 */     }
/*  28 */ 
/*  29 */   };
/*  30 */   final org.apache.calcite.linq4j.Enumerable _inputEnumerable0 = org.apache.calcite.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("scott"), java.lang.Object[].class, "EMP").asEnumerable();
/*  31 */   final org.apache.calcite.linq4j.AbstractEnumerable right = new org.apache.calcite.linq4j.AbstractEnumerable(){
/*  32 */     public org.apache.calcite.linq4j.Enumerator enumerator() {
/*  33 */       return new org.apache.calcite.linq4j.Enumerator(){
/*  34 */           public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable0.enumerator();
/*  35 */           public void reset() {
/*  36 */             inputEnumerator.reset();
/*  37 */           }
/*  38 */ 
/*  39 */           public boolean moveNext() {
/*  40 */             return inputEnumerator.moveNext();
/*  41 */           }
/*  42 */ 
/*  43 */           public void close() {
/*  44 */             inputEnumerator.close();
/*  45 */           }
/*  46 */ 
/*  47 */           public Object current() {
/*  48 */             final Object[] current = (Object[]) inputEnumerator.current();
/*  49 */             return new Object[] {
/*  50 */                 current[0],
/*  51 */                 current[7]};
/*  52 */           }
/*  53 */ 
/*  54 */         };
/*  55 */     }
/*  56 */ 
/*  57 */   };
/*  58 */   final org.apache.calcite.linq4j.Enumerable _inputEnumerable1 = left.join(right, new org.apache.calcite.linq4j.function.Function1() {
/*  59 */     public byte apply(byte v1) {
/*  60 */       return v1;
/*  61 */     }
/*  62 */     public Object apply(Byte v1) {
/*  63 */       return apply(
/*  64 */         v1.byteValue());
/*  65 */     }
/*  66 */     public Object apply(Object v1) {
/*  67 */       return apply(
/*  68 */         (Byte) v1);
/*  69 */     }
/*  70 */   }
/*  71 */   , new org.apache.calcite.linq4j.function.Function1() {
/*  72 */     public Byte apply(Object[] v1) {
/*  73 */       return (Byte) v1[1];
/*  74 */     }
/*  75 */     public Object apply(Object v1) {
/*  76 */       return apply(
/*  77 */         (Object[]) v1);
/*  78 */     }
/*  79 */   }
/*  80 */   , new org.apache.calcite.linq4j.function.Function2() {
/*  81 */     public Object[] apply(Byte left, Object[] right) {
/*  82 */       return new Object[] {
/*  83 */           left,
/*  84 */           right[0],
/*  85 */           right[1]};
/*  86 */     }
/*  87 */     public Object[] apply(Object left, Object right) {
/*  88 */       return apply(
/*  89 */         (Byte) left,
/*  90 */         (Object[]) right);
/*  91 */     }
/*  92 */   }
/*  93 */   , null, false, false);
/*  94 */   return new org.apache.calcite.linq4j.AbstractEnumerable(){
/*  95 */       public org.apache.calcite.linq4j.Enumerator enumerator() {
/*  96 */         return new org.apache.calcite.linq4j.Enumerator(){
/*  97 */             public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable1.enumerator();
/*  98 */             public void reset() {
/*  99 */               inputEnumerator.reset();
/* 100 */             }
/* 101 */ 
/* 102 */             public boolean moveNext() {
/* 103 */               return inputEnumerator.moveNext();
/* 104 */             }
/* 105 */ 
/* 106 */             public void close() {
/* 107 */               inputEnumerator.close();
/* 108 */             }
/* 109 */ 
/* 110 */             public Object current() {
/* 111 */               final Object[] current = (Object[]) inputEnumerator.current();
/* 112 */               return new Object[] {
/* 113 */                   current[2],
/* 114 */                   current[0]};
/* 115 */             }
/* 116 */ 
/* 117 */           };
/* 118 */       }
/* 119 */ 
/* 120 */     };
/* 121 */ }
/* 122 */ 
/* 123 */ 
/* 124 */ public Class getElementType() {
/* 125 */   return java.lang.Object[].class;
/* 126 */ }
/* 127 */ 
/* 128 */ 
{code}



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