alf-shell 0.14.0 → 0.15.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.
Files changed (276) hide show
  1. data/Gemfile +5 -2
  2. data/Gemfile.lock +29 -10
  3. data/bin/alf +2 -0
  4. data/doc/man/alf-explain.man +22 -0
  5. data/doc/man/alf-metadata.man +13 -0
  6. data/doc/man/alf-show.man +16 -0
  7. data/doc/man/alf.man +77 -0
  8. data/doc/man/allbut.man +39 -0
  9. data/doc/man/among.man +25 -0
  10. data/doc/man/avg.man +37 -0
  11. data/doc/man/between.man +24 -0
  12. data/doc/man/concat.man +55 -0
  13. data/doc/man/contradiction.man +26 -0
  14. data/doc/man/count.man +20 -0
  15. data/doc/man/eq.man +29 -0
  16. data/doc/man/extend.man +33 -0
  17. data/doc/man/frame.man +60 -0
  18. data/doc/man/group.man +51 -0
  19. data/doc/man/gt.man +30 -0
  20. data/doc/man/gte.man +30 -0
  21. data/doc/man/intersect.man +54 -0
  22. data/doc/man/join.man +84 -0
  23. data/doc/man/lt.man +30 -0
  24. data/doc/man/lte.man +30 -0
  25. data/doc/man/matching.man +73 -0
  26. data/doc/man/max.man +36 -0
  27. data/doc/man/min.man +36 -0
  28. data/doc/man/minus.man +54 -0
  29. data/doc/man/native.man +32 -0
  30. data/doc/man/neq.man +29 -0
  31. data/doc/man/not_matching.man +51 -0
  32. data/doc/man/page.man +60 -0
  33. data/doc/man/project.man +36 -0
  34. data/doc/man/rank.man +42 -0
  35. data/doc/man/rename.man +29 -0
  36. data/doc/man/restrict.man +38 -0
  37. data/doc/man/stddev.man +37 -0
  38. data/doc/man/sum.man +37 -0
  39. data/doc/man/summarize.man +45 -0
  40. data/doc/man/tautology.man +26 -0
  41. data/doc/man/ungroup.man +30 -0
  42. data/doc/man/union.man +55 -0
  43. data/doc/man/unwrap.man +37 -0
  44. data/doc/man/variance.man +37 -0
  45. data/doc/man/wrap.man +37 -0
  46. data/doc/txt/alf-explain.man +22 -0
  47. data/doc/txt/alf-metadata.man +16 -0
  48. data/doc/txt/alf-show.man +19 -0
  49. data/doc/txt/alf.man +80 -0
  50. data/doc/txt/allbut.txt +31 -0
  51. data/doc/txt/among.txt +20 -0
  52. data/doc/txt/avg.txt +22 -0
  53. data/doc/txt/between.txt +19 -0
  54. data/doc/txt/concat.txt +31 -0
  55. data/doc/txt/contradiction.txt +15 -0
  56. data/doc/txt/count.txt +14 -0
  57. data/doc/txt/eq.txt +19 -0
  58. data/doc/txt/extend.txt +29 -0
  59. data/doc/txt/frame.txt +48 -0
  60. data/doc/txt/group.txt +37 -0
  61. data/doc/txt/gt.txt +20 -0
  62. data/doc/txt/gte.txt +20 -0
  63. data/doc/txt/intersect.txt +42 -0
  64. data/doc/txt/join.txt +65 -0
  65. data/doc/txt/lt.txt +20 -0
  66. data/doc/txt/lte.txt +20 -0
  67. data/doc/txt/matching.txt +54 -0
  68. data/doc/txt/max.txt +21 -0
  69. data/doc/txt/min.txt +21 -0
  70. data/doc/txt/minus.txt +42 -0
  71. data/doc/txt/native.txt +27 -0
  72. data/doc/txt/neq.txt +19 -0
  73. data/doc/txt/not_matching.txt +39 -0
  74. data/doc/txt/page.txt +48 -0
  75. data/doc/txt/project.txt +28 -0
  76. data/doc/txt/rank.txt +34 -0
  77. data/doc/txt/rename.txt +25 -0
  78. data/doc/txt/restrict.txt +26 -0
  79. data/doc/txt/stddev.txt +22 -0
  80. data/doc/txt/sum.txt +22 -0
  81. data/doc/txt/summarize.txt +33 -0
  82. data/doc/txt/tautology.txt +15 -0
  83. data/doc/txt/ungroup.txt +26 -0
  84. data/doc/txt/union.txt +43 -0
  85. data/doc/txt/unwrap.txt +29 -0
  86. data/doc/txt/variance.txt +22 -0
  87. data/doc/txt/wrap.txt +29 -0
  88. data/lib/alf/shell.rb +2 -32
  89. data/lib/alf/shell/alfrc.rb +3 -0
  90. data/lib/alf/shell/command.rb +2 -18
  91. data/lib/alf/shell/command/explain.rb +37 -0
  92. data/lib/alf/shell/command/help.rb +3 -21
  93. data/lib/alf/shell/command/main.rb +20 -78
  94. data/lib/alf/shell/command/metadata.rb +32 -0
  95. data/lib/alf/shell/command/show.rb +17 -5
  96. data/lib/alf/shell/support.rb +21 -13
  97. data/lib/alf/shell/version.rb +1 -1
  98. data/spec/integration/explain/explain.cmd +1 -0
  99. data/spec/integration/explain/explain.stdout +11 -0
  100. data/spec/integration/show/group.alf +2 -0
  101. data/spec/integration/show/show_alf.cmd +1 -0
  102. data/spec/integration/{group/group_0.stdout → show/show_alf.stdout} +0 -0
  103. data/tasks/doc.rake +4 -0
  104. metadata +116 -178
  105. data/doc/commands/exec.md +0 -16
  106. data/doc/commands/help.md +0 -11
  107. data/doc/commands/main.md +0 -33
  108. data/doc/commands/show.md +0 -12
  109. data/doc/operators/non_relational/autonum.md +0 -23
  110. data/doc/operators/non_relational/clip.md +0 -31
  111. data/doc/operators/non_relational/coerce.md +0 -15
  112. data/doc/operators/non_relational/compact.md +0 -20
  113. data/doc/operators/non_relational/defaults.md +0 -32
  114. data/doc/operators/non_relational/generator.md +0 -20
  115. data/doc/operators/non_relational/sort.md +0 -24
  116. data/doc/operators/non_relational/type-safe.md +0 -20
  117. data/doc/operators/relational/extend.md +0 -18
  118. data/doc/operators/relational/frame.md +0 -26
  119. data/doc/operators/relational/group.md +0 -27
  120. data/doc/operators/relational/hierarchize.md +0 -14
  121. data/doc/operators/relational/infer-heading.md +0 -20
  122. data/doc/operators/relational/intersect.md +0 -13
  123. data/doc/operators/relational/join.md +0 -28
  124. data/doc/operators/relational/matching.md +0 -24
  125. data/doc/operators/relational/minus.md +0 -12
  126. data/doc/operators/relational/not-matching.md +0 -20
  127. data/doc/operators/relational/page.md +0 -31
  128. data/doc/operators/relational/project.md +0 -28
  129. data/doc/operators/relational/quota.md +0 -21
  130. data/doc/operators/relational/rank.md +0 -27
  131. data/doc/operators/relational/rename.md +0 -17
  132. data/doc/operators/relational/restrict.md +0 -25
  133. data/doc/operators/relational/summarize.md +0 -25
  134. data/doc/operators/relational/ungroup.md +0 -20
  135. data/doc/operators/relational/union.md +0 -14
  136. data/doc/operators/relational/unwrap.md +0 -20
  137. data/doc/operators/relational/wrap.md +0 -24
  138. data/lib/alf/shell/command/exec.rb +0 -16
  139. data/lib/alf/shell/doc_manager.rb +0 -84
  140. data/lib/alf/shell/ext/signature.rb +0 -45
  141. data/lib/alf/shell/from_argv.rb +0 -84
  142. data/lib/alf/shell/operator.rb +0 -63
  143. data/spec/integration/__database__/group.alf +0 -3
  144. data/spec/integration/alf/alf_e.cmd +0 -1
  145. data/spec/integration/alf/alf_e.stdout +0 -4
  146. data/spec/integration/alf/alf_help.cmd +0 -1
  147. data/spec/integration/alf/alf_help.stdout +0 -76
  148. data/spec/integration/alf/alf_r.cmd +0 -1
  149. data/spec/integration/alf/alf_r.stdout +0 -5
  150. data/spec/integration/autonum/autonum_0.cmd +0 -1
  151. data/spec/integration/autonum/autonum_0.stdout +0 -9
  152. data/spec/integration/autonum/autonum_1.cmd +0 -1
  153. data/spec/integration/autonum/autonum_1.stdout +0 -9
  154. data/spec/integration/clip/clip_0.cmd +0 -1
  155. data/spec/integration/clip/clip_0.stdout +0 -9
  156. data/spec/integration/clip/clip_1.cmd +0 -1
  157. data/spec/integration/clip/clip_1.stdout +0 -9
  158. data/spec/integration/coerce/coerce_1.cmd +0 -1
  159. data/spec/integration/coerce/coerce_1.stdout +0 -5
  160. data/spec/integration/compact/compact_0.cmd +0 -1
  161. data/spec/integration/compact/compact_0.stdout +0 -9
  162. data/spec/integration/defaults/defaults_0.cmd +0 -1
  163. data/spec/integration/defaults/defaults_0.stdout +0 -9
  164. data/spec/integration/defaults/defaults_1.cmd +0 -1
  165. data/spec/integration/defaults/defaults_1.stdout +0 -9
  166. data/spec/integration/defaults/defaults_2.cmd +0 -1
  167. data/spec/integration/defaults/defaults_2.stdout +0 -9
  168. data/spec/integration/extend/extend_0.cmd +0 -1
  169. data/spec/integration/extend/extend_0.stdout +0 -16
  170. data/spec/integration/frame/frame_0.cmd +0 -1
  171. data/spec/integration/frame/frame_0.stdout +0 -6
  172. data/spec/integration/generator/generator_1.cmd +0 -1
  173. data/spec/integration/generator/generator_1.stdout +0 -10
  174. data/spec/integration/generator/generator_2.cmd +0 -1
  175. data/spec/integration/generator/generator_2.stdout +0 -5
  176. data/spec/integration/generator/generator_3.cmd +0 -1
  177. data/spec/integration/generator/generator_3.stdout +0 -5
  178. data/spec/integration/group/group_0.cmd +0 -1
  179. data/spec/integration/group/group_1.cmd +0 -1
  180. data/spec/integration/group/group_1.stdout +0 -32
  181. data/spec/integration/help/help_1.cmd +0 -1
  182. data/spec/integration/help/help_1.stdout +0 -12
  183. data/spec/integration/intersect/intersect_0.cmd +0 -1
  184. data/spec/integration/intersect/intersect_0.stdout +0 -9
  185. data/spec/integration/join/join_0.cmd +0 -1
  186. data/spec/integration/join/join_0.stdout +0 -16
  187. data/spec/integration/matching/matching_0.cmd +0 -1
  188. data/spec/integration/matching/matching_0.stdout +0 -8
  189. data/spec/integration/minus/minus_0.cmd +0 -1
  190. data/spec/integration/minus/minus_0.stdout +0 -4
  191. data/spec/integration/not-matching/not-matching_0.cmd +0 -1
  192. data/spec/integration/not-matching/not-matching_0.stdout +0 -5
  193. data/spec/integration/page/page_0.cmd +0 -1
  194. data/spec/integration/page/page_0.stdout +0 -6
  195. data/spec/integration/project/project_0.cmd +0 -1
  196. data/spec/integration/project/project_0.stdout +0 -9
  197. data/spec/integration/project/project_1.cmd +0 -1
  198. data/spec/integration/project/project_1.stdout +0 -9
  199. data/spec/integration/quota/quota_0.cmd +0 -1
  200. data/spec/integration/quota/quota_0.stdout +0 -16
  201. data/spec/integration/rank/rank_1.cmd +0 -1
  202. data/spec/integration/rank/rank_1.stdout +0 -10
  203. data/spec/integration/rank/rank_2.cmd +0 -1
  204. data/spec/integration/rank/rank_2.stdout +0 -10
  205. data/spec/integration/rank/rank_3.cmd +0 -1
  206. data/spec/integration/rank/rank_3.stdout +0 -10
  207. data/spec/integration/rank/rank_4.cmd +0 -1
  208. data/spec/integration/rank/rank_4.stdout +0 -6
  209. data/spec/integration/rank/rank_5.cmd +0 -1
  210. data/spec/integration/rank/rank_5.stdout +0 -6
  211. data/spec/integration/rename/rename_0.cmd +0 -1
  212. data/spec/integration/rename/rename_0.stdout +0 -9
  213. data/spec/integration/restrict/restrict_0.cmd +0 -1
  214. data/spec/integration/restrict/restrict_0.stdout +0 -6
  215. data/spec/integration/restrict/restrict_1.cmd +0 -1
  216. data/spec/integration/restrict/restrict_1.stdout +0 -6
  217. data/spec/integration/sort/sort_0.cmd +0 -1
  218. data/spec/integration/sort/sort_0.stdout +0 -9
  219. data/spec/integration/sort/sort_1.cmd +0 -1
  220. data/spec/integration/sort/sort_1.stdout +0 -9
  221. data/spec/integration/sort/sort_2.cmd +0 -1
  222. data/spec/integration/sort/sort_2.stdout +0 -9
  223. data/spec/integration/sort/sort_3.cmd +0 -1
  224. data/spec/integration/sort/sort_3.stdout +0 -9
  225. data/spec/integration/summarize/summarize_0.cmd +0 -1
  226. data/spec/integration/summarize/summarize_0.stdout +0 -8
  227. data/spec/integration/union/union_0.cmd +0 -1
  228. data/spec/integration/union/union_0.stdout +0 -9
  229. data/spec/integration/unwrap/unwrap_0.cmd +0 -1
  230. data/spec/integration/unwrap/unwrap_0.stdout +0 -9
  231. data/spec/integration/wrap/wrap_0.cmd +0 -1
  232. data/spec/integration/wrap/wrap_0.stdout +0 -9
  233. data/spec/unit/doc_manager/dynamic.md +0 -1
  234. data/spec/unit/doc_manager/example.md +0 -1
  235. data/spec/unit/doc_manager/example_1.txt +0 -11
  236. data/spec/unit/doc_manager/static.md +0 -1
  237. data/spec/unit/doc_manager/test_call.rb +0 -41
  238. data/spec/unit/ext/signature/test_argv2args.rb +0 -82
  239. data/spec/unit/ext/signature/test_to_shell.rb +0 -103
  240. data/spec/unit/from_argv/test_to_attr_list.rb +0 -30
  241. data/spec/unit/from_argv/test_to_attr_name.rb +0 -27
  242. data/spec/unit/from_argv/test_to_boolean.rb +0 -32
  243. data/spec/unit/from_argv/test_to_heading.rb +0 -37
  244. data/spec/unit/from_argv/test_to_ordering.rb +0 -28
  245. data/spec/unit/from_argv/test_to_predicate.rb +0 -26
  246. data/spec/unit/from_argv/test_to_renaming.rb +0 -23
  247. data/spec/unit/from_argv/test_to_size.rb +0 -32
  248. data/spec/unit/from_argv/test_to_summarization.rb +0 -19
  249. data/spec/unit/from_argv/test_to_tuple_computation.rb +0 -18
  250. data/spec/unit/from_argv/test_to_tuple_expression.rb +0 -38
  251. data/spec/unit/main/test_class_methods.rb +0 -44
  252. data/spec/unit/operator/test_autonum.rb +0 -28
  253. data/spec/unit/operator/test_clip.rb +0 -29
  254. data/spec/unit/operator/test_coerce.rb +0 -22
  255. data/spec/unit/operator/test_compact.rb +0 -16
  256. data/spec/unit/operator/test_defaults.rb +0 -29
  257. data/spec/unit/operator/test_extend.rb +0 -21
  258. data/spec/unit/operator/test_generator.rb +0 -37
  259. data/spec/unit/operator/test_group.rb +0 -32
  260. data/spec/unit/operator/test_infer_heading.rb +0 -16
  261. data/spec/unit/operator/test_intersect.rb +0 -18
  262. data/spec/unit/operator/test_join.rb +0 -18
  263. data/spec/unit/operator/test_matching.rb +0 -18
  264. data/spec/unit/operator/test_minus.rb +0 -18
  265. data/spec/unit/operator/test_not_matching.rb +0 -18
  266. data/spec/unit/operator/test_project.rb +0 -38
  267. data/spec/unit/operator/test_quota.rb +0 -23
  268. data/spec/unit/operator/test_rank.rb +0 -30
  269. data/spec/unit/operator/test_rename.rb +0 -21
  270. data/spec/unit/operator/test_restrict.rb +0 -36
  271. data/spec/unit/operator/test_sort.rb +0 -49
  272. data/spec/unit/operator/test_summarize.rb +0 -30
  273. data/spec/unit/operator/test_ungroup.rb +0 -28
  274. data/spec/unit/operator/test_union.rb +0 -18
  275. data/spec/unit/operator/test_unwrap.rb +0 -28
  276. data/spec/unit/operator/test_wrap.rb +0 -30
