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