Index: t/02mysql-parser.t
===================================================================
--- t/02mysql-parser.t  (revision 1474)
+++ t/02mysql-parser.t  (working copy)
@@ -11,7 +11,7 @@
 use Test::SQL::Translator qw(maybe_plan);

 BEGIN {
-    maybe_plan(292, "SQL::Translator::Parser::MySQL");
+    maybe_plan(294, "SQL::Translator::Parser::MySQL");
     SQL::Translator::Parser::MySQL->import('parse');
 }

@@ -507,6 +507,32 @@
                                `m`.`user_id` AS `user_access`
                                from (`asset` `a` join `M_ACCESS_CONTROL` `m` 
on((`a`.`acl_id` =
`m`.`acl_id`))) */;
                        DELIMITER ;;
+                       /*!50001 CREATE */
+                       /*! VIEW `vs_asset2` AS
+                               select `a`.`asset_id` AS 
`asset_id`,`a`.`fq_name` AS `fq_name`,
+                               
`cfgmgmt_mig`.`ap_extract_folder`(`a`.`fq_name`) AS `folder_name`,
+                               `cfgmgmt_mig`.`ap_extract_asset`(`a`.`fq_name`) 
AS `asset_name`,
+                               `a`.`annotation` AS 
`annotation`,`a`.`asset_type` AS `asset_type`,
+                               `a`.`foreign_asset_id` AS `foreign_asset_id`,
+                               `a`.`foreign_asset_id2` AS 
`foreign_asset_id2`,`a`.`dateCreated`
AS `date_created`,
+                               `a`.`dateModified` AS 
`date_modified`,`a`.`container_id` AS `container_id`,
+                               `a`.`creator_id` AS 
`creator_id`,`a`.`modifier_id` AS `modifier_id`,
+                               `m`.`user_id` AS `user_access`
+                               from (`asset` `a` join `M_ACCESS_CONTROL` `m` 
on((`a`.`acl_id` =
`m`.`acl_id`))) */;
+                       DELIMITER ;;
+                       /*!50001 CREATE OR REPLACE */
+                       /*! VIEW `vs_asset3` AS
+                               select `a`.`asset_id` AS 
`asset_id`,`a`.`fq_name` AS `fq_name`,
+                               
`cfgmgmt_mig`.`ap_extract_folder`(`a`.`fq_name`) AS `folder_name`,
+                               `cfgmgmt_mig`.`ap_extract_asset`(`a`.`fq_name`) 
AS `asset_name`,
+                               `a`.`annotation` AS 
`annotation`,`a`.`asset_type` AS `asset_type`,
+                               `a`.`foreign_asset_id` AS `foreign_asset_id`,
+                               `a`.`foreign_asset_id2` AS 
`foreign_asset_id2`,`a`.`dateCreated`
AS `date_created`,
+                               `a`.`dateModified` AS 
`date_modified`,`a`.`container_id` AS `container_id`,
+                               `a`.`creator_id` AS 
`creator_id`,`a`.`modifier_id` AS `modifier_id`,
+                               `m`.`user_id` AS `user_access`
+                               from (`asset` `a` join `M_ACCESS_CONTROL` `m` 
on((`a`.`acl_id` =
`m`.`acl_id`))) */;
+                       DELIMITER ;;
                        /*!50003 CREATE*/ /*!50020 
definer=`cmdoma...@`localhost`*/
/*!50003 FUNCTION `ap_from_millitime_nullable`( millis_since_1970
BIGINT ) RETURNS timestamp
                        DETERMINISTIC
                                BEGIN
@@ -589,9 +615,11 @@
     is( $t1f2->extra('on update'), 'CURRENT_TIMESTAMP', 'Field has
right on update qualifier' );

     my @views = $schema->get_views;
-    is( scalar @views, 1, 'Right number of views (1)' );
-    my $view1 = shift @views;
+    is( scalar @views, 3, 'Right number of views (3)' );
+    my ($view3, $view1, $view2) = @views;
     is( $view1->name, 'vs_asset', 'Found "vs_asset" view' );
+    is( $view2->name, 'vs_asset2', 'Found "vs_asset2" view' );
+    is( $view3->name, 'vs_asset3', 'Found "vs_asset3" view' );
        like($view1->sql, qr/ALGORITHM=UNDEFINED/, "Detected algorithm");
        like($view1->sql, qr/vs_asset/, "Detected view vs_asset");
        unlike($view1->sql, qr/cfgmgmt_mig/, "Did not detect cfgmgmt_mig");
Index: lib/SQL/Translator/Parser/MySQL.pm
===================================================================
--- lib/SQL/Translator/Parser/MySQL.pm  (revision 1474)
+++ lib/SQL/Translator/Parser/MySQL.pm  (working copy)
@@ -343,11 +343,12 @@
 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 = "$item[1] $item[2] $item[3] $item[4] $item[5]";
+        my $view_name = $item[5];
+        my $sql = join(q{ }, grep { 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;
@@ -357,6 +358,8 @@
         $views{ $view_name }{'sql'}    = $sql;
     }

+replace : /or replace/i
+
 algorithm : /algorithm/i /=/ WORD
     {
         $return = "$item[1]=$item[3]";
Index: Changes
===================================================================
--- Changes     (revision 1474)
+++ Changes     (working copy)
@@ -3,6 +3,7 @@
 # ----------------------------------------------------------
 * Properly quote absolute table names in the MySQL producer
 * Added semi-colon for (DROP|CREATE) TYPE statements in the Pg producer (wreis)
+* Added CREATE VIEW subrules for mysql parser (wreis)

 # ----------------------------------------------------------
 # 0.09004 2009-02-13

-- 
wallace reis/wreis
Shadowcat Systems Limited
http://www.shadowcat.co.uk
http://www.linkedin.com/in/wallacereis

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
-- 
sqlfairy-developers mailing list
sqlfairy-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlfairy-developers

Reply via email to