Set::Relation --------------------------------------------------------------------------- 2009-01-31 Darren Duncan * Set::Relation version 0.1.0 for Perl 5 is released on CPAN as Set-Relation-0.1.0.tar.gz. * This release features a few API changes, some significant feature additions, and bug fixes to existing routines, but no public facing routines have been added or removed. New routines should feature in the next 0.Y.0 release. * (Relation.pm) Updated each of the 5 functional methods ["union", "exclusion", "intersection", "join", "product"] so it is now an N-adic operator rather than a dyadic operator. Each method's "other" parameter was renamed to "others" and now takes either a single Set::Relation object as before or an Array of 0..N Set::Relation objects which is new. With this change, these operators are now at feature parity with the Muldis D functions they are based on, except that they never handle the niladic option; being object methods, there is always at least one operand which is the invocant. * (Relation.pm) Updated each of the 4 functional methods ["(|cmpl_)restriction", "extension", "map"] to remove its optional "assuming" parameter. This parameter was a fossil left over from the original Muldis D versions of these operators that the Perl version was ported from; the parameter was necessary in Muldis D to have reasonable flexibility due to Muldis D lacking certain other features that Perl has, which make this parameter unnecessary in Perl. The removal was to keep the Perl simpler; it also sets the stage for the next change item. * (Relation.pm, Set_Relation_51_Database_in_Depth_Example.t) Updated each of the 4 functional methods ["(|cmpl_)restriction", "extension", "map"] so that the Perl routine supplied as its "func" argument is now assumed to have zero parameters rather than one, and the Perl routine is now supplied its input tuple/Hash in $_, same as how Perl's built-in map/grep operators work, rather than as a first/only argument. Thanks to Todd Hepler for proposing that design change to "restriction" to make it more DWIM. * (Relation.pm, Set_Relation_51_Database_in_Depth_Example.t) Updated each of the 4 functional methods ["(|cmpl_)projection", "extension", "map"] so that the "(|result_)attrs" parameter can also take a Str argument rather than just an Array of Str argument. Thanks to Todd Hepler for proposing that design change to "projection" to make it more DWIM. Also updated the Set::Relation constructor submethod similarly, so its "members" parameter may also take a Str argument; this would produce a relation object with 1 attribute and zero tuples. * (Relation.pm) Fixed an "insert" mutator method bug so it detects and blocks attempts to insert the invocant Set::Relation object into itself as a value-typed component, which would have had the side-effect of freezing the invocant, or would have conceptually been an infinite recursive deep copy operation; also fixed the "delete" mutator with the same detector since it would have had the same freezing problem. * (Relation.pm) Updated all routines that take tuple-representing Hash values from the user, either directly or as tuple-valued attrs, either as a routine argument or a closure return value, so that each Hash is tested for circular references between itself or its value-typed components; this update fixes a general bug where the module could infinitely recurse when processing that input, since tuple-representing input from the user is deep-copied. * (Relation.pm) Some POD reformatting: Took what used to be the 5 level-2 headings under the INTERFACE level-1 heading and changed said 5 into level-1 headings, but did not uppercase their text. Then converted the routine lists from being "=over/=item /=back" to each routine having its own level-2 heading. For each routine, the new heading is just the short name of the routine, and the full signature of the routine displays just as its own paragraph. All these changes combined should look visually like we are faking 3 levels of headings, with top and middle being upcased and mixed case "=head1" respectively. * (Relation.pm) Minor POD updates and fixes. 2009-01-26 Darren Duncan * Set::Relation version 0.0.2 for Perl 5 is released on CPAN as Set-Relation-0.0.2.tar.gz. * (Relation.pm) Fixed two instances of a bug in the "rename" method. Thanks to Todd Hepler for spotting the bug and providing a patch. * Added new test file "t/Set_Relation_51_Database_in_Depth_Example.t", which exercises more than a half-dozen Set::Relation methods that previously had no tests; the "rename" bugs were exposed when writing this. Thanks to Todd Hepler who authored and contributed this file. * This distribution has gained a new direct external dependency on the Test::Deep module, which currently is only used by the new test file. * (Relation.pm) Minor code comment fixes and POD updates. 2009-01-21 Darren Duncan * Set::Relation version 0.0.1 for Perl 5 is released on CPAN as Set-Relation-0.0.1.tar.gz. * (Relation.pm) Fixed a bug in the "quotient" method, and further updated it with some special-case shortcuts. * (Relation.pm) Other minor updates. * (README, Relation.pm) Previously the FORUMS pod section of Relation.pm and 3 parts of the README file lacked content, and now they have it; added documentation about where the Set::Relation version control and support forums are. 2009-01-19 Darren Duncan * Set::Relation version 0.0.0 for Perl 5 is released on CPAN as Set-Relation-0.0.0.tar.gz. * It constitutes a rewrite of Set::Relation for Perl 6 that had been made in 2006 but was never functional; the large body of work going into the Muldis D language and Muldis Rosetta framework during the intervening period also fed into this new Set::Relation module; it is expected that this new Set::Relation for Perl 5 will be ported to Perl 6 in the near future and so upgrade that 2006 version; meanwhile, this Changes entry refers only to the Perl 5 version. * This is the first release of the Perl 5 Set::Relation distribution, and the first release of any distribution to contain a Perl 5 module named Set::Relation. * This is the initial file manifest: Changes INSTALL lib/Set/Relation.pm LICENSE/GPL LICENSE/LGPL Makefile.PL MANIFEST MANIFEST.SKIP README t/Set_Relation_00_Compile.t t/Set_Relation_50_Synopsis.t TODO * As of this release, Set::Relation is officially in pre-alpha development status. * This is the initial complement of routines; besides the "new" constructor submethod, there are these 40 object methods: "clone", "export_for_new", "freeze_identity", "which", "members", "heading", "body", "evacuate", "insert", "delete", "degree", "is_nullary", "cardinality", "is_empty", "is_member", "empty", "insertion", "deletion", "rename", "projection", "cmpl_projection", "restriction", "cmpl_restriction", "extension", "static_extension", "map", "is_identical", "is_subset", "is_proper_subset", "is_disjoint", "union", "exclusion", "intersection", "difference", "semidifference", "semijoin", "join", "product", "quotient", "composition". 2009-01-04 Darren Duncan The next version of the Module List will list the following module: modid: Set::Relation DSLIP: cmpOl description: Relation data type for Perl userid: DUNCAND (Darren Duncan) chapterid: 6 (Data_Type_Utilities) enteredby: BDFOY (brian d foy) enteredon: Mon Jan 5 06:12:12 2009 GMT The resulting entry will be: Set:: ::Relation cmpOl Relation data type for Perl DUNCAND 2006-04-14 thru 2006-11-22 * A Perl 6 project named "Relation" is started (complementary to the earlier existing to-be-named Muldis Rosetta project) which was intended to provide native tuple and relation data types for ordinary use in Perl 6 programs like other built-in collection types. The first commit was Pugs SVN rev 9938, on 2006-04-14, and Pugs 6.2.12 (2006-06-26) included it. Hence 2006 is the start of the declared copyright date range for Set::Relation. * On 2006-07-04, renamed this Perl 6 project to "Set-Relation", which it remains to this day. Pugs 6.2.13 and later included this. * The Perl 6 Set-Relation received various small updates thru 2007-02-03 (Pugs SVN rev 15168), but is now stagnant; it will likely get un-stuck after the initially newer Perl 5 version is made to work. 2005-12-05 * Darren Duncan is introduced by David Wheeler to the truly relational model of data, in a posting on the Bricolage development list in the "Re: [6977] New branch for maintenance of Bricolage 1.10.x." thread. * David said that Darren's expressed thought, that compound data types in table fields was a violation of first normal form, was in fact a misconception about the relational model. David then referenced a recent interview with C. J. Date. * This set off a chain of events which was the largest paradigm shift to ever affect what evolved into the Muldis Rosetta project, and also resulted in the genesis of the Set::Relation module.