2004-09-13   Darren Duncan <perl@DarrenDuncan.net>

	* Release 0.42.

	* New code file versions are: SyntaxModel.pm v0.42, en.pm v0.14.

	* Updated, corrected, and cleaned up several blocks of documentation in
	SyntaxModel.pm: STRUCTURE, BUGS, CAVEATS, SEE ALSO.  In Language.pod, these
	blocks were similarly worked on: the 'routine_type' enumerated type
	description, the NODE TYPES introduction, a 'user' Node type comment.

	* Changed the NAME of API_C.pod from "Describe the core C API for
	SQL::SyntaxModel" to "Describe the API for a C version of
	SQL::SyntaxModel".

	* This release is primarily a module design simplification, consisting of
	the removal of the distinct "At Home" Node evolution state; now there are
	only 2 distinct states, "Alone" and "Well Known".  The two remaining states
	have identical semantics to before, but there is now no intermediate state
	where a Node can both be in a container and not be return-linked to by
	other Nodes that it links to.  For all practical purposes, you can now just
	use the "Alone" state where you may have used "At Home" before, which is
	when an in-construction Node shouldn't have its existence known to the rest
	of the system.  All related changes were made in SyntaxModel.pm and en.pm,
	unless otherwise stated.  Further details of this change are listed next.

	* The method add_reciprocal_links() has had its functionality merged into
	the method put_in_container(); likewise, remove_reciprocal_links() has been
	merged into take_from_container().  The method are_reciprocal_links() was
	simply removed, since whether or not get_container() returns a value now
	has the same implications the removed method had.  There were 3 messages in 
	en.pm for those methods that were merged or removed.

	* Removed the 'links_recip' Node property, which is no longer needed.  Also
	removed the sqlsm_dt_node member 'links_recip' in the API_C.pod docs.  Any
	SyntaxModel.pm code which consulted the now-removed property when deciding
	to do something now consults whether the Node is in a Container instead.

	* Updated set_node_ref_attribute() and _clear_node_ref_attribute() to remove 
	one test and simplify two others; one en.pm message was removed.

	* The method move_before_sibling() had one input test updated and two others 
	merged; in en.pm, 3 messages were merged or removed.

	* Updated Node.assert_deferrable_constraints() to simplify a conditional.

	* Updated all documentation references to Node states and "At Home" to
	remove and adjust for the missing intermediate state.  Most updates were
	in: SYNOPSIS, NODE EVOLUTION STATES, and several method descriptions.

	* Updated t_SQL_SyntaxModel.pm to remove two add_reciprocal_links() calls.

	* Between the above changes, the file set had about 5K shaved from it.

	* Due to the removal of the *_reciprocal_links() methods, this release is
	not backwards compatible with any code that invoked them, which is
	basically all of it; to fix this, just remove or replace the invocations.

