use strict;
use warnings;
-our $VERSION = '1.59';
+our $VERSION = '1.62';
our $DEBUG;
$DEBUG = 0 unless defined $DEBUG;
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
parens_value_list : '(' VALUE(s /,/) ')'
{ $item[2] }
-expr : /[^)]+/
+expr : /[^)]* \( [^)]+ \) [^)]*/x # parens, balanced one deep
+ | /[^)]+/
sort_order : /(ASC|DESC)/i
SEMICOLON : ';'
-NAME : /["']?(\w+)["']?/ { $return = $1 }
+NAME : /\w+/
+ | DQSTRING
+ | SQSTRING
-VALUE : /[-+]?\.?\d+(?:[eE]\d+)?/
+DQSTRING : '"' <skip: ''> /((?:[^"]|"")+)/ '"'
+ { ($return = $item[3]) =~ s/""/"/g }
+
+SQSTRING : "'" <skip: ''> /((?:[^']|'')*)/ "'"
+ { ($return = $item[3]) =~ s/''/'/g }
+
+VALUE : /[-+]?\d*\.?\d+(?:[eE]\d+)?/
{ $item[1] }
- | /'.*?'/
- {
- # remove leading/trailing quotes
- my $val = $item[1];
- $val =~ s/^['"]|['"]$//g;
- $return = $val;
- }
- | /NULL/
+ | SQSTRING
+ | /NULL/i
{ 'NULL' }
| /CURRENT_TIMESTAMP/i
{ 'CURRENT_TIMESTAMP' }
database_events => $def->{'db_events'},
action => $def->{'action'},
on_table => $def->{'on_table'},
+ scope => 'row', # SQLite only supports row triggers
);
}
1;
# -------------------------------------------------------------------
-# All wholsome food is caught without a net or a trap.
+# All wholesome food is caught without a net or a trap.
# William Blake
# -------------------------------------------------------------------