@@ -1,12 +0,0 @@
1
-
2
- Relational minus (aka difference)
3
-
4
- SYNOPSIS
5
-
6
- #(signature)
7
-
8
- DESCRIPTION
9
-
10
- This operator computes the difference between its two operands. The
11
- difference is simply the set of LEFT tuples non present in RIGHT.
12
-
@@ -1,20 +0,0 @@
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
-
@@ -1,31 +0,0 @@
1
-
2
- Relational pagination (like frame, but easier)
3
-
4
- SYNOPSIS
5
-
6
- #(signature)
7
-
8
- DESCRIPTION
9
-
10
- This command provides pagination over the input relation.
11
-
12
- When page_index is positive (resp. striclty negative), this operator returns
13
- `page_size` tuples whose ranking according to `ordering` (resp. reverse
14
- ordering) is between `page_size * (page_index - 1)` and `page_size * page_index`
15
- (excluded).
16
-
17
- To be sound, this operator requires the ordering to include a candidate key
18
- for the input relation. Alf will automatically extend the ordering you provide
19
- to guarantee this, provided key inference is possible.
20
-
21
- EXAMPLE
22
-
23
- # Take the first two suppliers ordered by name (then by id)
24
- !(alf page --page-size=2 suppliers -- name -- 1)
25
-
26
- # Take the next two suppliers
27
- !(alf page --page-size=2 suppliers -- name -- 2)
28
-
29
- # Take the last two suppliers
30
- !(alf page --page-size=2 suppliers -- name -- -1)
31
-
@@ -1,28 +0,0 @@
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
-
@@ -1,21 +0,0 @@
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
-
@@ -1,27 +0,0 @@
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
-
@@ -1,17 +0,0 @@
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
-
@@ -1,25 +0,0 @@
1
-
2
- Relational restriction (aka where, predicate filtering)
3
-
4
- SYNOPSIS
5
-
6
- #(signature)
7
-
8
- DESCRIPTION
9
-
10
- This command restricts restricts relations to those tuples for which PREDICATE
11
- evaluates to 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
-
@@ -1,25 +0,0 @@
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
-
@@ -1,20 +0,0 @@
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
-
@@ -1,14 +0,0 @@
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
-
@@ -1,20 +0,0 @@
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
-
@@ -1,24 +0,0 @@
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
-
@@ -1,16 +0,0 @@
1
- module Alf
2
- module Shell
3
- class Exec < Shell::Command()
4
-
5
- def execute(args)
6
- cmd = if f = args.first
7
- Path(f).read
8
- else
9
- $stdin.read
10
- end
11
- connection.query(cmd)
12
- end
13
-
14
- end # class Exec
15
- end # module Shell
16
- end # module Alf
@@ -1,84 +0,0 @@
1
- module Alf
2
- module Shell
3
- class DocManager
4
-
5
- # Main documentation folder
6
- DOC_FOLDER = Path.backfind("doc")
7
-
8
- #
9
- # Called by Quickl when it's time to generate documentation of `cmd`.
10
- #
11
- def call(cmd, options = {})
12
- if (file = find_file(cmd)).file?
13
- text = file.read
14
-
15
- # Replace occurences of #{signature} to #{signature.to_xxx}
16
- # according to options
17
- method = (options[:method] || "shell").to_s
18
- text = text.gsub('#(signature)', '#(signature.to_' + method + ')')
19
-
20
- # Replace occurences of #{...} on single lines
21
- text = text.gsub(/^([ \t]*)#\(([^\)]+)\)/){|match|
22
- spacing, invocation = $1, $2
23
- res = cmd.instance_eval(invocation).to_s
24
- realign(res, spacing, true)
25
- }
26
-
27
- # Replace occurences of #{...} in other places
28
- text = text.gsub(/#\(([^\)]+)\)/){|match|
29
- cmd.instance_eval($1).to_s
30
- }
31
-
32
- # Replace occurences of !{...} by the execution of the example
33
- text = text.gsub(/^([ \t]*)!\(([^\)]+)\)/){|match|
34
- spacing, invocation = $1, $2
35
- args = Quickl.parse_commandline_args(invocation)[1..-1]
36
- op = run_alf_command(args)
37
- res = op.to_relation.to_s
38
- res = realign(res, spacing, false)[0...-1]
39
- if options[:method] == :lispy
40
- invocation = Alf::Support.to_lispy(op)
41
- end
42
- realign("$ #{invocation}\n\n#{res}", spacing, false)
43
- }
44
-
45
- else
46
- "Sorry, no documentation available for #{cmd.command_name}"
47
- end
48
- end
49
-
50
- private
51
-
52
- def run_alf_command(argv, requester = nil)
53
- argv = Quickl.parse_commandline_args(argv) if argv.is_a?(String)
54
- argv = Quickl.split_commandline_args(argv, '|')
55
- argv.inject(nil) do |cmd,arr|
56
- arr.shift if arr.first == "alf"
57
- main = Alf::Shell::Main.new(Alf::Shell::DEFAULT_CONFIG)
58
- main.config.adapter = Alf.examples_adapter
59
- main.stdin_operand = cmd unless cmd.nil?
60
- main.run(arr, requester)
61
- end
62
- end
63
-
64
- def realign(txt, spacing, strip)
65
- rx = strip ? /^[ \t]*/ : /^/
66
- txt.gsub(rx, spacing)
67
- end
68
-
69
- def find_file(cmd)
70
- where = if cmd.command?
71
- "commands"
72
- elsif cmd.operator? && cmd.relational?
73
- File.join("operators", "relational")
74
- elsif cmd.operator? && cmd.non_relational?
75
- File.join("operators", "non_relational")
76
- else
77
- raise "Unexpected command #{cmd}"
78
- end
79
- DOC_FOLDER/where/"#{cmd.command_name}.md"
80
- end
81
-
82
- end # class DocManager
83
- end # module Shell
84
- end # module Alf
@@ -1,45 +0,0 @@
1
- module Alf
2
- module Algebra
3
- class Signature
4
-
5
- # Converts commandline arguments to operator constructor arguments
6
- def argv2args(argv)
7
- # First split over --
8
- argv = Quickl.split_commandline_args(argv)
9
-
10
- # Parse the options and replace argv[0] by remaining arguments
11
- opts = {}
12
- argv[0] = option_parser(opts).parse!(argv[0])
13
- opts = default_options.merge(opts)
14
-
15
- # Operands are argv[0], and can be removed
16
- oper = argv.shift
17
-
18
- # Coerce each remaining argument according to the signature
19
- args = []
20
- with_each_arg(argv) do |name,dom,value|
21
- invalid_args!(args) if value.nil?
22
- args << Shell.from_argv(Array(value), dom)
23
- end
24
-
25
- [oper, args, opts]
26
- end
27
-
28
- # Returns a shell synopsis for this signature.
29
- #
30
- # Example:
31
- #
32
- # Alf::Algebra::Project.signature.to_shell
33
- # # => "alf project [--allbut] [OPERAND] -- ATTRIBUTES"
34
- def to_shell
35
- oper = operator.nullary? ? "" :
36
- (operator.unary? ? "[OPERAND]" : "[LEFT] RIGHT")
37
- opts = options.map{|opt| "[#{option_name(opt)}]" }.join(" ")
38
- args = arguments.map{|arg,_| "#{arg.to_s.upcase}" }.join(" -- ")
39
- optargs = "#{opts} #{oper} " + (args.empty? ? "" : "-- #{args}")
40
- "alf #{operator.rubycase_name} #{optargs.strip}".strip
41
- end
42
-
43
- end # class Signature
44
- end # module Algebra
45
- end # module Alf