Function function = (Function)rawExpr; if (function.getArgs().length == 0 && function.getFunctionDescriptor().getDeterministic() != Determinism.NONDETERMINISTIC) { newStats[Stat.NDV.ordinal()] = 1; newStats[Stat.NDV_HIGH.ordinal()] = 1; newStats[Stat.NNV.ordinal()] = 0; newStats[Stat.NDV.ordinal()] = 1; newStats[Stat.NDV_HIGH.ordinal()] = 1; newStats[Stat.NNV.ordinal()] = 0; if (rawExpr instanceof Constant) { if (((Constant)rawExpr).getValue() == null) { newStats[Stat.NDV.ordinal()] = 0; newStats[Stat.NDV_HIGH.ordinal()] = 0; newStats[Stat.NNV.ordinal()] = 1; newStats[Stat.NDV.ordinal()] = cardinality; newStats[Stat.NDV_HIGH.ordinal()] = cardinality; newStats[Stat.NNV.ordinal()] = 0; } else if (setOp != null) { newStats[Stat.NDV.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV.ordinal()], statsOther[Stat.NDV.ordinal()], true)); newStats[Stat.NDV_HIGH.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV_HIGH.ordinal()], statsOther[Stat.NDV_HIGH.ordinal()], true)); newStats[Stat.NNV.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NNV.ordinal()], statsOther[Stat.NNV.ordinal()], !node.hasBooleanProperty(NodeConstants.Info.USE_ALL))); } else { Collection<Expression> elems = new HashSet<Expression>(); ElementCollectorVisitor.getElements(expr, elems); newStats[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, childCardinality, metadata); newStats[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, childCardinality, metadata);
Function function = (Function)rawExpr; if (function.getArgs().length == 0 && function.getFunctionDescriptor().getDeterministic() != Determinism.NONDETERMINISTIC) { newStats[Stat.NDV.ordinal()] = 1; newStats[Stat.NDV_HIGH.ordinal()] = 1; newStats[Stat.NNV.ordinal()] = 0; newStats[Stat.NDV.ordinal()] = 1; newStats[Stat.NDV_HIGH.ordinal()] = 1; newStats[Stat.NNV.ordinal()] = 0; if (rawExpr instanceof Constant) { if (((Constant)rawExpr).getValue() == null) { newStats[Stat.NDV.ordinal()] = 0; newStats[Stat.NDV_HIGH.ordinal()] = 0; newStats[Stat.NNV.ordinal()] = 1; newStats[Stat.NDV.ordinal()] = cardinality; newStats[Stat.NDV_HIGH.ordinal()] = cardinality; newStats[Stat.NNV.ordinal()] = 0; } else if (setOp != null) { newStats[Stat.NDV.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV.ordinal()], statsOther[Stat.NDV.ordinal()], true)); newStats[Stat.NDV_HIGH.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV_HIGH.ordinal()], statsOther[Stat.NDV_HIGH.ordinal()], true)); newStats[Stat.NNV.ordinal()] = Math.min(cardinality==UNKNOWN_VALUE?Float.MAX_VALUE:cardinality, getCombinedSetEstimate(setOp, stats[Stat.NNV.ordinal()], statsOther[Stat.NNV.ordinal()], !node.hasBooleanProperty(NodeConstants.Info.USE_ALL))); } else { Collection<Expression> elems = new HashSet<Expression>(); ElementCollectorVisitor.getElements(expr, elems); newStats[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, childCardinality, metadata); newStats[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, childCardinality, metadata);
newStats[Stat.NDV.ordinal()] = cardinality; newStats[Stat.NDV_HIGH.ordinal()] = cardinality; newStats[Stat.NNV.ordinal()] = 0; } else if (setOp != null) { newStats[Stat.NDV.ordinal()] = Math.min(cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV.ordinal()], statsOther[Stat.NDV.ordinal()], true)); newStats[Stat.NDV_HIGH.ordinal()] = Math.min(cardinality, getCombinedSetEstimate(setOp, stats[Stat.NDV_HIGH.ordinal()], statsOther[Stat.NDV_HIGH.ordinal()], true)); newStats[Stat.NNV.ordinal()] = Math.min(cardinality, getCombinedSetEstimate(setOp, stats[Stat.NNV.ordinal()], statsOther[Stat.NNV.ordinal()], !node.hasBooleanProperty(NodeConstants.Info.USE_ALL))); } else { Collection<Expression> elems = new HashSet<Expression>(); ElementCollectorVisitor.getElements(expr, elems); newStats[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, childCardinality, metadata); newStats[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, childCardinality, metadata); newStats[Stat.NNV.ordinal()] = getStat(Stat.NNV, elems, node, childCardinality, metadata); } else { newStats[Stat.NDV.ordinal()] = cardinality / 3; newStats[Stat.NDV_HIGH.ordinal()] = cardinality / 3; } else { newStats[Stat.NDV.ordinal()] = cardinality; newStats[Stat.NDV_HIGH.ordinal()] = cardinality; newStats[Stat.NNV.ordinal()] = UNKNOWN_VALUE; newStats[Stat.NDV.ordinal()] = Math.min(cardinality, stats[Stat.NDV.ordinal()]); newStats[Stat.NDV_HIGH.ordinal()] = Math.min(cardinality, stats[Stat.NDV_HIGH.ordinal()]); } else if (stats[Stat.NDV.ordinal()] != UNKNOWN_VALUE) { if (stats[Stat.NDV.ordinal()] == stats[Stat.NDV_HIGH.ordinal()]) {
Collection<ElementSymbol> elems =ElementCollectorVisitor.getElements(ex, true); value = new float[3]; value[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, cost, metadata); value[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, cost, metadata); value[Stat.NNV.ordinal()] = getStat(Stat.NNV, elems, node, cost, metadata);
Collection<ElementSymbol> elems =ElementCollectorVisitor.getElements(ex, true); value = new float[3]; value[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, cost, metadata); value[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, cost, metadata); value[Stat.NNV.ordinal()] = getStat(Stat.NNV, elems, node, cost, metadata);
Collection<ElementSymbol> elems =ElementCollectorVisitor.getElements(ex, true); value = new float[3]; value[Stat.NDV.ordinal()] = getStat(Stat.NDV, elems, node, cost, metadata); value[Stat.NDV_HIGH.ordinal()] = getStat(Stat.NDV_HIGH, elems, node, cost, metadata); value[Stat.NNV.ordinal()] = getStat(Stat.NNV, elems, node, cost, metadata);
float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; switch (compCrit.getOperator()) { case CompareCriteria.EQ: val[Stat.NDV.ordinal()] = 1; val[Stat.NDV_HIGH.ordinal()] = 1; break; float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; val[Stat.NDV.ordinal()] = (val[Stat.NDV.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV.ordinal()])); val[Stat.NDV_HIGH.ordinal()] = (val[Stat.NDV_HIGH.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV_HIGH.ordinal()])); float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NDV.ordinal()] = 0; val[Stat.NDV_HIGH.ordinal()] = 0;
float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; switch (compCrit.getOperator()) { case CompareCriteria.EQ: val[Stat.NDV.ordinal()] = 1; val[Stat.NDV_HIGH.ordinal()] = 1; break; float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; val[Stat.NDV.ordinal()] = (val[Stat.NDV.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV.ordinal()])); val[Stat.NDV_HIGH.ordinal()] = (val[Stat.NDV_HIGH.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV_HIGH.ordinal()])); float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NDV.ordinal()] = 0; val[Stat.NDV_HIGH.ordinal()] = 0;
float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; switch (compCrit.getOperator()) { case CompareCriteria.EQ: val[Stat.NDV.ordinal()] = 1; val[Stat.NDV_HIGH.ordinal()] = 1; break; float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NNV.ordinal()] = 0; val[Stat.NDV.ordinal()] = (val[Stat.NDV.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV.ordinal()])); val[Stat.NDV_HIGH.ordinal()] = (val[Stat.NDV_HIGH.ordinal()] == UNKNOWN_VALUE?setCriteria.getNumberOfValues():Math.min(setCriteria.getNumberOfValues(), val[Stat.NDV_HIGH.ordinal()])); float[] val = stats.get(elements.iterator().next()); if (val != null) { val[Stat.NDV.ordinal()] = 0; val[Stat.NDV_HIGH.ordinal()] = 0;