SQL-Routine-SQLBuilder
----------------------------------------------------------------------

2005-09-01   Darren Duncan <perl@DarrenDuncan.net>

	* SQL-Routine-SQLBuilder Release 0.20.

	* New code file versions are: SQLBuilder.pm v0.20.

	* 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.

	* Updated SQLBuilder.pm to retain compatability with changes 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 7 SQLBuilder.pm
	methods to use the new SQL::Routine method get_self_id() instead of the
	straight comparisons: build_expr_call_uroutine(),
	build_query_table_factor(), build_query_select_list(),
	build_query_subquery(), build_schema_or_app_table_create(),
	build_dmanip_call_uroutine(), find_scalar_domain_for_row_domain_field().

	* Updated these 2 methods to fix bugs in their input checking:
	set_data_type_customizations(), _assert_arg_node_type().

	* Minor SQLBuilder.pm documentation update so that any Perl subs which were
	referred to as "function/method" etc are now simply "function".

	* Updated identifier_style() documentation to be easier to understand.

	* Minor DESCRIPTION documentation update.

	* Updated SQLBuilder.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-06-23   Darren Duncan <perl@DarrenDuncan.net>

	* SQL-Routine-SQLBuilder Release 0.19.

	* New code file versions are: SQLBuilder.pm v0.19 and en.pm v0.01 (this
	second file is new; details concerning it are below).

	* Updated external dependencies on Locale::KeyedText to v1.05 and on
	SQL::Routine to v0.65.

	* This release has a lot of functionality additions and bug fixes in the
	core modules, some of which would break user code; there were no additional
	tests this time around, however.

	* 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.

	* Updated build_expr_scalar_data_type_defn() to partially undo a change that
	was part of r0.18, by removing some "|| 0"; they should have only been added
	for numeric values, and not also boolean values.

	* The 2 old SQLBuilder.pm boolean object properties 'delim_ident' and
	'lc_nd_ident' were replaced by 1 new enumerated char str property
	'ident_style', whose 3 possible values [YD_CS,NP_CI_UP,NP_CI_DN] represent
	the 3 possible SQL identifier formats; correspondingly, the 2 accessor
	methods delimited_identifiers() and lowercased_non_delimited_identifiers()
	were merged into a single identifier_style() accessor method.  Also updated
	the new() and quote_identifier() methods to use the new property in place of
	the old ones.  Separately from this, a pristine SQL::Routine::SQLBuilder
	object will now produce delimited SQL identifiers by default instead of
	uppercased non-delimited identifiers; this change was made in new().

	* Renamed the 2 build_schema_schema_[crea|dele]te() methods to
	build_schema_[crea|dele]te(), and renamed the other old 10
	build_schema_*_[crea|dele]te() methods to
	build_schema_or_app_*_[crea|dele]te().  Also updated the old 3 'create'
	methods for domains, sequence generators, and routines, so that they also
	use the 'TEMPORARY' keyword like is the case with tables and views when they
	are children of 'application' Nodes.

	* Added 2 new methods, build_expr_row_data_type_defn() and its wrapper 
	build_expr_row_data_type_or_domain_name(), which generate SQL definitions 
	for row data types.  Also split up the 2 methods 
	build_schema_or_app_domain_[crea|dele]te() into the 4 methods 
	build_schema_or_app_[scalar|row]_domain_[crea|dele]te().

	* Split up method build_schema_or_app_routine_create() into itself and the 
	new method build_dmanip_routine_args(); moreover, an argument list for 
	procedure and function routines is actually generated now, where none but a 
	placeholder was done before (trigger argument lists still aren't done).

	* Updated the 3 methods build_schema_or_app_routine_create(),
	build_dmanip_routine_args(), and build_dmanip_routine_body() so that
	declaration SQL is now made for all 4 of these routine return value or
	argument or variable types: SCALAR, ROW, SC_ARY, RW_ARY; previously only
	SCALAR definitions were made.

	* Updated methods build_query_select_list(), build_query_query_expr_body()
	to replace any '*' selections with explicit column lists; this corrects for
	a potential problem where said view is part of a composite query and said
	tables were previously declared in the database to have the columns in a
	different order than our SQL::Routine's row_data_type fields.

	* Deleted 1 method build_query_into_clause() and merged its functionality
	into the 2 methods build_query_query_spec(), build_dmanip_call_sroutine().

	* Updated the CURSOR definition code in build_dmanip_routine_body() to stay
	compatible with a recent SQL::Routine change about where defining-views are.

	* Renamed method build_identifier_schema_obj() to
	build_identifier_schema_or_app_obj() and expanded its functionality to work
	correctly for SRT Nodes that are either primary children of 'schema' or
	'application' Nodes; objects in the latter case are treated as TEMPORARY and
	referenced by default with the "MODULE." prefix; objects in the former case
	now always have the schema name prefixed regardless of the FOR_DEFN setting
	(they will only be different later following a possible new dbms-specific
	option).  Updated all 29 invocations of the method to use the new name.

	* Added new core file lib/SQL/Routine/SQLBuilder/L/en.pm, version 0.01,
	which is a localization of SQL::Routine::SQLBuilder for English; this first
	version has 6 user text messages, mostly generic.  Added new SQLBuilder.pm
	private method _throw_error_message() which will throw exceptions that the
	new en.pm can be used with.  4 of en.pm's messages are these generic ones:
	'SRT_SB_METH_ARG_UNDEF', 'SRT_SB_METH_ARG_NO_[ARY|HASH|NODE]'.  Also added
	private method _assert_arg_node_type() which can be used by any other method
	expecting a SRT Node argument (all 52 such methods were likewise updated);
	it throws an exception if the given arg value is the wrong Node type or not
	a Node.  1 of en.pm's messages goes with this,
	'SRT_SB_METH_ARG_WRONG_NODE_TYPE'.  Updated set_data_type_customizations() 
	and identifier_style() to invoke _throw_error_message() directly, and the 
	second one has its own 'SRT_SB_IDENT_STYLE_ARG_INVAL' in en.pm.

	* Otherwise updated these SQLBuilder.pm methods to fix longstanding
	incompatabilities with SQL::Routine: build_query_query_expr_body(),
	build_access_grant(), build_access_revoke(), build_dmanip_call_sroutine(),
	build_dmanip_call_uroutine().

	* All test suite changes were small and dedicated to maintaining
	compatability with the updated SQLBuilder.pm.  Updated t_SRT_SB_Util.pm's
	error_to_string() method to use the new en.pm file.  Added 2 new tests to
	SRT_SB_00_Compile.t to verify en.pm's compilation and its version.  Updated
	SRT_SB_10_Generic.t to account for delimited identifiers being the default
	and to invoke identifier_style(), and to rearrange the tests so the new
	default format is tested first, and to account for schema names now being
	output in create/delete statements, and to use the renamed build_schema_*()
	method names.  The t_SRT_SB_Model.pm file had zero changes.

2005-05-13   Darren Duncan <perl@DarrenDuncan.net>

	* SQL-Routine-SQLBuilder Release 0.18.

	* New code file versions are: SQLBuilder.pm v0.18.

	* Updated external dependencies on Locale::KeyedText to v1.04 and on
	SQL::Routine to v0.62.

	* This release marks the very first time that SQL::Routine::SQLBuilder has
	actually been executed, and not merely just compiled.  Correspondingly, it
	contains a reasonable collection of small bug fixes, but no large changes.

	* Updated every instance of the COPYRIGHT AND LICENSE documentation in this
	distribution to correct the declared date range in which the core
	SQL::Routine::SQLBuilder files were created.  The new dates are 2002 thru
	2005, which is when I actually committed documentation describing or code
	implementing what became the SQL::Routine::SQLBuilder 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.

	* In SQLBuilder.pm, added new boolean property 'lc_nd_ident' along with a
	new corresponding accessor method lowercased_non_delimited_identifiers(); 
	also updated new() to set it and quote_identifier() to use it.  When this 
	property is true, generated non-delimited SQL identifiers will be folded to 
	lowercase rather than to uppercase.

	* In SQLBuilder.pm, updated the following 13 methods to retain compatability
	with recent SQL::Routine changes and/or to fix bugs:
	build_identifier_view_src_field(), build_expr(),
	build_expr_scalar_data_type_defn(), build_query_from_clause(),
	build_query_table_factor(), build_query_select_list(),
	build_schema_[table|routine]_create(), build_access_[grant|revoke](),
	build_dmanip_routine_body(), build_dmanip_call_sroutine(),
	build_dmanip_src_schema_object_name().

	* Also added these 3 private utility methods, which the above use:
	_[scalar|row]_data_type_of_node(), _row_domain_of_node().

	* These 26 methods saw only minor changes, concerning output whitespace:
	build_query_table_expr(),
	build_query_[where|group|having|window|into]_clause(),
	build_query_query_[spec|expr|expr_body](),
	build_schema_[schema|domain|sequence|view]_[create|delete](),
	build_schema_[table|routine]_delete(), build_access_role_[create|delete](),
	build_dmanip_routine_stmt(), build_dmanip_[insert|update|delete]_stmt(),
	build_dmanip_call_uroutine().

	* Small DESCRIPTION update, in the sentence about how much of SQLBuilder.pm 
	has been executed.

	* Documentation fix for the delimited_identifiers() method.

	* Split t/SQL_Routine_SQLBuilder.t up into t/SRT_SB_00_Compile.t and
	t/lib/t_SRT_SB_Util.pm.  Rewrote SRT_SB_00_Compile.t to contain 5 tests; 2
	of these uses Test::More's use_ok() function to cleanly test that the 1 core
	module and Util will load without errors; 1 of these tests, with cmp_ok(),
	that the 1 core module is of the correct version; 2 of these use can_ok() to
	check Util.  Before this change, the original test script would simply die
	without any ok/not ok if the core module was missing.  The old test script
	simply printed 'ok 1' to show it was running.  The test utility module
	t_SRT_SB_Util.pm contains the message() and error_to_string() functions to
	be used by other upcoming test scripts; the message() function also received
	a minor update such that its output is prefixed with '#' rather than '--',
	like Test::More does for comments.

	* Added 2 new test suite files, t/lib/t_SRT_SB_Model.pm and
	t/SRT_SB_10_Generic.t, which test that generating SQL to create and drop a
	'table' and 'view' schema object, all in 3 SQL variants; this adds 14
	numbered tests.  Updated SRT_SB_00_Compile.t to test that the new test
	module compiles; this adds 2 numbered tests, to total 7.

	* 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.01
	thru v0.17; in their place was added a change summary for releases v0.01
	thru v0.17 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>

	* SQL-Routine-SQLBuilder Release 0.17, containing SQL::Routine::SQLBuilder
	0.17, was released on CPAN.

2005-03-19   Darren Duncan <perl@DarrenDuncan.net>

	* SQL-Routine-SQLBuilder Release 0.16, containing SQL::Routine::SQLBuilder
	0.16, was released on CPAN; this is the first release of the
	SQL-Routine-SQLBuilder distribution.  This is the first release of any
	distribution to contain SQL::Routine::SQLBuilder, which was renamed from
	Rosetta::Utility::SQLBuilder.  This is the first release for this module
	where it explicitly has a version number matching its distribution.

2005-03-18   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta-Extensions Release 0.15, containing Rosetta::Utility::SQLBuilder
	0.15, was released on CPAN; this is the last release of the
	Rosetta-Extensions distribution.  This is the last release of any
	distribution to contain Rosetta::Utility::SQLBuilder.  This is the last
	release for this module where it does not explicitly have a version number
	matching its distribution.

2004-04-10   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta-Extensions Release 0.01, containing Rosetta::Utility::SQLBuilder
	0.01, was released on CPAN; this is the first release of the
	Rosetta-Extensions distribution.  This is the first release of any
	distribution to contain Rosetta::Utility::SQLBuilder.  This is the first
	release of any distribution for which some of the existing work that became
	the SQL-Routine-SQLBuilder distribution was in the form of executable code,
	and not just design documentation.

2004-03-25   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.29 was released on CPAN.  This is the last release of
	any distribution for which all of the existing work that became the
	SQL-Routine-SQLBuilder distribution was purely in the form of design
	documentation, without executable code of any kind.

2004-03-21   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.27 was released on CPAN.  This is the first release of
	any distribution where the proposal documentation for
	SQL::Routine::SQLBuilder uses the name Rosetta::Utility::SQLBuilder for it;
	it was renamed from Rosetta::Engine::Common::SQLBuilder.

2004-03-08   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.26 was released on CPAN.  This is the last release of
	any distribution for which the documented name of the proposed module that
	became SQL::Routine::SQLBuilder was given the name
	Rosetta::Engine::Common::SQLBuilder.

2004-02-23   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.24 was released on CPAN.  This is the first release of
	any distribution where the proposal documentation for
	SQL::Routine::SQLBuilder uses the name Rosetta::Engine::Common::SQLBuilder
	for it; it was renamed from Rosetta::Driver::Common::SQLBuilder.

2004-02-12   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.23 was released on CPAN.  This is the last release of
	any distribution for which the documented name of the proposed module that
	became SQL::Routine::SQLBuilder was given the name
	Rosetta::Driver::Common::SQLBuilder.

2003-04-15   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.07 was released on CPAN.  This is the first release of
	any distribution to have proposal documentation that splits out SQL
	generation code into its own module, whereas prior to this the documentation
	included SQL generation as one of several functions performed by several
	distinct modules.  The proposed name for this module is
	Rosetta::Driver::Common::SQLBuilder.

2003-01-27   Darren Duncan <perl@DarrenDuncan.net>

	* Rosetta Release 0.02 was released on CPAN; this is the first release of
	the Rosetta distribution.  Early versions of the design documentation that
	became the SQL-Routine-SQLBuilder distribution were included.

2003-01-05   Darren Duncan <perl@DarrenDuncan.net>

	* DBIx-Portable Release 0.01 was released on CPAN; this is the only release
	of the DBIx-Portable distribution.  This is the first release of any
	distribution to contain design documentation that became the
	SQL-Routine-SQLBuilder distribution.

2002-11-12   Darren Duncan <perl@DarrenDuncan.net>

	* Began development on the modules which became the SQL-Routine-SQLBuilder
	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 SQL::Routine::SQLBuilder.

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.