SQL-Routine-SQLBuilder
----------------------------------------------------------------------
2005-09-08 Darren Duncan <perl@DarrenDuncan.net>
* SQL-Routine-SQLBuilder Release 0.21.0.
* New code file versions are: SQLBuilder.pm v0.21.0 and en.pm v0.2.0.
* Updated external dependencies on Locale::KeyedText to v1.6.0 and on
SQL::Routine to v0.70.0.
* From now on, if the minimum Perl version that this distribution depends on
(currently 5.008001) comes bundled with a satisfactory version of a module
that we have a dependency on, then we will no longer specify any version
number when referring to said module. An example of such is Test::More.
* Converted every distribution file to use indentations composed of space
characters (4 spaces per indentation level) rather than tab characters.
* Updated all files containing POD (*.pm, *.pod) to re-order some POD
sections. Now all of the POD is after all of the code, rather than that
being mostly true but for a bit of POD before most of the code. The 'NAME'
POD has been moved to just above the 'SYNOPSIS'. The 'DEPENDENCIES' has been
moved to just above the 'SEE ALSO'. Any 'BUGS' and 'CAVEATS' have been
moved to just below the 'SEE ALSO'. The 'COPYRIGHT AND LICENSE' has been
moved to the very end of the file, except that any 'CREDITS' have been moved
below that. Also updated the ReadMe file to move the 'CREDITS' below the
'COPYRIGHT AND LICENSE'. There were zero changes to the content of any POD
sections, and no new POD sections were added or existing ones removed,
except for those explicitly listed below.
* Updated all files containing POD: Deleted the 'SYNTAX' section, whose
value was dubious, from any files that had one. Renamed 'COPYRIGHT AND
LICENSE' to 'LICENCE AND COPYRIGHT', and added a new 'AUTHOR' section just
above it. Renamed 'CREDITS' to 'ACKNOWLEDGEMENTS' in any files that had
one. COPYRIGHT and CREDITS were likewise renamed in the ReadMe file.
* Updated the POD in all *.pm files: Added a new 'VERSION' section, which
appears just below the 'NAME'. Added a new 'INCOMPATIBILITIES' section,
which appears just below 'DEPENDENCIES'. Renamed and/or merged any 'BUGS'
and 'CAVEATS' sections into a single 'BUGS AND LIMITATIONS' section, and
added that section to any files lacking its predecessors. Rewrote the
'DEPENDENCIES' into a new paragraph-resembling format that specifies where
each dependency is, such as bundled with perl, or bundled with the current
distribution, or available on CPAN; also rewrote the ReadMe file version.
* Updated all *.pm files to add a new external dependency on the 'version'
module, which has core-like functionality but isn't yet bundled with Perl;
all 'our $VERSION' declarations were changed to qv-wrapped three-part format
from floating point format; likewise, updated the *_00_Compile.t file to use
'version', and also changed the tests for expected module versions to be
performed by is() rather than cmp_ok().
* Updated SQLBuilder.pm to add a new external dependency on the 'only'
module, which has core-like functionality but isn't yet bundled with Perl;
all "use Foo N.NN" statements were changed to three-part format and now look
like "use only 'Foo' => 'N.N.N-'".
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.