- Darren Chamberlain <dlc@users.sourceforge.net>
- Dave Cash <dave@gnofn.org>
- Fabien Wernli <faxmodem@cpan.org>
+- Fabrice Gabolde <fabrice.gabolde@uperto.com>
- Geoff Cant <geoff@catalyst.net.nz>
- Gudmundur A. Thorisson <mummi@cshl.org>
- Guillermo Roditi <groditi@cpan.org>
* Fix diff for altering two things per column - add ; at the end
* Call all diff methods in list context (it can be merged later)
* Fix Pg diff issue with drop constraint on primary keys
+* SQLite support for SET NULL, SET DEFAULT and NO ACTION in FK clauses
# ----------------------------------------------------------
# 0.11016 2012-10-09
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
use SQL::Translator::Schema::Constants;
BEGIN {
- maybe_plan(21,
+ maybe_plan(25,
'SQL::Translator::Parser::SQLite');
}
SQL::Translator::Parser::SQLite->import('parse');
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' );
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' );
+
}
"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 ),