use strict;
use Storable;
use DBIx::DBSchema::_util qw(_load_driver _dbh _parse_opt);
-use DBIx::DBSchema::Table 0.08;
+use DBIx::DBSchema::Table 0.12;
use DBIx::DBSchema::Index;
use DBIx::DBSchema::Column;
use DBIx::DBSchema::ForeignKey;
-our $VERSION = '0.42_01';
+our $VERSION = '0.47';
$VERSION = eval $VERSION; # modperlstyle: convert the string into a number
our $DEBUG = 0;
you can create a database schema with an OO Perl interface. You can read the
schema from an existing database. You can save the schema to disk and restore
it in a different process. You can write SQL CREATE statements statements for
-different databases from a single source. In recent versions, you can
-transform one schema to another, adding any necessary new columns, tables,
-indices and foreign keys.
+different databases from a single source. You can transform one schema to
+another, adding any necessary new columns, tables, indices and foreign keys.
Currently supported databases are MySQL, PostgreSQL and SQLite. Sybase and
Oracle drivers are partially implemented. DBIx::DBSchema will attempt to use
sub sql {
my($self, $dbh) = ( shift, _dbh(@_) );
- map { $self->table($_)->sql_create_table($dbh); } $self->tables;
+ (
+ ( map { $self->table($_)->sql_create_table($dbh); } $self->tables ),
+ ( map { $self->table($_)->sql_add_constraints($dbh); } $self->tables ),
+ );
}
=item sql_update_schema [ OPTIONS_HASHREF, ] PROTOTYPE_SCHEMA [ DATABASE_HANDLE | DATA_SOURCE [ USERNAME PASSWORD [ ATTR ] ] ]
my($self, $opt, $new, $dbh) = ( shift, _parse_opt(\@_), shift, _dbh(@_) );
my @r = ();
+ my @later = ();
foreach my $table ( $new->tables ) {
warn "$table exists\n" if $DEBUG > 1;
- push @r, $self->table($table)->sql_alter_table( $new->table($table),
- $dbh,
- $opt
- );
+ push @r,
+ $self->table($table)->sql_alter_table( $new->table($table),
+ $dbh, $opt );
+ push @later,
+ $self->table($table)->sql_alter_constraints( $new->table($table),
+ $dbh, $opt );
} else {
warn "table $table does not exist.\n" if $DEBUG;
- push @r,
- $new->table($table)->sql_create_table( $dbh );
+ push @r, $new->table($table)->sql_create_table( $dbh );
+ push @later, $new->table($table)->sql_add_constraints( $dbh );
}
}
+ push @r, @later;
+
warn join("\n", @r). "\n"
if $DEBUG > 1;
). "}\n";
}
-=cut
-
=item pretty_read HASHREF
This method is B<not> recommended. If you need to load and save your schema
-to a file, see the L</load|load> and L</save|save> methods.
+to a file, see the L</load> and L</save> methods.
Creates a schema as specified by a data structure such as that created by
B<pretty_print> method.
sub _tables_from_dbh {
my($dbh) = @_;
my $driver = _load_driver($dbh);
- my $db_catalog =
- scalar(eval "DBIx::DBSchema::DBD::$driver->default_db_catalog");
- my $db_schema =
- scalar(eval "DBIx::DBSchema::DBD::$driver->default_db_schema");
- my $sth = $dbh->table_info($db_catalog, $db_schema, '', 'TABLE')
- or die $dbh->errstr;
- #map { $_->{TABLE_NAME} } grep { $_->{TABLE_TYPE} eq 'TABLE' }
- # @{ $sth->fetchall_arrayref({ TABLE_NAME=>1, TABLE_TYPE=>1}) };
- map { $_->[0] } grep { $_->[1] =~ /^TABLE$/i }
- @{ $sth->fetchall_arrayref([2,3]) };
+ my $driver_class = "DBIx::DBSchema::DBD::$driver";
+ $driver_class->tables($dbh);
}
=back
Slaven Rezic <srezic@cpan.org> contributed column and table dropping, Pg
bugfixes and more.
+Nathan Anderson <http://1id.com/=nathan.anderson> contribued updates to the
+SQLite and Sybase drivers.
+
=head1 CONTRIBUTIONS
Contributions are welcome! I'm especially keen on any interest in the top
items/projects below under BUGS.
+=head1 REPOSITORY
+
+The code is available from our public git repository:
+
+ git clone git://git.freeside.biz/DBIx-DBSchema.git
+
+Or on the web:
+
+ http://freeside.biz/gitweb/?p=DBIx-DBSchema.git
+ Or:
+ http://freeside.biz/gitlist/DBIx-DBSchema.git
+
=head1 COPYRIGHT
Copyright (c) 2000-2007 Ivan Kohler
Copyright (c) 2000 Mail Abuse Prevention System LLC
-Copyright (c) 2007-2013 Freeside Internet Services, Inc.
+Copyright (c) 2007-2017 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.