Um Models für andere Datenbanken zu erstellen, müssen dann noch SL::DB,
SL::DB::Helper::Mappings und SL::DB::Object entsprechend angepasst
werden, damit die Verbindung richtig aufgebaut werden.
use English qw( -no_match_vars );
use Getopt::Long;
use List::MoreUtils qw(none);
use English qw( -no_match_vars );
use Getopt::Long;
use List::MoreUtils qw(none);
+use List::UtilsBy qw(partition_by);
use Pod::Usage;
use Rose::DB::Object 0.809;
use Term::ANSIColor;
use Pod::Usage;
use Rose::DB::Object 0.809;
use Term::ANSIColor;
- my @spec = @_;
- my $table = $spec[0];
+ my ($domain, $table, $package) = @_;
my $schema = '';
($schema, $table) = split(m/\./, $table) if $table =~ m/\./;
my $schema = '';
($schema, $table) = split(m/\./, $table) if $table =~ m/\./;
- my $package = ucfirst($spec[1] || $spec[0]);
+ $package = ucfirst($package || $table);
$package =~ s/_+(.)/uc($1)/ge;
my $meta_file = "${meta_path}/${package}.pm";
my $mngr_file = "${manager_path}/${package}.pm";
$package =~ s/_+(.)/uc($1)/ge;
my $meta_file = "${meta_path}/${package}.pm";
my $mngr_file = "${manager_path}/${package}.pm";
- my $db = SL::DB::create(undef, 'KIVITENDO');
- @tables = grep { my $table = $_; none { $_ eq $table } @{ $blacklist{KIVITENDO} } } $db->list_tables;
+ foreach my $domain (sort keys %package_names) {
+ my $db = SL::DB::create(undef, $domain);
+ $tables_by_domain{$domain} = [ grep { my $table = $_; none { $_ eq $table } @{ $blacklist{$domain} } } $db->list_tables ];
+ $db->disconnect;
+ }
+ %tables_by_domain = partition_by {
+ my ($domain, $table) = split m{:};
+ $table ? uc($domain) : 'KIVITENDO';
+ } @ARGV;
+
+ foreach my $tables (values %tables_by_domain) {
+ s{.*:}{} for @{ $tables };
+ }
+
} else {
error("You specified neither --all nor any specific tables.");
usage();
}
} else {
error("You specified neither --all nor any specific tables.");
usage();
}
+ return %tables_by_domain;
parse_args(\%config);
setup();
parse_args(\%config);
setup();
-my @tables = make_tables();
-my @unknown_tables = grep { !$package_names{KIVITENDO}->{$_} } @tables;
-if (@unknown_tables) {
- error("The following tables do not have entries in \%SL::DB::Helper::Mappings::kivitendo_package_names: " . join(' ', sort @unknown_tables));
- exit 1;
-}
+my %tables_by_domain = make_tables();
-process_table($_, $package_names{KIVITENDO}->{$_}) for @tables;
+foreach my $domain (keys %tables_by_domain) {
+ my @tables = @{ $tables_by_domain{$domain} };
+ my @unknown_tables = grep { !$package_names{$domain}->{$_} } @tables;
+ if (@unknown_tables) {
+ error("The following tables do not have entries in \%SL::DB::Helper::Mappings::${domain}_package_names: " . join(' ', sort @unknown_tables));
+ exit 1;
+ }
+
+ process_table($domain, $_, $package_names{$domain}->{$_}) for @tables;
+}
- scripts/rose_auto_create_model.pl --client name-or-id table1 [table2 ...]
+ scripts/rose_auto_create_model.pl --client name-or-id [db1:]table1 [[db2:]table2 ...]
scripts/rose_auto_create_model.pl --client name-or-id [--all|-a]
# updates all models
scripts/rose_auto_create_model.pl --client name-or-id [--all|-a]
# updates all models
file. The first one will be updated if the schema changes, the second
and third ones will only be created if it they do not exist.
file. The first one will be updated if the schema changes, the second
and third ones will only be created if it they do not exist.
+=head1 DATABASE NAMES AND TABLES
+
+If you want to generate the data for specific tables only then you
+have to list them on the command line. The format is
+C<db-name:table-name>. The part C<db-name:> is optional and defaults
+to C<KIVITENDO:> – which means the tables in the default kivitendo
+database.
+
+Valid database names are keys in the hash returned by
+L<SL::DB::Helper::Mappings/get_package_names>.
+