}
}
|
- REFERENCES ref_def
+ REFERENCES ref_def cascade_def(?)
{
$return = {
type => 'foreign_key',
reference_table => $item[2]{'reference_table'},
reference_fields => $item[2]{'reference_fields'},
+ on_delete => $item[3][0]{'on_delete'},
+ on_update => $item[3][0]{'on_update'},
}
}
|
}
}
|
- FOREIGN_KEY parens_field_list REFERENCES ref_def
+ FOREIGN_KEY parens_field_list REFERENCES ref_def cascade_def(?)
{
$return = {
supertype => 'constraint',
fields => $item[2],
reference_table => $item[4]{'reference_table'},
reference_fields => $item[4]{'reference_fields'},
+ on_delete => $item[5][0]{'on_delete'},
+ on_update => $item[5][0]{'on_update'},
}
}
ref_def : table_name parens_field_list
{ $return = { reference_table => $item[1]{name}, reference_fields => $item[2] } }
+cascade_def : cascade_update_def cascade_delete_def(?)
+ { $return = { on_update => $item[1], on_delete => $item[2][0] } }
+ |
+ cascade_delete_def cascade_update_def(?)
+ { $return = { on_delete => $item[1], on_update => $item[2][0] } }
+
+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+(set null|set default|cascade|restrict|no action)/i
+ { $return = $1}
+
table_name : qualified_name
qualified_name : NAME
SEMICOLON : ';'
-NAME : /["']?(\w+)["']?/ { $return = $1 }
+NAME : /\w+/
+ | DQSTRING
+ | SQSTRING
-VALUE : /[-+]?\.?\d+(?:[eE]\d+)?/
+DQSTRING : '"' /((?:[^"]|"")+)/ '"'
+ { ($return = $item[2]) =~ s/""/"/g }
+
+SQSTRING : "'" /((?:[^']|'')*)/ "'"
+ { ($return = $item[2]) =~ 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' }
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
# -------------------------------------------------------------------