Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / 16xml-parser.t
index 3d1c568..165d11f 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w 
+#!/usr/bin/perl -w
 # vim:filetype=perl
 
 # Before `make install' is performed this script should be runnable with
@@ -27,7 +27,7 @@ use constant DEBUG => (exists $opt{d} ? 1 : 0);
 #=============================================================================
 
 BEGIN {
-    maybe_plan(150, 'SQL::Translator::Parser::XML::SQLFairy');
+    maybe_plan(undef, 'SQL::Translator::Parser::XML::SQLFairy');
 }
 
 my $testschema = "$Bin/data/xml/schema.xml";
@@ -39,12 +39,21 @@ $sqlt = SQL::Translator->new(
     add_drop_table => 1,
 );
 die "Can't find test schema $testschema" unless -e $testschema;
-my $sql = $sqlt->translate(
+
+my $sql;
+{
+  my @w;
+  local $SIG{__WARN__} = sub { push @w, $_[0] if $_[0] =~ /The database_event tag is deprecated - please use database_events/ };
+
+  $sql = $sqlt->translate(
     from     => 'XML-SQLFairy',
     to       => 'MySQL',
     filename => $testschema,
-) or die $sqlt->error;
-print $sql if DEBUG;
+  ) or die $sqlt->error;
+  print $sql if DEBUG;
+
+  ok (@w, 'database_event deprecation warning issued');
+}
 
 # Test the schema objs generted from the XML
 #
@@ -57,11 +66,11 @@ schema_ok( $scma, {
     tables => [
         {
             name => "Basic",
+            options => [ { ENGINE => 'InnoDB' } ],
             extra => {
                 foo => "bar",
                 hello => "world",
                 bar => "baz",
-                mysql_table_type => "InnoDB",
             },
             fields => [
                 {
@@ -80,6 +89,7 @@ schema_ok( $scma, {
                     is_nullable => 0,
                     default_value => "hello",
                     size => 100,
+                    is_unique => 1,
                 },
                 {
                     name => "description",
@@ -90,7 +100,7 @@ schema_ok( $scma, {
                 {
                     name => "email",
                     data_type => "varchar",
-                    size => 255,
+                    size => 500,
                     is_unique => 1,
                     default_value => undef,
                     is_nullable => 1,
@@ -105,12 +115,14 @@ schema_ok( $scma, {
                     data_type => "varchar",
                     default_value => undef,
                     is_nullable => 1,
+                    size => 255,
                 },
                 {
                     name => "explicitemptystring",
                     data_type => "varchar",
                     default_value => "",
                     is_nullable => 1,
+                    size => 255,
                 },
                 {
                     name => "emptytagdef",
@@ -118,6 +130,21 @@ schema_ok( $scma, {
                     default_value => "",
                     is_nullable => 1,
                     comments => "Hello emptytagdef",
+                    size => 255,
+                },
+                {
+                    name => "another_id",
+                    data_type => "int",
+                    size => "10",
+                    default_value => 2,
+                    is_nullable => 1,
+                    is_foreign_key => 1,
+                },
+                {
+                    name => "timest",
+                    data_type => "timestamp",
+                    size => "0",
+                    is_nullable => 1,
                 },
             ],
             constraints => [
@@ -134,7 +161,19 @@ schema_ok( $scma, {
                     name => 'emailuniqueindex',
                     type => UNIQUE,
                     fields => ["email"],
-                }
+                },
+                {
+                    name => 'very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms',
+                    type => UNIQUE,
+                    fields => ["title"],
+                },
+                {
+                    type => FOREIGN_KEY,
+                    fields => ["another_id"],
+                    reference_table => "Another",
+                    reference_fields => ["id"],
+                    name => 'Basic_fk'
+                },
             ],
             indices => [
                 {
@@ -147,13 +186,39 @@ schema_ok( $scma, {
                     },
                 },
             ],
-        } # end table Basic
+        }, # end table Basic
+        {
+            name => "Another",
+            extra => {
+                foo => "bar",
+                hello => "world",
+                bar => "baz",
+            },
+            options => [ { ENGINE => 'InnoDB' } ],
+            fields => [
+                {
+                    name => "id",
+                    data_type => "int",
+                    default_value => undef,
+                    is_nullable => 0,
+                    size => 10,
+                    is_primary_key => 1,
+                    is_auto_increment => 1,
+                },
+                {
+                    name => "num",
+                    data_type => "numeric",
+                    default_value => undef,
+                    size => '10,2',
+                },
+            ],
+        }, # end table Another
     ], # end tables
 
     views => [
         {
             name => 'email_list',
-            sql => "SELECT email FROM Basic WHERE email IS NOT NULL",
+            sql => "SELECT email FROM Basic WHERE (email IS NOT NULL)",
             fields => ['email'],
             extra => {
                 foo => "bar",
@@ -167,15 +232,27 @@ schema_ok( $scma, {
         {
             name                => 'foo_trigger',
             perform_action_when => 'after',
-            database_event      => 'insert',
+            database_events     => 'insert',
             on_table            => 'Basic',
             action              => 'update modified=timestamp();',
+            scope               => 'row',
             extra => {
                 foo => "bar",
                 hello => "world",
                 bar => "baz",
             },
         },
+        {
+            name                => 'bar_trigger',
+            perform_action_when => 'before',
+            database_events     => 'insert,update',
+            on_table            => 'Basic',
+            action              => 'update modified2=timestamp();',
+            scope               => 'row',
+            extra => {
+                hello => "aliens",
+            },
+        },
     ],
 
     procedures => [
@@ -194,3 +271,5 @@ schema_ok( $scma, {
     ],
 
 }); # end schema
+
+done_testing;