# -------------------------------------------------------------------
sub parse {
# this is a hack to prevent schema leaks due to a retarded SQLT implementation
- # DO NOT REMOVE
+ # DO NOT REMOVE (until SQLT2 is out, the all of this will be rewritten anyway)
Scalar::Util::weaken ($_[1]);
my ($tr, $data) = @_;
{
# Constraints are added only if applicable
next unless $fk_constraint;
-
+
# Make sure we dont create the same foreign key constraint twice
my $key_test = join("\x00", sort @keys);
next if $created_FK_rels{$rel_table}->{$key_test};
-
+
if (scalar(@keys)) {
$created_FK_rels{$rel_table}->{$key_test} = 1;
# global parser_args add_fk_index param can be overridden on the rel def
my $add_fk_index_rel = (exists $rel_info->{attrs}{add_fk_index}) ? $rel_info->{attrs}{add_fk_index} : $add_fk_index;
+ # Make sure we don't create another index with the same
+ # order of columns twice
+
+ # WARNING: don't sort the key columns because the order of
+ # columns is important for indexes and two indexes with the
+ # same cols but different order are allowed and sometimes
+ # needed
+ my $key_idx_test = join("\x00", @keys);
+ my $pk_idx_test = join("\x00", @primary);
+ next if $key_idx_test eq $pk_idx_test;
if ($add_fk_index_rel) {
my $index = $table->add_index(
- name => join('_', $table_name, 'idx', @keys),
- fields => \@keys,
- type => 'NORMAL',
- );
+ name => join('_', $table_name, 'idx', @keys),
+ fields => \@keys,
+ type => 'NORMAL',
+ );
}
}
}
my $schema = MyApp::Schema->connect;
my $trans = SQL::Translator->new (
parser => 'SQL::Translator::Parser::DBIx::Class',
- parser_args => { package => $schema },
+ parser_args => {
+ package => $schema,
+ # to explicitly specify which ResultSources are to be parsed
+ sources => [qw/
+ Artist
+ CD
+ /],
+ },
producer => 'SQLite',
) or die SQL::Translator->error;
my $out = $trans->translate() or die $trans->error;