X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FBase.pm;h=188240c55c3f8539e41f06db9f367bfbc0c462a8;hb=ae151d4f7f9d1bff0e912b03ff97c1aec918f867;hp=c93d28d887edeb69351212b0dec1069f6cbe969e;hpb=c34033b1f21ade200b20f78940c2c32a8843fd17;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/Base.pm b/lib/DBIx/Class/Schema/Loader/Base.pm index c93d28d..188240c 100644 --- a/lib/DBIx/Class/Schema/Loader/Base.pm +++ b/lib/DBIx/Class/Schema/Loader/Base.pm @@ -29,7 +29,7 @@ use List::MoreUtils qw/all any firstidx uniq/; use File::Temp 'tempfile'; use namespace::clean; -our $VERSION = '0.07032'; +our $VERSION = '0.07033'; __PACKAGE__->mk_group_ro_accessors('simple', qw/ schema @@ -389,15 +389,17 @@ override the introspected attributes of the foreign key if any. For example: relationship_attrs => { - has_many => { cascade_delete => 1, cascade_copy => 1 }, + has_many => { cascade_delete => 1, cascade_copy => 1 }, + might_have => { cascade_delete => 1, cascade_copy => 1 }, }, use this to turn L cascades to on on your -L relationships, they default to -off. +L and +L relationships, they default +to off. Can also be a coderef, for more precise control, in which case the coderef gets -this hash of parameters: +this hash of parameters (as a list:) rel_name # the name of the relationship local_source # the DBIx::Class::ResultSource object for the source the rel is *from* @@ -430,6 +432,50 @@ For example: } }, +These are the default attributes: + + has_many => { + cascade_delete => 0, + cascade_copy => 0, + }, + might_have => { + cascade_delete => 0, + cascade_copy => 0, + }, + belongs_to => { + on_delete => 'CASCADE', + on_update => 'CASCADE', + is_deferrable => 1, + }, + +For L relationships, these +defaults are overridden by the attributes introspected from the foreign key in +the database, if this information is available (and the driver is capable of +retrieving it.) + +This information overrides the defaults mentioned above, and is then itself +overridden by the user's L for C if any are +specified. + +In general, for most databases, for a plain foreign key with no rules, the +values for a L relationship +will be: + + on_delete => 'NO ACTION', + on_update => 'NO ACTION', + is_deferrable => 0, + +In the cases where an attribute is not supported by the DB, a value matching +the actual behavior is used, for example Oracle does not support C +rules, so C is set to C. This is done so that the +behavior of the schema is preserved when cross deploying to a different RDBMS +such as SQLite for testing. + +In the cases where the DB does not support C foreign keys, the +value is set to C<1> if L has a working C<< +$storage->with_deferred_fk_checks >>. This is done so that the same +L code can be used, and cross deployed from and to such databases. + =head2 debug If set to true, each constructive L statement the loader