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