axiom-optimizer 0.1.0 → 0.1.1
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/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +4 -6
- data/Gemfile +6 -3
- data/Gemfile.devtools +26 -24
- data/Guardfile +18 -9
- data/README.md +2 -25
- data/axiom-optimizer.gemspec +1 -3
- data/config/devtools.yml +2 -0
- data/config/flay.yml +1 -1
- data/config/flog.yml +1 -1
- data/config/rubocop.yml +53 -0
- data/lib/axiom/optimizer.rb +1 -1
- data/lib/axiom/optimizer/algebra/difference.rb +1 -1
- data/lib/axiom/optimizer/algebra/join.rb +3 -1
- data/lib/axiom/optimizer/algebra/projection.rb +1 -1
- data/lib/axiom/optimizer/algebra/rename.rb +1 -1
- data/lib/axiom/optimizer/algebra/restriction.rb +1 -1
- data/lib/axiom/optimizer/algebra/summarization.rb +1 -1
- data/lib/axiom/optimizer/function/connective/binary.rb +1 -1
- data/lib/axiom/optimizer/optimizable.rb +5 -3
- data/lib/axiom/optimizer/relation/materialized.rb +1 -1
- data/lib/axiom/optimizer/relation/operation/combination.rb +1 -1
- data/lib/axiom/optimizer/relation/operation/limit.rb +2 -2
- data/lib/axiom/optimizer/support/predicate_partition.rb +1 -4
- data/lib/axiom/optimizer/version.rb +1 -1
- data/spec/integration/axiom/algebra/difference/optimize_spec.rb +15 -15
- data/spec/integration/axiom/algebra/intersection/optimize_spec.rb +15 -15
- data/spec/integration/axiom/algebra/join/optimize_spec.rb +11 -11
- data/spec/integration/axiom/algebra/product/optimize_spec.rb +13 -13
- data/spec/integration/axiom/algebra/projection/optimize_spec.rb +44 -44
- data/spec/integration/axiom/algebra/rename/optimize_spec.rb +70 -70
- data/spec/integration/axiom/algebra/restriction/optimize_spec.rb +23 -24
- data/spec/integration/axiom/algebra/summarization/optimize_spec.rb +8 -8
- data/spec/integration/axiom/algebra/union/optimize_spec.rb +21 -21
- data/spec/integration/axiom/function/connective/conjunction/optimize_spec.rb +26 -26
- data/spec/integration/axiom/function/connective/disjunction/optimize_spec.rb +27 -28
- data/spec/integration/axiom/function/connective/negation/optimize_spec.rb +2 -2
- data/spec/integration/axiom/function/optimize_spec.rb +1 -1
- data/spec/integration/axiom/function/predicate/equality/optimize_spec.rb +8 -8
- data/spec/integration/axiom/function/predicate/exclusion/optimize_spec.rb +19 -19
- data/spec/integration/axiom/function/predicate/greater_than/optimize_spec.rb +17 -17
- data/spec/integration/axiom/function/predicate/greater_than_or_equal_to/optimize_spec.rb +17 -17
- data/spec/integration/axiom/function/predicate/inclusion/optimize_spec.rb +19 -19
- data/spec/integration/axiom/function/predicate/inequality/optimize_spec.rb +8 -8
- data/spec/integration/axiom/function/predicate/less_than/optimize_spec.rb +17 -17
- data/spec/integration/axiom/function/predicate/less_than_or_equal_to/optimize_spec.rb +17 -17
- data/spec/integration/axiom/relation/empty/optimize_spec.rb +2 -2
- data/spec/integration/axiom/relation/materialized/optimize_spec.rb +3 -3
- data/spec/integration/axiom/relation/operation/limit/optimize_spec.rb +16 -16
- data/spec/integration/axiom/relation/operation/offset/optimize_spec.rb +14 -14
- data/spec/integration/axiom/relation/operation/order/optimize_spec.rb +11 -11
- data/spec/integration/axiom/relation/operation/reverse/optimize_spec.rb +9 -9
- data/spec/integration/axiom/relation/optimize_spec.rb +4 -4
- data/spec/shared/function_connective_binary_optimize_behavior.rb +18 -18
- data/spec/shared/optimize_method_behavior.rb +2 -2
- data/spec/spec_helper.rb +7 -8
- data/spec/support/add_method_missing.rb +3 -4
- data/spec/unit/axiom/optimizer/algebra/difference/empty_left/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/difference/empty_right/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/difference/equal_operands/optimize_spec.rb +7 -9
- data/spec/unit/axiom/optimizer/algebra/extension/extensions_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/extension/order_operand/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/extension/order_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/extension/unoptimized_operand/optimizable_predicate_spec.rb +10 -10
- data/spec/unit/axiom/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +10 -10
- data/spec/unit/axiom/optimizer/algebra/intersection/empty_left/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/intersection/empty_right/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/join/disjoint_headers/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/join/disjoint_headers/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/join/equal_headers/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/join/equal_headers/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/algebra/join/materialized_left/optimizable_predicate_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/algebra/join/materialized_left/optimize_spec.rb +12 -12
- data/spec/unit/axiom/optimizer/algebra/join/materialized_right/optimizable_predicate_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/algebra/join/materialized_right/optimize_spec.rb +12 -12
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_left/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_left/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_right/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_right/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/projection/empty_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/projection/empty_operand/optimize_spec.rb +6 -8
- data/spec/unit/axiom/optimizer/algebra/projection/extension_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/projection/extension_operand/optimize_spec.rb +12 -6
- data/spec/unit/axiom/optimizer/algebra/projection/projection_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/projection/projection_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/projection/union_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/projection/union_operand/optimize_spec.rb +10 -10
- data/spec/unit/axiom/optimizer/algebra/projection/unoptimized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/aliases_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/empty_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/rename/empty_operand/optimize_spec.rb +5 -7
- data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/order_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/rename/order_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/projection_operand/optimizable_predicate_spec.rb +12 -12
- data/spec/unit/axiom/optimizer/algebra/rename/projection_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand/optimizable_predicate_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_predicate_spec.rb +11 -11
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/rename/restriction_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/rename/reverse_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/algebra/rename/set_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/rename/set_operand/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/algebra/rename/unoptimized_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/restriction/contradiction/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/restriction/contradiction/optimize_spec.rb +7 -9
- data/spec/unit/axiom/optimizer/algebra/restriction/join_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/restriction/join_operand/optimize_spec.rb +17 -17
- data/spec/unit/axiom/optimizer/algebra/restriction/order_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/restriction/order_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/restriction/product_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/restriction/product_operand/optimize_spec.rb +17 -17
- data/spec/unit/axiom/optimizer/algebra/restriction/restriction_operand/optimizable_predicate_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/restriction/set_operand/optimizable_predicate_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/set_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/tautology/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/algebra/restriction/tautology/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/restriction/unoptimized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/optimize_spec.rb +13 -13
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_summarize_per/optimizable_predicate_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_summarize_per/optimize_spec.rb +5 -7
- data/spec/unit/axiom/optimizer/algebra/summarization/order_operand/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/summarization/order_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/summarization/summarize_per_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/summarization/summarizers_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/summarization/unoptimized_operand/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/algebra/union/empty_left/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/union/empty_right/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/algebra/union/equal_operands/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/class_methods/chain_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/function/binary/constant_operands/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/binary/left_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/binary/right_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/binary/unoptimized_operands/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/function/binary/unoptimized_operands/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/class_methods/optimize_functions_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/function/class_methods/optimize_operand_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/function/connective/binary/constant_operands/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/binary/equal_operands/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/binary/equal_operands/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/binary/left_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_left/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_left/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_right/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_right/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/connective/binary/right_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/conjunction/optimizable_to_exclusion/optimizable_predicate_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/function/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +17 -17
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_left/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_left/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_right/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_right/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_left/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_left/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_right/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_right/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/disjunction/optimizable_to_inclusion/optimizable_predicate_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/function/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +17 -17
- data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/negation/constant_operand/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/negation/invertible_operand/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/connective/negation/invertible_operand/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/negation/operand_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/function/predicate/comparable/never_comparable/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/comparable/never_equivalent/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/function/predicate/comparable/normalizable_operands/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/comparable/normalizable_operands/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/predicate/constant_operands/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/predicate/contradiction/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/class_methods/sort_by_value_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/empty_right/optimizable_predicate_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/one_right/optimizable_predicate_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/unoptimized_operands/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/unoptimized_operands/optimize_spec.rb +14 -14
- data/spec/unit/axiom/optimizer/function/predicate/equality/tautology/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/exclusion/empty_right/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/function/predicate/exclusion/one_right/optimize_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/function/predicate/greater_than/contradiction/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/greater_than/tautology/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/greater_than_or_equal_to/contradiction/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/greater_than_or_equal_to/tautology/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/inclusion/empty_right/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/function/predicate/inclusion/one_right/optimize_spec.rb +9 -9
- data/spec/unit/axiom/optimizer/function/predicate/inequality/contradiction/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/predicate/less_than/contradiction/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/less_than/tautology/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/less_than_or_equal_to/contradiction/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/less_than_or_equal_to/tautology/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/function/predicate/tautology/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/unary/constant_operand/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/unary/operand_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/unary/unoptimized_operand/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/util/class_methods/max_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/util/class_methods/min_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/operation_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/optimizable/class_methods/optimizer_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/optimizable/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/optimizable_predicate_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/predicate_partition/left_spec.rb +18 -18
- data/spec/unit/axiom/optimizer/predicate_partition/remainder_spec.rb +19 -19
- data/spec/unit/axiom/optimizer/predicate_partition/right_spec.rb +18 -18
- data/spec/unit/axiom/optimizer/relation/materialized/empty_operand/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/materialized/empty_operand/optimize_spec.rb +5 -7
- data/spec/unit/axiom/optimizer/relation/operation/binary/empty_left/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/binary/empty_right/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/binary/equal_operands/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/binary/left_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/binary/materialized_operands/optimizable_predicate_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/binary/materialized_operands/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_left/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_left/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_right/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_right/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/relation/operation/binary/right_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/binary/unoptimized_operands/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/binary/unoptimized_operands/optimize_spec.rb +8 -8
- data/spec/unit/axiom/optimizer/relation/operation/combination/optimize_spec.rb +5 -7
- data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +6 -8
- data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/order/one_limit_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/order/order_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/order/order_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/order/unoptimized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/reverse/order_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/reverse/reverse_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/unary/empty_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/unary/header_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/unary/materialized_operand/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/unary/operand_spec.rb +7 -7
- data/spec/unit/axiom/optimizer/relation/operation/unary/order_operand/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/unary/order_operand/optimize_spec.rb +6 -6
- data/spec/unit/axiom/optimizer/relation/operation/unary/unchanged_header/optimizable_predicate_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/unary/unchanged_header/optimize_spec.rb +5 -5
- metadata +24 -289
- checksums.yaml +0 -7
- data/.gemtest +0 -0
- data/.rvmrc +0 -1
@@ -5,24 +5,24 @@ require 'spec_helper'
|
|
5
5
|
describe Algebra::Difference, '#optimize' do
|
6
6
|
subject { object.optimize }
|
7
7
|
|
8
|
-
let(:header) { [
|
9
|
-
let(:left_body) { LazyEnumerable.new([
|
10
|
-
let(:right_body) { LazyEnumerable.new([
|
8
|
+
let(:header) { [[:id, Integer]] }
|
9
|
+
let(:left_body) { LazyEnumerable.new([[1]]) }
|
10
|
+
let(:right_body) { LazyEnumerable.new([[2]]) }
|
11
11
|
let(:original_left) { Relation.new(header, left_body) }
|
12
12
|
let(:original_right) { Relation.new(header, right_body) }
|
13
13
|
let(:object) { described_class.new(left, right) }
|
14
14
|
|
15
15
|
before do
|
16
16
|
# skip dup of the left and right body to avoid clearing the method stubs
|
17
|
-
left_body.stub
|
18
|
-
right_body.stub
|
17
|
+
left_body.stub(:frozen?).and_return(true)
|
18
|
+
right_body.stub(:frozen?).and_return(true)
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'left is an empty relation' do
|
22
22
|
let(:left) { Relation::Empty.new(header) }
|
23
23
|
let(:right) { original_right }
|
24
24
|
|
25
|
-
it { should
|
25
|
+
it { should be(left) }
|
26
26
|
|
27
27
|
it 'returns an equivalent relation to the unoptimized operation' do
|
28
28
|
should == object
|
@@ -40,7 +40,7 @@ describe Algebra::Difference, '#optimize' do
|
|
40
40
|
let(:left) { original_left }
|
41
41
|
let(:right) { Relation::Empty.new(header) }
|
42
42
|
|
43
|
-
it { should
|
43
|
+
it { should be(left) }
|
44
44
|
|
45
45
|
it 'returns an equivalent relation to the unoptimized operation' do
|
46
46
|
should == object
|
@@ -81,7 +81,7 @@ describe Algebra::Difference, '#optimize' do
|
|
81
81
|
let(:left) { original_left }
|
82
82
|
let(:right) { Algebra::Restriction.new(original_right, Function::Proposition::Contradiction.instance) }
|
83
83
|
|
84
|
-
it { should
|
84
|
+
it { should be(left) }
|
85
85
|
|
86
86
|
it 'returns an equivalent relation to the unoptimized operation' do
|
87
87
|
should == object
|
@@ -102,9 +102,9 @@ describe Algebra::Difference, '#optimize' do
|
|
102
102
|
|
103
103
|
unless defined?(JRUBY_VERSION) && JRUBY_VERSION < '1.6'
|
104
104
|
context 'left and right are equivalent relations' do
|
105
|
-
let(:right_body) { LazyEnumerable.new([
|
106
|
-
let(:left) { original_left
|
107
|
-
let(:right) { original_right
|
105
|
+
let(:right_body) { LazyEnumerable.new([[1]]) }
|
106
|
+
let(:left) { original_left }
|
107
|
+
let(:right) { original_right }
|
108
108
|
|
109
109
|
it { should eql(Relation::Empty.new(header)) }
|
110
110
|
|
@@ -130,7 +130,7 @@ describe Algebra::Difference, '#optimize' do
|
|
130
130
|
let(:left) { original_left }
|
131
131
|
let(:right) { original_right }
|
132
132
|
|
133
|
-
it { should
|
133
|
+
it { should be(object) }
|
134
134
|
|
135
135
|
it 'executes left_body#each' do
|
136
136
|
left_body.should_receive(:each)
|
@@ -146,10 +146,10 @@ describe Algebra::Difference, '#optimize' do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
context 'left and right are materialized relations' do
|
149
|
-
let(:left) { Relation.new(header, [
|
150
|
-
let(:right) { Relation.new(header, [
|
149
|
+
let(:left) { Relation.new(header, [[1], [2]]) }
|
150
|
+
let(:right) { Relation.new(header, [[1]]) }
|
151
151
|
|
152
|
-
it { should eql(Relation::Materialized.new(header, [
|
152
|
+
it { should eql(Relation::Materialized.new(header, [[2]])) }
|
153
153
|
|
154
154
|
it 'returns an equivalent relation to the unoptimized operation' do
|
155
155
|
should == object
|
@@ -5,24 +5,24 @@ require 'spec_helper'
|
|
5
5
|
describe Algebra::Intersection, '#optimize' do
|
6
6
|
subject { object.optimize }
|
7
7
|
|
8
|
-
let(:header) { [
|
9
|
-
let(:left_body) { LazyEnumerable.new([
|
10
|
-
let(:right_body) { LazyEnumerable.new([
|
8
|
+
let(:header) { [[:id, Integer]] }
|
9
|
+
let(:left_body) { LazyEnumerable.new([[1]]) }
|
10
|
+
let(:right_body) { LazyEnumerable.new([[2]]) }
|
11
11
|
let(:original_left) { Relation.new(header, left_body) }
|
12
12
|
let(:original_right) { Relation.new(header, right_body) }
|
13
13
|
let(:object) { described_class.new(left, right) }
|
14
14
|
|
15
15
|
before do
|
16
16
|
# skip dup of the left and right body to avoid clearing the method stubs
|
17
|
-
left_body.stub
|
18
|
-
right_body.stub
|
17
|
+
left_body.stub(:frozen?).and_return(true)
|
18
|
+
right_body.stub(:frozen?).and_return(true)
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'left is an empty relation' do
|
22
22
|
let(:left) { Relation::Empty.new(header) }
|
23
23
|
let(:right) { original_right }
|
24
24
|
|
25
|
-
it { should
|
25
|
+
it { should be(left) }
|
26
26
|
|
27
27
|
it 'returns an equivalent relation to the unoptimized operation' do
|
28
28
|
should == object
|
@@ -40,7 +40,7 @@ describe Algebra::Intersection, '#optimize' do
|
|
40
40
|
let(:left) { original_left }
|
41
41
|
let(:right) { Relation::Empty.new(header) }
|
42
42
|
|
43
|
-
it { should
|
43
|
+
it { should be(right) }
|
44
44
|
|
45
45
|
it 'returns an equivalent relation to the unoptimized operation' do
|
46
46
|
should == object
|
@@ -102,11 +102,11 @@ describe Algebra::Intersection, '#optimize' do
|
|
102
102
|
|
103
103
|
unless defined?(JRUBY_VERSION) && JRUBY_VERSION < '1.6'
|
104
104
|
context 'left and right are equivalent relations' do
|
105
|
-
let(:right_body) { LazyEnumerable.new([
|
106
|
-
let(:left) { original_left
|
107
|
-
let(:right) { original_right
|
105
|
+
let(:right_body) { LazyEnumerable.new([[1]]) }
|
106
|
+
let(:left) { original_left }
|
107
|
+
let(:right) { original_right }
|
108
108
|
|
109
|
-
it { should
|
109
|
+
it { should be(left) }
|
110
110
|
|
111
111
|
it 'returns an equivalent relation to the unoptimized operation' do
|
112
112
|
should == object
|
@@ -130,7 +130,7 @@ describe Algebra::Intersection, '#optimize' do
|
|
130
130
|
let(:left) { original_left }
|
131
131
|
let(:right) { original_right }
|
132
132
|
|
133
|
-
it { should
|
133
|
+
it { should be(object) }
|
134
134
|
|
135
135
|
it 'executed left_body#each' do
|
136
136
|
left_body.should_receive(:each)
|
@@ -146,10 +146,10 @@ describe Algebra::Intersection, '#optimize' do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
context 'left and right are materialized relations' do
|
149
|
-
let(:left) { Relation.new(header, [
|
150
|
-
let(:right) { Relation.new(header, [
|
149
|
+
let(:left) { Relation.new(header, [[1], [2]]) }
|
150
|
+
let(:right) { Relation.new(header, [[1]]) }
|
151
151
|
|
152
|
-
it { should eql(Relation::Materialized.new(header, [
|
152
|
+
it { should eql(Relation::Materialized.new(header, [[1]])) }
|
153
153
|
|
154
154
|
it 'returns an equivalent relation to the unoptimized operation' do
|
155
155
|
should == object
|
@@ -5,13 +5,13 @@ require 'spec_helper'
|
|
5
5
|
describe Algebra::Join, '#optimize' do
|
6
6
|
subject { object.optimize }
|
7
7
|
|
8
|
-
let(:left_body) { LazyEnumerable.new([
|
9
|
-
let(:right_body) { LazyEnumerable.new([
|
10
|
-
let(:original_left) { Relation.new([
|
11
|
-
let(:original_right) { Relation.new([
|
12
|
-
let(:left) { original_left
|
13
|
-
let(:right) { original_right
|
14
|
-
let(:object) { described_class.new(left, right)
|
8
|
+
let(:left_body) { LazyEnumerable.new([[1], [2]]) }
|
9
|
+
let(:right_body) { LazyEnumerable.new([[2, 'Dan Kubb']]) }
|
10
|
+
let(:original_left) { Relation.new([[:id, Integer]], left_body) }
|
11
|
+
let(:original_right) { Relation.new([[:id, Integer], [:name, String]], right_body) }
|
12
|
+
let(:left) { original_left }
|
13
|
+
let(:right) { original_right }
|
14
|
+
let(:object) { described_class.new(left, right) }
|
15
15
|
|
16
16
|
context 'left is an empty relation' do
|
17
17
|
let(:left) { Relation::Empty.new(original_left.header) }
|
@@ -82,7 +82,7 @@ describe Algebra::Join, '#optimize' do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
context 'left and right are not empty relations' do
|
85
|
-
it { should
|
85
|
+
it { should be(object) }
|
86
86
|
|
87
87
|
it 'does not execute left_body#each' do
|
88
88
|
left_body.should_not_receive(:each)
|
@@ -98,10 +98,10 @@ describe Algebra::Join, '#optimize' do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
context 'left and right are materialized relations' do
|
101
|
-
let(:left) { Relation.new([
|
102
|
-
let(:right) { Relation.new([
|
101
|
+
let(:left) { Relation.new([[:id, Integer]], [[1], [2]]) }
|
102
|
+
let(:right) { Relation.new([[:id, Integer], [:name, String]], [[2, 'Dan Kubb']]) }
|
103
103
|
|
104
|
-
it { should eql(Relation::Materialized.new([
|
104
|
+
it { should eql(Relation::Materialized.new([[:id, Integer], [:name, String]], [[2, 'Dan Kubb']])) }
|
105
105
|
|
106
106
|
it 'returns an equivalent relation to the unoptimized operation' do
|
107
107
|
should == object
|
@@ -5,11 +5,11 @@ require 'spec_helper'
|
|
5
5
|
describe Algebra::Product, '#optimize' do
|
6
6
|
subject { object.optimize }
|
7
7
|
|
8
|
-
let(:left_body) { LazyEnumerable.new([
|
9
|
-
let(:right_body) { LazyEnumerable.new([
|
10
|
-
let(:left) { Relation.new([
|
11
|
-
let(:right) { Relation.new([
|
12
|
-
let(:object) { described_class.new(left, right)
|
8
|
+
let(:left_body) { LazyEnumerable.new([[1]]) }
|
9
|
+
let(:right_body) { LazyEnumerable.new([['Dan Kubb']]) }
|
10
|
+
let(:left) { Relation.new([[:id, Integer]], left_body) }
|
11
|
+
let(:right) { Relation.new([[:name, String]], right_body) }
|
12
|
+
let(:object) { described_class.new(left, right) }
|
13
13
|
|
14
14
|
context 'left is a TABLE_DUM' do
|
15
15
|
let(:left) { TABLE_DUM }
|
@@ -82,7 +82,7 @@ describe Algebra::Product, '#optimize' do
|
|
82
82
|
context 'left is a TABLE_DEE' do
|
83
83
|
let(:left) { TABLE_DEE }
|
84
84
|
|
85
|
-
it { should
|
85
|
+
it { should be(right) }
|
86
86
|
|
87
87
|
it 'returns an equivalent relation to the unoptimized operation' do
|
88
88
|
should == object
|
@@ -99,7 +99,7 @@ describe Algebra::Product, '#optimize' do
|
|
99
99
|
context 'right is a TABLE_DEE' do
|
100
100
|
let(:right) { TABLE_DEE }
|
101
101
|
|
102
|
-
it { should
|
102
|
+
it { should be(left) }
|
103
103
|
|
104
104
|
it 'returns an equivalent relation to the unoptimized operation' do
|
105
105
|
should == object
|
@@ -116,7 +116,7 @@ describe Algebra::Product, '#optimize' do
|
|
116
116
|
context 'left is a TABLE_DEE when optimized' do
|
117
117
|
let(:left) { TABLE_DEE.project([]) }
|
118
118
|
|
119
|
-
it { should
|
119
|
+
it { should be(right) }
|
120
120
|
|
121
121
|
it 'returns an equivalent relation to the unoptimized operation' do
|
122
122
|
should == object
|
@@ -133,7 +133,7 @@ describe Algebra::Product, '#optimize' do
|
|
133
133
|
context 'right is a TABLE_DEE when optimized' do
|
134
134
|
let(:right) { TABLE_DEE.project([]) }
|
135
135
|
|
136
|
-
it { should
|
136
|
+
it { should be(left) }
|
137
137
|
|
138
138
|
it 'returns an equivalent relation to the unoptimized operation' do
|
139
139
|
should == object
|
@@ -148,7 +148,7 @@ describe Algebra::Product, '#optimize' do
|
|
148
148
|
end
|
149
149
|
|
150
150
|
context 'left and right are normal relations' do
|
151
|
-
it { should
|
151
|
+
it { should be(object) }
|
152
152
|
|
153
153
|
it 'does not execute left_body#each' do
|
154
154
|
left_body.should_not_receive(:each)
|
@@ -164,10 +164,10 @@ describe Algebra::Product, '#optimize' do
|
|
164
164
|
end
|
165
165
|
|
166
166
|
context 'left and right are materialized relations' do
|
167
|
-
let(:left) { Relation.new([
|
168
|
-
let(:right) { Relation.new([
|
167
|
+
let(:left) { Relation.new([[:id, Integer]], [[1]]) }
|
168
|
+
let(:right) { Relation.new([[:name, String]], [['Dan Kubb']]) }
|
169
169
|
|
170
|
-
it { should eql(Relation::Materialized.new([
|
170
|
+
it { should eql(Relation::Materialized.new([[:id, Integer], [:name, String]], [[1, 'Dan Kubb']])) }
|
171
171
|
|
172
172
|
it 'returns an equivalent relation to the unoptimized operation' do
|
173
173
|
should == object
|
@@ -5,21 +5,21 @@ require 'spec_helper'
|
|
5
5
|
describe Algebra::Projection, '#optimize' do
|
6
6
|
subject { object.optimize }
|
7
7
|
|
8
|
-
let(:header) { [
|
9
|
-
let(:body) { LazyEnumerable.new([
|
10
|
-
let(:relation) { Relation.new(header, body)
|
11
|
-
let(:operand) { relation
|
12
|
-
let(:object) { described_class.new(operand, attributes)
|
8
|
+
let(:header) { [[:id, Integer], [:name, String], [:age, Integer]] }
|
9
|
+
let(:body) { LazyEnumerable.new([[1, 'Dan Kubb', 35]]) }
|
10
|
+
let(:relation) { Relation.new(header, body) }
|
11
|
+
let(:operand) { relation }
|
12
|
+
let(:object) { described_class.new(operand, attributes) }
|
13
13
|
|
14
14
|
before do
|
15
15
|
# skip dup of the body to avoid clearing the method stubs
|
16
|
-
body.stub
|
16
|
+
body.stub(:frozen?).and_return(true)
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when the attributes are equivalent to the relation headers, and in the same order' do
|
20
20
|
let(:attributes) { header }
|
21
21
|
|
22
|
-
it { should
|
22
|
+
it { should be(operand) }
|
23
23
|
|
24
24
|
it 'returns an equivalent relation to the unoptimized operation' do
|
25
25
|
should == object
|
@@ -34,10 +34,10 @@ describe Algebra::Projection, '#optimize' do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'when the attributes are equivalent to the relation headers, and not in the same order' do
|
37
|
-
let(:attributes) { [
|
37
|
+
let(:attributes) { [:name, :id] }
|
38
38
|
|
39
39
|
it 'does not factor out the object, because tuple order is currently significant' do
|
40
|
-
should
|
40
|
+
should be(object)
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'does not execute body#each' do
|
@@ -49,9 +49,9 @@ describe Algebra::Projection, '#optimize' do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'when the attributes are different from the relation headers' do
|
52
|
-
let(:attributes) { [
|
52
|
+
let(:attributes) { [:id] }
|
53
53
|
|
54
|
-
it { should
|
54
|
+
it { should be(object) }
|
55
55
|
|
56
56
|
it 'does not execute body#each' do
|
57
57
|
body.should_not_receive(:each)
|
@@ -63,7 +63,7 @@ describe Algebra::Projection, '#optimize' do
|
|
63
63
|
|
64
64
|
context 'containing an empty relation' do
|
65
65
|
let(:operand) { Relation::Empty.new(header) }
|
66
|
-
let(:attributes) { [
|
66
|
+
let(:attributes) { [:id] }
|
67
67
|
|
68
68
|
it { should eql(Relation::Empty.new(object.header)) }
|
69
69
|
|
@@ -76,7 +76,7 @@ describe Algebra::Projection, '#optimize' do
|
|
76
76
|
|
77
77
|
context 'containing an empty relation when optimized' do
|
78
78
|
let(:operand) { Algebra::Restriction.new(relation, Function::Proposition::Contradiction.instance) }
|
79
|
-
let(:attributes) { [
|
79
|
+
let(:attributes) { [:id] }
|
80
80
|
|
81
81
|
it { should eql(Relation::Empty.new(object.header)) }
|
82
82
|
|
@@ -94,13 +94,13 @@ describe Algebra::Projection, '#optimize' do
|
|
94
94
|
|
95
95
|
context 'containing an optimizable relation' do
|
96
96
|
let(:operand) { Algebra::Restriction.new(relation, Function::Proposition::Tautology.instance) }
|
97
|
-
let(:attributes) { [
|
97
|
+
let(:attributes) { [:id] }
|
98
98
|
|
99
|
-
it { should_not
|
99
|
+
it { should_not be(object) }
|
100
100
|
|
101
101
|
it { should be_kind_of(described_class) }
|
102
102
|
|
103
|
-
its(:operand) { should
|
103
|
+
its(:operand) { should be(relation) }
|
104
104
|
|
105
105
|
its(:header) { should == object.header }
|
106
106
|
|
@@ -117,14 +117,14 @@ describe Algebra::Projection, '#optimize' do
|
|
117
117
|
end
|
118
118
|
|
119
119
|
context 'containing a projection' do
|
120
|
-
let(:operand) { relation.project([
|
121
|
-
let(:attributes) { [
|
120
|
+
let(:operand) { relation.project([:id, :name]) }
|
121
|
+
let(:attributes) { [:id] }
|
122
122
|
|
123
|
-
it { should_not
|
123
|
+
it { should_not be(object) }
|
124
124
|
|
125
125
|
it { should be_kind_of(described_class) }
|
126
126
|
|
127
|
-
its(:operand) { should
|
127
|
+
its(:operand) { should be(relation) }
|
128
128
|
|
129
129
|
its(:header) { should == object.header }
|
130
130
|
|
@@ -141,14 +141,14 @@ describe Algebra::Projection, '#optimize' do
|
|
141
141
|
end
|
142
142
|
|
143
143
|
context 'containing a set operation' do
|
144
|
-
let(:left) { Relation.new([
|
145
|
-
let(:right) { Relation.new([
|
146
|
-
let(:operand) { left.union(right)
|
147
|
-
let(:attributes) { [
|
144
|
+
let(:left) { Relation.new([[:id, Integer], [:name, String]], LazyEnumerable.new([[1, 'Dan Kubb']])) }
|
145
|
+
let(:right) { Relation.new([[:id, Integer], [:name, String]], LazyEnumerable.new([[2, 'Dan Kubb']])) }
|
146
|
+
let(:operand) { left.union(right) }
|
147
|
+
let(:attributes) { [:name] }
|
148
148
|
|
149
149
|
it 'pushes the object to each relation' do
|
150
150
|
should eql(Algebra::Union.new(
|
151
|
-
described_class.new(left,
|
151
|
+
described_class.new(left, object.header),
|
152
152
|
described_class.new(right, object.header)
|
153
153
|
))
|
154
154
|
end
|
@@ -166,21 +166,21 @@ describe Algebra::Projection, '#optimize' do
|
|
166
166
|
end
|
167
167
|
|
168
168
|
context 'containing a set operation containing a projection of relations' do
|
169
|
-
let(:left_body) { LazyEnumerable.new([
|
170
|
-
let(:right_body) { LazyEnumerable.new([
|
171
|
-
let(:left) { Relation.new(header, left_body)
|
172
|
-
let(:right) { Relation.new(header, right_body)
|
173
|
-
let(:operand) { left.project([
|
174
|
-
let(:attributes) { [
|
169
|
+
let(:left_body) { LazyEnumerable.new([[1, 'Dan Kubb', 35]]) }
|
170
|
+
let(:right_body) { LazyEnumerable.new([[2, 'Dan Kubb', 35]]) }
|
171
|
+
let(:left) { Relation.new(header, left_body) }
|
172
|
+
let(:right) { Relation.new(header, right_body) }
|
173
|
+
let(:operand) { left.project([:id, :name]).union(right.project([:id, :name])) }
|
174
|
+
let(:attributes) { [:name] }
|
175
175
|
|
176
176
|
before do
|
177
177
|
# skip dup of the left and right body to avoid clearing the method stubs
|
178
|
-
left_body.stub
|
179
|
-
right_body.stub
|
178
|
+
left_body.stub(:frozen?).and_return(true)
|
179
|
+
right_body.stub(:frozen?).and_return(true)
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'pushes the object to each relation, and combine the nested objects' do
|
183
|
-
should eql(left.project([
|
183
|
+
should eql(left.project([:name]).union(right.project([:name])))
|
184
184
|
end
|
185
185
|
|
186
186
|
it 'returns an equivalent relation to the unoptimized operation' do
|
@@ -205,15 +205,15 @@ describe Algebra::Projection, '#optimize' do
|
|
205
205
|
end
|
206
206
|
|
207
207
|
context 'containing a set operation containing a projection of materialized relations' do
|
208
|
-
let(:left_body) { [
|
209
|
-
let(:right_body) { [
|
210
|
-
let(:left) { Relation.new(header, left_body)
|
211
|
-
let(:right) { Relation.new(header, right_body)
|
212
|
-
let(:operand) { left.project([
|
213
|
-
let(:attributes) { [
|
208
|
+
let(:left_body) { [[1, 'Dan Kubb', 35]] }
|
209
|
+
let(:right_body) { [[2, 'Dan Kubb', 35]] }
|
210
|
+
let(:left) { Relation.new(header, left_body) }
|
211
|
+
let(:right) { Relation.new(header, right_body) }
|
212
|
+
let(:operand) { left.project([:id, :name]).union(right.project([:id, :name])) }
|
213
|
+
let(:attributes) { [:name] }
|
214
214
|
|
215
215
|
it 'pushes the object to each relation, and combine the nested objects, then materializes' do
|
216
|
-
should eql(Relation.new([
|
216
|
+
should eql(Relation.new([[:name, String]], [['Dan Kubb']]))
|
217
217
|
end
|
218
218
|
|
219
219
|
it 'returns an equivalent relation to the unoptimized operation' do
|
@@ -236,10 +236,10 @@ describe Algebra::Projection, '#optimize' do
|
|
236
236
|
end
|
237
237
|
|
238
238
|
context 'containing a materialized relation' do
|
239
|
-
let(:operand) { Relation.new(header, [
|
240
|
-
let(:attributes) { [
|
239
|
+
let(:operand) { Relation.new(header, [[1, 'Dan Kubb', 35]]) }
|
240
|
+
let(:attributes) { [:id] }
|
241
241
|
|
242
|
-
it { should eql(Relation::Materialized.new([
|
242
|
+
it { should eql(Relation::Materialized.new([[:id, Integer]], [[1]])) }
|
243
243
|
|
244
244
|
it 'returns an equivalent relation to the unoptimized operation' do
|
245
245
|
should == object
|