Fix parsing of MySQL column comments (RT#83380)
[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:
90 data_type: INTEGER
e93454af 91 default_value: ~
557cc6c3 92 is_auto_increment: 1
e93454af 93 is_nullable: 0
94 is_primary_key: 1
95 is_unique: 0
e1742702 96 name: person_id
e93454af 97 order: 1
98 size:
e1742702 99 - 0
100 weight:
101 data_type: double
102 default_value: ~
e1742702 103 is_nullable: 1
104 is_primary_key: 0
105 is_unique: 0
106 name: weight
107 order: 4
108 size:
e93454af 109 - 11
e1742702 110 - 2
0919510d 111 indices: []
e1742702 112 name: person
113 options: []
114 order: 1
115 pet:
0919510d 116 constraints:
117 - deferrable: 1
118 expression: ''
4d438549 119 fields: []
0919510d 120 match_type: ''
121 name: ''
122 on_delete: ''
123 on_update: ''
124 options: []
e6c155dd 125 reference_fields: []
0919510d 126 reference_table: ''
127 type: CHECK
128 - deferrable: 1
129 expression: ''
130 fields:
131 - pet_id
132 - person_id
133 match_type: ''
134 name: ''
135 on_delete: ''
136 on_update: ''
137 options: []
e6c155dd 138 reference_fields: []
0919510d 139 reference_table: ''
140 type: PRIMARY KEY
557cc6c3 141 - deferrable: 1
142 expression: ''
143 fields:
144 - person_id
145 match_type: ''
146 name: ''
147 on_delete: ''
148 on_update: ''
149 options: []
150 reference_fields:
151 - person_id
152 reference_table: person
153 type: FOREIGN KEY
e1742702 154 fields:
155 age:
156 data_type: int
e93454af 157 default_value: ~
e93454af 158 is_nullable: 1
159 is_primary_key: 0
160 is_unique: 0
e1742702 161 name: age
d37416fd 162 order: 4
e1742702 163 size:
164 - 0
165 name:
166 data_type: varchar
167 default_value: ~
e1742702 168 is_nullable: 1
169 is_primary_key: 0
170 is_unique: 0
171 name: name
d37416fd 172 order: 3
e1742702 173 size:
174 - 30
175 person_id:
176 data_type: int
177 default_value: ~
e1742702 178 is_nullable: 0
179 is_primary_key: 1
180 is_unique: 0
181 name: person_id
d37416fd 182 order: 2
e1742702 183 size:
184 - 0
185 pet_id:
186 data_type: int
187 default_value: ~
e1742702 188 is_nullable: 0
189 is_primary_key: 1
190 is_unique: 0
191 name: pet_id
d37416fd 192 order: 1
e93454af 193 size:
194 - 0
0919510d 195 indices: []
e1742702 196 name: pet
e93454af 197 options: []
e1742702 198 order: 2
199 triggers:
da2f5992 200 pet_trig:
e1742702 201 action:
202 for_each: ~
203 steps:
e840ff6d 204 - update pet set name=name
e1742702 205 when: ~
5fefec27 206 database_events:
207 - insert
e1742702 208 fields: ~
da2f5992 209 name: pet_trig
210 on_table: pet
e1742702 211 order: 1
da2f5992 212 perform_action_when: after
e1742702 213 views:
214 person_pet:
f9a2a1d9 215 fields: []
e1742702 216 name: person_pet
af53e4ec 217 order: 1
e1742702 218 sql: |
219 select pr.person_id, pr.name as person_name, pt.name as pet_name
220 from person pr, pet pt
221 where person.person_id=pet.pet_id
2c05ed8e 222translator:
223 add_drop_table: 0
57e7e329 224 filename: ~
2c05ed8e 225 no_comments: 0
226 parser_args: {}
227 parser_type: SQL::Translator::Parser::SQLite
228 producer_args: {}
229 producer_type: SQL::Translator::Producer::YAML
230 show_warnings: 0
231 trace: 0
495c5c2f 232 version: $sqlt_version
2c05ed8e 233YAML
d3fad399 234
57e7e329 235my $file = "$Bin/data/sqlite/create.sql";
236open FH, "<$file" or die "Can't read '$file': $!\n";
237local $/;
238my $data = <FH>;
239my $tr = SQL::Translator->new(
e1742702 240 parser => 'SQLite',
241 producer => 'YAML',
57e7e329 242 data => $data,
d3fad399 243);
244
e1742702 245my $out;
246ok( $out = $tr->translate, 'Translate SQLite to YAML' );
247eq_or_diff( $out, $yaml, 'YAML matches expected' );