use strict;
use vars qw[ $DEBUG $VERSION $GRAMMAR @EXPORT_OK ];
-$VERSION = '1.59';
+$VERSION = '1.60';
$DEBUG = 0 unless defined $DEBUG;
use Data::Dumper;
commit : /commit/i SEMICOLON
-drop : /drop/i TABLE <commit> table_name SEMICOLON
+drop : /drop/i (tbl_drop | view_drop | trg_drop) SEMICOLON
+
+tbl_drop: TABLE <commit> table_name
+
+view_drop: VIEW if_exists(?) view_name
+
+trg_drop: TRIGGER if_exists(?) trigger_name
comment : /^\s*(?:#|-{2}).*\n/
{
#
# Create Index
#
-create : CREATE TEMPORARY(?) UNIQUE(?) INDEX WORD ON table_name parens_field_list conflict_clause(?) SEMICOLON
+create : CREATE TEMPORARY(?) UNIQUE(?) INDEX NAME ON table_name parens_field_list conflict_clause(?) SEMICOLON
{
my $db_name = $item[7]->{'db_name'} || '';
my $table_name = $item[7]->{'name'};
definition : constraint_def | column_def
-column_def: NAME type(?) column_constraint(s?)
+column_def: comment(s?) NAME type(?) column_constraint(s?)
{
my $column = {
supertype => 'column',
- name => $item[1],
- data_type => $item[2][0]->{'type'},
- size => $item[2][0]->{'size'},
+ name => $item[2],
+ data_type => $item[3][0]->{'type'},
+ size => $item[3][0]->{'size'},
is_nullable => 1,
is_primary_key => 0,
is_unique => 0,
check => '',
default => undef,
- constraints => $item[3],
+ constraints => $item[4],
+ comments => $item[1],
};
- for my $c ( @{ $item[3] } ) {
+
+ for my $c ( @{ $item[4] } ) {
if ( $c->{'type'} eq 'not_null' ) {
$column->{'is_nullable'} = 0;
}
elsif ( $c->{'type'} eq 'default' ) {
$column->{'default'} = $c->{'value'};
}
+ elsif ( $c->{'type'} eq 'autoincrement' ) {
+ $column->{'is_auto_inc'} = 1;
+ }
}
$column;
value => $item[2],
}
}
+ |
+ REFERENCES ref_def
+ {
+ $return = {
+ type => 'foreign_key',
+ reference_table => $item[2]{'reference_table'},
+ reference_fields => $item[2]{'reference_fields'},
+ }
+ }
+ |
+ AUTOINCREMENT
+ {
+ $return = {
+ type => 'autoincrement',
+ }
+ }
constraint_def : PRIMARY_KEY parens_field_list conflict_clause(?)
{
}
}
+ref_def : /(\w+)\s*\((\w+)\)/
+ { $return = { reference_table => $1, reference_fields => $2 } }
+
table_name : qualified_name
qualified_name : NAME
instead_of : /instead of/i
+if_exists : /if exists/i
+
view_name : qualified_name
+trigger_name : qualified_name
+
#
# Create View
#
WHEN : /when/i
+REFERENCES : /references/i
+
+AUTOINCREMENT : /autoincrement/i
+
UNIQUE : /unique/i { 1 }
SEMICOLON : ';'
-NAME : /'?(\w+)'?/ { $return = $1 }
+NAME : /["']?(\w+)["']?/ { $return = $1 }
VALUE : /[-+]?\.?\d+(?:[eE]\d+)?/
{ $item[1] }
reference_table => $cdata->{'reference_table'},
reference_fields => $cdata->{'reference_fields'},
match_type => $cdata->{'match_type'} || '',
- on_delete => $cdata->{'on_delete'} || $cdata->{'on_delete_do'},
- on_update => $cdata->{'on_update'} || $cdata->{'on_update_do'},
+ on_delete => $cdata->{'on_delete'}
+ || $cdata->{'on_delete_do'},
+ on_update => $cdata->{'on_update'}
+ || $cdata->{'on_update_do'},
) or die $table->error;
}
}
=head1 AUTHOR
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>.
+Ken Youens-Clark E<lt>kclark@cpan.orgE<gt>.
=head1 SEE ALSO