pg_examiner 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +12 -13
- data/Rakefile +5 -0
- data/lib/pg_examiner.rb +2 -0
- data/lib/pg_examiner/base.rb +16 -14
- data/lib/pg_examiner/result.rb +9 -2
- data/lib/pg_examiner/result/column.rb +12 -2
- data/lib/pg_examiner/result/constraint.rb +6 -1
- data/lib/pg_examiner/result/extension.rb +9 -2
- data/lib/pg_examiner/result/function.rb +12 -2
- data/lib/pg_examiner/result/index.rb +11 -2
- data/lib/pg_examiner/result/item.rb +2 -0
- data/lib/pg_examiner/result/language.rb +5 -1
- data/lib/pg_examiner/result/schema.rb +13 -1
- data/lib/pg_examiner/result/sequence.rb +15 -0
- data/lib/pg_examiner/result/table.rb +14 -3
- data/lib/pg_examiner/result/trigger.rb +9 -2
- data/lib/pg_examiner/version.rb +3 -1
- data/pg_examiner.gemspec +3 -0
- data/spec/constraint_spec.rb +14 -12
- data/spec/extension_spec.rb +4 -2
- data/spec/function_spec.rb +7 -218
- data/spec/index_spec.rb +133 -12
- data/spec/language_spec.rb +2 -0
- data/spec/schema_spec.rb +14 -12
- data/spec/sequence_spec.rb +41 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/table_spec.rb +16 -16
- data/spec/trigger_spec.rb +310 -0
- metadata +36 -3
data/spec/extension_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe PGExaminer do
|
@@ -23,7 +25,7 @@ describe PGExaminer do
|
|
23
25
|
plpgsql.name.should == 'plpgsql'
|
24
26
|
plpgsql.schema.should be nil
|
25
27
|
|
26
|
-
result1.diff(result2)[
|
27
|
-
result2.diff(result1)[
|
28
|
+
result1.diff(result2)["extensions"].should == {"added" => ['citext']}
|
29
|
+
result2.diff(result1)["extensions"].should == {"removed" => ['citext']}
|
28
30
|
end
|
29
31
|
end
|
data/spec/function_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe PGExaminer do
|
@@ -30,8 +32,8 @@ describe PGExaminer do
|
|
30
32
|
a.should_not == c
|
31
33
|
b.should_not == c
|
32
34
|
|
33
|
-
a.diff(c).should == {
|
34
|
-
b.diff(c).should == {
|
35
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"functions"=>{"added"=>["add_numbers"], "removed"=>["add"]}}}}
|
36
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"functions"=>{"added"=>["add_numbers"], "removed"=>["add"]}}}}
|
35
37
|
end
|
36
38
|
|
37
39
|
it "should be able to differentiate between functions by their argument types" do
|
@@ -74,8 +76,8 @@ describe PGExaminer do
|
|
74
76
|
b.should_not == d
|
75
77
|
c.should_not == d
|
76
78
|
|
77
|
-
a.diff(b).should == {
|
78
|
-
a.diff(c).should == {
|
79
|
+
a.diff(b).should == {"schemas"=>{"public"=>{"functions"=>{"add"=>{"function definition"=>{"CREATE OR REPLACE FUNCTION public.add(one integer, two integer)\n RETURNS integer\n LANGUAGE sql\nAS $function$\n SELECT one + two\n $function$\n"=>"CREATE OR REPLACE FUNCTION public.add(one integer, two integer, three integer)\n RETURNS integer\n LANGUAGE sql\nAS $function$\n SELECT one + two\n $function$\n"}, "argument types"=>{["int4", "int4"]=>["int4", "int4", "int4"]}}}}}}
|
80
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"functions"=>{"add"=>{"function definition"=>{"CREATE OR REPLACE FUNCTION public.add(one integer, two integer)\n RETURNS integer\n LANGUAGE sql\nAS $function$\n SELECT one + two\n $function$\n"=>"CREATE OR REPLACE FUNCTION public.add(one integer, two integer, three integer[])\n RETURNS integer\n LANGUAGE sql\nAS $function$\n SELECT one + two\n $function$\n"}, "argument types"=>{["int4", "int4"]=>["int4", "int4", "_int4"]}}}}}}
|
79
81
|
end
|
80
82
|
|
81
83
|
it "should be able to differentiate between functions by their argument defaults" do
|
@@ -149,7 +151,7 @@ describe PGExaminer do
|
|
149
151
|
|
150
152
|
a.should_not == b
|
151
153
|
|
152
|
-
a.diff(b)[
|
154
|
+
a.diff(b)["schemas"]['public']["functions"]['add']["language"].should == {'sql' => 'plpgsql'}
|
153
155
|
end
|
154
156
|
|
155
157
|
it "should be able to differentiate between functions by their other flags" do
|
@@ -253,217 +255,4 @@ describe PGExaminer do
|
|
253
255
|
a.should_not == c
|
254
256
|
a.should_not == d
|
255
257
|
end
|
256
|
-
|
257
|
-
it "should be able to differentiate between triggers by their names" do
|
258
|
-
a = examine <<-SQL
|
259
|
-
CREATE TABLE test_table (
|
260
|
-
a integer
|
261
|
-
);
|
262
|
-
|
263
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
264
|
-
BEGIN
|
265
|
-
NEW.a = 56;
|
266
|
-
RETURN NEW;
|
267
|
-
END;
|
268
|
-
$$
|
269
|
-
LANGUAGE plpgsql;
|
270
|
-
|
271
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
272
|
-
SQL
|
273
|
-
|
274
|
-
b = examine <<-SQL
|
275
|
-
CREATE TABLE test_table (
|
276
|
-
a integer
|
277
|
-
);
|
278
|
-
|
279
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
280
|
-
BEGIN
|
281
|
-
NEW.a = 56;
|
282
|
-
RETURN NEW;
|
283
|
-
END;
|
284
|
-
$$
|
285
|
-
LANGUAGE plpgsql;
|
286
|
-
|
287
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
288
|
-
SQL
|
289
|
-
|
290
|
-
c = examine <<-SQL
|
291
|
-
CREATE TABLE test_table (
|
292
|
-
a integer
|
293
|
-
);
|
294
|
-
|
295
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
296
|
-
BEGIN
|
297
|
-
NEW.a = 56;
|
298
|
-
RETURN NEW;
|
299
|
-
END;
|
300
|
-
$$
|
301
|
-
LANGUAGE plpgsql;
|
302
|
-
|
303
|
-
CREATE TRIGGER trig2 BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
304
|
-
SQL
|
305
|
-
|
306
|
-
a.should == b
|
307
|
-
a.should_not == c
|
308
|
-
b.should_not == c
|
309
|
-
|
310
|
-
a.diff(c).should == {:schemas=>{"public"=>{:tables=>{"test_table"=>{:triggers=>{:added=>["trig2"], :removed=>["trig"]}}}}}}
|
311
|
-
b.diff(c).should == {:schemas=>{"public"=>{:tables=>{"test_table"=>{:triggers=>{:added=>["trig2"], :removed=>["trig"]}}}}}}
|
312
|
-
end
|
313
|
-
|
314
|
-
it "should be able to differentiate between triggers by their parent tables" do
|
315
|
-
a = examine <<-SQL
|
316
|
-
CREATE TABLE test_table_a (
|
317
|
-
a integer
|
318
|
-
);
|
319
|
-
|
320
|
-
CREATE TABLE test_table_b (
|
321
|
-
a integer
|
322
|
-
);
|
323
|
-
|
324
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
325
|
-
BEGIN
|
326
|
-
NEW.a = 56;
|
327
|
-
RETURN NEW;
|
328
|
-
END;
|
329
|
-
$$
|
330
|
-
LANGUAGE plpgsql;
|
331
|
-
|
332
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table_a FOR EACH ROW EXECUTE PROCEDURE func();
|
333
|
-
SQL
|
334
|
-
|
335
|
-
b = examine <<-SQL
|
336
|
-
CREATE TABLE test_table_a (
|
337
|
-
a integer
|
338
|
-
);
|
339
|
-
|
340
|
-
CREATE TABLE test_table_b (
|
341
|
-
a integer
|
342
|
-
);
|
343
|
-
|
344
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
345
|
-
BEGIN
|
346
|
-
NEW.a = 56;
|
347
|
-
RETURN NEW;
|
348
|
-
END;
|
349
|
-
$$
|
350
|
-
LANGUAGE plpgsql;
|
351
|
-
|
352
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table_b FOR EACH ROW EXECUTE PROCEDURE func();
|
353
|
-
SQL
|
354
|
-
|
355
|
-
a.should_not == b
|
356
|
-
|
357
|
-
a.diff(b).should == {:schemas=>{"public"=>{:tables=>{"test_table_a"=>{:triggers=>{:removed=>["trig"]}}, "test_table_b"=>{:triggers=>{:added=>["trig"]}}}}}}
|
358
|
-
end
|
359
|
-
|
360
|
-
it "should be able to differentiate between triggers by their associated functions" do
|
361
|
-
a = examine <<-SQL
|
362
|
-
CREATE TABLE test_table (
|
363
|
-
a integer
|
364
|
-
);
|
365
|
-
|
366
|
-
CREATE FUNCTION func1() RETURNS trigger AS $$
|
367
|
-
BEGIN
|
368
|
-
NEW.a = 56;
|
369
|
-
RETURN NEW;
|
370
|
-
END;
|
371
|
-
$$
|
372
|
-
LANGUAGE plpgsql;
|
373
|
-
|
374
|
-
CREATE FUNCTION func2() RETURNS trigger AS $$
|
375
|
-
BEGIN
|
376
|
-
NEW.a = 56;
|
377
|
-
RETURN NEW;
|
378
|
-
END;
|
379
|
-
$$
|
380
|
-
LANGUAGE plpgsql;
|
381
|
-
|
382
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func1();
|
383
|
-
SQL
|
384
|
-
|
385
|
-
b = examine <<-SQL
|
386
|
-
CREATE TABLE test_table (
|
387
|
-
a integer
|
388
|
-
);
|
389
|
-
|
390
|
-
CREATE FUNCTION func1() RETURNS trigger AS $$
|
391
|
-
BEGIN
|
392
|
-
NEW.a = 56;
|
393
|
-
RETURN NEW;
|
394
|
-
END;
|
395
|
-
$$
|
396
|
-
LANGUAGE plpgsql;
|
397
|
-
|
398
|
-
CREATE FUNCTION func2() RETURNS trigger AS $$
|
399
|
-
BEGIN
|
400
|
-
NEW.a = 56;
|
401
|
-
RETURN NEW;
|
402
|
-
END;
|
403
|
-
$$
|
404
|
-
LANGUAGE plpgsql;
|
405
|
-
|
406
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func2();
|
407
|
-
SQL
|
408
|
-
|
409
|
-
a.should_not == b
|
410
|
-
|
411
|
-
a.diff(b).should == {:schemas=>{"public"=>{:tables=>{"test_table"=>{:triggers=>{"trig"=>{:function=>{"func1"=>"func2"}}}}}}}}
|
412
|
-
end
|
413
|
-
|
414
|
-
it "should be able to differentiate between triggers by their firing conditions" do
|
415
|
-
a = examine <<-SQL
|
416
|
-
CREATE TABLE test_table (
|
417
|
-
a integer
|
418
|
-
);
|
419
|
-
|
420
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
421
|
-
BEGIN
|
422
|
-
NEW.a = 56;
|
423
|
-
RETURN NEW;
|
424
|
-
END;
|
425
|
-
$$
|
426
|
-
LANGUAGE plpgsql;
|
427
|
-
|
428
|
-
CREATE TRIGGER trig BEFORE INSERT ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
429
|
-
SQL
|
430
|
-
|
431
|
-
b = examine <<-SQL
|
432
|
-
CREATE TABLE test_table (
|
433
|
-
a integer
|
434
|
-
);
|
435
|
-
|
436
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
437
|
-
BEGIN
|
438
|
-
NEW.a = 56;
|
439
|
-
RETURN NEW;
|
440
|
-
END;
|
441
|
-
$$
|
442
|
-
LANGUAGE plpgsql;
|
443
|
-
|
444
|
-
CREATE TRIGGER trig BEFORE UPDATE ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
445
|
-
SQL
|
446
|
-
|
447
|
-
c = examine <<-SQL
|
448
|
-
CREATE TABLE test_table (
|
449
|
-
a integer
|
450
|
-
);
|
451
|
-
|
452
|
-
CREATE FUNCTION func() RETURNS trigger AS $$
|
453
|
-
BEGIN
|
454
|
-
NEW.a = 56;
|
455
|
-
RETURN NEW;
|
456
|
-
END;
|
457
|
-
$$
|
458
|
-
LANGUAGE plpgsql;
|
459
|
-
|
460
|
-
CREATE TRIGGER trig BEFORE DELETE ON test_table FOR EACH ROW EXECUTE PROCEDURE func();
|
461
|
-
SQL
|
462
|
-
|
463
|
-
a.should_not == b
|
464
|
-
a.should_not == c
|
465
|
-
b.should_not == c
|
466
|
-
|
467
|
-
a.diff(b).should == {:schemas=>{"public"=>{:tables=>{"test_table"=>{:triggers=>{"trig"=>{:tgtype=>{"7"=>"19"}}}}}}}}
|
468
|
-
end
|
469
258
|
end
|
data/spec/index_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe PGExaminer do
|
@@ -30,8 +32,8 @@ describe PGExaminer do
|
|
30
32
|
a.should_not == c
|
31
33
|
b.should_not == c
|
32
34
|
|
33
|
-
a.diff(c).should == {
|
34
|
-
b.diff(c).should == {
|
35
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"added"=>["int_idx2"], "removed"=>["int_idx"]}}}}}}
|
36
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"added"=>["int_idx2"], "removed"=>["int_idx"]}}}}}}
|
35
37
|
end
|
36
38
|
|
37
39
|
it "should consider the columns indexes are on when determining equivalency" do
|
@@ -66,9 +68,9 @@ describe PGExaminer do
|
|
66
68
|
a.should_not == c
|
67
69
|
b.should_not == c
|
68
70
|
|
69
|
-
a.diff(b).should == {
|
70
|
-
a.diff(c).should == {
|
71
|
-
b.diff(c).should == {
|
71
|
+
a.diff(b).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"expression"=>{["a"]=>["b"]}}}}}}}}
|
72
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"expression"=>{["a"]=>["a", "b"]}}}}}}}}
|
73
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"expression"=>{["b"]=>["a", "b"]}}}}}}}}
|
72
74
|
end
|
73
75
|
|
74
76
|
it "should consider the filters indexes have when determining equivalency" do
|
@@ -104,8 +106,8 @@ describe PGExaminer do
|
|
104
106
|
a.should_not == c
|
105
107
|
b.should_not == c
|
106
108
|
|
107
|
-
a.diff(c).should == {
|
108
|
-
b.diff(c).should == {
|
109
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"filter expression"=>{"(a > 0)"=>nil}}}}}}}}
|
110
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"filter expression"=>{"(a > 0)"=>nil}}}}}}}}
|
109
111
|
end
|
110
112
|
|
111
113
|
it "should consider the expressions indexes are on, if any" do
|
@@ -141,8 +143,8 @@ describe PGExaminer do
|
|
141
143
|
a.should_not == c
|
142
144
|
b.should_not == c
|
143
145
|
|
144
|
-
a.diff(c).should == {
|
145
|
-
b.diff(c).should == {
|
146
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"text_idx"=>{"expression"=>{"lower(a)"=>["a"]}}}}}}}}
|
147
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"text_idx"=>{"expression"=>{"lower(a)"=>["a"]}}}}}}}}
|
146
148
|
end
|
147
149
|
|
148
150
|
it "should consider the uniqueness and primary key status of an index, if any" do
|
@@ -174,8 +176,127 @@ describe PGExaminer do
|
|
174
176
|
a.should_not == c
|
175
177
|
b.should_not == c
|
176
178
|
|
177
|
-
a.diff(b).should == {
|
178
|
-
a.diff(c).should == {
|
179
|
-
b.diff(c).should == {
|
179
|
+
a.diff(b).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"indexes"=>{"int_idx"=>{"index is unique"=>{"f"=>"t"}}}}}}}}
|
180
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"columns"=>{"a"=>{"column is marked not-null"=>{"f"=>"t"}}}, "indexes"=>{"added"=>["test_table_pkey"], "removed"=>["int_idx"]}, "constraints"=>{"added"=>["test_table_pkey"]}}}}}}
|
181
|
+
b.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"columns"=>{"a"=>{"column is marked not-null"=>{"f"=>"t"}}}, "indexes"=>{"added"=>["test_table_pkey"], "removed"=>["int_idx"]}, "constraints"=>{"added"=>["test_table_pkey"]}}}}}}
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should recognize the difference between a unique index and a unique constraint" do
|
185
|
+
a = examine <<-SQL
|
186
|
+
CREATE TABLE test_table (
|
187
|
+
a integer,
|
188
|
+
UNIQUE (a)
|
189
|
+
);
|
190
|
+
SQL
|
191
|
+
|
192
|
+
b = examine <<-SQL
|
193
|
+
CREATE TABLE test_table (
|
194
|
+
a integer UNIQUE
|
195
|
+
);
|
196
|
+
SQL
|
197
|
+
|
198
|
+
c = examine <<-SQL
|
199
|
+
CREATE TABLE test_table (
|
200
|
+
a integer
|
201
|
+
);
|
202
|
+
|
203
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a);
|
204
|
+
SQL
|
205
|
+
|
206
|
+
d = examine <<-SQL
|
207
|
+
CREATE TABLE test_table (
|
208
|
+
a integer
|
209
|
+
);
|
210
|
+
|
211
|
+
CREATE UNIQUE INDEX test_table_a_key ON test_table (a);
|
212
|
+
SQL
|
213
|
+
|
214
|
+
a.should == b
|
215
|
+
a.should == c
|
216
|
+
a.should_not == d
|
217
|
+
|
218
|
+
a.diff(d).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"constraints"=>{"removed"=>["test_table_a_key"]}}}}}}
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should recognize the difference between unique indices with different deferrable states" do
|
222
|
+
a = examine <<-SQL
|
223
|
+
CREATE TABLE test_table (
|
224
|
+
a integer
|
225
|
+
);
|
226
|
+
|
227
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a);
|
228
|
+
SQL
|
229
|
+
|
230
|
+
b = examine <<-SQL
|
231
|
+
CREATE TABLE test_table (
|
232
|
+
a integer
|
233
|
+
);
|
234
|
+
|
235
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) NOT DEFERRABLE;
|
236
|
+
SQL
|
237
|
+
|
238
|
+
c = examine <<-SQL
|
239
|
+
CREATE TABLE test_table (
|
240
|
+
a integer
|
241
|
+
);
|
242
|
+
|
243
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE;
|
244
|
+
SQL
|
245
|
+
|
246
|
+
d = examine <<-SQL
|
247
|
+
CREATE TABLE test_table (
|
248
|
+
a integer
|
249
|
+
);
|
250
|
+
|
251
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE INITIALLY IMMEDIATE;
|
252
|
+
SQL
|
253
|
+
|
254
|
+
e = examine <<-SQL
|
255
|
+
CREATE TABLE test_table (
|
256
|
+
a integer
|
257
|
+
);
|
258
|
+
|
259
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE INITIALLY DEFERRED;
|
260
|
+
SQL
|
261
|
+
|
262
|
+
c2 = examine <<-SQL
|
263
|
+
CREATE TABLE test_table (
|
264
|
+
a integer
|
265
|
+
);
|
266
|
+
|
267
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE;
|
268
|
+
SQL
|
269
|
+
|
270
|
+
d2 = examine <<-SQL
|
271
|
+
CREATE TABLE test_table (
|
272
|
+
a integer
|
273
|
+
);
|
274
|
+
|
275
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE INITIALLY IMMEDIATE;
|
276
|
+
SQL
|
277
|
+
|
278
|
+
e2 = examine <<-SQL
|
279
|
+
CREATE TABLE test_table (
|
280
|
+
a integer
|
281
|
+
);
|
282
|
+
|
283
|
+
ALTER TABLE test_table ADD CONSTRAINT test_table_a_key UNIQUE (a) DEFERRABLE INITIALLY DEFERRED;
|
284
|
+
SQL
|
285
|
+
|
286
|
+
a.should == b
|
287
|
+
a.should_not == c
|
288
|
+
a.should_not == d
|
289
|
+
c.should == d
|
290
|
+
c.should_not == e
|
291
|
+
d.should_not == e
|
292
|
+
|
293
|
+
c.should == c2
|
294
|
+
d.should == d2
|
295
|
+
e.should == e2
|
296
|
+
|
297
|
+
a.diff(c).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"constraints"=>{"test_table_a_key"=>{"constraint definition"=>{"UNIQUE (a)"=>"UNIQUE (a) DEFERRABLE"}}}}}}}}
|
298
|
+
a.diff(d).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"constraints"=>{"test_table_a_key"=>{"constraint definition"=>{"UNIQUE (a)"=>"UNIQUE (a) DEFERRABLE"}}}}}}}}
|
299
|
+
c.diff(e).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"constraints"=>{"test_table_a_key"=>{"constraint definition"=>{"UNIQUE (a) DEFERRABLE"=>"UNIQUE (a) DEFERRABLE INITIALLY DEFERRED"}}}}}}}}
|
300
|
+
d.diff(e).should == {"schemas"=>{"public"=>{"tables"=>{"test_table"=>{"constraints"=>{"test_table_a_key"=>{"constraint definition"=>{"UNIQUE (a) DEFERRABLE"=>"UNIQUE (a) DEFERRABLE INITIALLY DEFERRED"}}}}}}}}
|
180
301
|
end
|
181
302
|
end
|