veritas-optimizer 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +33 -0
- data/LICENSE +20 -0
- data/README.rdoc +27 -0
- data/Rakefile +25 -0
- data/TODO +75 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/roodi.yml +16 -0
- data/config/site.reek +91 -0
- data/config/yardstick.yml +2 -0
- data/lib/veritas/optimizer/algebra/difference.rb +66 -0
- data/lib/veritas/optimizer/algebra/extension.rb +42 -0
- data/lib/veritas/optimizer/algebra/intersection.rb +66 -0
- data/lib/veritas/optimizer/algebra/join.rb +44 -0
- data/lib/veritas/optimizer/algebra/product.rb +70 -0
- data/lib/veritas/optimizer/algebra/projection.rb +174 -0
- data/lib/veritas/optimizer/algebra/rename.rb +396 -0
- data/lib/veritas/optimizer/algebra/restriction.rb +259 -0
- data/lib/veritas/optimizer/algebra/summarization.rb +42 -0
- data/lib/veritas/optimizer/algebra/union.rb +66 -0
- data/lib/veritas/optimizer/logic/connective/binary.rb +254 -0
- data/lib/veritas/optimizer/logic/connective/conjunction.rb +122 -0
- data/lib/veritas/optimizer/logic/connective/disjunction.rb +122 -0
- data/lib/veritas/optimizer/logic/connective/negation.rb +71 -0
- data/lib/veritas/optimizer/logic/predicate/comparable.rb +134 -0
- data/lib/veritas/optimizer/logic/predicate/enumerable.rb +141 -0
- data/lib/veritas/optimizer/logic/predicate/equality.rb +44 -0
- data/lib/veritas/optimizer/logic/predicate/exclusion.rb +53 -0
- data/lib/veritas/optimizer/logic/predicate/greater_than.rb +54 -0
- data/lib/veritas/optimizer/logic/predicate/greater_than_or_equal_to.rb +56 -0
- data/lib/veritas/optimizer/logic/predicate/inclusion.rb +53 -0
- data/lib/veritas/optimizer/logic/predicate/inequality.rb +44 -0
- data/lib/veritas/optimizer/logic/predicate/less_than.rb +54 -0
- data/lib/veritas/optimizer/logic/predicate/less_than_or_equal_to.rb +56 -0
- data/lib/veritas/optimizer/logic/predicate/match.rb +19 -0
- data/lib/veritas/optimizer/logic/predicate/no_match.rb +19 -0
- data/lib/veritas/optimizer/logic/predicate.rb +177 -0
- data/lib/veritas/optimizer/optimizable.rb +59 -0
- data/lib/veritas/optimizer/relation/materialized.rb +40 -0
- data/lib/veritas/optimizer/relation/operation/binary.rb +168 -0
- data/lib/veritas/optimizer/relation/operation/combination.rb +33 -0
- data/lib/veritas/optimizer/relation/operation/limit.rb +149 -0
- data/lib/veritas/optimizer/relation/operation/offset.rb +114 -0
- data/lib/veritas/optimizer/relation/operation/order.rb +96 -0
- data/lib/veritas/optimizer/relation/operation/reverse.rb +94 -0
- data/lib/veritas/optimizer/relation/operation/unary.rb +88 -0
- data/lib/veritas/optimizer/version.rb +7 -0
- data/lib/veritas/optimizer.rb +136 -0
- data/lib/veritas-optimizer.rb +3 -0
- data/spec/integration/veritas/algebra/difference/optimize_spec.rb +152 -0
- data/spec/integration/veritas/algebra/intersection/optimize_spec.rb +152 -0
- data/spec/integration/veritas/algebra/join/optimize_spec.rb +110 -0
- data/spec/integration/veritas/algebra/product/optimize_spec.rb +176 -0
- data/spec/integration/veritas/algebra/projection/optimize_spec.rb +237 -0
- data/spec/integration/veritas/algebra/rename/optimize_spec.rb +440 -0
- data/spec/integration/veritas/algebra/restriction/optimize_spec.rb +216 -0
- data/spec/integration/veritas/algebra/union/optimize_spec.rb +192 -0
- data/spec/integration/veritas/logic/connective/conjunction/optimize_spec.rb +234 -0
- data/spec/integration/veritas/logic/connective/disjunction/optimize_spec.rb +235 -0
- data/spec/integration/veritas/logic/connective/negation/optimize_spec.rb +41 -0
- data/spec/integration/veritas/logic/expression/optimize_spec.rb +42 -0
- data/spec/integration/veritas/logic/predicate/equality/optimize_spec.rb +90 -0
- data/spec/integration/veritas/logic/predicate/exclusion/optimize_spec.rb +131 -0
- data/spec/integration/veritas/logic/predicate/greater_than/optimize_spec.rb +100 -0
- data/spec/integration/veritas/logic/predicate/greater_than_or_equal_to/optimize_spec.rb +100 -0
- data/spec/integration/veritas/logic/predicate/inclusion/optimize_spec.rb +131 -0
- data/spec/integration/veritas/logic/predicate/inequality/optimize_spec.rb +90 -0
- data/spec/integration/veritas/logic/predicate/less_than/optimize_spec.rb +100 -0
- data/spec/integration/veritas/logic/predicate/less_than_or_equal_to/optimize_spec.rb +100 -0
- data/spec/integration/veritas/relation/empty/optimize_spec.rb +11 -0
- data/spec/integration/veritas/relation/materialized/optimize_spec.rb +37 -0
- data/spec/integration/veritas/relation/operation/limit/optimize_spec.rb +140 -0
- data/spec/integration/veritas/relation/operation/offset/optimize_spec.rb +98 -0
- data/spec/integration/veritas/relation/operation/order/optimize_spec.rb +103 -0
- data/spec/integration/veritas/relation/operation/reverse/optimize_spec.rb +113 -0
- data/spec/integration/veritas/relation/optimize_spec.rb +33 -0
- data/spec/rcov.opts +6 -0
- data/spec/shared/idempotent_method_behavior.rb +5 -0
- data/spec/shared/logic_connective_binary_optimize_behavior.rb +100 -0
- data/spec/shared/optimize_method_behavior.rb +14 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/support/add_method_missing.rb +13 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_left/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_right/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/difference/equal_operands/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/projection/header_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/rename/aliases_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/rename/class_methods/union_aliases_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/rename/header_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_spec.rb +35 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/class_methods/optimize_predicate_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/predicate_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/union/empty_left/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/union/empty_right/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/union/equal_operands/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/class_methods/chain_spec.rb +54 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/left_spec.rb +14 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/right_spec.rb +14 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimizable_spec.rb +34 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/left_operand_tautology/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/left_operand_tautology/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/right_operand_tautology/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/right_operand_tautology/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/contradiction_left_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/contradiction_left_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/contradiction_right_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/contradiction_right_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/operand_spec.rb +12 -0
- data/spec/unit/veritas/optimizer/logic/predicate/class_methods/optimize_operand_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_comparable/optimizable_spec.rb +58 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_equivalent/optimizable_spec.rb +58 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimize_spec.rb +14 -0
- data/spec/unit/veritas/optimizer/logic/predicate/contradiction/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/empty_right_operand/optimizable_spec.rb +76 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/one_right_operand/optimizable_spec.rb +76 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimizable_spec.rb +49 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimize_spec.rb +53 -0
- data/spec/unit/veritas/optimizer/logic/predicate/equality/tautology/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/predicate/exclusion/empty_right_operand/optimize_spec.rb +43 -0
- data/spec/unit/veritas/optimizer/logic/predicate/exclusion/one_right_operand/optimize_spec.rb +63 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than/contradiction/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than/tautology/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/contradiction/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/tautology/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inclusion/empty_right_operand/optimize_spec.rb +43 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inclusion/one_right_operand/optimize_spec.rb +64 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inequality/contradiction/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/predicate/left_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than/contradiction/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than/tautology/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/contradiction/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/tautology/optimizable_spec.rb +41 -0
- data/spec/unit/veritas/optimizer/logic/predicate/right_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/logic/predicate/tautology/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/attribute_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/constant_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/max_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/min_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/operation_spec.rb +11 -0
- data/spec/unit/veritas/optimizer/optimizable/class_methods/optimizer_spec.rb +32 -0
- data/spec/unit/veritas/optimizer/optimizable/optimize_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/optimizable_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimizable_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_left/optimizable_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_right/optimizable_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/equal_operands/optimizable_spec.rb +34 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/left_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimizable_spec.rb +35 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/right_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimizable_spec.rb +38 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/relation/operation/combination/optimize_spec.rb +14 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimizable_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +33 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimizable_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimizable_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimizable_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/operand_spec.rb +13 -0
- data/tasks/quality/ci.rake +2 -0
- data/tasks/quality/flay.rake +41 -0
- data/tasks/quality/flog.rake +45 -0
- data/tasks/quality/heckle.rake +203 -0
- data/tasks/quality/metric_fu.rake +26 -0
- data/tasks/quality/reek.rake +9 -0
- data/tasks/quality/roodi.rake +15 -0
- data/tasks/quality/yardstick.rake +23 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/veritas-optimizer.gemspec +550 -0
- metadata +613 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Algebra::Product, '#optimize' do
|
|
4
|
+
subject { object.optimize }
|
|
5
|
+
|
|
6
|
+
let(:left_body) { [ [ 1 ] ].each }
|
|
7
|
+
let(:right_body) { [ [ 'Dan Kubb' ] ].each }
|
|
8
|
+
let(:left) { Relation.new([ [ :id, Integer ] ], left_body) }
|
|
9
|
+
let(:right) { Relation.new([ [ :name, String ] ], right_body) }
|
|
10
|
+
let(:object) { described_class.new(left, right) }
|
|
11
|
+
|
|
12
|
+
context 'left is a TABLE_DUM' do
|
|
13
|
+
let(:left) { TABLE_DUM }
|
|
14
|
+
|
|
15
|
+
it { should eql(Relation::Empty.new(right.header)) }
|
|
16
|
+
|
|
17
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
18
|
+
should == object
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'does not execute right_body#each' do
|
|
22
|
+
right_body.should_not_receive(:each)
|
|
23
|
+
subject
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it_should_behave_like 'an optimize method'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'right is a TABLE_DUM' do
|
|
30
|
+
let(:right) { TABLE_DUM }
|
|
31
|
+
|
|
32
|
+
it { should eql(Relation::Empty.new(left.header)) }
|
|
33
|
+
|
|
34
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
35
|
+
should == object
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'does not execute left_body#each' do
|
|
39
|
+
left_body.should_not_receive(:each)
|
|
40
|
+
subject
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it_should_behave_like 'an optimize method'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context 'left is a TABLE_DUM when optimized' do
|
|
47
|
+
let(:left) { TABLE_DUM.project([]) }
|
|
48
|
+
|
|
49
|
+
it { should eql(Relation::Empty.new(right.header)) }
|
|
50
|
+
|
|
51
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
52
|
+
should == object
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'does not execute right_body#each' do
|
|
56
|
+
right_body.should_not_receive(:each)
|
|
57
|
+
subject
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it_should_behave_like 'an optimize method'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context 'right is a TABLE_DUM when optimized' do
|
|
64
|
+
let(:right) { TABLE_DUM.project([]) }
|
|
65
|
+
|
|
66
|
+
it { should eql(Relation::Empty.new(left.header)) }
|
|
67
|
+
|
|
68
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
69
|
+
should == object
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'does not execute left_body#each' do
|
|
73
|
+
left_body.should_not_receive(:each)
|
|
74
|
+
subject
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it_should_behave_like 'an optimize method'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context 'left is a TABLE_DEE' do
|
|
81
|
+
let(:left) { TABLE_DEE }
|
|
82
|
+
|
|
83
|
+
it { should equal(right) }
|
|
84
|
+
|
|
85
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
86
|
+
should == object
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'does not execute right_body#each' do
|
|
90
|
+
right_body.should_not_receive(:each)
|
|
91
|
+
subject
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it_should_behave_like 'an optimize method'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context 'right is a TABLE_DEE' do
|
|
98
|
+
let(:right) { TABLE_DEE }
|
|
99
|
+
|
|
100
|
+
it { should equal(left) }
|
|
101
|
+
|
|
102
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
103
|
+
should == object
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it 'does not execute left_body#each' do
|
|
107
|
+
left_body.should_not_receive(:each)
|
|
108
|
+
subject
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it_should_behave_like 'an optimize method'
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context 'left is a TABLE_DEE when optimized' do
|
|
115
|
+
let(:left) { TABLE_DEE.project([]) }
|
|
116
|
+
|
|
117
|
+
it { should equal(right) }
|
|
118
|
+
|
|
119
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
120
|
+
should == object
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it 'does not execute right_body#each' do
|
|
124
|
+
right_body.should_not_receive(:each)
|
|
125
|
+
subject
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it_should_behave_like 'an optimize method'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
context 'right is a TABLE_DEE when optimized' do
|
|
132
|
+
let(:right) { TABLE_DEE.project([]) }
|
|
133
|
+
|
|
134
|
+
it { should equal(left) }
|
|
135
|
+
|
|
136
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
137
|
+
should == object
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'does not execute left_body#each' do
|
|
141
|
+
left_body.should_not_receive(:each)
|
|
142
|
+
subject
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it_should_behave_like 'an optimize method'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
context 'left and right are normal relations' do
|
|
149
|
+
it { should equal(object) }
|
|
150
|
+
|
|
151
|
+
it 'does not execute left_body#each' do
|
|
152
|
+
left_body.should_not_receive(:each)
|
|
153
|
+
subject
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it 'does not execute right_body#each' do
|
|
157
|
+
right_body.should_not_receive(:each)
|
|
158
|
+
subject
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it_should_behave_like 'an optimize method'
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
context 'left and right are materialized relations' do
|
|
165
|
+
let(:left) { Relation.new([ [ :id, Integer ] ], [ [ 1 ] ]) }
|
|
166
|
+
let(:right) { Relation.new([ [ :name, String ] ], [ [ 'Dan Kubb' ] ]) }
|
|
167
|
+
|
|
168
|
+
it { should eql(Relation::Materialized.new([ [ :id, Integer ], [ :name, String ] ], [ [ 1, 'Dan Kubb' ] ])) }
|
|
169
|
+
|
|
170
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
171
|
+
should == object
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it_should_behave_like 'an optimize method'
|
|
175
|
+
end
|
|
176
|
+
end
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Algebra::Projection, '#optimize' do
|
|
4
|
+
subject { object.optimize }
|
|
5
|
+
|
|
6
|
+
let(:header) { [ [ :id, Integer ], [ :name, String ], [ :age, Integer ] ] }
|
|
7
|
+
let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
|
8
|
+
let(:relation) { Relation.new(header, body) }
|
|
9
|
+
let(:operand) { relation }
|
|
10
|
+
let(:object) { described_class.new(operand, attributes) }
|
|
11
|
+
|
|
12
|
+
context 'when the attributes are equivalent to the relation headers, and in the same order' do
|
|
13
|
+
let(:attributes) { header }
|
|
14
|
+
|
|
15
|
+
it { should equal(operand) }
|
|
16
|
+
|
|
17
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
18
|
+
should == object
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'does not execute body#each' do
|
|
22
|
+
body.should_not_receive(:each)
|
|
23
|
+
subject
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it_should_behave_like 'an optimize method'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when the attributes are equivalent to the relation headers, and not in the same order' do
|
|
30
|
+
let(:attributes) { [ :name, :id ] }
|
|
31
|
+
|
|
32
|
+
it 'does not factor out the object, because tuple order is currently significant' do
|
|
33
|
+
should equal(object)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'does not execute body#each' do
|
|
37
|
+
body.should_not_receive(:each)
|
|
38
|
+
subject
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it_should_behave_like 'an optimize method'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'when the attributes are different from the relation headers' do
|
|
45
|
+
let(:attributes) { [ :id ] }
|
|
46
|
+
|
|
47
|
+
it { should equal(object) }
|
|
48
|
+
|
|
49
|
+
it 'does not execute body#each' do
|
|
50
|
+
body.should_not_receive(:each)
|
|
51
|
+
subject
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it_should_behave_like 'an optimize method'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'containing an empty relation' do
|
|
58
|
+
let(:operand) { Relation::Empty.new(header) }
|
|
59
|
+
let(:attributes) { [ :id ] }
|
|
60
|
+
|
|
61
|
+
it { should eql(Relation::Empty.new(object.header)) }
|
|
62
|
+
|
|
63
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
64
|
+
should == object
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it_should_behave_like 'an optimize method'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context 'containing an empty relation when optimized' do
|
|
71
|
+
let(:operand) { Algebra::Restriction.new(relation, Logic::Proposition::Contradiction.instance) }
|
|
72
|
+
let(:attributes) { [ :id ] }
|
|
73
|
+
|
|
74
|
+
it { should eql(Relation::Empty.new(object.header)) }
|
|
75
|
+
|
|
76
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
77
|
+
should == object
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'does not execute body#each' do
|
|
81
|
+
body.should_not_receive(:each)
|
|
82
|
+
subject
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it_should_behave_like 'an optimize method'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context 'containing an optimizable relation' do
|
|
89
|
+
let(:operand) { Algebra::Restriction.new(relation, Logic::Proposition::Tautology.instance) }
|
|
90
|
+
let(:attributes) { [ :id ] }
|
|
91
|
+
|
|
92
|
+
it { should_not equal(object) }
|
|
93
|
+
|
|
94
|
+
it { should be_kind_of(described_class) }
|
|
95
|
+
|
|
96
|
+
its(:operand) { should equal(relation) }
|
|
97
|
+
|
|
98
|
+
its(:header) { should == object.header }
|
|
99
|
+
|
|
100
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
101
|
+
should == object
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it 'does not execute body#each' do
|
|
105
|
+
body.should_not_receive(:each)
|
|
106
|
+
subject
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it_should_behave_like 'an optimize method'
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context 'containing a projection' do
|
|
113
|
+
let(:operand) { relation.project([ :id, :name ]) }
|
|
114
|
+
let(:attributes) { [ :id ] }
|
|
115
|
+
|
|
116
|
+
it { should_not equal(object) }
|
|
117
|
+
|
|
118
|
+
it { should be_kind_of(described_class) }
|
|
119
|
+
|
|
120
|
+
its(:operand) { should equal(relation) }
|
|
121
|
+
|
|
122
|
+
its(:header) { should == object.header }
|
|
123
|
+
|
|
124
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
125
|
+
should == object
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it 'does not execute body#each' do
|
|
129
|
+
body.should_not_receive(:each)
|
|
130
|
+
subject
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it_should_behave_like 'an optimize method'
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context 'containing a set operation' do
|
|
137
|
+
let(:left) { Relation.new([ [ :id, Integer ], [ :name, String ] ], [ [ 1, 'Dan Kubb' ] ].each) }
|
|
138
|
+
let(:right) { Relation.new([ [ :id, Integer ], [ :name, String ] ], [ [ 2, 'Dan Kubb' ] ].each) }
|
|
139
|
+
let(:operand) { left.union(right) }
|
|
140
|
+
let(:attributes) { [ :name ] }
|
|
141
|
+
|
|
142
|
+
it 'pushes the object to each relation' do
|
|
143
|
+
should eql(Algebra::Union.new(
|
|
144
|
+
described_class.new(left, object.header),
|
|
145
|
+
described_class.new(right, object.header)
|
|
146
|
+
))
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
150
|
+
should == object
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it 'does not execute body#each' do
|
|
154
|
+
body.should_not_receive(:each)
|
|
155
|
+
subject
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it_should_behave_like 'an optimize method'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'containing a set operation containing a projection of relations' do
|
|
162
|
+
let(:left_body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
|
|
163
|
+
let(:right_body) { [ [ 2, 'Dan Kubb', 35 ] ].each }
|
|
164
|
+
let(:left) { Relation.new(header, left_body) }
|
|
165
|
+
let(:right) { Relation.new(header, right_body) }
|
|
166
|
+
let(:operand) { left.project([ :id, :name ]).union(right.project([ :id, :name ])) }
|
|
167
|
+
let(:attributes) { [ :name ] }
|
|
168
|
+
|
|
169
|
+
it 'pushes the object to each relation, and combine the nested objects' do
|
|
170
|
+
should eql(left.project([ :name ]).union(right.project([ :name ])))
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
174
|
+
should == object
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it 'does not execute left_body#each' do
|
|
178
|
+
pending 'TODO: should only compare left and right with #eql? if they are materialized' do
|
|
179
|
+
left_body.should_not_receive(:each)
|
|
180
|
+
subject
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it 'does not execute right_body#each' do
|
|
185
|
+
pending 'TODO: should only compare left and right with #eql? if they are materialized' do
|
|
186
|
+
right_body.should_not_receive(:each)
|
|
187
|
+
subject
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it_should_behave_like 'an optimize method'
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context 'containing a set operation containing a projection of materialized relations' do
|
|
195
|
+
let(:left_body) { [ [ 1, 'Dan Kubb', 35 ] ] }
|
|
196
|
+
let(:right_body) { [ [ 2, 'Dan Kubb', 35 ] ] }
|
|
197
|
+
let(:left) { Relation.new(header, left_body) }
|
|
198
|
+
let(:right) { Relation.new(header, right_body) }
|
|
199
|
+
let(:operand) { left.project([ :id, :name ]).union(right.project([ :id, :name ])) }
|
|
200
|
+
let(:attributes) { [ :name ] }
|
|
201
|
+
|
|
202
|
+
it 'pushes the object to each relation, and combine the nested objects, then materializes' do
|
|
203
|
+
should eql(Relation.new([ [ :name, String ] ], [ [ 'Dan Kubb' ] ]))
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
207
|
+
should == object
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'executes left_body#each' do
|
|
211
|
+
pending 'TODO: make sure this is only received once'
|
|
212
|
+
left_body.should_receive(:each)
|
|
213
|
+
subject
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it 'executes right_body#each' do
|
|
217
|
+
pending 'TODO: make sure this is only received once'
|
|
218
|
+
right_body.should_receive(:each)
|
|
219
|
+
subject
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it_should_behave_like 'an optimize method'
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
context 'containing a materialized relation' do
|
|
226
|
+
let(:operand) { Relation.new(header, [ [ 1, 'Dan Kubb', 35 ] ]) }
|
|
227
|
+
let(:attributes) { [ :id ] }
|
|
228
|
+
|
|
229
|
+
it { should eql(Relation::Materialized.new([ [ :id, Integer ] ], [ [ 1 ] ])) }
|
|
230
|
+
|
|
231
|
+
it 'returns an equivalent relation to the unoptimized operation' do
|
|
232
|
+
should == object
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it_should_behave_like 'an optimize method'
|
|
236
|
+
end
|
|
237
|
+
end
|