1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-07 22:28:47 -04:00

refactor for DRY

This commit is contained in:
Ed J 2018-08-26 22:17:30 +01:00
parent 8500529c1b
commit 9f54d4eba1

View file

@ -640,7 +640,7 @@ sub foreign_key_info {
# cribbed from DBIx::Class::Schema::Loader::DBI::SQLite # cribbed from DBIx::Class::Schema::Loader::DBI::SQLite
REL: for my $relid (keys %relid2rels) { REL: for my $relid (keys %relid2rels) {
my $rel = $rels[$relid]; my $rel = $rels[$relid];
my $deferrable; my $deferrable = $DBI_code_for_rule{'NOT DEFERRABLE'};
my $local_cols = '"?' . (join '"? \s* , \s* "?', map quotemeta, @{ $rel->{local_columns} }) . '"?'; my $local_cols = '"?' . (join '"? \s* , \s* "?', map quotemeta, @{ $rel->{local_columns} }) . '"?';
my $remote_cols = '"?' . (join '"? \s* , \s* "?', map quotemeta, @{ $rel->{remote_columns} || [] }) . '"?'; my $remote_cols = '"?' . (join '"? \s* , \s* "?', map quotemeta, @{ $rel->{remote_columns} || [] }) . '"?';
my ($deferrable_clause) = $ddl =~ / my ($deferrable_clause) = $ddl =~ /
@ -648,33 +648,24 @@ sub foreign_key_info {
(?:\( \s* $remote_cols \s* \) \s*)? (?:\( \s* $remote_cols \s* \) \s*)?
$DEFERRABLE_RE $DEFERRABLE_RE
/sxi; /sxi;
if ($deferrable_clause) { if (!$deferrable_clause) {
$deferrable = $deferrable_clause =~ /not/i
? $DBI_code_for_rule{'NOT DEFERRABLE'}
: $DBI_code_for_rule{'INITIALLY IMMEDIATE'};
} else {
# check for inline constraint if 1 local column # check for inline constraint if 1 local column
if (@{ $rel->{local_columns} } == 1) { if (@{ $rel->{local_columns} } == 1) {
my ($local_col) = @{ $rel->{local_columns} }; my ($local_col) = @{ $rel->{local_columns} };
my ($remote_col) = @{ $rel->{remote_columns} || [] }; my ($remote_col) = @{ $rel->{remote_columns} || [] };
$remote_col ||= ''; $remote_col ||= '';
my ($deferrable_clause) = $ddl =~ / ($deferrable_clause) = $ddl =~ /
"?\Q$local_col\E"? \s* (?:\w+\s*)* (?: \( \s* \d\+ (?:\s*,\s*\d+)* \s* \) )? \s* "?\Q$local_col\E"? \s* (?:\w+\s*)* (?: \( \s* \d\+ (?:\s*,\s*\d+)* \s* \) )? \s*
references \s+ (?:\S+|".+?(?<!")") (?:\s* \( \s* "?\Q$remote_col\E"? \s* \))? \s* references \s+ (?:\S+|".+?(?<!")") (?:\s* \( \s* "?\Q$remote_col\E"? \s* \))? \s*
$DEFERRABLE_RE $DEFERRABLE_RE
/sxi; /sxi;
}
}
if ($deferrable_clause) { if ($deferrable_clause) {
$deferrable = $deferrable_clause =~ /not/i $deferrable = $deferrable_clause =~ /not/i
? $DBI_code_for_rule{'NOT DEFERRABLE'} ? $DBI_code_for_rule{'NOT DEFERRABLE'}
: $DBI_code_for_rule{'INITIALLY IMMEDIATE'}; : $DBI_code_for_rule{'INITIALLY IMMEDIATE'};
} else {
$deferrable = $DBI_code_for_rule{'NOT DEFERRABLE'};
} }
} else {
$deferrable = $DBI_code_for_rule{'NOT DEFERRABLE'};
}
}
next REL if !defined $deferrable;
$_->{DEFERRABILITY} = $deferrable for @{ $relid2rels{$relid} }; $_->{DEFERRABILITY} = $deferrable for @{ $relid2rels{$relid} };
} }
} }