alf 0.9.3 → 0.10.0
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/CHANGELOG.md +255 -129
- data/Gemfile +31 -1
- data/Gemfile.lock +17 -20
- data/LICENCE.md +1 -1
- data/Manifest.txt +2 -0
- data/README.md +37 -43
- data/TODO.md +1 -1
- data/alf.gemspec +10 -7
- data/alf.noespec +24 -13
- data/bin/alf +2 -2
- data/doc/commands/exec.md +16 -0
- data/doc/commands/help.md +11 -0
- data/doc/commands/main.md +33 -0
- data/doc/commands/show.md +19 -0
- data/doc/operators/non_relational/autonum.md +23 -0
- data/doc/operators/non_relational/clip.md +31 -0
- data/doc/operators/non_relational/coerce.md +15 -0
- data/doc/operators/non_relational/compact.md +20 -0
- data/doc/operators/non_relational/defaults.md +32 -0
- data/doc/operators/non_relational/generator.md +20 -0
- data/doc/operators/non_relational/sort.md +24 -0
- data/doc/operators/relational/extend.md +18 -0
- data/doc/operators/relational/group.md +27 -0
- data/doc/operators/relational/intersect.md +13 -0
- data/doc/operators/relational/join.md +27 -0
- data/doc/operators/relational/matching.md +20 -0
- data/doc/operators/relational/minus.md +12 -0
- data/doc/operators/relational/not-matching.md +20 -0
- data/doc/operators/relational/project.md +28 -0
- data/doc/operators/relational/quota.md +21 -0
- data/doc/operators/relational/rank.md +27 -0
- data/doc/operators/relational/rename.md +17 -0
- data/doc/operators/relational/restrict.md +25 -0
- data/doc/operators/relational/summarize.md +25 -0
- data/doc/operators/relational/ungroup.md +20 -0
- data/doc/operators/relational/union.md +14 -0
- data/doc/operators/relational/unwrap.md +20 -0
- data/doc/operators/relational/wrap.md +24 -0
- data/examples/csv/suppliers.csv +6 -0
- data/examples/logs/access.log +1000 -0
- data/examples/logs/combined.alf +2 -0
- data/examples/logs/hits.alf +14 -0
- data/examples/logs/not_found.alf +7 -0
- data/examples/logs/robots-cheating.alf +11 -0
- data/examples/logs/robots.alf +8 -0
- data/examples/northwind/customers.csv +92 -0
- data/examples/northwind/northwind.db +0 -0
- data/examples/northwind/orders.csv +831 -0
- data/examples/operators/clip.alf +1 -1
- data/examples/operators/database.alf +5 -6
- data/examples/operators/defaults.alf +1 -1
- data/examples/operators/group.alf +1 -1
- data/examples/operators/project.alf +2 -1
- data/examples/operators/pseudo-with.alf +2 -2
- data/examples/operators/quota.alf +2 -2
- data/examples/operators/summarize.alf +2 -2
- data/lib/alf/aggregator/aggregators.rb +77 -0
- data/lib/alf/aggregator/base.rb +95 -0
- data/lib/alf/aggregator/class_methods.rb +57 -0
- data/lib/alf/buffer/sorted.rb +48 -0
- data/lib/alf/command/class_methods.rb +27 -0
- data/lib/alf/command/doc_manager.rb +72 -0
- data/lib/alf/command/exec.rb +12 -0
- data/lib/alf/command/help.rb +31 -0
- data/lib/alf/command/main.rb +146 -0
- data/lib/alf/command/show.rb +33 -0
- data/lib/alf/environment/base.rb +37 -0
- data/lib/alf/environment/class_methods.rb +93 -0
- data/lib/alf/environment/explicit.rb +38 -0
- data/lib/alf/environment/folder.rb +62 -0
- data/lib/alf/extra/csv.rb +104 -0
- data/lib/alf/extra/logs.rb +100 -0
- data/lib/alf/extra/sequel.rb +77 -0
- data/lib/alf/{yaml.rb → extra/yaml.rb} +0 -0
- data/lib/alf/extra.rb +5 -0
- data/lib/alf/iterator/base.rb +38 -0
- data/lib/alf/iterator/class_methods.rb +22 -0
- data/lib/alf/iterator/proxy.rb +33 -0
- data/lib/alf/lispy/instance_methods.rb +157 -0
- data/lib/alf/operator/base.rb +74 -0
- data/lib/alf/operator/binary.rb +32 -0
- data/lib/alf/operator/cesure.rb +45 -0
- data/lib/alf/operator/class_methods.rb +132 -0
- data/lib/alf/operator/experimental.rb +9 -0
- data/lib/alf/operator/non_relational/autonum.rb +24 -0
- data/lib/alf/operator/non_relational/clip.rb +20 -0
- data/lib/alf/operator/non_relational/coerce.rb +21 -0
- data/lib/alf/operator/non_relational/compact.rb +62 -0
- data/lib/alf/operator/non_relational/defaults.rb +25 -0
- data/lib/alf/operator/non_relational/generator.rb +38 -0
- data/lib/alf/operator/non_relational/sort.rb +23 -0
- data/lib/alf/operator/nullary.rb +20 -0
- data/lib/alf/operator/relational/extend.rb +24 -0
- data/lib/alf/operator/relational/group.rb +32 -0
- data/lib/alf/operator/relational/intersect.rb +37 -0
- data/lib/alf/operator/relational/join.rb +106 -0
- data/lib/alf/operator/relational/matching.rb +45 -0
- data/lib/alf/operator/relational/minus.rb +37 -0
- data/lib/alf/operator/relational/not_matching.rb +45 -0
- data/lib/alf/operator/relational/project.rb +22 -0
- data/lib/alf/operator/relational/quota.rb +51 -0
- data/lib/alf/operator/relational/rank.rb +55 -0
- data/lib/alf/operator/relational/rename.rb +19 -0
- data/lib/alf/operator/relational/restrict.rb +20 -0
- data/lib/alf/operator/relational/summarize.rb +83 -0
- data/lib/alf/operator/relational/ungroup.rb +25 -0
- data/lib/alf/operator/relational/union.rb +32 -0
- data/lib/alf/operator/relational/unwrap.rb +21 -0
- data/lib/alf/operator/relational/wrap.rb +22 -0
- data/lib/alf/operator/shortcut.rb +53 -0
- data/lib/alf/operator/signature.rb +262 -0
- data/lib/alf/operator/transform.rb +27 -0
- data/lib/alf/operator/unary.rb +38 -0
- data/lib/alf/reader/alf_file.rb +24 -0
- data/lib/alf/reader/base.rb +119 -0
- data/lib/alf/reader/class_methods.rb +82 -0
- data/lib/alf/reader/rash.rb +28 -0
- data/lib/alf/relation/class_methods.rb +37 -0
- data/lib/alf/relation/instance_methods.rb +127 -0
- data/lib/alf/renderer/base.rb +72 -0
- data/lib/alf/renderer/class_methods.rb +58 -0
- data/lib/alf/renderer/rash.rb +19 -0
- data/lib/alf/{text.rb → renderer/text.rb} +1 -1
- data/lib/alf/tools/coerce.rb +14 -0
- data/lib/alf/tools/miscellaneous.rb +77 -0
- data/lib/alf/tools/to_lispy.rb +99 -0
- data/lib/alf/tools/to_ruby_literal.rb +14 -0
- data/lib/alf/tools/tuple_handle.rb +50 -0
- data/lib/alf/types/attr_list.rb +56 -0
- data/lib/alf/types/attr_name.rb +28 -0
- data/lib/alf/types/boolean.rb +12 -0
- data/lib/alf/types/heading.rb +96 -0
- data/lib/alf/types/ordering.rb +93 -0
- data/lib/alf/types/renaming.rb +57 -0
- data/lib/alf/types/summarization.rb +76 -0
- data/lib/alf/types/tuple_computation.rb +61 -0
- data/lib/alf/types/tuple_expression.rb +61 -0
- data/lib/alf/types/tuple_predicate.rb +49 -0
- data/lib/alf/version.rb +2 -2
- data/lib/alf.rb +193 -3714
- data/spec/integration/__database__/group.alf +1 -1
- data/spec/integration/__database__/suppliers_csv.csv +6 -0
- data/spec/integration/command/alf/alf.db +0 -0
- data/spec/integration/command/alf/alf_env_sqlite.cmd +1 -0
- data/spec/integration/command/alf/alf_env_sqlite.stdout +9 -0
- data/spec/integration/command/alf/alf_help.cmd +1 -0
- data/spec/integration/command/alf/alf_help.stdout +67 -0
- data/spec/integration/command/autonum/autonum_0.cmd +1 -1
- data/spec/integration/command/coerce/coerce_1.cmd +1 -0
- data/spec/integration/command/coerce/coerce_1.stdout +5 -0
- data/spec/integration/command/defaults/defaults_0.cmd +1 -1
- data/spec/integration/command/defaults/defaults_0.stdout +9 -9
- data/spec/integration/command/defaults/defaults_2.cmd +1 -0
- data/spec/integration/command/defaults/defaults_2.stdout +9 -0
- data/spec/integration/command/generator/generator_1.cmd +1 -0
- data/spec/integration/command/generator/generator_1.stdout +10 -0
- data/spec/integration/command/generator/generator_2.cmd +1 -0
- data/spec/integration/command/generator/generator_2.stdout +5 -0
- data/spec/integration/command/generator/generator_3.cmd +1 -0
- data/spec/integration/command/generator/generator_3.stdout +5 -0
- data/spec/integration/command/group/group_0.cmd +1 -1
- data/spec/integration/command/group/group_1.cmd +1 -1
- data/spec/integration/command/help/help_1.cmd +1 -0
- data/spec/integration/command/help/help_1.stdout +22 -0
- data/spec/integration/command/quota/quota_0.cmd +1 -1
- data/spec/integration/command/rank/rank_1.cmd +1 -1
- data/spec/integration/command/rank/rank_1.stdout +10 -10
- data/spec/integration/command/rank/rank_2.cmd +1 -1
- data/spec/integration/command/rank/rank_2.stdout +10 -10
- data/spec/integration/command/rank/rank_3.cmd +1 -1
- data/spec/integration/command/rank/rank_3.stdout +10 -10
- data/spec/integration/command/rank/rank_4.cmd +1 -1
- data/spec/integration/command/rank/rank_5.cmd +1 -1
- data/spec/integration/command/show/show_csv.cmd +1 -0
- data/spec/integration/command/show/show_csv.stdout +6 -0
- data/spec/integration/command/show/show_rash_2.cmd +1 -1
- data/spec/integration/command/show/show_rash_2.stdout +5 -5
- data/spec/integration/command/sort/sort_0.cmd +1 -1
- data/spec/integration/command/sort/sort_1.cmd +1 -1
- data/spec/integration/command/sort/sort_1.stdout +2 -2
- data/spec/integration/command/sort/sort_2.cmd +1 -0
- data/spec/integration/command/sort/sort_2.stdout +9 -0
- data/spec/integration/command/sort/sort_3.cmd +1 -0
- data/spec/integration/command/sort/sort_3.stdout +9 -0
- data/spec/integration/command/summarize/summarize_0.cmd +1 -1
- data/spec/integration/command/ungroup/ungroup_0.cmd +1 -1
- data/spec/integration/command/wrap/wrap_0.cmd +1 -1
- data/spec/integration/semantics/test_project.alf +5 -6
- data/spec/integration/semantics/test_rank.alf +16 -16
- data/spec/integration/test_command.rb +17 -6
- data/spec/integration/test_examples.rb +1 -1
- data/spec/regression/logs/apache_combined.log +5 -0
- data/spec/regression/logs/test_path_attribute.rb +25 -0
- data/spec/regression/relation/test_relation_allbut_all.rb +14 -0
- data/spec/shared/an_operator_class.rb +10 -5
- data/spec/spec_helper.rb +1 -7
- data/spec/unit/assumptions/test_set.rb +64 -0
- data/spec/unit/command/doc_manager/dynamic.md +1 -0
- data/spec/unit/command/doc_manager/example.md +1 -0
- data/spec/unit/command/doc_manager/example_1.txt +11 -0
- data/spec/unit/command/doc_manager/static.md +1 -0
- data/spec/unit/command/doc_manager/test_call.rb +49 -0
- data/spec/unit/csv/input.csv +3 -0
- data/spec/unit/csv/test_reader.rb +66 -0
- data/spec/unit/csv/test_renderer.rb +73 -0
- data/spec/unit/lispy/test_relation.rb +37 -0
- data/spec/unit/lispy/test_run.rb +40 -0
- data/spec/unit/lispy/test_tuple.rb +36 -0
- data/spec/unit/logs/apache_combined.log +5 -0
- data/spec/unit/logs/postgresql.log +29 -0
- data/spec/unit/logs/test_reader.rb +56 -0
- data/spec/unit/operator/non_relational/compact/{buffer_based.rb → test_buffer_based.rb} +0 -0
- data/spec/unit/operator/non_relational/test_clip.rb +1 -1
- data/spec/unit/operator/non_relational/test_coerce.rb +35 -0
- data/spec/unit/operator/non_relational/test_defaults.rb +15 -2
- data/spec/unit/operator/non_relational/test_generator.rb +78 -0
- data/spec/unit/operator/relational/join/test_hash_based.rb +4 -4
- data/spec/unit/operator/relational/matching/test_hash_based.rb +6 -6
- data/spec/unit/operator/relational/not_matching/test_hash_based.rb +4 -4
- data/spec/unit/operator/relational/summarize/test_hash_based.rb +10 -6
- data/spec/unit/operator/relational/summarize/test_sort_based.rb +18 -7
- data/spec/unit/operator/relational/test_group.rb +8 -8
- data/spec/unit/operator/relational/test_intersect.rb +3 -3
- data/spec/unit/operator/relational/test_minus.rb +3 -3
- data/spec/unit/operator/relational/test_project.rb +12 -2
- data/spec/unit/operator/relational/test_quota.rb +5 -6
- data/spec/unit/operator/relational/test_summarize.rb +9 -11
- data/spec/unit/operator/relational/test_union.rb +1 -1
- data/spec/unit/operator/relational/test_wrap.rb +1 -1
- data/spec/unit/operator/signature/test_collect_on.rb +45 -0
- data/spec/unit/operator/signature/test_initialize.rb +17 -0
- data/spec/unit/operator/signature/test_install.rb +56 -0
- data/spec/unit/operator/signature/test_option_parser.rb +36 -0
- data/spec/unit/operator/signature/test_parse_args.rb +60 -0
- data/spec/unit/operator/signature/test_parse_argv.rb +87 -0
- data/spec/unit/operator/signature/test_to_lispy.rb +102 -0
- data/spec/unit/operator/signature/test_to_shell.rb +103 -0
- data/spec/unit/operator/test_non_relational.rb +3 -1
- data/spec/unit/relation/test_relops.rb +20 -15
- data/spec/unit/sequel/alf.db +0 -0
- data/spec/unit/sequel/test_environment.rb +54 -0
- data/spec/unit/test_aggregator.rb +32 -22
- data/spec/unit/test_environment.rb +5 -0
- data/spec/unit/test_lispy.rb +4 -0
- data/spec/unit/test_relation.rb +5 -0
- data/spec/unit/text/test_cell.rb +6 -6
- data/spec/unit/text/test_row.rb +3 -3
- data/spec/unit/text/test_table.rb +6 -6
- data/spec/unit/tools/test_coalesce.rb +15 -0
- data/spec/unit/tools/test_coerce.rb +10 -0
- data/spec/unit/tools/test_to_lispy.rb +138 -0
- data/spec/unit/tools/test_to_ruby_literal.rb +10 -0
- data/spec/unit/tools/test_tuple_handle.rb +1 -59
- data/spec/unit/types/test_attr_list.rb +106 -0
- data/spec/unit/types/test_attr_name.rb +52 -0
- data/spec/unit/{test_heading.rb → types/test_heading.rb} +10 -0
- data/spec/unit/types/test_ordering.rb +127 -0
- data/spec/unit/types/test_renaming.rb +55 -0
- data/spec/unit/types/test_summarization.rb +63 -0
- data/spec/unit/types/test_tuple_computation.rb +60 -0
- data/spec/unit/types/test_tuple_expression.rb +64 -0
- data/spec/unit/types/test_tuple_predicate.rb +79 -0
- data/tasks/debug_mail.rake +1 -1
- data/tasks/debug_mail.txt +5 -0
- data/tasks/gh-pages.rake +63 -0
- metadata +325 -52
- data/spec/unit/operator/test_command_methods.rb +0 -38
- data/spec/unit/tools/test_ordering_key.rb +0 -94
- data/spec/unit/tools/test_parse_commandline_args.rb +0 -47
- data/spec/unit/tools/test_projection_key.rb +0 -83
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
Relational matching (join + project back on left)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator restricts its LEFT operand to tuples for which there exists
|
|
11
|
+
at least one tuple in RIGHT that (naturally) joins. This is a shortcut
|
|
12
|
+
operator for the following longer expression:
|
|
13
|
+
|
|
14
|
+
(project (join xxx, yyy), [xxx's attributes])
|
|
15
|
+
|
|
16
|
+
EXAMPLE
|
|
17
|
+
|
|
18
|
+
# Which suppliers supply at least one part?
|
|
19
|
+
!(alf matching suppliers supplies)
|
|
20
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
Relational not matching (inverse of matching)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator restricts LEFT tuples to those for which there does not
|
|
11
|
+
exist any tuple in RIGHT that (naturally) joins. This is a shortcut
|
|
12
|
+
operator for the following longer expression:
|
|
13
|
+
|
|
14
|
+
(minus xxx, (matching xxx, yyy))
|
|
15
|
+
|
|
16
|
+
EXAMPLE
|
|
17
|
+
|
|
18
|
+
# Which suppliers do not supply any part?
|
|
19
|
+
!(alf not-matching suppliers supplies)
|
|
20
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
Relational projection (clip + compact)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
OPTIONS
|
|
9
|
+
|
|
10
|
+
#(summarized_options)
|
|
11
|
+
|
|
12
|
+
DESCRIPTION
|
|
13
|
+
|
|
14
|
+
This operator projects tuples on attributes whose names are specified in
|
|
15
|
+
ATTRIBUTES. Unlike SQL, this operator **always** removes duplicates in the
|
|
16
|
+
result so that the output is a set of tuples, that is, a relation.
|
|
17
|
+
|
|
18
|
+
With the allbut option, the operator projects ATTRIBUTES away instead of
|
|
19
|
+
keeping them.
|
|
20
|
+
|
|
21
|
+
EXAMPLE
|
|
22
|
+
|
|
23
|
+
# What are supplier cities ?
|
|
24
|
+
!(alf project suppliers -- city)
|
|
25
|
+
|
|
26
|
+
# What are all but supplier's id and name
|
|
27
|
+
!(alf project --allbut suppliers -- sid name)
|
|
28
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
Generalized quota-queries (position, sum progression, etc.)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
**This operator is a work in progress and should be used with care.**
|
|
11
|
+
|
|
12
|
+
This operator is an attempt to generalize RANK in two directions:
|
|
13
|
+
|
|
14
|
+
* Use a full SUMMARIZATION instead of hard-coding a ranking attribute via count()
|
|
15
|
+
* Providing a BY key so that summarizations can actually be done on sub-groups
|
|
16
|
+
|
|
17
|
+
EXAMPLE
|
|
18
|
+
|
|
19
|
+
# Compute linear progression of quantities by supplier number
|
|
20
|
+
!(alf quota supplies -- sid -- qty -- position count sum_qty "sum{ qty }")
|
|
21
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
Relational ranking (explicit tuple positions)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator computes the ranking of input tuples, according to ORDER.
|
|
11
|
+
|
|
12
|
+
Precisely, it extends its operand with an attribute called AS whose value
|
|
13
|
+
is the number of tuples which are considered strictly less according to the
|
|
14
|
+
order relation denoted by ORDER.
|
|
15
|
+
|
|
16
|
+
Note that, unless the ordering includes a candidate key for the input relation,
|
|
17
|
+
the new AS attribute is not necessarily a candidate key for the output.
|
|
18
|
+
|
|
19
|
+
EXAMPLE
|
|
20
|
+
|
|
21
|
+
# Rank parts by weight
|
|
22
|
+
!(alf rank parts -- weight -- position)
|
|
23
|
+
|
|
24
|
+
# Rank parts by weight in descending order. Ensure that position is a
|
|
25
|
+
# candidate key by including a key in ordering
|
|
26
|
+
!(alf rank parts -- weight desc pid asc -- position)
|
|
27
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
Relational renaming (rename some attributes)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This command renames attributes as specified in RENAMING, taken as successive
|
|
11
|
+
(old name, new name) pairs
|
|
12
|
+
|
|
13
|
+
EXAMPLE
|
|
14
|
+
|
|
15
|
+
# Rename a few supplier attributes
|
|
16
|
+
!(alf rename suppliers -- name supplier_name city supplier_city)
|
|
17
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
Relational restriction (aka where, predicate filtering)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This command restricts tuples to those for which PREDICATE evaluates to
|
|
11
|
+
true.
|
|
12
|
+
|
|
13
|
+
PREDICATE must be a valid tuple expression that returns a truth-value. It
|
|
14
|
+
may be specified as a ruby code literal, or a mapping between (name, value)
|
|
15
|
+
pairs. In the latter case, PREDICATE is built as a conjunction of attribute
|
|
16
|
+
equalities.
|
|
17
|
+
|
|
18
|
+
EXAMPLE
|
|
19
|
+
|
|
20
|
+
# Who are suppliers with a status greater than 20?
|
|
21
|
+
!(alf restrict suppliers -- "status > 20")
|
|
22
|
+
|
|
23
|
+
# Which suppliers live in London?
|
|
24
|
+
!(alf restrict suppliers -- city "'London'")
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
Relational summarization (group-by + aggregate ops)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
OPTIONS
|
|
9
|
+
|
|
10
|
+
#(summarized_options)
|
|
11
|
+
|
|
12
|
+
DESCRIPTION
|
|
13
|
+
|
|
14
|
+
This operator summarizes input tuples over a projection given by BY.
|
|
15
|
+
SUMMARIZATION is a mapping between attribute names and summarizing
|
|
16
|
+
expressions.
|
|
17
|
+
|
|
18
|
+
With the allbut option, the operator uses all attributes not specified
|
|
19
|
+
in BY as the projection key.
|
|
20
|
+
|
|
21
|
+
EXAMPLE
|
|
22
|
+
|
|
23
|
+
# Compute the sum of supplied quantities, by supplier id
|
|
24
|
+
!(alf summarize supplies -- sid -- total_qty "sum{ qty }")
|
|
25
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
Relational un-grouping (inverse of group)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator flattens its operand by ungrouping the relation-valued
|
|
11
|
+
attribute ATTR.
|
|
12
|
+
|
|
13
|
+
EXAMPLE
|
|
14
|
+
|
|
15
|
+
# Given `pid` and `qty` groupped as `supplying`
|
|
16
|
+
!(alf group supplies -- pid qty -- supplying)
|
|
17
|
+
|
|
18
|
+
# Let's ungroup them
|
|
19
|
+
!(alf group supplies -- pid qty -- supplying | alf ungroup -- supplying)
|
|
20
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
Relational union
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator computes the union of its operands, that is the set of
|
|
11
|
+
tuples that appear in LEFT or in RIGHT.
|
|
12
|
+
|
|
13
|
+
The result is a valid relation in that it never contains duplicates.
|
|
14
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
Relational un-wrapping (inverse of wrap)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
DESCRIPTION
|
|
9
|
+
|
|
10
|
+
This operator flattens its operand by unwrapping the tuple-valued
|
|
11
|
+
attribute ATTR.
|
|
12
|
+
|
|
13
|
+
EXAMPLE
|
|
14
|
+
|
|
15
|
+
# Given, `city` and `status` wrapped as `loc_and_status`
|
|
16
|
+
!(alf wrap suppliers -- city status -- loc_and_status)
|
|
17
|
+
|
|
18
|
+
# Let's unwrap them
|
|
19
|
+
!(alf wrap suppliers -- city status -- loc_and_status | alf unwrap -- loc_and_status)
|
|
20
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
Relational wrapping (tuple-valued attributes)
|
|
3
|
+
|
|
4
|
+
SYNOPSIS
|
|
5
|
+
|
|
6
|
+
#(signature)
|
|
7
|
+
|
|
8
|
+
OPTIONS
|
|
9
|
+
|
|
10
|
+
#(summarized_options)
|
|
11
|
+
|
|
12
|
+
DESCRIPTION
|
|
13
|
+
|
|
14
|
+
This operator wraps attributes in ATTRIBUTES as a new, tuple-valued attribute
|
|
15
|
+
named AS.
|
|
16
|
+
|
|
17
|
+
With the allbut option, it wraps all attributes not specified in ATTRIBUTES
|
|
18
|
+
instead.
|
|
19
|
+
|
|
20
|
+
EXAMPLE
|
|
21
|
+
|
|
22
|
+
# Wrap `city` and `status` and a tuple-value attribute named `loc_and_status`
|
|
23
|
+
!(alf wrap suppliers -- city status -- loc_and_status)
|
|
24
|
+
|