Commit | Line | Data |
d3fad399 |
1 | #!/usr/local/bin/perl |
2 | # vim: set ft=perl: |
3 | |
4 | use strict; |
2d691ec1 |
5 | use Test::More; |
d3fad399 |
6 | use Test::Differences; |
2d691ec1 |
7 | use Test::SQL::Translator qw(maybe_plan); |
d3fad399 |
8 | use SQL::Translator; |
e1742702 |
9 | use FindBin '$Bin'; |
d3fad399 |
10 | |
2d691ec1 |
11 | BEGIN { |
12 | maybe_plan(2, |
13 | 'SQL::Translator::Parser::SQLite', |
14 | 'SQL::Translator::Producer::YAML'); |
15 | } |
16 | |
2c05ed8e |
17 | my $yaml = <<'YAML'; |
6f146640 |
18 | --- |
af53e4ec |
19 | schema: |
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 |
219 | translator: |
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 |
6f146640 |
229 | version: 0.07 |
2c05ed8e |
230 | YAML |
d3fad399 |
231 | |
57e7e329 |
232 | my $file = "$Bin/data/sqlite/create.sql"; |
233 | open FH, "<$file" or die "Can't read '$file': $!\n"; |
234 | local $/; |
235 | my $data = <FH>; |
236 | my $tr = SQL::Translator->new( |
e1742702 |
237 | parser => 'SQLite', |
238 | producer => 'YAML', |
57e7e329 |
239 | data => $data, |
d3fad399 |
240 | ); |
241 | |
e1742702 |
242 | my $out; |
243 | ok( $out = $tr->translate, 'Translate SQLite to YAML' ); |
244 | eq_or_diff( $out, $yaml, 'YAML matches expected' ); |