Rosetta
----------------------------------------------------------------------
2005-09-01 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.47.
* New code file versions are: Rosetta.pm and Validator.pm v0.47 and
Validator/L/en.pm 0.13.
* Updated external dependencies on SQL::Routine to v0.69.
* Added a new main title to this Changes file that matches the ReadMe file.
* Rewrote the documentation section KEEPING UP TO DATE in the ReadMe file.
* Corrected an oversight from release 0.46; updated the BRIEF MODULE LIST in
Framework.pod to include the listing of the 8 Rosetta::Interface::* classes
that Rosetta.pm gained in that release.
* Updated Rosetta.pm to retain compatability with a change made in
SQL::Routine v0.66; one can no longer straight compare two SRT Node or
Container objects to determine their equivalence, since they are now
interfaces over a shared storage object. Updated these 3 Rosetta.pm methods
to use the new SQL::Routine method get_self_id() instead of the straight
comparisons: _assert_arg_node_type(), Environment.new(),
_prepare__call_engine().
* Updated the Rosetta.pm DESCRIPTION to add a sentence on what services the
Rosetta core provides to Engines (mainly input and output validation).
* Several other, minor Framework.pod updates, including the addition of the
Apache Derby db to the brief Engine module list.
* This release mainly saw the removal of the previously deprecated
'Rosetta::Utility::EasyBake' module; a greatly simplified version of its
functionality was merged into Validator.pm, which was previously its sole
dependent. Removed the Validator.pm 'easybake' class property. Removed the
setup_app() private method and merge its functionality into the setup_env()
and setup_conn() private methods. Validator.pm gained mostly pristine
copies of the %BC_SETUP_NODE_TYPES constant data dictionary plus the
validate_connection_setup_options() public method, and the old
_throw_error_message() was merged into the latter. The old
build_application() and build_child_environment() were both merged into each
of setup_env() and setup_conn(). The old build_child_connection() was
merged into setup_conn(). The old sroutine_catalog_list() was merged into
test_catalog_list(). The old sroutine_catalog_open() and
sroutine_catalog_close() were merged mostly into setup_conn() with a bit
merged into test_conn_basic(). The old _build[|_child]_node_auto_name() are
no longer used; Validator now hard-codes all generated Node Surrogate Ids,
and all Node Ids are set to auto-generate in setup_env() and setup_conn().
These old EasyBake.pm methods were simply deleted without adaption: new(),
build_application_with_node_trees(), build_environment(),
build_connection(), _assert_arg[|_intf]_obj_type(). Regarding POD
documentation, the validate_connection_setup_options() public method came
over almost pristine, build_connection()'s explanation of SETUP_OPTIONS was
merged into main(), and build_child_connection()'s code example was added to
the SYNOPSIS. The previously deprecated Rosetta::Utility::EasyBake::L::en
module was also removed, and its 7 user text messages were moved, mostly
pristine, into Validator/L/en.pm. The combined size of the 4 pre-merged
files was 63K, and the 2 post-merged files are is 36K, giving us a 43% file
size reduction while retaining all the old functionality. Also updated
Framework.pod and ROS_00_Compile.t (4 numbered tests) to remove mention of
the EasyBake modules. Removed the Rosetta.pm DESCRIPTION paragraph that
said the module has a multi-layered API.
* Updated Rosetta.pm and Validator.pm to retain compatability with changes
made in SQL::Routine v0.69; replaced all invocations of the Node methods
[get|clear|set]_[literal|enumerated|node_ref]_attribute[|s]() with
invocations of [get|clear_set]_attribute[|s]().
2005-07-07 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.46.
* New code file versions are: Rosetta.pm and Validator.pm v0.46 and
Rosetta/L/en.pm 0.18 and Validator/L/en.pm 0.12 and EasyBake.pm 0.01 and
EasyBake/L/en.pm 0.01 (the last 2 are new, and explained below).
* Updated external dependencies on Locale::KeyedText to v1.05 and on
SQL::Routine to v0.65.
* This release is a snapshot that shows a mid-way point of for large Rosetta
upgrade; many changes were made, and many more will be in the next few days.
* Added new external dependency on Scalar::Util v1.11 (bundled with Perl
5.8.x); Rosetta now uses its 'weak refs' feature internally at strategic
places so that you no longer need to explicitly destroy Interface trees when
you are done with them. The circular refs between parent and child Rosetta
Interfaces no longer prevent Perl's standard garbage collection from working
when expected, which is when all external refs to a child-most Interface go
away. This change makes Rosetta much more DWIM and easier to use. All 3
invocations of Scalar::Util::weaken are in the new private Interface method
_new__set_common_properties(). Parent links to children are made weak,
while child links to parents are strong, which ensures children are always
auto-destructed before their parents. Removed the destroy() method from all
3 Rosetta.pm classes, and the Interface methods
[|_]destroy_interface_tree(), and the invocation of such in do(). Updated
Details.pod to remove references to those methods; updated Rosetta/L/en.pm
to remove the 'ROS_I_DESTROY_HAS_CHILD' user text message. Updated
Validator.pm to remove all invocations of those methods. Since
auto-destruction of individual Interfaces separate from their tree will
leave undefined weak-ref elements in their parents' child lists, added new
Interface magic method DESTROY() to purge those undefs.
* Updated all files in this distribution that display the physical address
of the Free Software Foundation, Inc. so it uses their current address of
"51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA" rather than their
previous address of "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA";
this affects every COPYRIGHT AND LICENSE statement in the core files and the
'ReadMe' file, plus any 'GPL' or 'LGPL' license file.
* Updated the INSTALL file so that it is more generic, and all of my
distributions now use an identical copy of it.
* Updated the main heading in the ReadMe file to state the distribution's
name rather than a terse description of it.
* The 'Rosetta' core module has been split into itself and a new module
'Rosetta::Utility::EasyBake'; the latter is an optional extension to the
former. EasyBake.pm contains 10 public functions from the old Rosetta.pm:
validate_connection_setup_options(), build_application[|_with_node_trees](),
build_[|child]_[environment|connection](),
sroutine_catalog_[list|open|close](). It also contains the
%BC_SETUP_NODE_TYPES file-scope constant and the 2 private functions
_build[|_child]_node_auto_name(). Everything else that was in the old
Rosetta.pm is in the new one, sans other edits to that module. The
corresponding portions of Details.pod were removed from there and added to
EasyBake.pm. The corresponding parts of Rosetta/L/en.pm were removed from
there and became the new Rosetta::Utility::EasyBake::L::en module. Any
moved functions that used to be Interface object methods now take those
objects as their first argument; all of the moved functions are now
stateless. Updated Validator.pm to use the moved functions correctly.
Updated Rosetta_Engine_Generic.t, and the Validator/L/en.pm SYNOPSIS, to add
'Rosetta::Utility::EasyBake::L::' to the Translator Sets list. Note that
EasyBake.pm should be considered deprecated, for quick-and-dirty programs or
experiments; large programs or other CPAN modules should write directly to
the Rosetta module and/or a different wrapper instead.
* Corresponding updates to Rosetta.pm, Rosetta/L/en.pm, and Details.pod:
split the 2 Interface properties 'parent interface', 'child interface' into
4 more specialized properties, 'parent-by-[creation|context] interface',
'child-by-[creation|context] interface'; likewise their 2 parent/child
accessor methods were split into 4. Some interface types use both of these
new properties, and some use only one, and 'Application' still none. The
PARENT_INTF argument of Interface.new() was similarly split into 2
arguments. Also removed the get_sibling_interfaces() accessor method, which
isn't currently in use anywhere.
* Also split up the 1 'srt node' property and accessor into
5 more specialized ones: 'application instance node', 'data link product
node', 'catalog link node', 'external cursor node', 'routine node'; they are
specific to these 5 Interface types respectively: Application, Environment,
Connection, Cursor, Preparation.
* Removed the 1 'routine' Interface property, and get_routine() accessor
method; now, rather than storing a prepared anonymous Perl subroutine to
execute, the Interface method execute() will now pass through to an Engine's
execute() method instead; added execute() to the Engine class and Dispatcher
class; added new Dispatcher property 'prep routine' for that class to store
its Perl sub in; removed the ROUTINE argument from Interface.new().
* Removed the routine_source_code() methods from the Interface and Engine
classes since they aren't currently in use; a replacement may come later.
* Reconfigured Interface.new() to invoke Engine.new() itself, and removed
its ENGINE argument. Updated Dispatcher method _prepare__srtn_cat_list() to
first create a new Interface and then set it's new Engine's properties,
rather than creating the new Engine prior to the Interface. The reordering
of these related creations should greatly help make Rosetta easier to use.
* The Dispatcher class is no longer a sub-class of the Engine class, but
rather of just 'Rosetta', as 'Interface' and 'Engine' are. Removed
Rosetta/L/en.pm message 'ROS_I_PREPARE_ENGINE_YES_DISPATCHER', since it is
no longer possible for an 'Engine' sub-class to trigger this error.
* Rewrote part of Dispatcher.features() to fix a potential or actual bug
regarding how the Engines' features() results are amalgamated.
* Corresponding updates to Rosetta.pm, Rosetta/L/en.pm, and Details.pod:
Split up the Rosetta::Interface class into itself and 8 sub-classes whose
names are in the format Rosetta::Interface::*, where * is one of:
Application, Environment, Connection, Cursor, Literal, Success, Preparation,
Error. There is no longer an Interface property named "interface type", as
its 8 possible types now have their own classes instead. The 1 'Rosetta'
wrapper method new_application() became 8 Interface wrapper methods, named
new_*_interface(). The Rosetta::Interface.new() method is gone, and each of
other 8 sub-classes now have their own specialized new(). All 8 Interface
classes have the 4 parent/child properties plus the 'root interface' and
'engine' properties in common; they also have in common the 4 parent/child
accessor methods plus get_root_interface() and get_engine(). Now only the
Application class has these 3 properties, though accessors for them are on
all 8 classes: 'srt container', 'application instance node', 'trace
filehandle'. Now only the Error class has the 'error message' property and
accessor. The other 4 above-mentioned SRT properties and their accessor
methods are now only with their respective Interface classes. Now only
these 3 classes have a features() method: Application, Environment,
Connection. Now only those 3 classes plus Cursor have prepare() and do()
methods. Now only the Preparation class has an execute() method. Added 5
new (wrapper) methods to the Engine class, which Engines must implement, as
the Interface' new() will invoke them: new_*_engine() for environment,
connection, cursor, literal, preparation; the Engine class also no longer
has a plain new() method, though other Engines can if they want to. Added 3
new (wrapper) methods to the Dispatcher class: new_*_engine() for
application, literal, preparation. The old _prepare_lpn() private Interface
method, plus relevant parts of the old prepare() and execute() methods, has
been merged into the new Environment.new(). These private Interface methods
are now gone, as their functionality has been moved into the various new()
methods and/or new refactorings: _validate_properties_to_be(),
_validate_parent_intf(), _validate_srt_node().
* Refactored various Interface methods and brought out common functionality
into these 4 new 'Rosetta' private functions/methods, which complement
_throw_error_message(): _assert_arg_[obj|intf_obj|node]_type(); they can be
invoked on self by either Interface or Engine or Dispatcher objects. More
Interface method refactoring brought out these 5 new Interface private
methods; they can only be invoked on self by Interface classes:
_assert_engine_made_errors(), _new__assert_args_intfs_same_tree(),
_new__set_common_properties(), _features(), _prepare().
* Added some new input and output validation code to the prepare(),
execute(), and payload() methods, but they are filled with TODO comments and
don't actually throw any exceptions yet; effectively they are no-ops.
* Added a paragraph to Rosetta.pm's DESCRIPTION to specify that Rosetta has
no intention of being an object-relational mapper but speaks just in
relational database terms.
* Rewrote half of Details.pod's STRUCTURE documentation, mainly the
explanation of now the various Interface types relate to each other, in
light of there now being 2 types of parent/child relationships.
* Replaced most of the user text messages in Rosetta/L/en.pm with a smaller
number of different and more generic ones.
* Rewrote the TODO file such as with concern LOB support that is as elegant
as current cursor support.
* Minor updates to Framework.pod. Updated the BRIEF MODULE LIST: 1. added a
brief paragraph that gives an analogy of the Rosetta framework parts in
terms of the DBI framework; 2. removed SQL::Routine::API_C following a
rearrangement in the SQL-Routine distribution that merged it into
SQL::Routine::Details; 3. added modules Rosetta::Utility::EasyBake and
Rosetta::Utility::EasyBake::L::en to the Rosetta distro; 4.
SQL::Routine::SQLBuilder and ::SQLParser each gained an en.pm; 5.
Rosetta::Emulator::DBI is now in its own distribution and has an en.pm.
* Various other minor updates throughout the distribution.
* Note that Features.pod had zero changes besides in the copyright notice.
2005-05-13 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.45.
* New code file versions are: Rosetta.pm and Validator.pm v0.45 and
Rosetta/L/en.pm 0.17 and Validator/L/en.pm 0.11.
* Updated external dependencies on Locale::KeyedText to v1.04 and on
SQL::Routine to v0.62.
* Updated every instance of the COPYRIGHT AND LICENSE documentation in this
distribution to correct the declared date range in which the core Rosetta
files were created. The new dates are 2002 thru 2005, which is when I
actually committed documentation describing or code implementing what became
the Rosetta core. The old dates were 1999 thru 2005, which goes back to the
time that I started conceiving a larger project which the aforementioned
module started out being related to; however, those earlier years did not
contain any work on what specifically became the aforementioned module, so
they are now excluded.
* Updated every instance of the COPYRIGHT AND LICENSE documentation in this
distribution so that you may now choose between licensing it under the GPL
version 2 or any later GPL version, rather than only under version 2.
* Renamed the "LICENSE" file to "GPL", and correspondingly updated all
references to it in this distribution, most of them being in COPYRIGHT AND
LICENSE statements. This change was made to reduce user confusion in
situations where files from this distribution may be aggregated with other
files that have different licenses; the old name was too generic.
* Updated Routine.pm and Routine/L/en.pm in correspondence to the recent
SQL::Routine change where Nodes now always live in Containers. Updated
private method _validate_srt_node() so it no longer asserts that the given
SRT_NODE is in a Container; we can now assume that is the case. Removed 2
related user text messages, 'ROS_I_[NEW_INTF|PREPARE]_NODE_NOT_IN_CONT'.
* A few trivial Framework.pod updates.
* Renamed Rosetta.t to ROS_00_Compile.t and rewrote it to contain 8 tests; 4
of these use Test::More's use_ok() function to cleanly test that the 4 core
modules will load without errors; 4 of these test, with cmp_ok(), that the 4
core modules are of the correct versions. Before this change, the original
test script would simply die without any ok/not ok if the core modules were
missing. The old test script simply printed 'ok 1' to show it was running.
2005-04-22 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.44.
* New code file versions are: Rosetta.pm and Validator.pm v0.44.
* Updated external dependencies on SQL::Routine to v0.59.
* This release is entirely about maintaining compatability with
SQL::Routine, whose Container objects now auto-destruct when all external
refs to them go away, and holding an external ref to a Container's Node is
no longer sufficient to prevent the auto-destruction; Containers no longer
have any manual destroy() methods.
* Updated Rosetta.pm: Added 1 new Interface property, 'srt_cont', which is
defined to store a direct ref to the SRT Container object that 'srt_node'
lives in. This is necessary when external code expects an Interface tree to
maintain the sole reference to the SRT Container it is using. The 2
Interface methods new() and get_srt_container() were updated accordingly.
* Updated Rosetta.pm and Details.pod and Validator.pm: Removed the
Interface.destroy_interface_tree_and_srt_container() method declaration; any
invocations of it now call destroy_interface_tree(), having the same effect.
* A few trivial Framework.pod updates.
* Renamed this file to 'Changes' from 'ChangeLog'; the new name is more
descriptive to its free-form structure, and more consistent with CPAN (which
uses both names but 'Changes' seems to be more common these days). Also
truncated this Changes file to remove all detail entries for releases v0.28
thru v0.43; in their place was added a change summary for releases v0.01
thru v0.43 that mainly just said what the names and versions of all the
predecessor distributions and modules are.
2005-04-03 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.43, containing Rosetta 0.43 and Rosetta::Validator 0.43,
was released on CPAN.
2004-10-26 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.37, containing Rosetta 0.37 and Rosetta::Validator 0.37,
was released on CPAN. This is the first release for this distribution where
Rosetta and Rosetta::Validator explicitly have matching version numbers.
2004-10-04 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.36, containing Rosetta 0.36 and Rosetta::Validator 0.06,
was released on CPAN. This is the last release for this distribution where
Rosetta and Rosetta::Validator do not explicitly have matching version
numbers.
2004-08-16 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.33, containing Rosetta 0.33 and Rosetta::Validator 0.03,
was released on CPAN. This is the first release for this distribution and
Rosetta module where they both explicitly have matching version numbers,
aside from the explicitly matched releases 0.01 thru 0.061.
2004-08-12 Darren Duncan <perl@DarrenDuncan.net>
Record update in the PAUSE modules database:
description: [Rigorous database portability] was [Rigorous database portability framework]
The resulting entry will be:
Rosetta cdpOg Rigorous database portability DUNCAND
2004-08-12 Darren Duncan <perl@DarrenDuncan.net>
Record update in the PAUSE modules database:
description: [Rigorous database portability framework] was [Framework for RDBMS-generic apps and schemas]
The resulting entry will be:
Rosetta cdpOg Rigorous database portability framework DUNCAND
2004-08-06 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.32, containing Rosetta 0.16 and Rosetta::Validator 0.02,
was released on CPAN. This is the last release for this distribution and
Rosetta module where they both do not explicitly have matching version
numbers.
2004-07-07 Darren Duncan <perl@DarrenDuncan.net>
Record update in the PAUSE modules database:
statl: [p] was [h]
The resulting entry will be:
Rosetta cdpOg Framework for RDBMS-generic apps and schemas DUNCAND
2004-07-05 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.31, containing Rosetta 0.15 and Rosetta::Validator 0.01,
was released on CPAN. This is the first release of any distribution to
contain Rosetta::Validator.
2003-04-27 Darren Duncan <perl@DarrenDuncan.net>
Record update in the PAUSE modules database:
statl: [h] was [p]
The resulting entry will be:
Rosetta cdhOg Framework for RDBMS-generic apps and schemas DUNCAND
2003-04-16 Darren Duncan <perl@DarrenDuncan.net>
Record update in the PAUSE modules database:
statp: [g] was [p]
The resulting entry will be:
Rosetta cdpOg Framework for RDBMS-generic apps and schemas DUNCAND
2003-04-15 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.07, containing Rosetta 0.062, was released on CPAN.
This is the first release for this distribution and Rosetta module where
they both do not explicitly have matching version numbers.
2003-03-09 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.061, containing Rosetta 0.061, was released on CPAN.
This is the last release for this distribution and Rosetta module where they
both explicitly have matching version numbers, aside from the explicitly
matched releases 0.33 and later.
2003-01-27 Darren Duncan <perl@DarrenDuncan.net>
* Rosetta Release 0.02, containing Rosetta 0.02, was released on CPAN; this
is the first release of the Rosetta distribution, which was renamed from
DBIx-Portable. This is the first release of any distribution to contain
Rosetta, which at this time contains no executable code but for declaring a
name and version. Early versions of the design documentation that became
the Rosetta distribution were included.
2003-01-21 Darren Duncan <perl@DarrenDuncan.net>
The next version of the Module List will list the following module:
modid: Rosetta
DSLIP: cdpOp
description: Framework for RDBMS-generic apps and schemas
userid: DUNCAND (Darren Duncan)
chapterid: 7 (Database_Interfaces)
enteredby: ANDK (Andreas J. König)
enteredon: Tue Jan 21 08:20:47 2003 GMT
The resulting entry will be:
Rosetta cdpOp Framework for RDBMS-generic apps and schemas DUNCAND
2003-01-05 Darren Duncan <perl@DarrenDuncan.net>
* DBIx-Portable Release 0.01, containing DBIx::Portable 0.01, was released
on CPAN; this is the only release of the DBIx-Portable distribution, which
was subsequently renamed to Rosetta. This is the only release of any
distribution to contain DBIx::Portable, which at this time contains no
executable code but for declaring a name and version. This is the first
release of any distribution to contain design documentation that became the
Rosetta distribution.
2002-11-12 Darren Duncan <perl@DarrenDuncan.net>
* Began development on the modules which became the Rosetta
distribution as their own entity that is separate from my application, for
open-source distribution on CPAN. The modules were to comprise an
RDBMS-generic DB framework for any application to use.
* Modules based on a template created by h2xs 1.18.
2002-07-28
* Posted the first significant update to the second prototype, which added
an index or cache for data that was expensive to calculate for each page
request, and involved rewriting about a fourth of the perl code.
2002-06-07
* Posted to my website the second public prototype demo of the new
self-proprietary database driven application, whose database schema, user
interface, feature set, and Perl application code was almost completely
rewritten. The new version explicitly had separate modules for database
communication and the web interface logic, with MySQL-specific code and
database generic or data dictionary code in separate files, and separate
files for parts of the web interface. The program used the same generic
CPAN modules as in the first prototype, DBI/MySQL and CGI::Portable.
* This is when I started writing self-contained code components that were
explicitly designed to enable external code that used them to work
seamlessly on multiple database products, and hence 2002 is the start of my
declared copyright date range for Rosetta.
2001-11-24
* Posted the last update to the first prototype.
2001-07-12
* Posted to my website the first public prototype demo of a new
self-proprietary database driven application, which is like a cross between
a multimedia metadata catalogue and a repository for historical or
genealogical data. This application contained the first prototypes of code
that ended up in these modules. All of this application's code, for
database communication and web interface logic, was situated in a single
module, with the rest of the program being more generic CPAN modules like
DBI (and DBD for MySQL) and CGI::Portable.
2000-05-17
* Requested MySQL database privileges on my web host so I have something to
start developing, testing and deploying database driven applications on.