Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/SQL/Translator/Parser/SQLite.pm
Original file line number Diff line number Diff line change
Expand Up @@ -447,10 +447,10 @@ cascade_def : cascade_update_def cascade_delete_def(?)
cascade_delete_def cascade_update_def(?)
{ $return = { on_delete => $item[1], on_update => $item[2][0] } }

cascade_delete_def : /on\s+delete\s+(\w+)/i
cascade_delete_def : /on\s+delete\s+(set null|set default|cascade|restrict|no action)/i
{ $return = $1}

cascade_update_def : /on\s+update\s+(\w+)/i
cascade_update_def : /on\s+update\s+(set null|set default|cascade|restrict|no action)/i
{ $return = $1}

table_name : qualified_name
Expand Down
14 changes: 11 additions & 3 deletions t/27sqlite-parser.t
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use SQL::Translator;
use SQL::Translator::Schema::Constants;

BEGIN {
maybe_plan(21,
maybe_plan(25,
'SQL::Translator::Parser::SQLite');
}
SQL::Translator::Parser::SQLite->import('parse');
Expand Down Expand Up @@ -74,9 +74,9 @@ $file = "$Bin/data/sqlite/named.sql";
is( $t1->name, 'pet', "'Pet' table" );

my @constraints = $t1->get_constraints;
is( scalar @constraints, 3, '3 constraints on pet' );
is( scalar @constraints, 5, '5 constraints on pet' );

my $c1 = pop @constraints;
my $c1 = $constraints[2];
is( $c1->type, 'FOREIGN KEY', 'FK constraint' );
is( $c1->reference_table, 'person', 'References person table' );
is( $c1->name, 'fk_person_id', 'Constraint name fk_person_id' );
Expand All @@ -85,4 +85,12 @@ $file = "$Bin/data/sqlite/named.sql";
is( join(',', $c1->reference_fields), 'person_id',
'References person_id field' );

my $c2 = $constraints[3];
is( $c2->on_delete, 'SET DEFAULT', 'On delete set default' );
is( $c2->on_update, 'SET NULL', 'On update set null' );

my $c3 = $constraints[4];
is( $c3->on_update, 'NO ACTION', 'On update no action' );
is( $c3->on_delete, '', 'On delete not defined' );

}
4 changes: 4 additions & 0 deletions t/data/sqlite/named.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ create table pet (
"pet_id" int,
"person_id" int
constraint fk_person_id references person(person_id) on update CASCADE on delete RESTRICT,
"person_id_2" int
constraint fk_person_id_2 references person(person_id) on update SET NULL on delete SET DEFAULT,
"person_id_3" int
constraint fk_person_id_3 references person(person_id) on update NO ACTION,
"name" varchar(30),
"age" int,
constraint age_under_100 check ( age < 100 ),
Expand Down