2004-09-09   Darren Duncan <perl@DarrenDuncan.net>

	* Release 0.41.

	* New code file versions are: SyntaxModel.pm v0.41, en.pm v0.13.

	* Updated all versioned *.pm files to use the modern syntax "our $VERSION =
	..." instead of "use vars qw($VERSION); $VERSION = ...".

	* Updated external dependencies on Locale::KeyedText to v0.07.

	* Updated Language.pod and SyntaxModel.pm so that the 'view' Node attribute
	'name' now appears below all primary-parent candidate view attributes,
	rather than between them.  Corresponding change to the expected output in 
	t_SQL_SyntaxModel.pm, and in the SYNOPSIS of SyntaxModel.pm.

	* Updated Language.pod and SyntaxModel.pm to remove INTO from the view_part
	enumerated list; view_expr Nodes are no longer used to store these details,
	but rather view_col Nodes are (they have a 1:1 relation).  Moved the two
	Node attributes [set_routine_arg,set_routine_var] to the view_col Node type
	from the view_expr Node type.  Corresponding constraints changes.

	* Updated Language.pod and SyntaxModel.pm to remove ANONYMOUS from the
	routine_type enumerated list; you should now use PROCEDURE or FUNCTION for
	application-side routines instead, the latter especially for those whose
	main action is a SELECT.  Updated for 'routine' Nodes the local attribute
	dependency on routine_type by return_var_type so that the attribute can
	only be set for FUNCTION routines, and it is now always-mandatory for
	those.  Corresponding updates to the SYNOPSIS documentation of
	SyntaxModel.pm, and to the t_SQL_SyntaxModel.pm test suite.

	* Updated Language.pod and SyntaxModel.pm so that 'routine' Nodes can no
	longer have 'table' or 'view' primary parent Nodes; now each TRIGGER
	routine will instead have a 'schema' primary parent Node instead, just like
	PROCEDURE or FUNCTION routines do.  The 'routine' Node attributes 'table'
	and 'view' are now no longer primary-parent candidates, and they have been
	renamed to 'trigger_on_table' and 'trigger_on_view'.

	* Updated Language.pod and SyntaxModel.pm to add the Node ref attribute
	call_uproc_arg to routine_expr Nodes; now call_ufunc_arg is no longer
	overloaded to also store arguments to parent routine_stmt call_uprocs.

	* Updated Language.pod and SyntaxModel.pm to add the boolean attribute
	is_memory_based to data_storage_product Nodes, and to the Node type's
	"type" mutex group.  Also added the 3 [local_dsn, login_user, login_pass]
	cstr attributes to catalog_instance Nodes, so you have flexability to set 
	either those or the corresponding catalog_link_instance attributes.

	* Renamed the methods [Container|Node].[_]test_deferrable_constraints() to
	[Container|Node].[_]assert_deferrable_constraints(), which better describes
	how they behave.  Renamed corresponding user-text keys TEDC to ASDC.  Also
	added 2 new private methods: Node._assert_in_node_deferrable_constraints()
	and Node._assert_child_comp_deferrable_constraints(), split off from ASDC.

	* Partly rewrote almost all of the en.pm user-text so that the messages are
	more consistent and informative.  Now the Node Type and Node Id of the
	current Node is always given for exceptions generated by Node methods (the
	Id is blank if not yet set); this should make it a lot easier for
	developers to identify which Node is having a problem.  Also updated the
	message variable names to be more consistent, in en.pm and SyntaxModel.pm. 
	In SyntaxModel.pm, it is now just the private method _throw_error_message()
	which puts the NTYPE and NID into the variable list of the new Message; all 
	of the other methods that used to do this are now simplified to not do it.

	* Updated Language.pod to add 6 new head2 sections under NODE TYPES, one
	for each pseudo-Node.  These exist largely to store details given in terms
	of "child Nodes" about Node types that have pseudo-Node parents.  Added a 
	corresponding new %PSEUDONODE_TYPES config structure to SyntaxModel.pm.

	* Updated Language.pod and SyntaxModel.pm to add two new types of
	deferrable constraints called "Child Quantity List" and "Distinct Child
	Groups List", which are the first constraints that test a Node's validity
	by examining other Nodes (except for the constantly applied distinct-id
	constraint).  This conceptually replaces the "Unique Constraint List" which
	has been in Language.pod for a long time but was never implemented in
	SyntaxModel.pm.  All Language.pod changes were in the NODE TYPES main
	section intro plus per-Node sub-sections, and most SyntaxModel.pm changes
	were in the %NODE_TYPES and %PSEUDONODE_TYPES config structures plus the
	Node._assert_child_comp_deferrable_constraints() method.

	* Minor documentation updates: replace 'bind var(s)' with 'host param(s)'.

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

	* Release 0.40.

	* New code file versions are: SyntaxModel.pm v0.40, en.pm v0.12.

	* Many updates to Language.pod and SyntaxModel.pm and en.pm such that all
	of the deferrable constraints were rewritten; the scope of these
	constraints is still roughly the same, such that all validation tests
	performed on a Node restrict themselves to examining that same Node only
	(multi-Node tests are planned for v0.41), but they now test not only when
	each attribute should be valued, but also when each should *not* be valued.
	In SyntaxModel.pm, nearly all of the changes were in the
	Node.test_deferrable_constraints() method and the internal %NODE_TYPES
	configuration data structure, plus 3 of the static information functions. 
	In Language.pod, all of the changes were in the NODE TYPES main
	documentation intro section, plus its sub-sections for each Node type.  For
	each Node, the "Attribute List" was split into itself plus the "Exclusive
	Attribute Groups List" and the "Local Attribute Dependencies List" (no
	changes were made to "Unique Constraint List" or "Example List").  The MA
	(always-mandatory) flags for single attributes no longer appear on the same
	attributes that are either NODE_ID (id) or PP (primary-parent), where they
	are now redundant.  The MCEE flags were removed in favor of a much superior
	implementation in "Local Attribute Dependencies List".  The few MCR flags
	were removed as being redundant with the much more complete "Exclusive
	Attribute Groups List".  The recursive-parent attribute in %NODE_TYPES was
	removed due to being superfluous.  The 3 %NODE_TYPES keys for MA were
	merged into one.  All en.pm messages for TEDC were replaced.  Now all
	%NODE_TYPES constructs are array based, except for _AT_ ones.

	* Rewrote Container.test_deferrable_constraints() so that it now tests a
	Container's Nodes in the same order that they exist in the logical tree,
	meaning the same order that get_all_properties() fetches them, rather than
	in the apparently random order having all Nodes of a type done together. 
	As a result, you should have a much easier time in tracking down any input
	errors in your own code, or of predicting which of several existing errors
	will be reported first.  Part of the rewrite involved splitting the method 
	into itself and the private _test_deferrable_constraints().

	* Added 2 new attributes [set_routine_arg, set_routine_var] to view_expr
	Nodes, which are used by INTO clauses; the older [set_routine, set_routine]
	attributes no longer have a dual role that includes this; updated docs.

	* Renamed one miscellaneous message key in SyntaxModel.pm and en.pm.  Made
	a few other minor documentation fixes in SyntaxModel.pm.

	* Moved this distribution's t_*.pm file from the /lib directory to a new
	/t/lib directory, so that it doesn't pollute the user's install
	directories, and so the distribution is better organized on the whole. 
	Added a "use lib 't/lib';" to SQL_SyntaxModel.t in order to make the move
	work.  No changes to the tests themselves.  Updated the MANIFEST.

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

	* Release 0.39.

	* New code file versions are: SyntaxModel.pm v0.39, en.pm v0.11.

	* Renamed all references of "bind variables" to "host parameters", since
	that is the official name for them in the SQL-2003 standard.

	* This release is primarily a reversal of most changes from release 0.36;
	it removes the dubious feature, and complicated implementing code, data,
	and documentation, where a Node-ref attribute could be defined to link to
	more than one type of Node, qualified by a nearby enumerated value
	attribute.  Corresponding to this, the "command" Node type has been split
	into itself and the new "command_arg" Node type; the latter has 8 separate
	"argument value" Node-ref attributes, only one of which is used per Node,
	and each of which is specific to one Node type.  These methods were
	simplified and/or reverted to remove the feature:
	expected_node_ref_attribute_type(), set_node_ref_attribute(),
	put_in_container(), test_deferrable_constraints().  The private method
	_resolve_variable_node_ref_attribute_type() was removed entirely.  Small
	SYNOPSIS update.  Removed feature refs from Language.pod, in the NODE TYPES
	section.  Removed 7 messages about the feature from en.pm.

	* Due to the Node split, this release is not backwards compatible with any
	code that used "command" Nodes with previous releases.  Also, this new
	release is less strict than the old one, but release 0.40 will fix that.

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

	* Release 0.38.

	* From now on, SQL::SyntaxModel and its primary distribution will have
	identical version/release numbers, to help avoid public confusion as to
	which distribution releases contain which SQL::SyntaxModel versions.  This
	distribution's Makefile.pl now uses "VERSION_FROM =>
	'lib/SQL/SyntaxModel.pm'" rather than "VERSION => N".  As such,
	SyntaxModel.pm will always have its own version number incremented for any
	distribution changes, even if the changes are otherwise entirely in other
	files.  With this first such release, SyntaxModel.pm is now at v0.38, up
	from v0.24 in the previous release.

	* Other new code file versions are: en.pm v0.10.

	* Renamed both SyntaxModel.pm methods Node.test_mandatory_attributes() and
	Container.with_all_nodes_test_mandatory_attributes() to
	[Node|Container].test_deferrable_constraints(); the new name better
	describes their purpose.  Corresponding en.pm updates.	Updated the
	Container method so that it now skips over Nodes that are not in "Well
	Known" status.  Rewrote the POD descriptions for both methods also.

	* Added new Container.deferrable_constraints_are_tested() method and
	corresponding "deferrable constraints are tested" Container property which
	keeps track of whether any changes were made to a Container's Nodes since
	the last Container.test_deferrable_constraints() call.  This property is
	used to make the module faster in the face of redundant calls to the
	test_def*() method; you can now place SSM data validation test calls for
	safety all over your program without seeing a corresponding performance
	hit.  Updated about a dozen other methods to read or set this property.

	* Other minor documentation updates.

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

	* Release 0.37.

	* Updated external dependencies on Locale::KeyedText to v0.06.

	* Updated all distribution code that makes use of UNIVERSAL::isa() to test
	for valid objects so that it no longer incorrectly "passes" literal strings
	whose string values match the class names of valid objects.  For each test,
	"UNIVERSAL::isa($obj,'<class-name>')" was replaced with "ref($obj) and
	UNIVERSAL::isa($obj,'<class-name>')".  Before the fixes, code that
	UNIVERSAL::isa() was supposed to guard would eventually die with the
	standard Perl error "Can't use string ('<class-name>') as a HASH ref",
	rather than elegantly dealing with the bad input value.

	* Updated Language.pod and SyntaxModel.pm (now v0.24) and en.pm (now
	v0.09).  Updated the 'command' Node type (and the command_type enumerated
	list) so that it can now possibly take anywhere from zero to two
	command_args, depending on the command_type; renamed Node attribute
	'command_arg' to 'command_arg_1' and added 'command_arg_2'; the 2 new
	attributes are conditionally mandatory, the old 1 was always mandatory;
	added 4 corresponding user messages.

	* Most 'DB_*' commands now take 'catalog_link' Nodes as their argument(s)
	rather than 'catalog' Nodes.  These commands now take zero arguments:
	DB_LIST, DB_CLOSE, DB_PING, TRA_OPEN, TRA_CLOSE, SCHEMA_LIST, USER_LIST;
	they know what to act on based on the context they are called in.  All
	'*_CLONE' and '*_MOVE' commands now take 2 arguments, both of the same
	type.  Updated Language.pod, SyntaxModel.pm, t_SQL_SyntaxModel.pm for this.

	* Documentation updates to the SYNOPSIS in SyntaxModel.pm, and the FEATURE
	SCOPE AND STANDARDS COMPLIANCE section in Language.pod, and a few other
	small changes.

	* Updated all user-text strings in en.pm so that the module-class name
	appears at the start of each, to the left of the method names.  This should
	make it easier for users to know which code file among many candidates is
	generating any error messages they see.

	* Updated SQL::SyntaxModel::API_C to bring the sample C code in "CONTENT OF
	libSQLSM.h" partially up to date with the core distro files.  Rebuilt the
	sqlsm_dt_literal_type and sqlsm_dt_char_enc_type enum definitions so they
	are identical to those in Language.pod.  Updated the sqlsm_dt_node struct
	definition to match the attr names and orders in SyntaxModel.pm.  No other
	changes were made; the missing sqlsm_dt_container attrs are still missing.

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

	* Release 0.36.

	* Updated Language.pod and SyntaxModel.pm (now v0.23).  Mainly this was to
	update the 'command_type' enumerated value list and the 'command' Node
	type. The 'command_arg' attribute of 'command' Nodes now has a major type
	of 'node ref' rather than 'literal'; SQL::SyntaxModel now enforces that
	'command_arg' is a valid Node, while before any integer was accepted, even
	if it didn't match a Node.  It also enforces the correct type of Node, 
	depending on what the 'command_type' is.

	* Updated SQL::SyntaxModel to add support for a Node ref attribute to be
	defined as flexible, accepting more than one type of Node for linking,
	depending on circumstances.  Currently, said Node ref attribute can be
	associated with an enumerated value attribute in the same Node, and be
	constrained based on its value. Generally speaking, the module's
	non-deferred input checks will allow a ref to (or id of) any type of Node
	to be set as the flexible attribute's value; it is mainly during the
	deferred input tests that the attribute will be constrained to exactly one
	Node type, as it is only then that we can guarantee the enumerated value we
	have to consult is also set.  These methods were updated to handle the new
	data-driven feature: expected_node_ref_attribute_type(),
	set_node_ref_attribute(), put_in_container(), test_mandatory_attributes();
	also, a new private method _resolve_variable_node_ref_attribute_type() was
	added.  Added three new messages to en.pm (now v0.08) for the new feature.  

	* Other minor fixes and updates were made to code and documentation.

