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