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