public DrillJdbcConvention(SqlDialect dialect, String name) { super(dialect, ConstantUntypedNull.INSTANCE, name); // build rules for this convention. ImmutableSet.Builder<RelOptRule> builder = ImmutableSet.builder(); builder.add(JDBC_PRULE_INSTANCE); builder.add(new JdbcDrelConverterRule(this)); builder.add(new DrillJdbcProjectRule(this)); builder.add(new DrillJdbcFilterRule(this)); outside: for (RelOptRule rule : JdbcRules.rules(this)) { final String description = rule.toString(); // we want to black list some rules but the parent Calcite package is all or none. // Therefore, we remove rules with names we don't like. for(String black : RULES_TO_AVOID){ if(description.equals(black)){ continue outside; } } builder.add(rule); } builder.add(RuleInstance.FILTER_SET_OP_TRANSPOSE_RULE); builder.add(RuleInstance.PROJECT_REMOVE_RULE); rules = builder.build(); }
/** * Removes the mapping between a rule and its description. * * @param rule Rule */ protected void unmapRuleDescription(RelOptRule rule) { String description = rule.toString(); mapDescToRule.remove(description); }
/** * Removes the mapping between a rule and its description. * * @param rule Rule */ protected void unmapRuleDescription(RelOptRule rule) { String description = rule.toString(); mapDescToRule.remove(description); }
/** * Determines whether a given rule is excluded by ruleDescExclusionFilter. * * @param rule rule to test * @return true iff rule should be excluded */ public boolean isRuleExcluded(RelOptRule rule) { return ruleDescExclusionFilter != null && ruleDescExclusionFilter.matcher(rule.toString()).matches(); }
/** * Determines whether a given rule is excluded by ruleDescExclusionFilter. * * @param rule rule to test * @return true iff rule should be excluded */ public boolean isRuleExcluded(RelOptRule rule) { return ruleDescExclusionFilter != null && ruleDescExclusionFilter.matcher(rule.toString()).matches(); }
/** * Registers a rule's description. * * @param rule Rule */ protected void mapRuleDescription(RelOptRule rule) { // Check that there isn't a rule with the same description, // also validating description string. final String description = rule.toString(); assert description != null; assert !description.contains("$") : "Rule's description should not contain '$': " + description; assert !INTEGER_PATTERN.matcher(description).matches() : "Rule's description should not be an integer: " + rule.getClass().getName() + ", " + description; RelOptRule existingRule = mapDescToRule.put(description, rule); if (existingRule != null) { if (existingRule == rule) { throw new AssertionError( "Rule should not already be registered"); } else { // This rule has the same description as one previously // registered, yet it is not equal. You may need to fix the // rule's equals and hashCode methods. throw new AssertionError("Rule's description should be unique; " + "existing rule=" + existingRule + "; new rule=" + rule); } } }
/** * Registers a rule's description. * * @param rule Rule */ protected void mapRuleDescription(RelOptRule rule) { // Check that there isn't a rule with the same description, // also validating description string. final String description = rule.toString(); assert description != null; assert !description.contains("$") : "Rule's description should not contain '$': " + description; assert !INTEGER_PATTERN.matcher(description).matches() : "Rule's description should not be an integer: " + rule.getClass().getName() + ", " + description; RelOptRule existingRule = mapDescToRule.put(description, rule); if (existingRule != null) { if (existingRule == rule) { throw new AssertionError( "Rule should not already be registered"); } else { // This rule has the same description as one previously // registered, yet it is not equal. You may need to fix the // rule's equals and hashCode methods. throw new AssertionError("Rule's description should be unique; " + "existing rule=" + existingRule + "; new rule=" + rule); } } }
assert added; final String ruleName = rule.toString(); if (ruleNames.put(ruleName, rule.getClass())) { Set<Class> x = ruleNames.get(ruleName);
assert added; final String ruleName = rule.toString(); if (ruleNames.put(ruleName, rule.getClass())) { Set<Class> x = ruleNames.get(ruleName);