Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / 24yaml.t
index 4df9fd6..89d4cbb 100644 (file)
-#!/usr/local/bin/perl
-# vim: set ft=perl:
-
+use warnings;
 use strict;
-use Test::More tests => 2;
+use Test::More;
 use Test::Differences;
+use Test::SQL::Translator qw(maybe_plan);
 use SQL::Translator;
+use FindBin '$Bin';
 
-my $create = q|
-CREATE TABLE random (
-    id int auto_increment PRIMARY KEY,
-    foo varchar(255) not null default '',
-    updated timestamp
-);
-|;
+BEGIN {
+    maybe_plan(2,
+        'SQL::Translator::Parser::SQLite',
+        'SQL::Translator::Producer::YAML');
+}
 
-my $yaml = q|--- #YAML:1.0
+my $sqlt_version = $SQL::Translator::VERSION;
+use YAML qw(Dump Load);
+my $yaml = Dump(Load(<<YAML));
+---
 schema:
   procedures: {}
   tables:
-    random:
-      comments: ''
+    person:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - person_id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - name
+          match_type: ''
+          name: u_name
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
       fields:
-        foo:
+        age:
+          data_type: integer
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: age
+          order: 3
+          size:
+            - 0
+        description:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: description
+          order: 6
+          size:
+            - 0
+        iq:
+          data_type: tinyint
+          default_value: 0
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: iq
+          order: 5
+          size:
+            - 0
+        name:
           data_type: varchar
-          default_value: ''
-          extra: {}
+          default_value: ~
           is_nullable: 0
           is_primary_key: 0
-          is_unique: 0
-          name: foo
+          is_unique: 1
+          name: name
           order: 2
           size:
-            - 255
-        id:
-          data_type: int
+            - 20
+        person_id:
+          comments:
+            - field comment 1
+            - field comment 2
+          data_type: INTEGER
           default_value: ~
-          extra: {}
+          is_auto_increment: 1
           is_nullable: 0
           is_primary_key: 1
           is_unique: 0
-          name: id
+          name: person_id
           order: 1
           size:
+            - 0
+        weight:
+          data_type: double
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: weight
+          order: 4
+          size:
             - 11
-        updated:
-          data_type: timestamp
+            - 2
+      indices: []
+      name: person
+      options: []
+      order: 1
+    pet:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields: []
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: CHECK
+        - deferrable: 1
+          expression: ''
+          fields:
+            - pet_id
+            - person_id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - person_id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - person_id
+          reference_table: person
+          type: FOREIGN KEY
+      fields:
+        age:
+          data_type: int
           default_value: ~
-          extra: {}
           is_nullable: 1
           is_primary_key: 0
           is_unique: 0
-          name: updated
+          name: age
+          order: 4
+          size:
+            - 0
+        name:
+          data_type: varchar
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: name
           order: 3
           size:
+            - 30
+        person_id:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: person_id
+          order: 2
+          size:
             - 0
-      indices: {}
-      name: random
+        pet_id:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: pet_id
+          order: 1
+          size:
+            - 0
+      indices: []
+      name: pet
       options: []
+      order: 2
+  triggers:
+    pet_trig:
+      action:
+        for_each: ~
+        steps:
+          - update pet set name=name
+        when: ~
+      database_events:
+        - insert
+      fields: ~
+      name: pet_trig
+      on_table: pet
       order: 1
-  triggers: {}
-  views: {}
-|;
+      perform_action_when: after
+      scope: row
+  views:
+    person_pet:
+      fields: []
+      name: person_pet
+      order: 1
+      sql: |
+        select pr.person_id, pr.name as person_name, pt.name as pet_name
+          from   person pr, pet pt
+          where  person.person_id=pet.pet_id
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args: {}
+  parser_type: SQL::Translator::Parser::SQLite
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: $sqlt_version
+YAML
 
-my $out;
-my $tr = SQL::Translator->new(
-    parser   => "MySQL",
-    producer => "YAML"
+my $file = "$Bin/data/sqlite/create.sql";
+open FH, "<$file" or die "Can't read '$file': $!\n";
+local $/;
+my $data = <FH>;
+my $tr   = SQL::Translator->new(
+    parser   => 'SQLite',
+    producer => 'YAML',
+    data     => $data,
 );
 
-
-ok($out = $tr->translate(\$create), 'Translate MySQL to YAML');
-eq_or_diff($out, $yaml, 'YAML matches expected');
-
+my $out;
+ok( $out = $tr->translate, 'Translate SQLite to YAML' );
+eq_or_diff( $out, $yaml, 'YAML matches expected' );