Hi all!
I’m pleased to announce that alf 0.9.1 has been released and pushed
to rubygems.org! See changes below.
= Alf – Relational Algebra at your fingertips
- http://rubydoc.info/github/blambeau/alf/master/frames
- http://github.com/blambeau/alf
- http://rubygems.org/gems/alf
Alf brings the relational algebra both in Shell and in Ruby. In Shell,
because
manipulating any relation-like data source should be as straightforward
as
a
one-liner. In Ruby, because I’ve never understood why programming
languages
provide data structures like arrays, hashes, sets, trees and graphs but
not
relations… Let’s stop the segregation
Changes:
0.9.1 / 2011.07.13
-
Enhancements (public APIs)
-
Added the in-memory Alf::Relation data structure and associated
tooling.
This allows using Alf in a object-oriented usual way, in addition to
the
functional DSL:Alf.lispy.evaluate { (join (restrict :suppliers, lambda{ status > 10 }), :cities) }
is equivalent to
suppliers, cities = [...], [...] suppliers.restrict(lambda{ status > 10 }).join(cities)
see README about how to obtain suppliers and cities relations in the
first
place. -
Summarize now accepts a --allbut option, to specify ‘by’ attributes
from
an
exclusion perspective -
.alf files are now evaluated in such a way that backtraces are
“traceability
friendly”
-
-
Non backward-compatible changes to public APIs
-
Lispy#with has been removed because not being stable enough. The
clean
way
of reusing sub-queries is as follows (non purely functional, so far)kept_suppliers = (restrict :suppliers, lambda{ status > 10 }) with_countries = (join kept_suppliers, :cities) supplying = (join with_countries, :supplies) (summarize supplying, [:country], :which => Agg::group(:pid), :total => Agg::sum{ qty })
-
As a consequence, named data sources (Symbols, like :suppliers
above)
are
now resolved at compile time, which is less powerful, yet much
simpler
and
sound. -
Nest and Unnest have been renamed to Wrap and Unwrap respectively.
This
is
to better conform to TUTORIAL D’s terminology. -
Lispy#chain was kept public in 0.9.0 by error and has been entirely
removed
from the DSL.
-
-
Enhancements (internals)
-
Reader.reader delegates to Reader.coerce when its first argument is
not
a String. This allows calling Reader.reader(args.first || $stdin) in
quickl
commands for example. -
Operator, Operator::Relational and Operator::NonRelational have a
.each
class method that yields operator classes
-
-
Bug fixes
- Fixed a bug that led to an Nil error when using unary operators on
$stdin - Fixed a bug when summarizing or sorting on Symbol attributes with
ruby
1.8 - Fixed numerous crashes under rubinius
- Fixed a bug that led to an Nil error when using unary operators on
Have a nice day!!
Bernard