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)