Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / 24yaml.t
CommitLineData
00db1ad5 1use warnings;
d3fad399 2use strict;
2d691ec1 3use Test::More;
d3fad399 4use Test::Differences;
2d691ec1 5use Test::SQL::Translator qw(maybe_plan);
d3fad399 6use SQL::Translator;
e1742702 7use FindBin '$Bin';
d3fad399 8
2d691ec1 9BEGIN {
10 maybe_plan(2,
11 'SQL::Translator::Parser::SQLite',
12 'SQL::Translator::Producer::YAML');
13}
14
495c5c2f 15my $sqlt_version = $SQL::Translator::VERSION;
4f2693e3 16use YAML qw(Dump Load);
17my $yaml = Dump(Load(<<YAML));
6f146640 18---
af53e4ec 19schema:
e93454af 20 procedures: {}
21 tables:
e1742702 22 person:
0919510d 23 constraints:
24 - deferrable: 1
25 expression: ''
26 fields:
27 - person_id
28 match_type: ''
29 name: ''
30 on_delete: ''
31 on_update: ''
32 options: []
e6c155dd 33 reference_fields: []
0919510d 34 reference_table: ''
35 type: PRIMARY KEY
36 - deferrable: 1
37 expression: ''
38 fields:
39 - name
40 match_type: ''
41 name: u_name
42 on_delete: ''
43 on_update: ''
44 options: []
e6c155dd 45 reference_fields: []
0919510d 46 reference_table: ''
47 type: UNIQUE
e93454af 48 fields:
e1742702 49 age:
50 data_type: integer
51 default_value: ~
e1742702 52 is_nullable: 1
53 is_primary_key: 0
54 is_unique: 0
55 name: age
56 order: 3
57 size:
58 - 0
59 description:
60 data_type: text
61 default_value: ~
e1742702 62 is_nullable: 1
63 is_primary_key: 0
64 is_unique: 0
65 name: description
66 order: 6
67 size:
68 - 0
69 iq:
70 data_type: tinyint
71 default_value: 0
e1742702 72 is_nullable: 1
73 is_primary_key: 0
74 is_unique: 0
75 name: iq
76 order: 5
77 size:
78 - 0
79 name:
e93454af 80 data_type: varchar
e1742702 81 default_value: ~
e93454af 82 is_nullable: 0
83 is_primary_key: 0
e1742702 84 is_unique: 1
85 name: name
e93454af 86 order: 2
87 size:
e1742702 88 - 20
89 person_id:
99fa843e 90 comments:
91 - field comment 1
92 - field comment 2
e1742702 93 data_type: INTEGER
e93454af 94 default_value: ~
557cc6c3 95 is_auto_increment: 1
e93454af 96 is_nullable: 0
97 is_primary_key: 1
98 is_unique: 0
e1742702 99 name: person_id
e93454af 100 order: 1
101 size:
e1742702 102 - 0
103 weight:
104 data_type: double
105 default_value: ~
e1742702 106 is_nullable: 1
107 is_primary_key: 0
108 is_unique: 0
109 name: weight
110 order: 4
111 size:
e93454af 112 - 11
e1742702 113 - 2
0919510d 114 indices: []
e1742702 115 name: person
116 options: []
117 order: 1
118 pet:
0919510d 119 constraints:
120 - deferrable: 1
121 expression: ''
4d438549 122 fields: []
0919510d 123 match_type: ''
124 name: ''
125 on_delete: ''
126 on_update: ''
127 options: []
e6c155dd 128 reference_fields: []
0919510d 129 reference_table: ''
130 type: CHECK
131 - deferrable: 1
132 expression: ''
133 fields:
134 - pet_id
135 - person_id
136 match_type: ''
137 name: ''
138 on_delete: ''
139 on_update: ''
140 options: []
e6c155dd 141 reference_fields: []
0919510d 142 reference_table: ''
143 type: PRIMARY KEY
557cc6c3 144 - deferrable: 1
145 expression: ''
146 fields:
147 - person_id
148 match_type: ''
149 name: ''
150 on_delete: ''
151 on_update: ''
152 options: []
153 reference_fields:
154 - person_id
155 reference_table: person
156 type: FOREIGN KEY
e1742702 157 fields:
158 age:
159 data_type: int
e93454af 160 default_value: ~
e93454af 161 is_nullable: 1
162 is_primary_key: 0
163 is_unique: 0
e1742702 164 name: age
d37416fd 165 order: 4
e1742702 166 size:
167 - 0
168 name:
169 data_type: varchar
170 default_value: ~
e1742702 171 is_nullable: 1
172 is_primary_key: 0
173 is_unique: 0
174 name: name
d37416fd 175 order: 3
e1742702 176 size:
177 - 30
178 person_id:
179 data_type: int
180 default_value: ~
e1742702 181 is_nullable: 0
182 is_primary_key: 1
183 is_unique: 0
184 name: person_id
d37416fd 185 order: 2
e1742702 186 size:
187 - 0
188 pet_id:
189 data_type: int
190 default_value: ~
e1742702 191 is_nullable: 0
192 is_primary_key: 1
193 is_unique: 0
194 name: pet_id
d37416fd 195 order: 1
e93454af 196 size:
197 - 0
0919510d 198 indices: []
e1742702 199 name: pet
e93454af 200 options: []
e1742702 201 order: 2
202 triggers:
da2f5992 203 pet_trig:
e1742702 204 action:
205 for_each: ~
206 steps:
e840ff6d 207 - update pet set name=name
e1742702 208 when: ~
5fefec27 209 database_events:
210 - insert
e1742702 211 fields: ~
da2f5992 212 name: pet_trig
213 on_table: pet
e1742702 214 order: 1
da2f5992 215 perform_action_when: after
c0ec0e22 216 scope: row
e1742702 217 views:
218 person_pet:
f9a2a1d9 219 fields: []
e1742702 220 name: person_pet
af53e4ec 221 order: 1
e1742702 222 sql: |
223 select pr.person_id, pr.name as person_name, pt.name as pet_name
224 from person pr, pet pt
225 where person.person_id=pet.pet_id
2c05ed8e 226translator:
227 add_drop_table: 0
57e7e329 228 filename: ~
2c05ed8e 229 no_comments: 0
230 parser_args: {}
231 parser_type: SQL::Translator::Parser::SQLite
232 producer_args: {}
233 producer_type: SQL::Translator::Producer::YAML
234 show_warnings: 0
235 trace: 0
495c5c2f 236 version: $sqlt_version
2c05ed8e 237YAML
d3fad399 238
57e7e329 239my $file = "$Bin/data/sqlite/create.sql";
240open FH, "<$file" or die "Can't read '$file': $!\n";
241local $/;
242my $data = <FH>;
243my $tr = SQL::Translator->new(
e1742702 244 parser => 'SQLite',
245 producer => 'YAML',
57e7e329 246 data => $data,
d3fad399 247);
248
e1742702 249my $out;
250ok( $out = $tr->translate, 'Translate SQLite to YAML' );
251eq_or_diff( $out, $yaml, 'YAML matches expected' );