Test and data for FK in SQLite.
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Parser / MySQL.pm
index c4d5aec..f560529 100644 (file)
@@ -231,9 +231,9 @@ string :
 
 nonstring : /[^;\'"]+/
 
-statement_body : (string | nonstring)(s?)
+statement_body : string | nonstring
 
-insert : /insert/i  statement_body "$delimiter"
+insert : /insert/i  statement_body(s?) "$delimiter"
 
 delimiter : /delimiter/i /[\S]+/
     { $delimiter = $item[2] }
@@ -343,16 +343,12 @@ create : CREATE PROCEDURE NAME not_delimiter "$delimiter"
 PROCEDURE : /procedure/i
     | /function/i
 
-create : CREATE algorithm(?) /view/i NAME not_delimiter "$delimiter"
+create : CREATE replace(?) algorithm(?) /view/i NAME not_delimiter "$delimiter"
     {
         @table_comments = ();
-        my $view_name = $item[4];
-        my $sql;
-        if (scalar(@{$item[2]}) == 1) {
-               $sql = "$item[1] $item[2][0] $item[3] $item[4] $item[5]";
-        } else {
-            $sql = "$item[1] $item[3] $item[4] $item[5]";
-        }
+        my $view_name = $item[5];
+        my $sql = join(q{ }, grep { defined and length } $item[1], $item[2]->[0], $item[3]->[0])
+            . " $item[4] $item[5] $item[6]";
         
         # Hack to strip database from function calls in SQL
         $sql =~ s#`\w+`\.(`\w+`\()##g;
@@ -362,6 +358,8 @@ create : CREATE algorithm(?) /view/i NAME not_delimiter "$delimiter"
         $views{ $view_name }{'sql'}    = $sql;
     }
 
+replace : /or replace/i
+
 algorithm : /algorithm/i /=/ WORD
     {
         $return = "$item[1]=$item[3]";
@@ -608,7 +606,7 @@ default_val :
         $return =  \$item[2];
     }
     |
-    /default/i /'(?:.*?\\')*.*?'|(?:')?[\w\d:.-]*(?:')?/
+    /default/i /'(?:.*?(?:\\'|''))*.*?'|(?:')?[\w\d:.-]*(?:')?/
     {
         $item[2] =~ s/^\s*'|'\s*$//g;
         $return  =  $item[2];