fix some issues with multi-db_schema support
authorRafael Kitover <rkitover@cpan.org>
Wed, 28 Sep 2011 16:28:05 +0000 (12:28 -0400)
committerRafael Kitover <rkitover@cpan.org>
Wed, 19 Oct 2011 21:04:07 +0000 (17:04 -0400)
commit5975bbe67547badcbf19b1eded170ca6beea301b
treedf6dba4488c922efe07c4a0fb0cc4c4628bf1566
parent4a01c33f6602206d763851bcd795561499baa6e6
fix some issues with multi-db_schema support

Fix unique constraint detection for Oracle in multischema setups
(RT#70851) previously identically named tables in different schemas with
an identically named unique constraint would cause the columns in the
constraint definition to be repeated. Modifies the multischema extra
tests for all databases to test for the correctness of the dumped unique
constraint.

Update Oracle multischema extra tests to include the complete set of
test cases used in multischema test sets for other databases.

Update Oracle is_auto_increment detection code to work in multischema
setups. The new logic is by necessity fuzzier, please report false
positives to RT. At some point this will get rewritten to use a PL/SQL
parser on the trigger code.

Add a test for the miscaching of table keys when there are identically
named tables in different schemas for all databases. This was fixed for
MySQL in master.

Completely rewrite the table monikerization code to work better with
moniker_parts, preserving the functionality of all naming versions.
Schema/database names are transformed to parts of the moniker name using
String::ToIdentifier::EN::Unicode (or String::ToIdentifier::EN if

  naming => { force_ascii => 1 }

is set.) to translate non-identifier characters.

Add the next naming version, v8 as an experimental mode. In this mode,
the table names go through String::ToIdentifier::EN::Unicode as
well, instead of non-identifier characters being stripped out.

The clashing monikers error message is updated to mention moniker_parts
in multischema configurations.

The ::RelBuilder duplicate relationship name disambiguator has been
updated to handle the case of relationships in the same class pointing
to identically named tables in different schemas/databases.

Improve the multischema extra tests to include an identically named
table in both schemas and to use moniker_parts. This also reduces the
chances of moniker clashes on a tester's database.

Change the multidatabase tests to test both

    db_schema => { db1 => '%', db2 => '%' }

and

    db_schema => { '%' => '%' }

as well as to include an identically named table.
13 files changed:
Changes
Makefile.PL
lib/DBIx/Class/Schema/Loader/Base.pm
lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm
lib/DBIx/Class/Schema/Loader/RelBuilder.pm
t/10_02mysql_common.t
t/10_03pg_common.t
t/10_04db2_common.t
t/10_05ora_common.t
t/10_06sybase_common.t
t/10_07mssql_common.t
t/10_08sqlanywhere_common.t
t/10_10informix_common.t