for(RexNode pred : RelOptUtil.conjunctions(condition)) { if (first) { sb.append(convertRexToString(pred, rowType)); first = false; } else { sb.append(" " + SqlKind.AND.toString() + " "); sb.append(convertRexToString(pred, rowType)); for(RexNode pred : RelOptUtil.disjunctions(condition)) { if (first) { sb.append(convertRexToString(pred, rowType)); first = false; } else { sb.append(" " + SqlKind.OR.toString() + " "); sb.append(convertRexToString(pred, rowType));
return fullTableScanPayload.getRowCount(); } else if (condition != null) { conditionAsStr = convertRexToString(condition, scanRel.getRowType()); payloadMap = statsCache.get(conditionAsStr); if (payloadMap != null) {
return fullTableScanPayload.getLeadingRowCount(); } else if (condition != null) { conditionAsStr = convertRexToString(condition, scanRel.getRowType()); payloadMap = statsCache.get(conditionAsStr); if (payloadMap != null) {
public boolean initialize(RexNode condition, DrillScanRelBase scanRel, IndexCallContext context) { GroupScan scan = IndexPlanUtils.getGroupScan(scanRel); PlannerSettings settings = PrelUtil.getPlannerSettings(scanRel.getCluster().getPlanner()); rowKeyJoinBackIOFactor = settings.getIndexRowKeyJoinCostFactor(); if (scan instanceof DbGroupScan) { String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (statsCache.get(conditionAsStr) == null) { IndexCollection indexes = ((DbGroupScan)scan).getSecondaryIndexCollection(scanRel); populateStats(condition, indexes, scanRel, context); logger.info("index_plan_info: initialize: scanRel #{} and groupScan {} got fulltable {}, statsCache: {}, fiStatsCache: {}", scanRel.getId(), System.identityHashCode(scan), fullTableScanPayload, statsCache, fIStatsCache); return true; } } return false; }
private boolean addBaseConditions(RexNode condition, StatisticsPayload payload, boolean redundant, Map<String, Double> baseConditionMap, RelDataType rowType) { boolean res = redundant; if (condition.getKind() == SqlKind.AND) { for(RexNode pred : RelOptUtil.conjunctions(condition)) { res = addBaseConditions(pred, payload, res, baseConditionMap, rowType); } } else if (condition.getKind() == SqlKind.OR) { for(RexNode pred : RelOptUtil.disjunctions(condition)) { res = addBaseConditions(pred, payload, res, baseConditionMap, rowType); } } else { // base condition String conditionAsStr = convertRexToString(condition, rowType); if (!redundant) { baseConditionMap.put(conditionAsStr, payload.getRowCount()); return true; } else { baseConditionMap.put(conditionAsStr, -1.0); return false; } } return res; } /*
RexBuilder builder = scanRel.getCluster().getRexBuilder(); PlannerSettings settings = PrelUtil.getSettings(scanRel.getCluster()); String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (statsCache.get(conditionAsStr) == null && payload.getRowCount() != Statistics.ROWCOUNT_UNKNOWN) {
return new Pair<>(1.0, true); String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (condition.getKind() == SqlKind.AND) { selectivity = 1.0;
for(RexNode pred : RelOptUtil.conjunctions(condition)) { if (first) { sb.append(convertRexToString(pred, rowType)); first = false; } else { sb.append(" " + SqlKind.AND.toString() + " "); sb.append(convertRexToString(pred, rowType)); for(RexNode pred : RelOptUtil.disjunctions(condition)) { if (first) { sb.append(convertRexToString(pred, rowType)); first = false; } else { sb.append(" " + SqlKind.OR.toString() + " "); sb.append(convertRexToString(pred, rowType));
return fullTableScanPayload.getRowCount(); } else if (condition != null) { conditionAsStr = convertRexToString(condition, scanRel.getRowType()); payloadMap = statsCache.get(conditionAsStr); if (payloadMap != null) {
return fullTableScanPayload.getLeadingRowCount(); } else if (condition != null) { conditionAsStr = convertRexToString(condition, scanRel.getRowType()); payloadMap = statsCache.get(conditionAsStr); if (payloadMap != null) {
public boolean initialize(RexNode condition, DrillScanRelBase scanRel, IndexCallContext context) { GroupScan scan = IndexPlanUtils.getGroupScan(scanRel); PlannerSettings settings = PrelUtil.getPlannerSettings(scanRel.getCluster().getPlanner()); rowKeyJoinBackIOFactor = settings.getIndexRowKeyJoinCostFactor(); if (scan instanceof DbGroupScan) { String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (statsCache.get(conditionAsStr) == null) { IndexCollection indexes = ((DbGroupScan)scan).getSecondaryIndexCollection(scanRel); populateStats(condition, indexes, scanRel, context); logger.info("index_plan_info: initialize: scanRel #{} and groupScan {} got fulltable {}, statsCache: {}, fiStatsCache: {}", scanRel.getId(), System.identityHashCode(scan), fullTableScanPayload, statsCache, fIStatsCache); return true; } } return false; }
RexBuilder builder = scanRel.getCluster().getRexBuilder(); PlannerSettings settings = PrelUtil.getSettings(scanRel.getCluster()); String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (statsCache.get(conditionAsStr) == null && payload.getRowCount() != Statistics.ROWCOUNT_UNKNOWN) {
private boolean addBaseConditions(RexNode condition, StatisticsPayload payload, boolean redundant, Map<String, Double> baseConditionMap, RelDataType rowType) { boolean res = redundant; if (condition.getKind() == SqlKind.AND) { for(RexNode pred : RelOptUtil.conjunctions(condition)) { res = addBaseConditions(pred, payload, res, baseConditionMap, rowType); } } else if (condition.getKind() == SqlKind.OR) { for(RexNode pred : RelOptUtil.disjunctions(condition)) { res = addBaseConditions(pred, payload, res, baseConditionMap, rowType); } } else { // base condition String conditionAsStr = convertRexToString(condition, rowType); if (!redundant) { baseConditionMap.put(conditionAsStr, payload.getRowCount()); return true; } else { baseConditionMap.put(conditionAsStr, -1.0); return false; } } return res; } /*
return new Pair<>(1.0, true); String conditionAsStr = convertRexToString(condition, scanRel.getRowType()); if (condition.getKind() == SqlKind.AND) { selectivity = 1.0;