alf-core 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -8
- data/Gemfile.lock +9 -17
- data/examples/operators/frame.alf +2 -0
- data/lib/alf-core.rb +24 -22
- data/lib/{alf-adapter/alf → alf}/adapter.rb +0 -0
- data/lib/{alf-adapter/alf → alf}/adapter/connection.rb +4 -10
- data/lib/{alf-adapter/alf → alf}/adapter/connection/schema_cached.rb +0 -0
- data/lib/{alf-adapter-fs/alf → alf}/adapter/folder.rb +0 -0
- data/lib/{alf-adapter-fs/alf → alf}/adapter/folder/connection.rb +3 -2
- data/lib/{alf-adapter-fs/alf → alf}/adapter/fs.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator.rb +12 -9
- data/lib/{alf-aggregator/alf → alf}/aggregator/avg.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/collect.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/concat.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/count.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/max.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/min.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/stddev.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/sum.rb +0 -0
- data/lib/{alf-aggregator/alf → alf}/aggregator/variance.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra.rb +1 -0
- data/lib/{alf-algebra/alf → alf}/algebra/operand.rb +13 -6
- data/lib/{alf-algebra/alf → alf}/algebra/operand/fake.rb +18 -4
- data/lib/alf/algebra/operand/named.rb +65 -0
- data/lib/{alf-algebra/alf → alf}/algebra/operand/proxy.rb +7 -3
- data/lib/{alf-algebra/alf → alf}/algebra/operator.rb +40 -12
- data/lib/{alf-algebra/alf → alf}/algebra/operator/autonum.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/clip.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/coerce.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/compact.rb +8 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/defaults.rb +8 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/extend.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/frame.rb +12 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/generator.rb +8 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/group.rb +10 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/hierarchize.rb +8 -0
- data/lib/{alf-algebra/alf → alf}/algebra/operator/intersect.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/join.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/matching.rb +10 -2
- data/lib/{alf-algebra/alf → alf}/algebra/operator/minus.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/not_matching.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/page.rb +11 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/project.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/quota.rb +12 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/rank.rb +11 -2
- data/lib/{alf-algebra/alf → alf}/algebra/operator/rename.rb +10 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/restrict.rb +12 -2
- data/lib/{alf-algebra/alf → alf}/algebra/operator/sort.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/summarize.rb +10 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/ungroup.rb +11 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/union.rb +9 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/unwrap.rb +13 -1
- data/lib/{alf-algebra/alf → alf}/algebra/operator/wrap.rb +10 -1
- data/lib/alf/algebra/shortcut.rb +40 -0
- data/lib/alf/algebra/shortcut/allbut.rb +25 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support.rb +2 -1
- data/lib/{alf-algebra/alf → alf}/algebra/support/binary.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/classification.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/compiler.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/experimental.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/non_relational.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/nullary.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/relational.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/rewriter.rb +4 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/signature.rb +7 -8
- data/lib/alf/algebra/support/type_check.rb +51 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/unary.rb +0 -0
- data/lib/{alf-algebra/alf → alf}/algebra/support/visitor.rb +2 -1
- data/lib/{alf-algebra/alf → alf}/algebra/support/with_ordering.rb +0 -0
- data/lib/alf/compiler.rb +57 -0
- data/lib/alf/compiler/cog.rb +39 -0
- data/lib/alf/compiler/default.rb +168 -0
- data/lib/alf/compiler/plan.rb +77 -0
- data/lib/{alf-core → alf/core}/loader.rb +0 -0
- data/lib/{alf-core → alf/core}/version.rb +1 -1
- data/lib/{alf-database/alf → alf}/database.rb +0 -0
- data/lib/{alf-database/alf → alf}/database/connection.rb +10 -52
- data/lib/{alf-database/alf → alf}/database/options.rb +2 -5
- data/lib/{alf-core → alf}/dsl.rb +4 -4
- data/lib/{alf-engine/alf → alf}/engine.rb +0 -2
- data/lib/{alf-engine/alf → alf}/engine/aggregate.rb +6 -2
- data/lib/{alf-engine/alf → alf}/engine/autonum.rb +6 -2
- data/lib/{alf-engine/alf → alf}/engine/clip.rb +10 -2
- data/lib/{alf-engine/alf → alf}/engine/coerce.rb +6 -2
- data/lib/alf/engine/cog.rb +58 -0
- data/lib/{alf-engine/alf → alf}/engine/compact.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/compact/set.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/compact/uniq.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/concat.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/defaults.rb +6 -2
- data/lib/{alf-engine/alf → alf}/engine/filter.rb +8 -4
- data/lib/{alf-engine/alf → alf}/engine/generator.rb +6 -2
- data/lib/alf/engine/group.rb +7 -0
- data/lib/{alf-engine/alf → alf}/engine/group/hash.rb +11 -2
- data/lib/{alf-engine/alf → alf}/engine/hierarchize.rb +6 -2
- data/lib/{alf-engine/alf → alf}/engine/infer_heading.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/join.rb +0 -0
- data/lib/{alf-engine/alf → alf}/engine/join/hash.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/leaf.rb +7 -3
- data/lib/{alf-engine/alf → alf}/engine/materialize.rb +5 -1
- data/lib/{alf-engine/alf → alf}/engine/materialize/array.rb +3 -2
- data/lib/{alf-engine/alf → alf}/engine/materialize/hash.rb +3 -2
- data/lib/alf/engine/quota.rb +7 -0
- data/lib/{alf-engine/alf → alf}/engine/quota/cesure.rb +8 -3
- data/lib/alf/engine/rank.rb +7 -0
- data/lib/{alf-engine/alf → alf}/engine/rank/cesure.rb +8 -3
- data/lib/{alf-engine/alf → alf}/engine/rename.rb +6 -2
- data/lib/alf/engine/semi.rb +7 -0
- data/lib/{alf-engine/alf → alf}/engine/semi/hash.rb +7 -2
- data/lib/{alf-engine/alf → alf}/engine/set_attr.rb +8 -4
- data/lib/alf/engine/sort.rb +13 -0
- data/lib/{alf-engine/alf → alf}/engine/sort/in_memory.rb +12 -2
- data/lib/alf/engine/summarize.rb +13 -0
- data/lib/{alf-engine/alf → alf}/engine/summarize/cesure.rb +5 -4
- data/lib/{alf-engine/alf → alf}/engine/summarize/hash.rb +3 -2
- data/lib/{alf-engine/alf → alf}/engine/support/cesure.rb +0 -0
- data/lib/{alf-engine/alf → alf}/engine/take.rb +6 -2
- data/lib/{alf-engine/alf → alf}/engine/to_array.rb +13 -5
- data/lib/{alf-engine/alf → alf}/engine/type_safe.rb +2 -2
- data/lib/{alf-engine/alf → alf}/engine/ungroup.rb +7 -2
- data/lib/{alf-engine/alf → alf}/engine/unwrap.rb +11 -5
- data/lib/{alf-engine/alf → alf}/engine/wrap.rb +6 -2
- data/lib/{alf-core → alf}/errors.rb +2 -3
- data/lib/{alf-core → alf}/ext.rb +0 -0
- data/lib/{alf-core → alf}/ext/domain/heading_based.rb +5 -0
- data/lib/alf/facade.rb +53 -0
- data/lib/{alf-lang/alf → alf}/lang.rb +1 -1
- data/lib/{alf-lang/alf → alf}/lang/functional.rb +0 -4
- data/lib/{alf-lang/alf → alf}/lang/object_oriented.rb +0 -0
- data/lib/{alf-lang/alf → alf}/lang/oo/aggregation_methods.rb +1 -1
- data/lib/{alf-lang/alf → alf}/lang/oo/algebra_methods.rb +0 -12
- data/lib/{alf-lang/alf → alf}/lang/oo/rendering_methods.rb +1 -1
- data/lib/alf/lang/parser.rb +9 -0
- data/lib/alf/lang/parser/lispy.rb +63 -0
- data/lib/alf/lang/parser/safer.rb +69 -0
- data/lib/{alf-lang/alf → alf}/lang/predicates.rb +1 -1
- data/lib/{alf-optimizer/alf → alf}/optimizer.rb +15 -7
- data/lib/alf/optimizer/project.rb +182 -0
- data/lib/{alf-optimizer/alf → alf}/optimizer/restrict.rb +48 -50
- data/lib/{alf-predicate/alf → alf}/predicate.rb +16 -12
- data/lib/{alf-predicate/alf → alf}/predicate/factory.rb +13 -8
- data/lib/{alf-predicate/alf → alf}/predicate/grammar.rb +2 -5
- data/lib/{alf-predicate/alf → alf}/predicate/grammar.sexp.yml +11 -7
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/and.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/contradiction.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/dyadic_comp.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/eq.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/expr.rb +10 -5
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/gt.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/gte.rb +0 -0
- data/lib/{alf-predicate/alf/predicate/nodes/var_ref.rb → alf/predicate/nodes/identifier.rb} +3 -3
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/in.rb +2 -2
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/literal.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/lt.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/lte.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/nadic_bool.rb +0 -0
- data/lib/alf/predicate/nodes/native.rb +32 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/neq.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/not.rb +0 -0
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/or.rb +0 -0
- data/lib/{alf-predicate/alf/predicate/nodes/native.rb → alf/predicate/nodes/qualified_identifier.rb} +8 -4
- data/lib/{alf-predicate/alf → alf}/predicate/nodes/tautology.rb +0 -0
- data/lib/alf/predicate/processors.rb +3 -0
- data/lib/alf/predicate/processors/qualifier.rb +25 -0
- data/lib/alf/predicate/processors/renamer.rb +27 -0
- data/lib/{alf-predicate/alf → alf}/predicate/processors/to_ruby_code.rb +6 -11
- data/lib/{alf-io/alf → alf}/reader.rb +11 -2
- data/lib/{alf-io/alf → alf}/reader/csv.rb +0 -0
- data/lib/{alf-io/alf → alf}/reader/json.rb +0 -0
- data/lib/{alf-io/alf → alf}/reader/rash.rb +0 -0
- data/lib/{alf-io/alf → alf}/reader/ruby.rb +0 -0
- data/lib/alf/reader/yaml.rb +25 -0
- data/lib/{alf-relation/alf → alf}/relation.rb +12 -2
- data/lib/{alf-relvar/alf → alf}/relvar.rb +14 -21
- data/lib/alf/relvar/base.rb +35 -0
- data/lib/{alf-relvar/alf → alf}/relvar/fake.rb +3 -2
- data/lib/{alf-relvar/alf → alf}/relvar/read_only.rb +6 -30
- data/lib/{alf-relvar/alf → alf}/relvar/virtual.rb +0 -31
- data/lib/{alf-io/alf → alf}/renderer.rb +0 -0
- data/lib/{alf-io/alf → alf}/renderer/csv.rb +0 -0
- data/lib/{alf-io/alf → alf}/renderer/json.rb +0 -0
- data/lib/{alf-io/alf → alf}/renderer/rash.rb +0 -0
- data/lib/{alf-io/alf → alf}/renderer/text.rb +0 -0
- data/lib/{alf-io/alf → alf}/renderer/yaml.rb +2 -2
- data/lib/{alf-support/alf → alf}/support.rb +2 -1
- data/lib/{alf-support/alf → alf}/support/coerce.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/config.rb +0 -0
- data/lib/{alf-io/alf → alf}/support/csv_utils.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/dot_utils.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/miscellaneous.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/ordered_set.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/registry.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/scope.rb +0 -0
- data/lib/{alf-support/alf → alf}/support/to_lispy.rb +6 -1
- data/lib/{alf-support/alf → alf}/support/to_ruby_literal.rb +0 -0
- data/lib/alf/support/tree.rb +51 -0
- data/lib/{alf-support/alf → alf}/support/tuple_scope.rb +9 -1
- data/lib/{alf-relation/alf → alf}/tuple.rb +1 -1
- data/lib/{alf-types/alf → alf}/types.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/attr_list.rb +2 -2
- data/lib/{alf-types/alf → alf}/types/attr_name.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/boolean.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/heading.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/keys.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/ordering.rb +7 -1
- data/lib/{alf-types/alf → alf}/types/renaming.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/selection.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/selector.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/size.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/summarization.rb +0 -0
- data/lib/{alf-types/alf → alf}/types/tuple_computation.rb +13 -4
- data/lib/{alf-types/alf → alf}/types/tuple_expression.rb +6 -19
- data/lib/{alf-types/alf → alf}/types/type_check.rb +1 -0
- data/lib/{alf-update/alf → alf}/update.rb +0 -0
- data/lib/{alf-update/alf → alf}/update/deleter.rb +0 -3
- data/lib/{alf-update/alf → alf}/update/inserter.rb +1 -7
- data/lib/{alf-update/alf → alf}/update/updater.rb +0 -2
- data/lib/{alf-viewpoint/alf → alf}/viewpoint.rb +9 -7
- data/lib/{alf-viewpoint/alf → alf}/viewpoint/metadata.rb +5 -2
- data/spec/compiler_helper.rb +20 -0
- data/spec/integration/relation/test_to_array.rb +6 -6
- data/spec/integration/test_examples.rb +14 -6
- data/spec/shared/a_cog.rb +8 -4
- data/spec/shared/a_valid_type_implementation.rb +4 -7
- data/spec/spec_helper.rb +9 -5
- data/spec/type_check_helper.rb +1 -0
- data/spec/unit/alf-adapter/shared_examples/an_adapter_with_readable_cogs.rb +1 -1
- data/spec/unit/alf-aggregator/test_concat.rb +8 -0
- data/spec/unit/alf-algebra/operand/named/test_hash_and_equal.rb +53 -0
- data/spec/unit/alf-algebra/operand/named/test_keys.rb +1 -1
- data/spec/unit/alf-algebra/operand/named/test_to_ascii_tree.rb +18 -0
- data/spec/unit/alf-algebra/operand/named/test_to_cog.rb +24 -0
- data/spec/unit/alf-algebra/operand/named/test_to_relvar.rb +1 -1
- data/spec/unit/alf-algebra/operand/named/test_type_check.rb +38 -0
- data/spec/unit/alf-algebra/operand/proxy/test_to_cog.rb +42 -0
- data/spec/unit/alf-algebra/operand/test_coerce.rb +0 -6
- data/spec/unit/alf-algebra/operand/test_proxy.rb +1 -1
- data/spec/unit/alf-algebra/operator/allbut/test_key_preserving.rb +1 -1
- data/spec/unit/alf-algebra/operator/allbut/test_keys.rb +1 -1
- data/spec/unit/alf-algebra/operator/allbut/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/autonum/test_type_check.rb +30 -0
- data/spec/unit/alf-algebra/operator/clip/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/coerce/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/commons/test_resulting_type.rb +20 -0
- data/spec/unit/alf-algebra/operator/commons/test_to_ascii_tree.rb +40 -0
- data/spec/unit/alf-algebra/operator/extend/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/frame/test_type_check.rb +54 -0
- data/spec/unit/alf-algebra/operator/group/test_type_check.rb +50 -0
- data/spec/unit/alf-algebra/operator/hierarchize/test_type_check.rb +54 -0
- data/spec/unit/alf-algebra/operator/intersect/test_type_check.rb +30 -0
- data/spec/unit/alf-algebra/operator/join/test_type_check.rb +62 -0
- data/spec/unit/alf-algebra/operator/matching/test_keys.rb +1 -1
- data/spec/unit/alf-algebra/operator/matching/test_type_check.rb +62 -0
- data/spec/unit/alf-algebra/operator/minus/test_type_check.rb +30 -0
- data/spec/unit/alf-algebra/operator/not_matching/test_type_check.rb +62 -0
- data/spec/unit/alf-algebra/operator/page/test_type_check.rb +50 -0
- data/spec/unit/alf-algebra/operator/project/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/quota/test_type_check.rb +54 -0
- data/spec/unit/alf-algebra/operator/rank/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/rename/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/restrict/test_type_check.rb +46 -0
- data/spec/unit/alf-algebra/operator/shared/test_to_cog.rb +34 -0
- data/spec/unit/alf-algebra/operator/sort/test_type_check.rb +30 -0
- data/spec/unit/alf-algebra/operator/summarize/test_type_check.rb +42 -0
- data/spec/unit/alf-algebra/operator/test_hash_and_equal.rb +59 -0
- data/spec/unit/alf-algebra/operator/ungroup/test_type_check.rb +44 -0
- data/spec/unit/alf-algebra/operator/union/test_type_check.rb +30 -0
- data/spec/unit/alf-algebra/operator/unwrap/test_type_check.rb +44 -0
- data/spec/unit/alf-algebra/operator/wrap/test_type_check.rb +50 -0
- data/spec/unit/alf-algebra/support/signature/test_to_lispy.rb +24 -9
- data/spec/unit/alf-algebra/support/test_non_relational.rb +1 -2
- data/spec/unit/alf-algebra/support/test_relational.rb +1 -1
- data/spec/unit/alf-compiler/default/test_allbut.rb +65 -0
- data/spec/unit/alf-compiler/default/test_autonum.rb +30 -0
- data/spec/unit/alf-compiler/default/test_clip.rb +30 -0
- data/spec/unit/alf-compiler/default/test_coerce.rb +30 -0
- data/spec/unit/alf-compiler/default/test_compact.rb +26 -0
- data/spec/unit/alf-compiler/default/test_completude.rb +16 -0
- data/spec/unit/alf-compiler/default/test_defaults.rb +50 -0
- data/spec/unit/alf-compiler/default/test_extend.rb +34 -0
- data/spec/unit/alf-compiler/default/test_frame.rb +77 -0
- data/spec/unit/alf-compiler/default/test_generator.rb +30 -0
- data/spec/unit/alf-compiler/default/test_group.rb +38 -0
- data/spec/unit/alf-compiler/default/test_hierarchize.rb +40 -0
- data/spec/unit/alf-compiler/default/test_intersect.rb +34 -0
- data/spec/unit/alf-compiler/default/test_join.rb +34 -0
- data/spec/unit/alf-compiler/default/test_matching.rb +38 -0
- data/spec/unit/alf-compiler/default/test_minus.rb +38 -0
- data/spec/unit/alf-compiler/default/test_not_matching.rb +38 -0
- data/spec/unit/alf-compiler/default/test_page.rb +91 -0
- data/spec/unit/alf-compiler/default/test_project.rb +76 -0
- data/spec/unit/alf-compiler/default/test_quota.rb +88 -0
- data/spec/unit/alf-compiler/default/test_rank.rb +71 -0
- data/spec/unit/alf-compiler/default/test_rename.rb +30 -0
- data/spec/unit/alf-compiler/default/test_restrict.rb +34 -0
- data/spec/unit/alf-compiler/default/test_sort.rb +81 -0
- data/spec/unit/alf-compiler/default/test_summarize.rb +85 -0
- data/spec/unit/alf-compiler/default/test_ungroup.rb +30 -0
- data/spec/unit/alf-compiler/default/test_union.rb +36 -0
- data/spec/unit/alf-compiler/default/test_unwrap.rb +30 -0
- data/spec/unit/alf-compiler/default/test_wrap.rb +38 -0
- data/spec/unit/alf-compiler/shared/compiled_examples.rb +111 -0
- data/spec/unit/alf-compiler/test_principle.rb +332 -0
- data/spec/unit/alf-core/test_aggregator.rb +0 -24
- data/spec/unit/alf-database/connection/test_parse.rb +0 -49
- data/spec/unit/alf-database/connection/test_relvar.rb +1 -9
- data/spec/unit/alf-database/options/test_parser.rb +23 -0
- data/spec/unit/alf-engine/cog/test_to_ascii_tree.rb +14 -0
- data/spec/unit/alf-engine/test_aggregate.rb +2 -2
- data/spec/unit/alf-engine/test_filter.rb +1 -1
- data/spec/unit/alf-engine/test_to_array.rb +16 -2
- data/spec/unit/alf-io/reader/test_yaml.rb +30 -0
- data/spec/unit/alf-io/renderer/test_yaml.rb +11 -0
- data/spec/unit/alf-lang/functional/test_aggregation.rb +18 -4
- data/spec/unit/alf-lang/parser/lispy/test_connection_bang.rb +28 -0
- data/spec/unit/alf-lang/parser/lispy/test_parse.rb +38 -0
- data/spec/unit/alf-lang/parser/lispy/test_to_s.rb +16 -0
- data/spec/unit/alf-lang/parser/safer/safe.txt +5 -0
- data/spec/unit/alf-lang/parser/safer/test_parse.rb +82 -0
- data/spec/unit/alf-lang/parser/safer/unsafe.txt +14 -0
- data/spec/unit/alf-optimizer/restrict/test_on_autonum.rb +1 -1
- data/spec/unit/alf-optimizer/test_quota.rb +1 -1
- data/spec/unit/alf-optimizer/test_rename.rb +7 -0
- data/spec/unit/alf-optimizer/test_summarize.rb +1 -1
- data/spec/unit/alf-predicate/expr/test_to_proc.rb +4 -6
- data/spec/unit/alf-predicate/expr/test_to_ruby_code.rb +23 -23
- data/spec/unit/alf-predicate/factory/shared/a_comparison_factory_method.rb +3 -3
- data/spec/unit/alf-predicate/factory/test_between.rb +1 -1
- data/spec/unit/alf-predicate/factory/test_comp.rb +3 -3
- data/spec/unit/alf-predicate/factory/test_factor_predicate.rb +3 -3
- data/spec/unit/alf-predicate/factory/{test_var_ref.rb → test_identifier.rb} +4 -4
- data/spec/unit/alf-predicate/factory/test_in.rb +1 -1
- data/spec/unit/alf-predicate/factory/test_native.rb +9 -4
- data/spec/unit/alf-predicate/factory/test_qualified_identifier.rb +17 -0
- data/spec/unit/alf-predicate/grammar/test_match.rb +9 -9
- data/spec/unit/alf-predicate/grammar/test_sexpr.rb +11 -11
- data/spec/unit/alf-predicate/nodes/{var_ref → identifier}/test_and_split.rb +2 -2
- data/spec/unit/alf-predicate/nodes/{var_ref → identifier}/test_free_variables.rb +2 -2
- data/spec/unit/alf-predicate/nodes/identifier/test_name.rb +14 -0
- data/spec/unit/alf-predicate/nodes/qualified_identifier/test_and_split.rb +25 -0
- data/spec/unit/alf-predicate/nodes/qualified_identifier/test_free_variables.rb +14 -0
- data/spec/unit/alf-predicate/nodes/qualified_identifier/test_name.rb +14 -0
- data/spec/unit/alf-predicate/nodes/qualified_identifier/test_qualifier.rb +14 -0
- data/spec/unit/alf-predicate/predicate/test_and_split.rb +4 -4
- data/spec/unit/alf-predicate/predicate/test_bool_and.rb +1 -1
- data/spec/unit/alf-predicate/predicate/test_bool_not.rb +1 -1
- data/spec/unit/alf-predicate/predicate/test_bool_or.rb +1 -1
- data/spec/unit/alf-predicate/predicate/test_coerce.rb +9 -8
- data/spec/unit/alf-predicate/predicate/test_contradiction.rb +2 -2
- data/spec/unit/alf-predicate/predicate/test_factory_methods.rb +12 -12
- data/spec/unit/alf-predicate/predicate/test_qualify.rb +36 -0
- data/spec/unit/alf-predicate/predicate/test_rename.rb +58 -15
- data/spec/unit/alf-predicate/predicate/test_tautology.rb +2 -2
- data/spec/unit/alf-predicate/predicate/test_to_ruby_code.rb +8 -2
- data/spec/unit/alf-predicate/predicate/test_to_ruby_literal.rb +1 -1
- data/spec/unit/alf-predicate/test_predicate.rb +7 -8
- data/spec/unit/alf-relation/relation/class/test_dum.rb +19 -0
- data/spec/unit/alf-relation/relation/test_heading.rb +1 -1
- data/spec/unit/alf-relation/relation/test_keys.rb +17 -0
- data/spec/unit/alf-relation/relation/test_relation.rb +1 -1
- data/spec/unit/alf-relation/relation/test_to_a.rb +10 -10
- data/spec/unit/alf-relvar/base/test_oo_lang.rb +26 -10
- data/spec/unit/alf-relvar/base/test_to_cog.rb +2 -2
- data/spec/unit/alf-relvar/read_only/test_to_relation.rb +17 -0
- data/spec/unit/alf-relvar/read_only/test_type.rb +0 -4
- data/spec/unit/alf-relvar/virtual/test_oo_lang.rb +0 -4
- data/spec/unit/alf-relvar/virtual/test_to_cog.rb +4 -4
- data/spec/unit/alf-relvar/virtual/test_to_s.rb +1 -1
- data/spec/unit/alf-support/test_to_lispy.rb +13 -31
- data/spec/unit/alf-support/test_tuple_scope.rb +11 -0
- data/spec/unit/alf-types/ordering/test_coerce.rb +13 -0
- data/spec/unit/alf-types/ordering/test_lte.rb +43 -0
- data/spec/unit/alf-types/summarization/test_coerce.rb +2 -2
- data/spec/unit/alf-types/summarization/test_least.rb +1 -1
- data/spec/unit/alf-types/summarization/test_summarize.rb +1 -1
- data/spec/unit/alf-types/test_summarization.rb +2 -2
- data/spec/unit/alf-types/test_tuple_expression.rb +2 -2
- data/spec/unit/alf-types/tuple_computation/test_coerce.rb +4 -13
- data/spec/unit/alf-types/tuple_computation/test_empty.rb +24 -0
- data/spec/unit/alf-types/tuple_computation/test_project.rb +46 -0
- data/spec/unit/alf-types/tuple_expression/test_coerce.rb +1 -10
- data/spec/unit/alf-types/tuple_expression/test_evaluate.rb +0 -8
- data/spec/unit/alf-types/tuple_expression/test_to_ruby_literal.rb +0 -5
- data/spec/unit/alf-update/deleter/{test_var_ref.rb → test_identifier.rb} +1 -1
- data/spec/unit/alf-update/inserter/{test_var_ref.rb → test_identifier.rb} +1 -1
- data/spec/unit/alf-update/updater/{test_var_ref.rb → test_identifier.rb} +1 -1
- data/spec/unit/alf-viewpoint/test_native_const.rb +1 -1
- data/spec/update_helper.rb +18 -2
- metadata +417 -313
- data/lib/alf-algebra/alf/algebra/operand/named.rb +0 -36
- data/lib/alf-algebra/alf/algebra/operator/infer_heading.rb +0 -19
- data/lib/alf-algebra/alf/algebra/operator/type_safe.rb +0 -21
- data/lib/alf-algebra/alf/algebra/support/to_dot.rb +0 -196
- data/lib/alf-core/facade.rb +0 -39
- data/lib/alf-engine/alf/engine/cog.rb +0 -50
- data/lib/alf-engine/alf/engine/compiler.rb +0 -171
- data/lib/alf-engine/alf/engine/group.rb +0 -3
- data/lib/alf-engine/alf/engine/quota.rb +0 -3
- data/lib/alf-engine/alf/engine/rank.rb +0 -3
- data/lib/alf-engine/alf/engine/semi.rb +0 -3
- data/lib/alf-engine/alf/engine/sort.rb +0 -30
- data/lib/alf-engine/alf/engine/summarize.rb +0 -4
- data/lib/alf-engine/alf/engine/to_dot.rb +0 -60
- data/lib/alf-io/alf/io.rb +0 -6
- data/lib/alf-lang/alf/lang/lispy.rb +0 -65
- data/lib/alf-predicate/alf/predicate/parser.rb +0 -12
- data/lib/alf-predicate/alf/predicate/processors.rb +0 -3
- data/lib/alf-predicate/alf/predicate/processors/renamer.rb +0 -19
- data/lib/alf-predicate/alf/predicate/processors/to_proc.rb +0 -35
- data/lib/alf-relvar/alf/relvar/base.rb +0 -69
- data/lib/alf-support/alf/support/bindable.rb +0 -26
- data/spec/integration/algebra/test_to_dot.rb +0 -14
- data/spec/integration/relvar/test_type_safe.rb +0 -22
- data/spec/unit/alf-algebra/operator/infer_heading/test_keys.rb +0 -23
- data/spec/unit/alf-algebra/operator/test_infer_heading.rb +0 -16
- data/spec/unit/alf-algebra/operator/type_safe/test_heading.rb +0 -26
- data/spec/unit/alf-algebra/operator/type_safe/test_keys.rb +0 -26
- data/spec/unit/alf-engine/compiler/test_on_frame.rb +0 -70
- data/spec/unit/alf-engine/compiler/test_on_hierarchize.rb +0 -33
- data/spec/unit/alf-engine/compiler/test_on_page.rb +0 -128
- data/spec/unit/alf-engine/compiler/test_unsupported.rb +0 -48
- data/spec/unit/alf-lang/lispy/test_connection_bang.rb +0 -26
- data/spec/unit/alf-lang/lispy/test_parse.rb +0 -38
- data/spec/unit/alf-lang/lispy/test_to_s.rb +0 -14
- data/spec/unit/alf-optimizer/optimizer/test_optimizer.rb +0 -37
- data/spec/unit/alf-optimizer/test_infer_heading.rb +0 -9
- data/spec/unit/alf-predicate/grammar/test_parse.rb +0 -23
- data/spec/unit/alf-predicate/nodes/var_ref/test_var_name.rb +0 -14
- data/spec/unit/alf-relvar/base/test_name.rb +0 -15
- data/spec/unit/alf-relvar/virtual/test_connection.rb +0 -15
- data/spec/unit/alf-support/bindable/test_bind.rb +0 -60
- data/spec/unit/alf-support/bindable/test_bound.rb +0 -31
- data/spec/unit/alf-support/bindable/test_connection.rb +0 -31
- data/spec/unit/alf-support/bindable/test_connection_bang.rb +0 -35
- data/spec/unit/alf-update/inserter/test_type_safe.rb +0 -72
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 0.15.0 / FIX ME
|
2
|
+
|
3
|
+
* Compiler infrastructure entirely rewritten in alf-compiler
|
4
|
+
* Changed signature of `Adapter::Connection#cog` and associated `#to_cog`
|
5
|
+
* Removed `#bind` of algebra expressions everywhere
|
6
|
+
|
1
7
|
# 0.14.0 / 01-10-2013
|
2
8
|
|
3
9
|
## Types
|
@@ -20,6 +26,10 @@
|
|
20
26
|
the connection and returns the resulting relation. TupleComputation delegates
|
21
27
|
accordingly.
|
22
28
|
|
29
|
+
## Predicate
|
30
|
+
|
31
|
+
* Added support for qualified identifiers and Predicate#qualify.
|
32
|
+
|
23
33
|
## Support
|
24
34
|
|
25
35
|
* TupleScope now delegates to_s, inspect and [] to the underlying tuple. This
|
data/Gemfile
CHANGED
@@ -4,12 +4,13 @@ group :runtime do
|
|
4
4
|
gem "myrrha", "~> 3.0"
|
5
5
|
gem "domain", "~> 1.0"
|
6
6
|
gem "path", "~> 1.3"
|
7
|
-
gem "sexpr", "~> 0.
|
7
|
+
gem "sexpr", "~> 0.6.0"
|
8
8
|
end
|
9
9
|
|
10
10
|
group :test do
|
11
11
|
gem "rake", "~> 10.1"
|
12
12
|
gem "rspec", "~> 2.14"
|
13
|
+
gem "ruby_cop", "~> 1.0"
|
13
14
|
end
|
14
15
|
|
15
16
|
group :release do
|
@@ -17,13 +18,6 @@ group :release do
|
|
17
18
|
gem "rspec", "~> 2.14"
|
18
19
|
end
|
19
20
|
|
20
|
-
group :doc do
|
21
|
-
gem "yard", "~> 0.8.2"
|
22
|
-
gem "bluecloth", "~> 2.2"
|
23
|
-
gem "redcarpet", "~> 2.2"
|
24
|
-
end
|
25
|
-
|
26
21
|
group :extra do
|
27
22
|
gem "highline", "~> 1.6"
|
28
|
-
gem 'json', :platforms => [:ruby_18, :jruby, :mingw_18]
|
29
23
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,41 +1,33 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
bluecloth (2.2.0)
|
5
4
|
diff-lcs (1.2.4)
|
6
5
|
domain (1.0.0)
|
7
|
-
highline (1.6.
|
8
|
-
json (1.8.0)
|
9
|
-
json (1.8.0-java)
|
6
|
+
highline (1.6.20)
|
10
7
|
myrrha (3.0.0)
|
11
8
|
domain (~> 1.0)
|
12
|
-
path (1.3.
|
9
|
+
path (1.3.3)
|
13
10
|
rake (10.1.0)
|
14
|
-
redcarpet (2.3.0)
|
15
11
|
rspec (2.14.1)
|
16
12
|
rspec-core (~> 2.14.0)
|
17
13
|
rspec-expectations (~> 2.14.0)
|
18
14
|
rspec-mocks (~> 2.14.0)
|
19
|
-
rspec-core (2.14.
|
20
|
-
rspec-expectations (2.14.
|
15
|
+
rspec-core (2.14.7)
|
16
|
+
rspec-expectations (2.14.3)
|
21
17
|
diff-lcs (>= 1.1.3, < 2.0)
|
22
|
-
rspec-mocks (2.14.
|
23
|
-
|
24
|
-
|
18
|
+
rspec-mocks (2.14.4)
|
19
|
+
ruby_cop (1.0.5)
|
20
|
+
sexpr (0.6.0)
|
25
21
|
|
26
22
|
PLATFORMS
|
27
|
-
java
|
28
23
|
ruby
|
29
24
|
|
30
25
|
DEPENDENCIES
|
31
|
-
bluecloth (~> 2.2)
|
32
26
|
domain (~> 1.0)
|
33
27
|
highline (~> 1.6)
|
34
|
-
json
|
35
28
|
myrrha (~> 3.0)
|
36
29
|
path (~> 1.3)
|
37
30
|
rake (~> 10.1)
|
38
|
-
redcarpet (~> 2.2)
|
39
31
|
rspec (~> 2.14)
|
40
|
-
|
41
|
-
|
32
|
+
ruby_cop (~> 1.0)
|
33
|
+
sexpr (~> 0.6.0)
|
data/lib/alf-core.rb
CHANGED
@@ -1,30 +1,32 @@
|
|
1
|
-
require_relative 'alf
|
2
|
-
require_relative 'alf
|
3
|
-
require_relative 'alf
|
4
|
-
require_relative 'alf
|
5
|
-
require_relative 'alf
|
1
|
+
require_relative 'alf/core/loader'
|
2
|
+
require_relative 'alf/core/version'
|
3
|
+
require_relative 'alf/errors'
|
4
|
+
require_relative 'alf/ext'
|
5
|
+
require_relative 'alf/facade'
|
6
6
|
|
7
7
|
module Alf
|
8
8
|
TupleLike = lambda{|t| t.is_a?(Hash) || t.is_a?(Tuple) }
|
9
9
|
RelationLike = lambda{|r| Relation===r || Engine::Cog===r || Reader===r || Relvar===r }
|
10
10
|
end
|
11
11
|
|
12
|
-
require_relative 'alf
|
13
|
-
require_relative 'alf
|
14
|
-
require_relative 'alf
|
15
|
-
require_relative 'alf
|
16
|
-
require_relative 'alf
|
17
|
-
require_relative
|
18
|
-
require_relative
|
19
|
-
require_relative 'alf
|
20
|
-
require_relative 'alf
|
21
|
-
require_relative 'alf
|
22
|
-
require_relative 'alf
|
23
|
-
require_relative 'alf
|
24
|
-
require_relative 'alf
|
25
|
-
require_relative 'alf
|
26
|
-
require_relative 'alf
|
27
|
-
require_relative 'alf
|
12
|
+
require_relative 'alf/predicate'
|
13
|
+
require_relative 'alf/support'
|
14
|
+
require_relative 'alf/types'
|
15
|
+
require_relative 'alf/aggregator'
|
16
|
+
require_relative 'alf/algebra'
|
17
|
+
require_relative 'alf/compiler'
|
18
|
+
require_relative "alf/engine"
|
19
|
+
require_relative 'alf/reader'
|
20
|
+
require_relative 'alf/renderer'
|
21
|
+
require_relative 'alf/lang'
|
22
|
+
require_relative 'alf/relation'
|
23
|
+
require_relative 'alf/relvar'
|
24
|
+
require_relative 'alf/optimizer'
|
25
|
+
require_relative 'alf/update'
|
26
|
+
require_relative 'alf/adapter'
|
27
|
+
require_relative 'alf/viewpoint'
|
28
|
+
require_relative 'alf/database'
|
29
|
+
require_relative 'alf/adapter/fs'
|
28
30
|
|
29
31
|
module Alf
|
30
32
|
extend Facade
|
@@ -33,5 +35,5 @@ module Alf
|
|
33
35
|
DEE = Relation::DEE
|
34
36
|
end
|
35
37
|
|
36
|
-
require_relative 'alf
|
38
|
+
require_relative 'alf/dsl'
|
37
39
|
include Alf::Dsl unless defined?(ALF_NO_CORE_EXTENSIONS)
|
File without changes
|
@@ -48,9 +48,10 @@ module Alf
|
|
48
48
|
|
49
49
|
### read-only methods
|
50
50
|
|
51
|
-
# Returns a cog for
|
52
|
-
|
53
|
-
|
51
|
+
# Returns a base cog for the compilation of `expr` inside the compilation
|
52
|
+
# plan `plan`. `expr` is guaranteed to be a `Algebra::Operand::Named`.
|
53
|
+
def cog(plan = nil, expr = nil)
|
54
|
+
raise NotSupportedError, "Unable to serve cog `#{expr}` in `#{self}`"
|
54
55
|
end
|
55
56
|
|
56
57
|
### update methods
|
@@ -75,13 +76,6 @@ module Alf
|
|
75
76
|
raise NotSupportedError, "Unable to update in `#{self}`"
|
76
77
|
end
|
77
78
|
|
78
|
-
### compilation chain
|
79
|
-
|
80
|
-
# Returns a compiler instance
|
81
|
-
def compiler
|
82
|
-
Engine::Compiler.new
|
83
|
-
end
|
84
|
-
|
85
79
|
end # class Connection
|
86
80
|
end # class Adapter
|
87
81
|
end # module Alf
|
File without changes
|
File without changes
|
@@ -10,8 +10,9 @@ module Alf
|
|
10
10
|
!find_file(name).nil?
|
11
11
|
end
|
12
12
|
|
13
|
-
# Returns a cog for `
|
14
|
-
def cog(
|
13
|
+
# Returns a cog for `expr` inside the compilation plan `plan`
|
14
|
+
def cog(plan, expr)
|
15
|
+
name = expr.name
|
15
16
|
if f = find_file(name)
|
16
17
|
reader = Reader.reader(find_file(name))
|
17
18
|
Alf::Engine::Leaf.new(reader, expr)
|
File without changes
|
@@ -77,10 +77,6 @@ module Alf
|
|
77
77
|
case arg
|
78
78
|
when Aggregator
|
79
79
|
arg
|
80
|
-
when String
|
81
|
-
agg = instance_eval(arg)
|
82
|
-
agg.source = arg
|
83
|
-
agg
|
84
80
|
else
|
85
81
|
raise ArgumentError, "Invalid arg `arg` for Aggregator()"
|
86
82
|
end
|
@@ -102,10 +98,17 @@ module Alf
|
|
102
98
|
#
|
103
99
|
# Aggregator.new{ size * price }
|
104
100
|
#
|
105
|
-
def initialize(
|
106
|
-
options
|
107
|
-
|
108
|
-
|
101
|
+
def initialize(*args, &block)
|
102
|
+
@options = default_options
|
103
|
+
args.push(block) if block
|
104
|
+
args.each do |arg|
|
105
|
+
case arg
|
106
|
+
when Symbol, Proc then @functor = Support.coerce(arg, TupleExpression)
|
107
|
+
when Hash then @options = @options.merge(arg)
|
108
|
+
else
|
109
|
+
raise ArgumentError, "Unexpected `#{arg}`"
|
110
|
+
end
|
111
|
+
end
|
109
112
|
end
|
110
113
|
|
111
114
|
# Returns the default options to use
|
@@ -186,7 +189,7 @@ module Alf
|
|
186
189
|
def to_lispy
|
187
190
|
has_source_code!
|
188
191
|
rescue NotImplementedError
|
189
|
-
"[
|
192
|
+
"#{Support.rubycase_name(self.class)}{|t| [code unavailable] }"
|
190
193
|
end
|
191
194
|
|
192
195
|
# Checks equality with another aggregator
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Alf
|
2
2
|
module Algebra
|
3
3
|
module Operand
|
4
|
-
include Support::Bindable
|
5
4
|
|
6
5
|
def self.coerce(op)
|
7
6
|
case op
|
@@ -32,18 +31,26 @@ module Alf
|
|
32
31
|
raise NotSupportedError, "Key inference unsupported on `#{self}`"
|
33
32
|
end
|
34
33
|
|
34
|
+
def type_check(options = {strict: false})
|
35
|
+
heading
|
36
|
+
end
|
37
|
+
|
38
|
+
def resulting_type
|
39
|
+
Relation[heading]
|
40
|
+
end
|
41
|
+
|
35
42
|
### to_xxx
|
36
43
|
|
37
|
-
def to_cog
|
38
|
-
|
44
|
+
def to_cog(plan = nil)
|
45
|
+
raise NotSupportedError, "Compilation unsupported on `#{self}`"
|
39
46
|
end
|
40
47
|
|
41
48
|
def to_relation
|
42
|
-
|
49
|
+
to_cog.to_relation
|
43
50
|
end
|
44
51
|
|
45
|
-
def
|
46
|
-
|
52
|
+
def to_ascii_tree(buffer = "")
|
53
|
+
Support::Tree.new(self).to_text(buffer)
|
47
54
|
end
|
48
55
|
|
49
56
|
end # module Operand
|
@@ -4,9 +4,15 @@ module Alf
|
|
4
4
|
class Fake
|
5
5
|
include Operand
|
6
6
|
|
7
|
-
def initialize(connection = nil)
|
7
|
+
def initialize(connection = nil, cog = nil)
|
8
8
|
@connection = connection
|
9
9
|
@attributes = {}
|
10
|
+
@cog = cog
|
11
|
+
end
|
12
|
+
attr_accessor :connection
|
13
|
+
|
14
|
+
def with_connection(conn)
|
15
|
+
dup.tap{|d| d.connection = conn }
|
10
16
|
end
|
11
17
|
|
12
18
|
def with_heading(h)
|
@@ -37,11 +43,19 @@ module Alf
|
|
37
43
|
end
|
38
44
|
|
39
45
|
def to_relvar
|
40
|
-
|
46
|
+
if connection && name
|
47
|
+
Operand::Named.new(name, connection).to_relvar
|
48
|
+
else
|
49
|
+
Relvar::Fake.new(self, heading)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_cog(plan = nil)
|
54
|
+
@cog || Engine::Leaf.new([], self)
|
41
55
|
end
|
42
56
|
|
43
|
-
def
|
44
|
-
|
57
|
+
def to_s
|
58
|
+
name.to_s
|
45
59
|
end
|
46
60
|
|
47
61
|
def to_lispy
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Alf
|
2
|
+
module Algebra
|
3
|
+
module Operand
|
4
|
+
class Named
|
5
|
+
include Operand
|
6
|
+
|
7
|
+
def initialize(name, connection = nil)
|
8
|
+
@name = name
|
9
|
+
@connection = connection
|
10
|
+
end
|
11
|
+
attr_reader :name, :connection
|
12
|
+
|
13
|
+
def connection!
|
14
|
+
raise UnboundError, "Expression not bound `#{name}`" unless connection
|
15
|
+
connection
|
16
|
+
end
|
17
|
+
|
18
|
+
def type_check(options = {strict: false})
|
19
|
+
return heading if connection!.knows?(name)
|
20
|
+
raise TypeCheckError, "No such relvar `#{name}`"
|
21
|
+
end
|
22
|
+
|
23
|
+
def keys
|
24
|
+
connection!.keys(name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def heading
|
28
|
+
connection!.heading(name)
|
29
|
+
end
|
30
|
+
|
31
|
+
def hash
|
32
|
+
@hash ||= name.hash + 37*connection.hash
|
33
|
+
end
|
34
|
+
|
35
|
+
def ==(other)
|
36
|
+
super || (other.is_a?(Named) &&
|
37
|
+
other.name==name &&
|
38
|
+
other.connection == connection)
|
39
|
+
end
|
40
|
+
alias :eql? :==
|
41
|
+
|
42
|
+
def to_cog(plan = Alf::Compiler::Plan.new)
|
43
|
+
connection!.cog(plan, self)
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_relvar
|
47
|
+
Relvar::Base.new(self)
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_s
|
51
|
+
name.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def inspect
|
55
|
+
"Operand::Named(#{name.inspect})"
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_lispy
|
59
|
+
name.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
end # Named
|
63
|
+
end # module Operand
|
64
|
+
end # module Algebra
|
65
|
+
end # module Alf
|
@@ -19,17 +19,21 @@ module Alf
|
|
19
19
|
super
|
20
20
|
end
|
21
21
|
|
22
|
-
def to_cog
|
23
|
-
return subject.to_cog if subject.respond_to?(:to_cog)
|
22
|
+
def to_cog(*args, &bl)
|
23
|
+
return subject.to_cog(*args, &bl) if subject.respond_to?(:to_cog)
|
24
24
|
Alf::Engine::Leaf.new(subject)
|
25
25
|
end
|
26
26
|
|
27
27
|
def to_relvar
|
28
28
|
return subject.to_relvar if subject.respond_to?(:to_relvar)
|
29
|
-
|
29
|
+
Relvar::ReadOnly.new(self)
|
30
30
|
end
|
31
31
|
|
32
32
|
def to_s
|
33
|
+
subject.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect
|
33
37
|
"Operand::Proxy(#{subject})"
|
34
38
|
end
|
35
39
|
|