2004-06-26   Darren Duncan <perl@DarrenDuncan.net>

	* Release 0.35.

	* Updated external dependencies on Locale::KeyedText to v0.04.

	* Updated Language.pod and SyntaxModel.pm (now v0.22).  Changed the
	position of 'CAST' in the basic_expr_type enumerated list.  Updated the
	'view_expr' and 'routine_expr' Nodes to move the 'domain' attribute to just
	above the 'lit_val' attribute.  Also, 'domain' is now mandatory for
	'expr_type' of ['LIT', 'CAST'], rather than just 'CAST'.  As a result of
	this change, external SQL generating code now has the necessary info for
	how to properly quote or escape literal values being inserted into SQL.

	* Updated SyntaxModel.pm to add a new "next free node id" hash ref
	Container property.  Added new Container method get_next_free_node_id() to
	fetch the property.  Updated the Node methods set_node_id() and
	put_in_container() to update the property.  The new method can be used as a
	convenient sequence generator for new Node Ids; one suggested time for
	using it is when building a SQL::SyntaxModel by scanning a database schema.
	Added two new messages to en.pm (now v0.07) for the new method.  Updated
	the test suite in t_SQL_SyntaxModel.pm to use the new sequence generator,
	thereby simplifying the test code.  Corresponding SSM SYNOPSIS update.

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

	* Release 0.34.

	* Updated Language.pod and SyntaxModel.pm (now v0.21).  Split the single
	'view' attribute 'c_merge_type' into 'compound_op' and 'distinct_rows'; the
	latter can be used with any view type.  Changed the values list of the
	compound_operator enumerated type from [DISTINCT, ALL, UNION, INTERSECT,
	EXCLUSIVE, EXCEPT] to [UNION, DIFFERENCE, INTERSECTION, EXCLUSION].

	* Added support for OLAP extensions, whose details are stored in
	'view_expr' Nodes associated with a group-by clause.  Added these 3
	'standard_func' enumerated values: [GB_SETS, GB_RLUP, GB_CUBE].  Added
	'LIST' to the 'basic_expr_type' enumerated list.

	* Added "routine_type" enumerated value "BLOCK" and removed the two values
	[LOOP, CONDITION].  Added "basic_stmt_type" enumerated values [BLOCK,
	RETURN] and removed "LOGIC" (plus documentation re DECLARE, SET).  Removed
	"standard_proc" enumerated values "RETURN" (redundant with a basic type),
	and "ROUTINE" (likewise redundant); added 3 values [LOOP, CONDITION,
	LOGIC]; split list in two, as the second part isn't rigorously defined yet.  
	Renamed "routine_stmt" Node attribute 'c_routine' to 'block_routine'.

	* Renamed 'routine' boolean attr 'trigger_per_row' to 'trigger_per_stmt';
	its meaning is now reversed, and 'per row' is now the default action.

	* Small updates to t_SQL_SyntaxModel.pm that keep the tests compatible with 
	the aforementioned changes, and to SQL::SyntaxModel's SYNOPSIS.

	* A few other small documentation fixes or updates.

