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