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

handle other kinds of deferrable

This commit is contained in:
Ed J 2018-08-26 22:26:34 +01:00
parent 9f54d4eba1
commit 128d379a0d

View file

@ -551,7 +551,7 @@ my $DEFERRABLE_RE = qr/
| |
match \s* (?:\S+|".+?(?<!")") match \s* (?:\S+|".+?(?<!")")
) \s*)* ) \s*)*
((?:not)? \s* deferrable)? ((?:not)? \s* deferrable (?: \s* initially \s* (?: immediate | deferred))?)?
/sxi; /sxi;
sub foreign_key_info { sub foreign_key_info {
@ -638,6 +638,7 @@ sub foreign_key_info {
} }
# cribbed from DBIx::Class::Schema::Loader::DBI::SQLite # cribbed from DBIx::Class::Schema::Loader::DBI::SQLite
# but with additional parsing of which kind of deferrable
REL: for my $relid (keys %relid2rels) { REL: for my $relid (keys %relid2rels) {
my $rel = $rels[$relid]; my $rel = $rels[$relid];
my $deferrable = $DBI_code_for_rule{'NOT DEFERRABLE'}; my $deferrable = $DBI_code_for_rule{'NOT DEFERRABLE'};
@ -662,10 +663,13 @@ sub foreign_key_info {
} }
} }
if ($deferrable_clause) { if ($deferrable_clause) {
$deferrable = $deferrable_clause =~ /not/i # default is already NOT
? $DBI_code_for_rule{'NOT DEFERRABLE'} if ($deferrable_clause !~ /not/i) {
$deferrable = $deferrable_clause =~ /deferred/i
? $DBI_code_for_rule{'INITIALLY DEFERRED'}
: $DBI_code_for_rule{'INITIALLY IMMEDIATE'}; : $DBI_code_for_rule{'INITIALLY IMMEDIATE'};
} }
}
$_->{DEFERRABILITY} = $deferrable for @{ $relid2rels{$relid} }; $_->{DEFERRABILITY} = $deferrable for @{ $relid2rels{$relid} };
} }
} }