X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=DBSchema%2FDBD.pm;h=1a421d263bfddbb8ab98efd6e762977d5df6e60e;hb=1041236795634d90ecdbb132935193602f83dd34;hp=019b3b1dbef948a37f22004d706ad9fa141565bc;hpb=2f5c5c180ebbeb6237039a02e1c18f68d97641d2;p=DBIx-DBSchema.git diff --git a/DBSchema/DBD.pm b/DBSchema/DBD.pm index 019b3b1..1a421d2 100644 --- a/DBSchema/DBD.pm +++ b/DBSchema/DBD.pm @@ -3,7 +3,7 @@ package DBIx::DBSchema::DBD; use strict; use vars qw($VERSION); -$VERSION = '0.03'; +$VERSION = '0.06'; =head1 NAME @@ -14,7 +14,7 @@ DBIx::DBSchema::DBD - DBIx::DBSchema Driver Writer's Guide and Base Class perldoc DBIx::DBSchema::DBD package DBIx::DBSchema::DBD::FooBase - use DBIx::DBSchmea::DBD; + use DBIx::DBSchema::DBD; @ISA = qw(DBIx::DBSchema::DBD); =head1 DESCRIPTION @@ -55,17 +55,84 @@ table. =item unique CLASS DBI_DBH TABLE +Deprecated method - see the B method for new drivers. + Given an active DBI database handle, return a hashref of unique indices. The keys of the hashref are index names, and the values are arrayrefs which point a list of column names for each. See L and -L. +L. =item index CLASS DBI_DBH TABLE +Deprecated method - see the B method for new drivers. + Given an active DBI database handle, return a hashref of (non-unique) indices. The keys of the hashref are index names, and the values are arrayrefs which point a list of column names for each. See L and -L. +L. + +=item indices CLASS DBI_DBH TABLE + +Given an active DBI database handle, return a hashref of all indices, both +unique and non-unique. The keys of the hashref are index names, and the values +are again hashrefs with the following keys: + +=over 8 + +=item name - Index name (redundant) + +=item using - Optional index method + +=item unique - Boolean indicating whether or not this is a unique index + +=item columns - List reference of column names (or expressions) + +=back + +(See L) + +New drivers are advised to implement this method, and existing drivers are +advised to (eventually) provide this method instead of B and B. + +For backwards-compatibility with current drivers, the base DBIx::DBSchema::DBD +class provides an B method which uses the old B and B +methods to provide this data. + +=cut + +sub indices { + #my($proto, $dbh, $table) = @_; + my($proto, @param) = @_; + + my $unique_hr = $proto->unique( @param ); + my $index_hr = $proto->index( @param ); + + scalar( + { + + ( + map { + $_ => { 'name' => $_, + 'unique' => 1, + 'columns' => $unique_hr->{$_}, + }, + } + keys %$unique_hr + ), + + ( + map { + $_ => { 'name' => $_, + 'unique' => 0, + 'columns' => $index_hr->{$_}, + }, + } + keys %$index_hr + ), + + } + ); +} =item default_db_catalog @@ -76,7 +143,7 @@ Inheriting from DBIx::DBSchema::DBD will provide the default empty string. sub default_db_catalog { ''; } -=item default_db_catalog +=item default_db_schema Returns the default database schema for the DBI table_info command. Inheriting from DBIx::DBSchema::DBD will provide the default empty string. @@ -85,6 +152,64 @@ Inheriting from DBIx::DBSchema::DBD will provide the default empty string. sub default_db_schema { ''; } +=item column_callback DBH TABLE_NAME COLUMN_OBJ + +Optional callback for driver-specific overrides to SQL column definitions. + +Should return a hash reference, empty for no action, or with one or more of +the following keys defined: + +effective_type - Optional type override used during column creation. + +explicit_null - Set true to have the column definition declare NULL columns explicitly + +effective_default - Optional default override used during column creation. + +effective_local - Optional local override used during column creation. + + +=cut + +sub column_callback { {}; } + +=item add_column_callback DBH TABLE_NAME COLUMN_OBJ + +Optional callback for additional SQL statments to be called when adding columns +to an existing table. + +Should return a hash reference, empty for no action, or with one or more of +the following keys defined: + +effective_type - Optional type override used during column creation. + +effective_null - Optional nullability override used during column creation. + +sql_after - Array reference of SQL statements to be executed after the column is added. + +=cut + +sub add_column_callback { {}; } + +=item alter_column_callback DBH TABLE_NAME OLD_COLUMN_OBJ NEW_COLUMN_OBJ + +Optional callback for overriding the SQL statments to be called when altering +columns to an existing table. + +Should return a hash reference, empty for no action, or with one or more of +the following keys defined: + +sql_alter - Alter SQL statement(s) for changing everything about a column. Specifying this overrides processing of individual changes (type, nullability, default, etc.). + +sql_alter_type - Alter SQL statement(s) for changing type and length (there is no default). + +sql_alter_null - Alter SQL statement(s) for changing nullability to be used instead of the default. + +=cut + +sub alter_column_callback { {}; } + +=cut + =back =head1 TYPE MAPPING @@ -112,6 +237,7 @@ Ivan Kohler =head1 COPYRIGHT Copyright (c) 2000-2005 Ivan Kohler +Copyright (c) 2007 Freeside Internet Services, Inc. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. @@ -121,7 +247,7 @@ the same terms as Perl itself. =head1 SEE ALSO L, L, L, -L, L, L, L, +L, L, L, L, L =cut