Thanks Michael, I have tried adding it into VM options but it didn't give
the result I want, instead it printed a lot Java code. Is there anything I
do wrong?

public final class GeneratedMetadataHandler_Collation implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Collation.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdCollation provider0;
  public GeneratedMetadataHandler_Collation(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdCollation provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF;
  }
  public com.google.common.collect.ImmutableList collations(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.ImmutableList) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.ImmutableList x = collations_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.ImmutableList collations_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.collations((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.collations((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return collations(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 7:
    case 31:
      return provider0.collations((org.apache.calcite.rel.core.Calc) r, mq);
    case 10:
    case 25:
    case 34:
      return provider0.collations((org.apache.calcite.rel.core.Filter) r,
mq);
    case 14:
    case 26:
    case 38:
      return provider0.collations((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.collations((org.apache.calcite.rel.core.Sort) r, mq);
    case 18:
    case 28:
    case 42:
      return provider0.collations((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 20:
    case 44:
      return provider0.collations((org.apache.calcite.rel.core.Values) r,
mq);
    case 21:
    case 45:
      return provider0.collations((org.apache.calcite.rel.core.Window) r,
mq);
    case 27:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableHashJoin)
r, mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_ExplainVisibility implements
org.apache.calcite.rel.metadata.BuiltInMetadata.ExplainVisibility.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdExplainVisibility
provider0;
  public GeneratedMetadataHandler_ExplainVisibility(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdExplainVisibility provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF;
  }
  public java.lang.Boolean isVisibleInExplain(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF,
r, org.apache.calcite.rel.metadata.NullSentinel.mask(a0));
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Boolean) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Boolean x = isVisibleInExplain_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Boolean isVisibleInExplain_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.isVisibleInExplain((org.apache.calcite.rel.RelNode)
r, mq, a0);
    case 3:
      return isVisibleInExplain(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_ExplainVisibility implements
org.apache.calcite.rel.metadata.BuiltInMetadata.ExplainVisibility.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdExplainVisibility
provider0;
  public GeneratedMetadataHandler_ExplainVisibility(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdExplainVisibility provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF;
  }
  public java.lang.Boolean isVisibleInExplain(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF,
r, org.apache.calcite.rel.metadata.NullSentinel.mask(a0));
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Boolean) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Boolean x = isVisibleInExplain_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Boolean isVisibleInExplain_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.isVisibleInExplain((org.apache.calcite.rel.RelNode)
r, mq, a0);
    case 3:
      return isVisibleInExplain(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Collation implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Collation.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdCollation provider0;
  public GeneratedMetadataHandler_Collation(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdCollation provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF;
  }
  public com.google.common.collect.ImmutableList collations(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.ImmutableList) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.ImmutableList x = collations_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.ImmutableList collations_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.collations((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.collations((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return collations(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 7:
    case 31:
      return provider0.collations((org.apache.calcite.rel.core.Calc) r, mq);
    case 10:
    case 25:
    case 34:
      return provider0.collations((org.apache.calcite.rel.core.Filter) r,
mq);
    case 14:
    case 26:
    case 38:
      return provider0.collations((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.collations((org.apache.calcite.rel.core.Sort) r, mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.collations((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 20:
    case 44:
      return provider0.collations((org.apache.calcite.rel.core.Values) r,
mq);
    case 21:
    case 45:
      return provider0.collations((org.apache.calcite.rel.core.Window) r,
mq);
    case 27:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableHashJoin)
r, mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NodeTypes implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NodeTypes.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdNodeTypes provider0;
  public GeneratedMetadataHandler_NodeTypes(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdNodeTypes provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$NodeTypes.DEF;
  }
  public com.google.common.collect.Multimap getNodeTypes(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NodeTypes.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.Multimap) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.Multimap x = getNodeTypes_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.Multimap getNodeTypes_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getNodeTypes((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getNodeTypes((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getNodeTypes(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 6:
    case 24:
    case 30:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Project)
r, mq);
    case 15:
    case 39:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getNodeTypes((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
    case 52:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Collation implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Collation.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdCollation provider0;
  public GeneratedMetadataHandler_Collation(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdCollation provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF;
  }
  public com.google.common.collect.ImmutableList collations(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.ImmutableList) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.ImmutableList x = collations_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.ImmutableList collations_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.collations((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.collations((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return collations(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 7:
    case 31:
      return provider0.collations((org.apache.calcite.rel.core.Calc) r, mq);
    case 10:
    case 25:
    case 34:
      return provider0.collations((org.apache.calcite.rel.core.Filter) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.collations((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.collations((org.apache.calcite.rel.core.Sort) r, mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.collations((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 20:
    case 44:
      return provider0.collations((org.apache.calcite.rel.core.Values) r,
mq);
    case 21:
    case 45:
      return provider0.collations((org.apache.calcite.rel.core.Window) r,
mq);
    case 27:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableHashJoin)
r, mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
    case 52:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
    case 53:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
    case 53:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Collation implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Collation.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdCollation provider0;
  public GeneratedMetadataHandler_Collation(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdCollation provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF;
  }
  public com.google.common.collect.ImmutableList collations(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.ImmutableList) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.ImmutableList x = collations_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.ImmutableList collations_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.collations((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.collations((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return collations(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 7:
    case 31:
      return provider0.collations((org.apache.calcite.rel.core.Calc) r, mq);
    case 10:
    case 25:
    case 34:
      return provider0.collations((org.apache.calcite.rel.core.Filter) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.collations((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.collations((org.apache.calcite.rel.core.Sort) r, mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.collations((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 20:
    case 44:
      return provider0.collations((org.apache.calcite.rel.core.Values) r,
mq);
    case 21:
    case 45:
      return provider0.collations((org.apache.calcite.rel.core.Window) r,
mq);
    case 27:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableHashJoin)
r, mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
    case 52:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
    case 53:
    case 54:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
    case 53:
    case 54:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Collation implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Collation.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdCollation provider0;
  public GeneratedMetadataHandler_Collation(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdCollation provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF;
  }
  public com.google.common.collect.ImmutableList collations(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Collation.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (com.google.common.collect.ImmutableList) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final com.google.common.collect.ImmutableList x = collations_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private com.google.common.collect.ImmutableList collations_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.collations((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.collations((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return collations(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 7:
    case 31:
      return provider0.collations((org.apache.calcite.rel.core.Calc) r, mq);
    case 10:
    case 25:
    case 34:
      return provider0.collations((org.apache.calcite.rel.core.Filter) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.collations((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.collations((org.apache.calcite.rel.core.Sort) r, mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.collations((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 20:
    case 44:
      return provider0.collations((org.apache.calcite.rel.core.Values) r,
mq);
    case 21:
    case 45:
      return provider0.collations((org.apache.calcite.rel.core.Window) r,
mq);
    case 27:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableHashJoin)
r, mq);
    case 54:
      return
provider0.collations((org.apache.calcite.adapter.enumerable.EnumerableMergeJoin)
r, mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_ExplainVisibility implements
org.apache.calcite.rel.metadata.BuiltInMetadata.ExplainVisibility.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdExplainVisibility
provider0;
  public GeneratedMetadataHandler_ExplainVisibility(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdExplainVisibility provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF;
  }
  public java.lang.Boolean isVisibleInExplain(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF,
r, org.apache.calcite.rel.metadata.NullSentinel.mask(a0));
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Boolean) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Boolean x = isVisibleInExplain_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Boolean isVisibleInExplain_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.isVisibleInExplain((org.apache.calcite.rel.RelNode)
r, mq, a0);
    case 3:
      return isVisibleInExplain(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_CumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.CumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_CumulativeCost(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getCumulativeCost((org.apache.calcite.rel.RelNode)
r, mq);
    case 3:
      return getCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_ExplainVisibility implements
org.apache.calcite.rel.metadata.BuiltInMetadata.ExplainVisibility.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdExplainVisibility
provider0;
  public GeneratedMetadataHandler_ExplainVisibility(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdExplainVisibility provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF;
  }
  public java.lang.Boolean isVisibleInExplain(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility.DEF,
r, org.apache.calcite.rel.metadata.NullSentinel.mask(a0));
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Boolean) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Boolean x = isVisibleInExplain_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Boolean isVisibleInExplain_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.sql.SqlExplainLevel a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.isVisibleInExplain((org.apache.calcite.rel.RelNode)
r, mq, a0);
    case 3:
      return isVisibleInExplain(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_RowCount implements
org.apache.calcite.rel.metadata.BuiltInMetadata.RowCount.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdRowCount provider0;
  public GeneratedMetadataHandler_RowCount(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdRowCount provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF;
  }
  public java.lang.Double getRowCount(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getRowCount_(r, mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getRowCount_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getRowCount((org.apache.calcite.rel.RelNode) r, mq);
    case 2:
      return
provider0.getRowCount((org.apache.calcite.plan.volcano.RelSubset) r, mq);
    case 3:
      return getRowCount(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case 4:
    case 5:
    case 9:
    case 17:
    case 21:
    case 22:
    case 23:
    case 29:
    case 33:
    case 41:
    case 45:
    case 46:
    case 47:
    case 52:
      return provider0.getRowCount((org.apache.calcite.rel.SingleRel) r,
mq);
    case 6:
    case 24:
    case 30:
      return provider0.getRowCount((org.apache.calcite.rel.core.Aggregate)
r, mq);
    case 7:
    case 31:
    case 55:
      return provider0.getRowCount((org.apache.calcite.rel.core.Calc) r,
mq);
    case 10:
    case 25:
    case 34:
      return provider0.getRowCount((org.apache.calcite.rel.core.Filter) r,
mq);
    case 11:
    case 35:
      return provider0.getRowCount((org.apache.calcite.rel.core.Intersect)
r, mq);
    case 12:
    case 27:
    case 36:
    case 53:
    case 54:
      return provider0.getRowCount((org.apache.calcite.rel.core.Join) r,
mq);
    case 13:
    case 37:
      return provider0.getRowCount((org.apache.calcite.rel.core.Minus) r,
mq);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getRowCount((org.apache.calcite.rel.core.Project) r,
mq);
    case 15:
    case 39:
      return provider0.getRowCount((org.apache.calcite.rel.core.Sort) r,
mq);
    case 18:
    case 28:
    case 42:
    case 50:
      return provider0.getRowCount((org.apache.calcite.rel.core.TableScan)
r, mq);
    case 19:
    case 43:
      return provider0.getRowCount((org.apache.calcite.rel.core.Union) r,
mq);
    case 20:
    case 44:
      return provider0.getRowCount((org.apache.calcite.rel.core.Values) r,
mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_Selectivity implements
org.apache.calcite.rel.metadata.BuiltInMetadata.Selectivity.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdSelectivity provider0;
  public GeneratedMetadataHandler_Selectivity(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdSelectivity provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF;
  }
  public java.lang.Double getSelectivity(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity.DEF,
r, a0 == null ? "" : a0.toString());
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (java.lang.Double) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final java.lang.Double x = getSelectivity_(r, mq, a0);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private java.lang.Double getSelectivity_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq,
      org.apache.calcite.rex.RexNode a0) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getSelectivity((org.apache.calcite.rel.RelNode) r,
mq, a0);
    case 3:
      return getSelectivity(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq, a0);
    case 6:
    case 24:
    case 30:
      return
provider0.getSelectivity((org.apache.calcite.rel.core.Aggregate) r, mq, a0);
    case 10:
    case 25:
    case 34:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Filter)
r, mq, a0);
    case 12:
    case 27:
    case 36:
    case 53:
    case 54:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Join) r,
mq, a0);
    case 14:
    case 26:
    case 38:
    case 51:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Project)
r, mq, a0);
    case 15:
    case 39:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Sort) r,
mq, a0);
    case 19:
    case 43:
      return provider0.getSelectivity((org.apache.calcite.rel.core.Union)
r, mq, a0);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_CumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.CumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_CumulativeCost(java.util.List relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return provider0.getCumulativeCost((org.apache.calcite.rel.RelNode)
r, mq);
    case 3:
      return getCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
public final class GeneratedMetadataHandler_NonCumulativeCost implements
org.apache.calcite.rel.metadata.BuiltInMetadata.NonCumulativeCost.Handler {
  private final java.util.List relClasses;
  public final org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0;
  public GeneratedMetadataHandler_NonCumulativeCost(java.util.List
relClasses,
      org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows
provider0) {
    this.relClasses = relClasses;
    this.provider0 = provider0;
  }
  public org.apache.calcite.rel.metadata.MetadataDef getDef() {
    return
org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF;
  }
  public org.apache.calcite.plan.RelOptCost getNonCumulativeCost(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    final java.util.List key =
org.apache.calcite.runtime.FlatLists.of(org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost.DEF,
r);
    final Object v = mq.map.get(key);
    if (v != null) {
      if (v == org.apache.calcite.rel.metadata.NullSentinel.ACTIVE) {
        throw
org.apache.calcite.rel.metadata.CyclicMetadataException.INSTANCE;
      }
      if (v == org.apache.calcite.rel.metadata.NullSentinel.INSTANCE) {
        return null;
      }
      return (org.apache.calcite.plan.RelOptCost) v;
    }
    mq.map.put(key,org.apache.calcite.rel.metadata.NullSentinel.ACTIVE);
    try {
      final org.apache.calcite.plan.RelOptCost x = getNonCumulativeCost_(r,
mq);
      mq.map.put(key, org.apache.calcite.rel.metadata.NullSentinel.mask(x));
      return x;
    } catch (java.lang.Exception e) {
      mq.map.remove(key);
      throw e;
    }
  }

  private org.apache.calcite.plan.RelOptCost getNonCumulativeCost_(
      org.apache.calcite.rel.RelNode r,
      org.apache.calcite.rel.metadata.RelMetadataQuery mq) {
    switch (relClasses.indexOf(r.getClass())) {
    default:
      return
provider0.getNonCumulativeCost((org.apache.calcite.rel.RelNode) r, mq);
    case 3:
      return
getNonCumulativeCost(((org.apache.calcite.plan.hep.HepRelVertex)
r).getCurrentRel(), mq);
    case -1:
      throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
    }
  }

}
EnumerableCalc(expr#0..3=[{inputs}], proj#0..2=[{exprs}])
  EnumerableHashJoin(condition=[=($0, $3)], joinType=[inner])
    JdbcToEnumerableConverter
      JdbcTableScan(table=[[perm, user_table]])
    JdbcToEnumerableConverter
      JdbcProject(id=[$0])
        JdbcTableScan(table=[[insight_user, user_tab]])


Process finished with exit code 0

Michael Mior <mm...@apache.org> 于2020年2月7日周五 上午3:51写道:

> If you set the system property calcite.debug, then the actual SQL sent
> to the database will be printed to the console inside [] when it is
> executed.
> --
> Michael Mior
> mm...@apache.org
>
> Le jeu. 6 févr. 2020 à 05:32, Yang Liu <whilg...@gmail.com> a écrit :
> >
> > Yang Liu <whilg...@gmail.com> 于2020年2月6日周四 下午5:59写道:
> >
> > > Hi there, recently I am studying Apache Calcite, by now I can use
> explain
> > > plan for via JDBC to view the logical plan, and I am wondering how can
> I
> > > view the physical sql in the plan execution? Since there may be bugs
> in the
> > > physical sql generation so I need to make sure the correctness.
> > >
> > >     val connection = DriverManager.getConnection("jdbc:calcite:")
> > >     val calciteConnection = connection.asInstanceOf[CalciteConnection]
> > >     val rootSchema = calciteConnection.getRootSchema()
> > >
> > >     val dsInsightUser =
> JdbcSchema.dataSource("jdbc:mysql://localhost:13306/insight?useSSL=false&serverTimezone=UTC",
> "com.mysql.jdbc.Driver", "insight_admin","xxxxxx")
> > >     val dsPerm =
> JdbcSchema.dataSource("jdbc:mysql://localhost:13307/permission?useSSL=false&serverTimezone=UTC",
> "com.mysql.jdbc.Driver", "perm_admin", "xxxxxx")
> > >
> > >     rootSchema.add("insight_user", JdbcSchema.create(rootSchema,
> "insight_user", dsInsightUser, null, null))
> > >     rootSchema.add("perm", JdbcSchema.create(rootSchema, "perm",
> dsPerm, null, null))
> > >
> > >     val stmt = connection.createStatement()
> > >     val rs = stmt.executeQuery("""explain plan for select
> "perm"."user_table".* from "perm"."user_table" join
> "insight_user"."user_tab" on
> "perm"."user_table"."id"="insight_user"."user_tab"."id" """)
> > >     val metaData = rs.getMetaData()
> > >
> > >     while(rs.next()) {
> > >       for(i <- 1 to metaData.getColumnCount) printf("%s ",
> rs.getObject(i))
> > >       println()
> > >     }
> > >
> > > result is
> > >
> > > EnumerableCalc(expr#0..3=[{inputs}], proj#0..2=[{exprs}])
> > >   EnumerableHashJoin(condition=[=($0, $3)], joinType=[inner])
> > >     JdbcToEnumerableConverter
> > >       JdbcTableScan(table=[[perm, user_table]])
> > >     JdbcToEnumerableConverter
> > >       JdbcProject(id=[$0])
> > >         JdbcTableScan(table=[[insight_user, user_tab]])
> > >
> > >
>

Reply via email to