definition : constraint_def | column_def
-column_def: comment(s?) NAME type(?) column_constraint(s?)
+column_def: comment(s?) NAME type(?) column_constraint_def(s?)
{
my $column = {
supertype => 'column',
}
}
+column_constraint_def : CONSTRAINT constraint_name column_constraint
+ {
+ $return = {
+ name => $item[2],
+ %{ $item[3] },
+ }
+ }
+ |
+ column_constraint
+
column_constraint : NOT_NULL conflict_clause(?)
{
$return = {
}
}
-constraint_def : PRIMARY_KEY parens_field_list conflict_clause(?)
+constraint_def : comment(s?) CONSTRAINT constraint_name table_constraint
+ {
+ $return = {
+ comments => $item[1],
+ name => $item[3],
+ %{ $item[4] },
+ }
+ }
+ |
+ comment(s?) table_constraint
+ {
+ $return = {
+ comments => $item[1],
+ %{ $item[2] },
+ }
+ }
+
+table_constraint : PRIMARY_KEY parens_field_list conflict_clause(?)
{
$return = {
supertype => 'constraint',
field_name : NAME
+constraint_name : NAME
+
conflict_clause : /on conflict/i conflict_algorigthm
conflict_algorigthm : /(rollback|abort|fail|ignore|replace)/i
REFERENCES : /references/i
+CONSTRAINT : /constraint/i
+
AUTOINCREMENT : /autoincrement/i
UNIQUE : /unique/i { 1 }
use SQL::Translator::Schema::Constants;
BEGIN {
- maybe_plan(12,
+ maybe_plan(19,
'SQL::Translator::Parser::SQLite');
}
SQL::Translator::Parser::SQLite->import('parse');
my @triggers = $schema->get_triggers;
is( scalar @triggers, 1, 'Parsed one triggers' );
}
+
+$file = "$Bin/data/sqlite/named.sql";
+{
+ local $/;
+ open my $fh, "<$file" or die "Can't read file '$file': $!\n";
+ my $data = <$fh>;
+ my $t = SQL::Translator->new;
+ parse($t, $data);
+
+ my $schema = $t->schema;
+
+ my @tables = $schema->get_tables;
+ is( scalar @tables, 1, 'Parsed one table' );
+
+ my $t1 = shift @tables;
+ is( $t1->name, 'pet', "'Pet' table" );
+
+ my @constraints = $t1->get_constraints;
+ is( scalar @constraints, 3, '3 constraints on pet' );
+
+ my $c1 = pop @constraints;
+ 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' );
+
+}