2004-05-20   Darren Duncan <perl@DarrenDuncan.net>

	* Release 0.33.

	* Updated Language.pod and SyntaxModel.pm (now v0.20) to remove all traces
	of the 'view_context' enumerated value list, as well as the same-named
	attribute in 'view' Nodes.  These were long known as redundant, and now they 
	are gone.  References to 'view_context' were also purged from the test suite, 
	and SyntaxModel.pm's SYNOPSIS.

	* Split the existing SYNOPSIS in SyntaxModel.pm beneath 2 sub-headings
	(head2), the first having the Perl code examples and the second having the
	XML dump of a model.  Then added a largeish third sub-section which
	demonstrates what actual SQL statements can be generated from parts of a
	model, including multiple variants of CREATE and UPDATE statements.  I hope
	that this will help ground my otherwise abstract documentation in reality,
	making SQL::SyntaxModel easier to adopt for use.  This update was inspired
	by Jarrell Dunson, who wrote me asking for examples of how to use
	SQL::SyntaxModel.

2004-05-19   Darren Duncan <perl@DarrenDuncan.net>

	* Release 0.32.

	* Multiple corresponding updates in Language.pod, SyntaxModel.pm (now
	v0.19), and en.pm (now v0.06), mainly to better enforce data correctness.

	* Updated SyntaxModel.pm (and en.pm) to correct a long-standing bug where
	users were not prevented from creating circular virtual reference chains
	between Nodes, such as "A is the child of B and B is the child of A".
	Previously, users could create such arrangements whereby any code that
	wanted to traverse the Node tree (such as to generate XML) would have gone
	into an infinite loop, crossing the same Nodes repeatedly.  To fix the bug,
	these "setter" Node methods were updated to throw an error exception when
	users try to create a circular reference: set_node_ref_attribute(),
	set_parent_node_attribute_name(); also added a comment to
	put_in_container() which says why no such test is needed there; added a
	related comment to add_child_node().  Added 2 related messages to en.pm.
	The corresponding BUGS documentation POD was removed from SyntaxModel.pm.

	* Corresponding to the above change, a new method
	test_circular_ref_prevention() was added to t_SQL_SyntaxModel.pm, and 2 new
	numbered tests that use it were added to SQL_SyntaxModel.t.

	* Updated SyntaxModel.pm to enforce conditionally-mandatory (MC*)
	constraints on Node attributes that were long described in Language.pod.
	Previously, only the always-mandatory (MA) constraints were enforced, and
	lots of common omissions were allowed through unchecked.  Some new MC-type
	constraints were also added to Language.pod and SyntaxModel.pm.  There are
	now 3 main types of MC tests, which are 'MCEE', 'MCR' and 'PP'; see
	Language.pod (top of NODE TYPES) for descriptions.  To implement the
	change, added some code to the test_mandatory_attributes() method, and
	added a large amount of data which the new code uses to the %NODE_TYPES
	hash.  Note that, as before, all mandatory-value constraints are
	deferrable, and they are only enforced if you call the
	test_mandatory_attributes() method.  Added 8 related messages to en.pm and
	updated 3 others.  A few related fixes in the test suite.

	* The 'routine_expr' attributes 'src_[arg/var]' were renamed to
	'routine_[arg/var]' so they match their 'view_expr' counterparts.

	* A variety of other minor code/data/docs bug fixes or changes were made.

	* Since the extra validation adds considerably more work to the otherwise
	same interface, I thought some speed comparisons were in order.  These
	effectively time the running of the test suite 1000 times.  'MakeAndBreak'
	builds a new Container full of Nodes and then destroys it; it does not
	invoke the deferrable tests. 'TestMandatory' takes a single identical
	pre-stuffed Container and invokes the deferrable tests.  'ConvertToXML'
	takes an identical Container and dumps it to XML.

	Results for SQL-SyntaxModel-0.31:

		Benchmark: timing 1000 iterations of MakeAndBreak, TestMandatory, ConvertToXML...
		MakeAndBreak: 23 wallclock secs (23.23 usr +  0.00 sys = 23.23 CPU) @ 43.05/s (n=1000)
		TestMandatory:  2 wallclock secs ( 2.01 usr +  0.00 sys =  2.01 CPU) @ 497.51/s (n=1000)
		ConvertToXML: 16 wallclock secs (15.56 usr +  0.00 sys = 15.56 CPU) @ 64.27/s (n=1000)

	Results for SQL-SyntaxModel-0.32:

		Benchmark: timing 1000 iterations of MakeAndBreak, TestMandatory, ConvertToXML...
		MakeAndBreak: 32 wallclock secs (32.28 usr +  0.00 sys = 32.28 CPU) @ 30.98/s (n=1000)
		TestMandatory:  8 wallclock secs ( 7.57 usr +  0.00 sys =  7.57 CPU) @ 132.10/s (n=1000)
		ConvertToXML: 16 wallclock secs (15.70 usr +  0.00 sys = 15.70 CPU) @ 63.69/s (n=1000)

	To explain the results: The new circular reference prevention code makes
	'MakeAndBreak' about 1/3 slower; it could probably stand for some
	optimization later.  All the mandatory-value checks only affect
	'TestMandatory', which now takes about 4 times as long.  'ConvertToXML' is
	the same as before, and none of the changes should affect it.  Also, there 
	were no detectable memory leaks in both versions.

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

	* Release 0.31.

	* Multiple corresponding updates in Language.pod and SyntaxModel.pm (now
	v0.18) that are partly of the re-ordering type.  Some are incompatible.

	* Now 'domain' Nodes are catalog schema objects like tables or sequence
	generators; they have 'schema' Nodes as their primary parents, and they
	exist in the 'blueprints' portion of the Node tree rather than 'elements'.
	As a result of this change, you can generate schema-specific named domains
	rather than just inlining their data type definitions in such places as
	table column definitions.  Domain-related documentation has also been moved
	to a location further down, just above that for sequence generators.

	* Removed the 'trigger' Node type and merged its attributes into the
	'routine' Node type.  Now routines that are triggers can be direct child
	Nodes of tables or views (triggers on views were not supported before).  
	Added new enumerated type 'basic_trigger_event' that is used by the new 
	'routine' in place of six boolean flags that the old 'trigger' used.  
	The old solution let you write a trigger once and have it run under 
	multiple circumstances; the new solution requires you to pick just one 
	event (eg before insert), as SQL-2003 requires.

	* Added 'view_src_arg' Node type which allows named subqueries to be passed
	arguments when they are used in a view's "from" clause.  Also added 'FROM'
	to the 'view_part' enumerated value list, and added new attribute
	'view_src_arg' to 'view_expr' Nodes.

	* Added a set of command_type enumerated values for working with named 
	schemas and domains (list, add, remove, etc).

	* Split the 'privilege' Node into 'privilege_on' and 'privilege_for' Nodes;
	the second is a child Node of the first.  Added a few more attributes to
	'privilege_on' Nodes.  Added a few privilege_type enumerated values.

	* The 'name' attribute of "schema" and "view" Nodes is now mandatory.

	* Added curs_view attribute to routine_arg Nodes.  Added curs_for_update 
	attribute to routine_var Nodes.  With routine_stmt Nodes, renamed c_view 
	attribute to view_for_dml, and added curs_arg/var attributes.

	* Added comment by view_expr Nodes regarding the INTO clause.

	* Updated t_SQL_SyntaxModel.pm and the SYNOPSIS in SyntaxModel.pm to
	account for the move of 'domain' from 'elements' to 'schema', and the
	rename of 'c_view' to 'view_for_dml', and the now mandatory view names.

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

	* Release 0.30.

	* This is a "middle of development" release that includes a large number of
	changes, some of which are only partially implemented.  It exists largely
	so that I can have a reliable backup for (and historical record of) the
	last 3 weeks of in-progress work.  Some changes made now are incompatible
	with 0.29, and likewise will be further changes to come in 0.31.

	* Multiple corresponding updates in Language.pod and SyntaxModel.pm (now
	v0.17) that are partly influenced by my close studying of the SQL-2003
	standard, and partly by my attempts to build a SQL generator.  

	* Updated documentation to say that the SQL-2003 standard is now the focus 
	of influence rather than SQL-1999 (or SQL-1992).

	* Expanded the support for temporal data types / domains.  The 2
	simple_data_type enumerated values of [DATETIME, INTERVAL] have become 5
	values of [DATM_FULL, DATM_DATE, DATM_TIME, INTRVL_YM, INTRVL_DT].  Also
	added new 'domain' Node attribute 'with_zone'.

	* Expanded the support for table join operators.  The 2 join_operator
	enumerated values of [EQUAL, LEFT] have become 5 values of [CROSS, INNER,
	LEFT, RIGHT, FULL] (last 3 are outer-joins, INNER is renamed from EQUAL).  
	As with before, there is no concept of a "natural" join at this level.

	* Expanded the view_part enumerated value list to include WINDOW and other
	matters for consideration.

	* Expanded the basic_expr_type enumerated value list to add CAST and SEQN.
	Added new attributes to "view_expr" and "routine_expr" Nodes named 'domain'
	and 'sequence' that are respectively used with CAST and SEQN.

	* Updated the standard_func enumerated value list in several ways.  Removed 
	the TO_* casting functions, which for now are replaced by the CAST basic 
	expression type.  Renamed NVL to COALESCE, EXP to POWER.  Added NOT_NULL, 
	ABS.  Removed MIN, MAX, AVG as non-aggregate functions.  Removed CROWID, 
	CROWNUM, CLEVEL, which will be replaced later.  Renamed the G* aggregate 
	functions to the same names minus the leading 'G'.  Added EXISTS.

	* Added documentation regarding the recursiveness of views.

	* The 'name' attribute of "routine" Nodes is now mandatory.

	* Other small documentation updates in the same two files.  For example, 
	"sequences" are now called "sequence generators".

	* No updates were made to the test suite since it did not test the portions
	of SQL::SyntaxModel that changed; the old suite still passes all its tests.

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

	* Release 0.29.

	* Updated Language.pod and SyntaxModel.pm (now v0.16) to transpose the
	'domain' Node attributes 'num_precision' and 'num_scale'.  Up until now I
	was using 'scale' to mean the same thing that everyone else uses
	'precision' to mean, and vice-versa; now I am using the terms to mean the
	same things as is widely accepted.  Further updated the documentation for
	all 'num_*' attributes, removed any conditional mandatory constraints on
	them.  Made a small corresponding change in t_SQL_SyntaxModel.pm.

	* Updated the 'command_type' enumerated type to include a set of 'SEQU_*' 
	commands that look like the ones for 'TABLE_*', 'VIEW_*', 'ROUTINE_*'.  
	Other minor changes in Language.pod and SyntaxModel.pm.

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

	* Release 0.28.

	* There are 4 distributions being released simultaneously that all have the
	same release number of 0.28; this is one of them.  They are:
	SQL-SyntaxModel-0.28, SQL-SyntaxModel-ByTree-0.28,
	SQL-SyntaxModel-SkipID-0.28, Rosetta-0.28.  Each of the latter 3 is
	dependant on the first 1.  These 4 distributions cumulatively have almost
	identical contents to the Rosetta-0.27 distribution, which is their sole
	progenitor; that older distribution has hereby been split into 4 pieces
	which will now be developed independently from each other.  All 4 new 
	distributions inherit the external dependency on Locale-KeyedText-0.03.

	* While those of Rosetta-0.27 were taken as a starting point, these CPAN
	standard files have been changed to either a large or a small extent as
	appropriate so that they represent the new 0.28 distribution: ChangeLog,
	INSTALL, Makefile.PL, MANIFEST, ReadMe, TODO.  (META.yml is generated.)

	* This ChangeLog file has been truncated to exclude the details from
	releases 0.01 thru 0.27, as they aren't very useful going forward and take
	up a lot of space (about 90 kilobytes).  If you want to read those details
	then please look at an archived Rosetta-0.27 distribution, which is the
	last one to have them.

	* The distribution you are looking at now is the first one to bear the name
	SQL-SyntaxModel.  For historical posterity, this is its file manifest:

		- ChangeLog
		- INSTALL
		- lib/SQL/SyntaxModel.pm
		- lib/SQL/SyntaxModel/API_C.pod
		- lib/SQL/SyntaxModel/L/en.pm
		- lib/SQL/SyntaxModel/Language.pod
		- lib/t_SQL_SyntaxModel.pm
		- LICENSE
		- Makefile.PL
		- MANIFEST
		- META.yml                                Module meta-data (added by MakeMaker)
		- ReadMe
		- t/SQL_SyntaxModel.t
		- TODO

	* All modules with version numbers have seen theirs incremented by 0.01
	compared to Rosetta-0.27, and all modules or scripts that use them now
	require the new numbers; said modules did not have any other significant
	changes.  In this distribution, SQL::SyntaxModel is now v0.15 and
	SQL::SyntaxModel::L::en is now v0.05.

	* A few other minor updates were made to several files.

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

	* Rosetta-0.27, the last version of the distribution prior to its 4-way
	split, was released on CPAN.

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

	* Rosetta-0.02, the first version of the distribution under that name, 
	was released on CPAN.

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

	* DBIx-Portable-0.01, the only version of the Rosetta distribution under
	its previous name, was released on CPAN.

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

	* Began development on the modules which became the pre-split 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.

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.