CHANGELOG.md in alf-0.9.2 vs CHANGELOG.md in alf-0.9.3
- old
+ new
@@ -1,4 +1,93 @@
+# 0.9.3 / FIX ME
+
+* New operators (available both in shell and in Lispy DSL)
+
+ * Added MATCHING and NOT MATCHING operators. These operators are useful
+ shortcuts for the following expressions.
+
+ (matching l, r) := (project (join l, r), [l's attributes])
+ (not_matching l, r) := (minus l, (matching l, r))
+
+ For example:
+
+ # Give suppliers that supply at least one part
+ (matching suppliers, supplies)
+
+ # Give suppliers that don't supply any part
+ (not_matching suppliers, supplies)
+
+ * Added RANK operator. The RANK operator is useful for for computing quota
+ queries, as shown below. See 'alf help rank' for details.
+
+ # Give the three heaviest parts
+ (allbut (restrict (rank :parts, [[:weight, :desc]], :pos), lambda{ pos < 3 }), [:pos])
+
+* Enhancements when using Alf in shell
+
+ * added alf's -r option, that mimics ruby's one (require library before run)
+
+ * When alf is invoked in shell using bin/alf (and only in this case),
+ ENV['ALF_OPTS'] is used a global options to apply as they were specified
+ inline:
+
+ % export ALF_OPTS="--env=. --yaml"
+ % alf show suppliers
+
+ is the same as
+
+ % alf --env=. --yaml show suppliers
+
+ * 'alf --help' now distinguish experimental operators from those coming from
+ the (much more stable) TUTORIAL D specification. The former should be used
+ with care as they specification may change at any time.
+
+* Enhancements when using Alf in Ruby
+
+ * Alf.lispy now accepts any argument recognized by Environment.autodetect; it
+ obtains its working Environment this way. Among others:
+
+ Alf.lispy(Alf::Environment.folder("path/to/an/existing/folder"))
+
+ is the same as:
+
+ Alf.lispy("path/to/an/existing/folder")
+
+ * Added Relation::DUM and Relation::DEE constants (relations of empty heading
+ with no and one tuple, respectively). They are also available as DUM and DEE
+ in Lispy functional expressions.
+
+ * Added a Heading abstraction, as a set of attribute (name, type) pairs
+
+* Internal enhancements (extension points)
+
+ * The Reader and Renderer classes now accept a Hash of options as third
+ argument of the constructor (friendly varargs applies there). These options
+ can be used by extension points.
+
+ * The Environment class now provides a class-based registering mechanism 'ala'
+ Reader and Renderer. This allows auto-detecting the target environment when
+ --env=... is used in shell. See Environment.autodetect and
+ Environment#recognizes? for contributing to this extension point.
+
+ * Internals now rely on Myrrha for code generation. This means that all
+ datatypes can now be safely used in relations and dumped to .rash files in
+ particular.
+
+* Bug fixes
+
+ * Added Relation#allbut, forgotten in two previous releases
+ * Fixed (join xxx, DEE) and (join xxx, DUM)
+ * Fixed scoping bug when using attributes named :path, :expr or :block in
+ Lispy compiled expressions (coming from .alf files)
+ * Fixed 'alf --yaml show suppliers' that renderer a --text table instead of
+ a yaml output
+ * Fixed bugs when using Date and Time attributes with .rash files
+ * Fixed bugs when using Date and Time attributes in restrict expressions
+ compiled from the commandline
+ * Fixed a few bugs when using attribute names that are ruby keywords
+ (restrict & extend)
+
# 0.9.2 / 2011.07.13
* Bug fixes
* Fixed the "alf show" command (undefined method `chain')