private static float getPredicateNDV(LanguageObject object, PlanNode currentNode, float childCost, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { Collection<ElementSymbol> elements = ElementCollectorVisitor.getElements(object, true); Collection<GroupSymbol> groups = GroupsUsedByElementsVisitor.getGroups(elements); boolean multiGroup = groups.size() > 1; float ndv = getStat(Stat.NDV, elements, currentNode, childCost, metadata); if (ndv == UNKNOWN_VALUE) { boolean usesKey = usesKey(elements, metadata); if (multiGroup) { if (usesKey) { ndv = (float)Math.ceil(Math.sqrt(childCost)); } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/4); } } else if (usesKey) { ndv = childCost; } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/2); } ndv = Math.max(ndv, 1); } return ndv; }
private static float getPredicateNDV(LanguageObject object, PlanNode currentNode, float childCost, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { Collection<ElementSymbol> elements = ElementCollectorVisitor.getElements(object, true); Collection<GroupSymbol> groups = GroupsUsedByElementsVisitor.getGroups(elements); boolean multiGroup = groups.size() > 1; float ndv = getStat(Stat.NDV, elements, currentNode, childCost, metadata); if (ndv == UNKNOWN_VALUE) { boolean usesKey = usesKey(elements, metadata); if (multiGroup) { if (usesKey) { ndv = (float)Math.ceil(Math.sqrt(childCost)); } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/4); } } else if (usesKey) { ndv = childCost; } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/2); } ndv = Math.max(ndv, 1); } return ndv; }
private static float getPredicateNDV(LanguageObject object, PlanNode currentNode, float childCost, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { Collection<ElementSymbol> elements = ElementCollectorVisitor.getElements(object, true); Collection<GroupSymbol> groups = GroupsUsedByElementsVisitor.getGroups(elements); boolean multiGroup = groups.size() > 1; float ndv = getStat(Stat.NDV, elements, currentNode, childCost, metadata); if (ndv == UNKNOWN_VALUE) { boolean usesKey = usesKey(elements, metadata); if (multiGroup) { if (usesKey) { ndv = (float)Math.ceil(Math.sqrt(childCost)); } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/4); } } else if (usesKey) { ndv = childCost; } else { ndv = (float)Math.ceil(Math.sqrt(childCost)/2); } ndv = Math.max(ndv, 1); } return ndv; }
return cardinality; float ndv = getStat(Stat.NDV, elems, indNode, cardinality, metadata); float ndv_high = getStat(Stat.NDV_HIGH, elems, indNode, cardinality, metadata); if (ndv_high != UNKNOWN_VALUE) { if (useCardinalityIfUnknown == null) { PlanNode source = FrameUtil.findOriginatingNode(indNode, groups); if (source != null) { ndv = getStat(Stat.NDV, elems, source, source.getCardinality(), metadata); if (ndv == UNKNOWN_VALUE) { if (useCardinalityIfUnknown != null || source.getChildCount() == 0) {
return cardinality; float ndv = getStat(Stat.NDV, elems, indNode, cardinality, metadata); float ndv_high = getStat(Stat.NDV_HIGH, elems, indNode, cardinality, metadata); if (ndv_high != UNKNOWN_VALUE) { if (useCardinalityIfUnknown == null) { PlanNode source = FrameUtil.findOriginatingNode(indNode, groups); if (source != null) { ndv = getStat(Stat.NDV, elems, source, source.getCardinality(), metadata); if (ndv == UNKNOWN_VALUE) { if (useCardinalityIfUnknown != null || source.getChildCount() == 0) {
return cardinality; float ndv = getStat(Stat.NDV, elems, indNode, cardinality, metadata); float ndv_high = getStat(Stat.NDV_HIGH, elems, indNode, cardinality, metadata); if (ndv_high != UNKNOWN_VALUE) { if (useCardinalityIfUnknown == null) { PlanNode source = FrameUtil.findOriginatingNode(indNode, groups); if (source != null) { ndv = getStat(Stat.NDV, elems, source, source.getCardinality(), metadata); if (ndv == UNKNOWN_VALUE) { if (useCardinalityIfUnknown != null || source.getChildCount() == 0) {
if (indOrigNode != null) { indCardinalityOrig = computeCostForTree(indOrigNode, metadata); indSymbolOrigNDV = getStat(Stat.NDV, indElements, indOrigNode, indCardinalityOrig, metadata); if (indSymbolOrigNDV == UNKNOWN_VALUE) { indSymbolOrigNDV = indCardinalityOrig * indSymbolNDV / independentCardinality;
if (indOrigNode != null) { indCardinalityOrig = computeCostForTree(indOrigNode, metadata); indSymbolOrigNDV = getStat(Stat.NDV, indElements, indOrigNode, indCardinalityOrig, metadata); if (indSymbolOrigNDV == UNKNOWN_VALUE) { indSymbolOrigNDV = indCardinalityOrig * indSymbolNDV / independentCardinality;
if (indOrigNode != null) { indCardinalityOrig = computeCostForTree(indOrigNode, metadata); indSymbolOrigNDV = getStat(Stat.NDV, indElements, indOrigNode, indCardinalityOrig, metadata); if (indSymbolOrigNDV == UNKNOWN_VALUE) { indSymbolOrigNDV = indCardinalityOrig * indSymbolNDV / independentCardinality;
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);
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 {
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 {
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 {
float nnv = getStat(Stat.NNV, elements, currentNode, childCost, metadata); if (nnv == UNKNOWN_VALUE) { if (childCost == UNKNOWN_VALUE) {
float nnv = getStat(Stat.NNV, elements, currentNode, childCost, metadata); if (nnv == UNKNOWN_VALUE) { if (childCost == UNKNOWN_VALUE) {
float nnv = getStat(Stat.NNV, elements, currentNode, childCost, metadata); if (nnv == UNKNOWN_VALUE) { if (childCost == UNKNOWN_VALUE) {