[
https://issues.apache.org/jira/browse/CALCITE-1164?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15209510#comment-15209510
]
Vladimir Sitnikov edited comment on CALCITE-1164 at 3/24/16 12:47 AM:
----------------------------------------------------------------------
{code:java}
@Test
public void testWithInsideWhereExists() throws SQLException {
Connection con = CalciteAssert.hr()
.connect();
PreparedStatement ps =
con.prepareStatement("select * from \"hr\".\"depts\" where 'a' = ?");
ps.setObject(1, "a");
ps.execute();
}
{code}
{noformat}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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 -1:
throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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:
case 48:
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:
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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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:
case 51:
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 48:
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:
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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
{noformat}
{noformat}
java.lang.RuntimeException: exception while executing [with emp2 as (select *
from "hr"."emps")
select * from emp2
where 'a'=1]
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1215)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1194)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1158)
at org.apache.calcite.test.JdbcTest.testWithOrderBy2(JdbcTest.java:3401)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.RuntimeException: With materializationsEnabled=false,
limit=0
at
org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:504)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1211)
... 30 more
Caused by: java.sql.SQLException: Error while executing SQL "with emp2 as
(select * from "hr"."emps")
select * from emp2
where 'a'=1": while resolving method 'eq[class java.lang.String, int]' in class
class org.apache.calcite.runtime.SqlFunctions
at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
at
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:143)
at
org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:186)
at
org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:472)
... 31 more
Caused by: java.lang.RuntimeException: while resolving method 'eq[class
java.lang.String, int]' in class class org.apache.calcite.runtime.SqlFunctions
at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:346)
at org.apache.calcite.linq4j.tree.Expressions.call(Expressions.java:442)
at
org.apache.calcite.adapter.enumerable.RexImpTable$BinaryImplementor.implement(RexImpTable.java:1276)
at
org.apache.calcite.adapter.enumerable.RexImpTable$HarmonizingBinaryImplementor.implement(RexImpTable.java:1301)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCall(RexToLixTranslator.java:443)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate0(RexToLixTranslator.java:416)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:176)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:172)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCondition(RexToLixTranslator.java:610)
at
org.apache.calcite.adapter.enumerable.EnumerableCalc.implement(EnumerableCalc.java:163)
at
org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:102)
at
org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92)
at
org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1172)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:294)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:193)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:720)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:587)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:557)
at
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214)
at
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:573)
at
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:572)
at
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:136)
... 33 more
...
{noformat}
{noformat}
Caused by: java.lang.NoSuchMethodException:
org.apache.calcite.runtime.SqlFunctions.eq(java.lang.String, int)
at java.lang.Class.getMethod(Class.java:1786)
at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:337)
... 54 more
Process finished with exit code 255
{noformat}
was (Author: vladimirsitnikov):
{code:java}
@Test
public void testWithInsideWhereExists() throws SQLException {
Connection con = CalciteAssert.hr()
.connect();
PreparedStatement ps =
con.prepareStatement("select * from \"hr\".\"depts\" where 'a' = ?");
ps.setObject(1, "a");
ps.execute();
}
{code}
{noformat}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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 -1:
throw new
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler(r.getClass());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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:
case 48:
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:
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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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:
case 51:
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 48:
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:
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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
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;
}
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, x);
return x;
} catch
(org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$NoHandler 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());
}
}
java.lang.RuntimeException: exception while executing [with emp2 as (select *
from "hr"."emps")
select * from emp2
where 'a'=1]
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1215)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1194)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1158)
at org.apache.calcite.test.JdbcTest.testWithOrderBy2(JdbcTest.java:3401)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.RuntimeException: With materializationsEnabled=false,
limit=0
at
org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:504)
at
org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1211)
... 30 more
Caused by: java.sql.SQLException: Error while executing SQL "with emp2 as
(select * from "hr"."emps")
select * from emp2
where 'a'=1": while resolving method 'eq[class java.lang.String, int]' in class
class org.apache.calcite.runtime.SqlFunctions
at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
at
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:143)
at
org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:186)
at
org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:472)
... 31 more
Caused by: java.lang.RuntimeException: while resolving method 'eq[class
java.lang.String, int]' in class class org.apache.calcite.runtime.SqlFunctions
at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:346)
at org.apache.calcite.linq4j.tree.Expressions.call(Expressions.java:442)
at
org.apache.calcite.adapter.enumerable.RexImpTable$BinaryImplementor.implement(RexImpTable.java:1276)
at
org.apache.calcite.adapter.enumerable.RexImpTable$HarmonizingBinaryImplementor.implement(RexImpTable.java:1301)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCall(RexToLixTranslator.java:443)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate0(RexToLixTranslator.java:416)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:176)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:172)
at
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCondition(RexToLixTranslator.java:610)
at
org.apache.calcite.adapter.enumerable.EnumerableCalc.implement(EnumerableCalc.java:163)
at
org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:102)
at
org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92)
at
org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1172)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:294)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:193)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:720)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:587)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:557)
at
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214)
at
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:573)
at
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:572)
at
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:136)
... 33 more
Caused by: java.lang.NoSuchMethodException:
org.apache.calcite.runtime.SqlFunctions.eq(java.lang.String, int)
at java.lang.Class.getMethod(Class.java:1786)
at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:337)
... 54 more
Process finished with exit code 255
{noformat}
> Use setObject(int, Object, int) when binding parameters
> -------------------------------------------------------
>
> Key: CALCITE-1164
> URL: https://issues.apache.org/jira/browse/CALCITE-1164
> Project: Calcite
> Issue Type: Improvement
> Components: avatica
> Reporter: Josh Elser
> Priority: Minor
> Fix For: 1.8.0
>
>
> Trying to capture some discussion from a recent pull request:
> https://github.com/apache/calcite/pull/209#issuecomment-195025402
> In a few places (such as
> https://github.com/apache/calcite/blob/master/avatica/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java#L795-L800),
> we perform:
> {code}
> TypedValue o = parameterValues.get(i);
> preparedStatement.setObject(i + 1, o.toJdbc(calendar));
> {code}
> Vladimir stated that this is ambiguous (stored procedures differing by
> argument list and differentiating between the actual type when the value is
> null) and would be remedied by passing along the desired type when setting
> the object.
> We may also have to invoke setNull explicitly? This is unclear to me.
> h5. Reasons why "explicit sql type" is important
> h6. Calling the proper function
> Consider database has two functions that differ in type of argument only.
> For instance {{compute(varchar)}}, {{compute(numeric)}}, and
> {{compute(user_defined_struct)}}
> Which one should be executed if calling with just
> {{preparedStatement.setObject(i, null)}}?
> There is not enough information for the database to choose between varchar
> and numeric function.
> h6. Performance
> Execution plan depends on the types of bind parameters. For instance, in
> PostgreSQL, you must tell all the datatypes of the bind variables right in
> {{PREPARE}} message.
> That basically means, if you flip between datatypes, you have to use
> different prepared statement IDs.
> If just {{String val = ...; ps.setObject(1, val)}} is used, then for non-null
> it can result in {{String}} execution plan, while for null it can flip to
> unknown.
> Same for batched statement execution. PostgreSQL just cannot handle datatype
> flips right in the middle of the batch. It is handled in the pgjdbc driver,
> so it cuts batch in several sub batches, so it becomes less efficient.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)