[merge] Batch alter support for Pg and refactoring
[dbsrgits/SQL-Translator.git] / t / 23json.t
CommitLineData
edc7ae17 1use warnings;
2use strict;
3use Test::More;
4use Test::Differences;
5use Test::SQL::Translator qw(maybe_plan);
6use SQL::Translator;
7use FindBin '$Bin';
8
9BEGIN {
10 maybe_plan(
11 2,
12 'SQL::Translator::Parser::SQLite',
13 'SQL::Translator::Producer::JSON',
14 );
15}
16
17my $sqlt_version = $SQL::Translator::VERSION;
18my $json = <<JSON;
19{
20 "schema" : {
21 "procedures" : {},
22 "tables" : {
23 "person" : {
24 "constraints" : [
25 {
26 "deferrable" : 1,
27 "expression" : "",
28 "fields" : [
29 "person_id"
30 ],
31 "match_type" : "",
32 "name" : "",
33 "on_delete" : "",
34 "on_update" : "",
35 "options" : [],
36 "reference_fields" : [],
37 "reference_table" : "",
38 "type" : "PRIMARY KEY"
39 },
40 {
41 "deferrable" : 1,
42 "expression" : "",
43 "fields" : [
44 "name"
45 ],
46 "match_type" : "",
47 "name" : "u_name",
48 "on_delete" : "",
49 "on_update" : "",
50 "options" : [],
51 "reference_fields" : [],
52 "reference_table" : "",
53 "type" : "UNIQUE"
54 }
55 ],
56 "fields" : {
57 "age" : {
58 "data_type" : "integer",
59 "default_value" : null,
60 "is_nullable" : 1,
61 "is_primary_key" : 0,
62 "is_unique" : 0,
63 "name" : "age",
64 "order" : "3",
65 "size" : [
66 "0"
67 ]
68 },
69 "description" : {
70 "data_type" : "text",
71 "default_value" : null,
72 "is_nullable" : 1,
73 "is_primary_key" : 0,
74 "is_unique" : 0,
75 "name" : "description",
76 "order" : "6",
77 "size" : [
78 "0"
79 ]
80 },
81 "iq" : {
82 "data_type" : "tinyint",
83 "default_value" : "0",
84 "is_nullable" : 1,
85 "is_primary_key" : 0,
86 "is_unique" : 0,
87 "name" : "iq",
88 "order" : "5",
89 "size" : [
90 "0"
91 ]
92 },
93 "name" : {
94 "data_type" : "varchar",
95 "default_value" : null,
96 "is_nullable" : 0,
97 "is_primary_key" : 0,
98 "is_unique" : 1,
99 "name" : "name",
100 "order" : "2",
101 "size" : [
102 "20"
103 ]
104 },
105 "person_id" : {
106 "data_type" : "INTEGER",
107 "default_value" : null,
108 "is_auto_increment" : 1,
109 "is_nullable" : 0,
110 "is_primary_key" : 1,
111 "is_unique" : 0,
112 "name" : "person_id",
113 "order" : "1",
114 "size" : [
115 "0"
116 ]
117 },
118 "weight" : {
119 "data_type" : "double",
120 "default_value" : null,
121 "is_nullable" : 1,
122 "is_primary_key" : 0,
123 "is_unique" : 0,
124 "name" : "weight",
125 "order" : "4",
126 "size" : [
127 "11",
128 "2"
129 ]
130 }
131 },
132 "indices" : [],
133 "name" : "person",
134 "options" : [],
135 "order" : "1"
136 },
137 "pet" : {
138 "constraints" : [
139 {
140 "deferrable" : 1,
141 "expression" : "",
142 "fields" : [],
143 "match_type" : "",
144 "name" : "",
145 "on_delete" : "",
146 "on_update" : "",
147 "options" : [],
148 "reference_fields" : [],
149 "reference_table" : "",
150 "type" : "CHECK"
151 },
152 {
153 "deferrable" : 1,
154 "expression" : "",
155 "fields" : [
156 "pet_id",
157 "person_id"
158 ],
159 "match_type" : "",
160 "name" : "",
161 "on_delete" : "",
162 "on_update" : "",
163 "options" : [],
164 "reference_fields" : [],
165 "reference_table" : "",
166 "type" : "PRIMARY KEY"
167 },
168 {
169 "deferrable" : 1,
170 "expression" : "",
171 "fields" : [
172 "person_id"
173 ],
174 "match_type" : "",
175 "name" : "",
176 "on_delete" : "",
177 "on_update" : "",
178 "options" : [],
179 "reference_fields" : [
180 "person_id"
181 ],
182 "reference_table" : "person",
183 "type" : "FOREIGN KEY"
184 }
185 ],
186 "fields" : {
187 "age" : {
188 "data_type" : "int",
189 "default_value" : null,
190 "is_nullable" : 1,
191 "is_primary_key" : 0,
192 "is_unique" : 0,
193 "name" : "age",
194 "order" : "4",
195 "size" : [
196 "0"
197 ]
198 },
199 "name" : {
200 "data_type" : "varchar",
201 "default_value" : null,
202 "is_nullable" : 1,
203 "is_primary_key" : 0,
204 "is_unique" : 0,
205 "name" : "name",
206 "order" : "3",
207 "size" : [
208 "30"
209 ]
210 },
211 "person_id" : {
212 "data_type" : "int",
213 "default_value" : null,
214 "is_nullable" : 0,
215 "is_primary_key" : 1,
216 "is_unique" : 0,
217 "name" : "person_id",
218 "order" : "2",
219 "size" : [
220 "0"
221 ]
222 },
223 "pet_id" : {
224 "data_type" : "int",
225 "default_value" : null,
226 "is_nullable" : 0,
227 "is_primary_key" : 1,
228 "is_unique" : 0,
229 "name" : "pet_id",
230 "order" : "1",
231 "size" : [
232 "0"
233 ]
234 }
235 },
236 "indices" : [],
237 "name" : "pet",
238 "options" : [],
239 "order" : "2"
240 }
241 },
242 "triggers" : {
243 "pet_trig" : {
244 "action" : {
245 "for_each" : null,
246 "steps" : [
247 "update pet set name=name"
248 ],
249 "when" : null
250 },
251 "database_events" : [
252 "insert"
253 ],
254 "fields" : null,
255 "name" : "pet_trig",
256 "on_table" : "pet",
257 "order" : "1",
258 "perform_action_when" : "after"
259 }
260 },
261 "views" : {
262 "person_pet" : {
263 "fields" : [],
264 "name" : "person_pet",
265 "order" : "1",
266 "sql" : "select pr.person_id, pr.name as person_name, pt.name as pet_name\\n from person pr, pet pt\\n where person.person_id=pet.pet_id\\n"
267 }
268 }
269 },
270 "translator" : {
271 "add_drop_table" : 0,
272 "filename" : null,
273 "no_comments" : 0,
274 "parser_args" : {},
275 "parser_type" : "SQL::Translator::Parser::SQLite",
276 "producer_args" : {
277 "canonical" : 1,
278 "pretty" : 1
279 },
280 "producer_type" : "SQL::Translator::Producer::JSON",
281 "show_warnings" : 0,
282 "trace" : 0,
283 "version" : "$sqlt_version"
284 }
285}
286JSON
287
288my $file = "$Bin/data/sqlite/create.sql";
289open my $fh, '<', $file or die "Can't read '$file': $!\n";
290local $/;
291my $data = <$fh>;
292my $tr = SQL::Translator->new(
293 parser => 'SQLite',
294 producer => 'JSON',
295 producer_args => {
296 canonical => 1,
297 pretty => 1,
298 },
299 data => $data,
300);
301
302my $out;
303ok( $out = $tr->translate, 'Translate SQLite to JSON' );
304eq_or_diff( $out, $json, 'JSON matches expected' );