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