rubyrep 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +18 -0
  5. data/Gemfile.lock +84 -0
  6. data/History.txt +6 -0
  7. data/README.txt +1 -1
  8. data/Rakefile +6 -27
  9. data/bin/rubyrep +1 -1
  10. data/config/mysql_config.rb +2 -2
  11. data/config/postgres_config.rb +5 -3
  12. data/lib/rubyrep/command_runner.rb +1 -1
  13. data/lib/rubyrep/connection_extenders/connection_extenders.rb +30 -44
  14. data/lib/rubyrep/connection_extenders/mysql_extender.rb +23 -1
  15. data/lib/rubyrep/connection_extenders/postgresql_extender.rb +31 -168
  16. data/lib/rubyrep/generate_runner.rb +1 -1
  17. data/lib/rubyrep/logged_change.rb +1 -1
  18. data/lib/rubyrep/proxy_connection.rb +22 -12
  19. data/lib/rubyrep/replication_difference.rb +1 -1
  20. data/lib/rubyrep/replication_extenders/mysql_replication.rb +1 -1
  21. data/lib/rubyrep/replication_helper.rb +1 -1
  22. data/lib/rubyrep/replication_runner.rb +10 -0
  23. data/lib/rubyrep/scan_report_printers/scan_detail_reporter.rb +1 -1
  24. data/lib/rubyrep/table_spec_resolver.rb +1 -1
  25. data/lib/rubyrep/type_casting_cursor.rb +8 -4
  26. data/lib/rubyrep/version.rb +1 -7
  27. data/lib/rubyrep.rb +4 -3
  28. data/rubyrep +4 -0
  29. data/rubyrep.bat +5 -0
  30. data/rubyrep.gemspec +29 -0
  31. data/sims/performance/big_rep_spec.rb +34 -17
  32. data/sims/performance/performance.rake +11 -31
  33. data/tasks/database.rake +14 -14
  34. data/tasks/java.rake +18 -5
  35. data/tasks/rspec.rake +14 -34
  36. data/tasks/stats.rake +1 -16
  37. metadata +99 -162
  38. data/.gemtest +0 -0
  39. data/config/requirements.rb +0 -32
  40. data/lib/rubyrep/connection_extenders/jdbc_extender.rb +0 -65
  41. data/spec/base_runner_spec.rb +0 -218
  42. data/spec/buffered_committer_spec.rb +0 -274
  43. data/spec/command_runner_spec.rb +0 -145
  44. data/spec/committers_spec.rb +0 -178
  45. data/spec/configuration_spec.rb +0 -203
  46. data/spec/connection_extender_interface_spec.rb +0 -141
  47. data/spec/connection_extenders_registration_spec.rb +0 -164
  48. data/spec/database_proxy_spec.rb +0 -48
  49. data/spec/database_rake_spec.rb +0 -40
  50. data/spec/db_specific_connection_extenders_spec.rb +0 -34
  51. data/spec/db_specific_replication_extenders_spec.rb +0 -38
  52. data/spec/direct_table_scan_spec.rb +0 -61
  53. data/spec/dolphins.jpg +0 -0
  54. data/spec/generate_runner_spec.rb +0 -84
  55. data/spec/initializer_spec.rb +0 -46
  56. data/spec/log_helper_spec.rb +0 -39
  57. data/spec/logged_change_loader_spec.rb +0 -68
  58. data/spec/logged_change_spec.rb +0 -470
  59. data/spec/noisy_connection_spec.rb +0 -78
  60. data/spec/postgresql_replication_spec.rb +0 -48
  61. data/spec/postgresql_schema_support_spec.rb +0 -212
  62. data/spec/postgresql_support_spec.rb +0 -63
  63. data/spec/progress_bar_spec.rb +0 -77
  64. data/spec/proxied_table_scan_spec.rb +0 -151
  65. data/spec/proxy_block_cursor_spec.rb +0 -197
  66. data/spec/proxy_connection_spec.rb +0 -423
  67. data/spec/proxy_cursor_spec.rb +0 -56
  68. data/spec/proxy_row_cursor_spec.rb +0 -66
  69. data/spec/proxy_runner_spec.rb +0 -70
  70. data/spec/replication_difference_spec.rb +0 -161
  71. data/spec/replication_extender_interface_spec.rb +0 -367
  72. data/spec/replication_extenders_spec.rb +0 -32
  73. data/spec/replication_helper_spec.rb +0 -178
  74. data/spec/replication_initializer_spec.rb +0 -509
  75. data/spec/replication_run_spec.rb +0 -443
  76. data/spec/replication_runner_spec.rb +0 -254
  77. data/spec/replicators_spec.rb +0 -36
  78. data/spec/rubyrep_spec.rb +0 -8
  79. data/spec/scan_detail_reporter_spec.rb +0 -119
  80. data/spec/scan_progress_printers_spec.rb +0 -68
  81. data/spec/scan_report_printers_spec.rb +0 -67
  82. data/spec/scan_runner_spec.rb +0 -50
  83. data/spec/scan_summary_reporter_spec.rb +0 -61
  84. data/spec/session_spec.rb +0 -253
  85. data/spec/spec.opts +0 -1
  86. data/spec/spec_helper.rb +0 -305
  87. data/spec/strange_name_support_spec.rb +0 -135
  88. data/spec/sync_helper_spec.rb +0 -169
  89. data/spec/sync_runner_spec.rb +0 -78
  90. data/spec/syncers_spec.rb +0 -171
  91. data/spec/table_scan_helper_spec.rb +0 -36
  92. data/spec/table_scan_spec.rb +0 -49
  93. data/spec/table_sorter_spec.rb +0 -30
  94. data/spec/table_spec_resolver_spec.rb +0 -111
  95. data/spec/table_sync_spec.rb +0 -140
  96. data/spec/task_sweeper_spec.rb +0 -47
  97. data/spec/trigger_mode_switcher_spec.rb +0 -83
  98. data/spec/two_way_replicator_spec.rb +0 -721
  99. data/spec/two_way_syncer_spec.rb +0 -256
  100. data/spec/type_casting_cursor_spec.rb +0 -50
  101. data/spec/uninstall_runner_spec.rb +0 -93
  102. data/tasks/rubyrep.tailor +0 -18
  103. data/tasks/website.rake +0 -19
@@ -1,470 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe LoggedChange do
6
- before(:each) do
7
- Initializer.configuration = standard_config
8
- end
9
-
10
- it "initialize should store session and database" do
11
- session = Session.new
12
- loader = LoggedChangeLoader.new session, :left
13
- change = LoggedChange.new loader
14
- change.session.should == session
15
- change.database.should == :left
16
- end
17
-
18
- it "load_specified should load the specified change" do
19
- session = Session.new
20
- session.left.begin_db_transaction
21
- begin
22
- session.left.insert_record 'rr_pending_changes', {
23
- 'change_table' => 'left_table',
24
- 'change_key' => 'id|1',
25
- 'change_type' => 'I',
26
- 'change_time' => Time.now
27
- }
28
- session.left.insert_record 'rr_pending_changes', {
29
- 'change_table' => 'right_table',
30
- 'change_key' => 'id|2',
31
- 'change_new_key' => 'id|2',
32
- 'change_type' => 'U',
33
- 'change_time' => Time.now
34
- }
35
- session.left.insert_record 'rr_pending_changes', {
36
- 'change_table' => 'left_table',
37
- 'change_key' => 'id|2',
38
- 'change_type' => 'I',
39
- 'change_time' => Time.now
40
- }
41
- loader = LoggedChangeLoader.new session, :left
42
- change = LoggedChange.new loader
43
- change.load_specified 'left_table', {'id' => '2'}
44
-
45
- change.table.should == 'left_table'
46
- change.type.should == :insert
47
- change.key.should == {'id' => '2'}
48
- ensure
49
- session.left.rollback_db_transaction
50
- end
51
- end
52
-
53
- it "load_specified should accept a column_name => value hash as key" do
54
- config = deep_copy(standard_config)
55
- config.included_table_specs.clear
56
- config.include_tables "scanner_records", :key => ['id1', 'id2']
57
-
58
- session = Session.new config
59
- session.left.begin_db_transaction
60
- begin
61
- session.left.insert_record 'rr_pending_changes', {
62
- 'change_table' => 'scanner_records',
63
- 'change_key' => 'id1|1|id2|2',
64
- 'change_type' => 'I',
65
- 'change_time' => Time.now
66
- }
67
- loader = LoggedChangeLoader.new session, :left
68
- change = LoggedChange.new loader
69
- change.load_specified 'scanner_records', {'id1' => 1, 'id2' => 2}
70
-
71
- change.table.should == 'scanner_records'
72
- change.type.should == :insert
73
- change.key.should == {'id1' => '1', 'id2' => '2'}
74
- ensure
75
- session.left.rollback_db_transaction
76
- end
77
- end
78
-
79
- it "load_specified should delete loaded changes from the database" do
80
- session = Session.new
81
- session.left.begin_db_transaction
82
- begin
83
- session.left.insert_record 'rr_pending_changes', {
84
- 'change_table' => 'left_table',
85
- 'change_key' => 'id|1',
86
- 'change_type' => 'I',
87
- 'change_time' => Time.now
88
- }
89
- loader = LoggedChangeLoader.new session, :left
90
- change = LoggedChange.new loader
91
- change.load_specified 'left_table', {'id' => 1}
92
-
93
- session.left.
94
- select_one("select * from rr_pending_changes where change_key = 'id|1'").
95
- should be_nil
96
- ensure
97
- session.left.rollback_db_transaction
98
- end
99
- end
100
-
101
- it "load_specified should set first_change_at and last_changed_at correctly" do
102
- session = Session.new
103
- session.left.begin_db_transaction
104
- begin
105
- t1 = 5.seconds.ago
106
- t2 = 5.seconds.from_now
107
- session.left.insert_record 'rr_pending_changes', {
108
- 'change_table' => 'left_table',
109
- 'change_key' => 'id|1',
110
- 'change_type' => 'I',
111
- 'change_time' => t1
112
- }
113
- session.left.insert_record 'rr_pending_changes', {
114
- 'change_table' => 'left_table',
115
- 'change_key' => 'id|1',
116
- 'change_new_key' => 'id|1',
117
- 'change_type' => 'U',
118
- 'change_time' => t2
119
- }
120
- loader = LoggedChangeLoader.new session, :left
121
- change = LoggedChange.new loader
122
- change.load_specified 'left_table', {'id' => 1}
123
-
124
- (change.first_changed_at - t1).abs.should < 1
125
- (change.last_changed_at - t2).abs.should < 1
126
- ensure
127
- session.left.rollback_db_transaction
128
- end
129
- end
130
-
131
- it "load_specified should follow primary key updates correctly" do
132
- session = Session.new
133
- session.left.begin_db_transaction
134
- begin
135
- session.left.insert_record 'rr_pending_changes', {
136
- 'change_table' => 'left_table',
137
- 'change_key' => 'id|1',
138
- 'change_new_key' => 'id|2',
139
- 'change_type' => 'U',
140
- 'change_time' => Time.now
141
- }
142
- session.left.insert_record 'rr_pending_changes', {
143
- 'change_table' => 'left_table',
144
- 'change_key' => 'id|2',
145
- 'change_new_key' => 'id|3',
146
- 'change_type' => 'U',
147
- 'change_time' => Time.now
148
- }
149
- loader = LoggedChangeLoader.new session, :left
150
- change = LoggedChange.new loader
151
- change.load_specified 'left_table', {'id' => 1}
152
-
153
- change.type.should == :update
154
- change.key.should == {'id' => 1}
155
- change.new_key.should == {'id' => '3'}
156
- ensure
157
- session.left.rollback_db_transaction
158
- end
159
- end
160
-
161
- it "load_specified should recognize if changes cancel each other out" do
162
- session = Session.new
163
- session.left.begin_db_transaction
164
- begin
165
- session.left.insert_record 'rr_pending_changes', {
166
- 'change_table' => 'left_table',
167
- 'change_key' => 'id|1',
168
- 'change_type' => 'I',
169
- 'change_time' => Time.now
170
- }
171
- session.left.insert_record 'rr_pending_changes', {
172
- 'change_table' => 'left_table',
173
- 'change_key' => 'id|1',
174
- 'change_new_key' => 'id|2',
175
- 'change_type' => 'U',
176
- 'change_time' => Time.now
177
- }
178
- session.left.insert_record 'rr_pending_changes', {
179
- 'change_table' => 'left_table',
180
- 'change_key' => 'id|2',
181
- 'change_type' => 'D',
182
- 'change_time' => Time.now
183
- }
184
- loader = LoggedChangeLoader.new session, :left
185
- change = LoggedChange.new loader
186
- change.load_specified 'left_table', {'id' => '1'}
187
-
188
- change.type.should == :no_change
189
- ensure
190
- session.left.rollback_db_transaction
191
- end
192
- end
193
-
194
- it "load_specified should transist states correctly" do
195
- session = Session.new
196
- session.left.begin_db_transaction
197
- begin
198
-
199
- # first test case
200
- session.left.insert_record 'rr_pending_changes', {
201
- 'change_table' => 'left_table',
202
- 'change_key' => 'id|1',
203
- 'change_type' => 'I',
204
- 'change_time' => Time.now
205
- }
206
- session.left.insert_record 'rr_pending_changes', {
207
- 'change_table' => 'left_table',
208
- 'change_key' => 'id|1',
209
- 'change_type' => 'D',
210
- 'change_time' => Time.now
211
- }
212
- session.left.insert_record 'rr_pending_changes', {
213
- 'change_table' => 'left_table',
214
- 'change_key' => 'id|1',
215
- 'change_type' => 'I',
216
- 'change_time' => Time.now
217
- }
218
- session.left.insert_record 'rr_pending_changes', {
219
- 'change_table' => 'left_table',
220
- 'change_key' => 'id|1',
221
- 'change_new_key' => 'id|2',
222
- 'change_type' => 'U',
223
- 'change_time' => Time.now
224
- }
225
- loader = LoggedChangeLoader.new session, :left
226
- change = LoggedChange.new loader
227
- change.load_specified 'left_table', {'id' => '1'}
228
- change.type.should == :insert
229
- change.key.should == {'id' => '2'}
230
-
231
- # second test case
232
- session.left.insert_record 'rr_pending_changes', {
233
- 'change_table' => 'left_table',
234
- 'change_key' => 'id|5',
235
- 'change_type' => 'D',
236
- 'change_time' => Time.now
237
- }
238
- session.left.insert_record 'rr_pending_changes', {
239
- 'change_table' => 'left_table',
240
- 'change_key' => 'id|5',
241
- 'change_type' => 'I',
242
- 'change_time' => Time.now
243
- }
244
- loader.update :forced => true
245
- change = LoggedChange.new loader
246
- change.load_specified 'left_table', {'id' => '5'}
247
- change.type.should == :update
248
- change.key.should == {'id' => '5'}
249
- change.new_key.should == {'id' => '5'}
250
- ensure
251
- session.left.rollback_db_transaction
252
- end
253
- end
254
-
255
- it "amend should work if there were no changes" do
256
- session = Session.new
257
- session.left.begin_db_transaction
258
- begin
259
- session.left.insert_record 'rr_pending_changes', {
260
- 'change_table' => 'scanner_records',
261
- 'change_key' => 'id|1',
262
- 'change_type' => 'I',
263
- 'change_time' => Time.now
264
- }
265
- loader = LoggedChangeLoader.new session, :left
266
- change = LoggedChange.new loader
267
- change.load_specified 'scanner_records', {'id' => '1'}
268
-
269
- change.table.should == 'scanner_records'
270
- change.type.should == :insert
271
- change.key.should == {'id' => '1'}
272
-
273
- change.load
274
-
275
- change.table.should == 'scanner_records'
276
- change.type.should == :insert
277
- change.key.should == {'id' => '1'}
278
- ensure
279
- session.left.rollback_db_transaction
280
- end
281
- end
282
-
283
- it "amend should work if the current type is :no_change" do
284
- session = Session.new
285
- session.left.begin_db_transaction
286
- begin
287
- loader = LoggedChangeLoader.new session, :left
288
- change = LoggedChange.new loader
289
- change.load_specified 'scanner_records', {'id' => '1'}
290
-
291
- change.table.should == 'scanner_records'
292
- change.type.should == :no_change
293
- change.key.should == {'id' => '1'}
294
-
295
- change.load
296
-
297
- change.table.should == 'scanner_records'
298
- change.type.should == :no_change
299
- change.key.should == {'id' => '1'}
300
- ensure
301
- session.left.rollback_db_transaction
302
- end
303
- end
304
-
305
- it "amend should amend the change correctly" do
306
- session = Session.new
307
- session.left.begin_db_transaction
308
- begin
309
- session.left.insert_record 'left_table', {
310
- :id => '1',
311
- :name => 'bla'
312
- }
313
- session.left.insert_record 'rr_pending_changes', {
314
- 'change_table' => 'left_table',
315
- 'change_key' => 'id|1',
316
- 'change_new_key' => 'id|1',
317
- 'change_type' => 'U',
318
- 'change_time' => Time.now
319
- }
320
- loader = LoggedChangeLoader.new session, :left
321
- change = LoggedChange.new loader
322
- change.load_specified 'left_table', {'id' => '1'}
323
- session.left.insert_record 'rr_pending_changes', {
324
- 'change_table' => 'left_table',
325
- 'change_key' => 'id|1',
326
- 'change_type' => 'D',
327
- 'change_time' => Time.now
328
- }
329
- loader.update :forced => true
330
- change.load
331
-
332
- change.table.should == 'left_table'
333
- change.type.should == :delete
334
- change.key.should == {'id' => '1'}
335
- ensure
336
- session.left.rollback_db_transaction
337
- end
338
- end
339
-
340
- it "amend should support primary key updates" do
341
- session = Session.new
342
- session.left.begin_db_transaction
343
- begin
344
- session.left.insert_record 'left_table', {
345
- :id => '1',
346
- :name => 'bla'
347
- }
348
- session.left.insert_record 'rr_pending_changes', {
349
- 'change_table' => 'left_table',
350
- 'change_key' => 'id|1',
351
- 'change_new_key' => 'id|2',
352
- 'change_type' => 'U',
353
- 'change_time' => Time.now
354
- }
355
- loader = LoggedChangeLoader.new session, :left
356
- change = LoggedChange.new loader
357
- change.load_specified 'left_table', {'id' => '1'}
358
- session.left.insert_record 'rr_pending_changes', {
359
- 'change_table' => 'left_table',
360
- 'change_key' => 'id|2',
361
- 'change_new_key' => 'id|3',
362
- 'change_type' => 'U',
363
- 'change_time' => Time.now
364
- }
365
- loader.update :forced => true
366
- change.load
367
-
368
- change.table.should == 'left_table'
369
- change.type.should == :update
370
- change.key.should == {'id' => '1'}
371
- change.new_key.should == {'id' => '3'}
372
- ensure
373
- session.left.rollback_db_transaction
374
- end
375
- end
376
-
377
- it "key_from_raw_key should return the correct column_name => value hash for the given key" do
378
- loader = LoggedChangeLoader.new Session.new, :left
379
- change = LoggedChange.new loader
380
- change.key_to_hash("a|1|b|2").should == {
381
- 'a' => '1',
382
- 'b' => '2'
383
- }
384
- end
385
-
386
- it "key_from_raw_key should work with multi character key_sep strings" do
387
- loader = LoggedChangeLoader.new Session.new, :left
388
- change = LoggedChange.new loader
389
- change.stub!(:key_sep).and_return('BLA')
390
- change.key_to_hash("aBLA1BLAbBLA2").should == {
391
- 'a' => '1',
392
- 'b' => '2'
393
- }
394
- end
395
-
396
- it "load_oldest should not load a change if none available" do
397
- loader = LoggedChangeLoader.new Session.new, :left
398
- change = LoggedChange.new loader
399
- change.should_not_receive :load_specified
400
- change.load_oldest
401
- end
402
-
403
- it "load_oldest should load the oldest available change" do
404
- session = Session.new
405
- session.left.begin_db_transaction
406
- begin
407
- session.left.insert_record 'rr_pending_changes', {
408
- 'change_table' => 'left_table',
409
- 'change_key' => 'id|1',
410
- 'change_type' => 'I',
411
- 'change_time' => Time.now
412
- }
413
- session.left.insert_record 'rr_pending_changes', {
414
- 'change_table' => 'left_table',
415
- 'change_key' => 'id|2',
416
- 'change_type' => 'I',
417
- 'change_time' => Time.now
418
- }
419
- loader = LoggedChangeLoader.new session, :left
420
- change = LoggedChange.new loader
421
- change.load_oldest
422
-
423
- change.key.should == {'id' => '1'}
424
- ensure
425
- session.left.rollback_db_transaction
426
- end
427
- end
428
-
429
- it "load_oldest should skip irrelevant changes" do
430
- session = Session.new
431
- session.left.begin_db_transaction
432
- begin
433
- session.left.insert_record 'rr_pending_changes', {
434
- 'change_table' => 'left_table',
435
- 'change_key' => 'id|1',
436
- 'change_type' => 'I',
437
- 'change_time' => Time.now
438
- }
439
- session.left.insert_record 'rr_pending_changes', {
440
- 'change_table' => 'left_table',
441
- 'change_key' => 'id|1',
442
- 'change_type' => 'D',
443
- 'change_time' => Time.now
444
- }
445
- session.left.insert_record 'rr_pending_changes', {
446
- 'change_table' => 'left_table',
447
- 'change_key' => 'id|2',
448
- 'change_type' => 'I',
449
- 'change_time' => Time.now
450
- }
451
- loader = LoggedChangeLoader.new session, :left
452
- change = LoggedChange.new loader
453
- change.load_oldest
454
-
455
- change.type.should == :insert
456
- change.key.should == {'id' => '2'}
457
- ensure
458
- session.left.rollback_db_transaction
459
- end
460
- end
461
-
462
- it "to_yaml should blank out session and loader" do
463
- session = Session.new
464
- loader = LoggedChangeLoader.new session, :left
465
- change = LoggedChange.new loader
466
- yaml = change.to_yaml
467
- yaml.should_not =~ /session/
468
- yaml.should_not =~ /loader/
469
- end
470
- end
@@ -1,78 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- include RR
4
-
5
- describe NoisyConnection do
6
- before(:each) do
7
- Initializer.configuration = proxied_config
8
- @connection = ProxyConnection.new Initializer.configuration.left
9
- @connection.send(:extend, NoisyConnection)
10
- @connection.sweeper = TaskSweeper.new(1)
11
- end
12
-
13
- it "select_cursor should return correct results" do
14
- @connection.sweeper.should_receive(:ping).exactly(4).times
15
- @connection.select_record(:table => 'scanner_records').should == {
16
- 'id' => 1,
17
- 'name' => 'Alice - exists in both databases'
18
- }
19
- end
20
-
21
- it "insert_record should write nil values correctly" do
22
- @connection.sweeper.should_receive(:ping).exactly(2).times
23
- @connection.begin_db_transaction
24
- begin
25
- @connection.insert_record('extender_combined_key', 'first_id' => 8, 'second_id' => '9', 'name' => nil)
26
- @connection.select_one(
27
- "select name from extender_combined_key where (first_id, second_id) = (8, 9)"
28
- ).should == {"name" => nil}
29
- ensure
30
- @connection.rollback_db_transaction
31
- end
32
- end
33
-
34
- it "update_record should update the specified record" do
35
- @connection.sweeper.should_receive(:ping).exactly(2).times
36
- @connection.begin_db_transaction
37
- begin
38
- @connection.update_record('scanner_records', 'id' => 1, 'name' => 'update_test')
39
- @connection.select_one(
40
- "select name from scanner_records where id = 1"
41
- ).should == {'name' => 'update_test'}
42
- ensure
43
- @connection.rollback_db_transaction
44
- end
45
- end
46
-
47
- it "delete_record should delete the specified record" do
48
- @connection.sweeper.should_receive(:ping).exactly(2).times
49
- @connection.begin_db_transaction
50
- begin
51
- @connection.delete_record('extender_combined_key', 'first_id' => 1, 'second_id' => '1', 'name' => 'xy')
52
- @connection.select_one(
53
- "select first_id, second_id, name
54
- from extender_combined_key where (first_id, second_id) = (1, 1)") \
55
- .should be_nil
56
- ensure
57
- @connection.rollback_db_transaction
58
- end
59
- end
60
-
61
- it "commit_db_transaction should update TaskSweeper" do
62
- @connection.begin_db_transaction
63
- initializer = ReplicationInitializer.new Session.new(standard_config)
64
- begin
65
- @connection.execute "insert into scanner_records(id,name) values(99, 'bla')"
66
- @connection.sweeper.should_receive(:ping).exactly(2).times
67
- @connection.commit_db_transaction
68
- initializer.silence_ddl_notices(:left) do # avoid PostgreSQL warning that no transaction is open
69
- @connection.rollback_db_transaction
70
- end
71
- @connection.select_one("select name from scanner_records where id = 99")['name'].
72
- should == 'bla'
73
- ensure
74
- @connection.execute "delete from scanner_records where id = 99"
75
- end
76
- end
77
-
78
- end
@@ -1,48 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
- require 'yaml'
3
- require 'config/test_config.rb'
4
-
5
- include RR
6
-
7
- describe "PostgreSQLReplication", :shared => true do
8
- before(:each) do
9
- end
10
-
11
- it "create_replication_trigger should also work if language plpgsql does not yet exist" do
12
- session = nil
13
- begin
14
- session = Session.new
15
- session.left.begin_db_transaction
16
- unless session.left.select_all("select lanname from pg_language where lanname = 'plpgsql'").empty?
17
- session.left.execute "DROP LANGUAGE plpgsql"
18
- end
19
- params = {
20
- :trigger_name => 'rr_trigger_test',
21
- :table => 'trigger_test',
22
- :keys => ['first_id', 'second_id'],
23
- :log_table => 'rr_pending_changes',
24
- :key_sep => '|',
25
- :exclude_rr_activity => false,
26
- }
27
- session.left.create_replication_trigger params
28
- session.left.insert_record 'trigger_test', {
29
- 'first_id' => 1,
30
- 'second_id' => 2,
31
- 'name' => 'bla'
32
- }
33
-
34
- row = session.left.select_one("select * from rr_pending_changes")
35
- row.delete 'id'
36
- row.delete 'change_time'
37
- row.should == {
38
- 'change_table' => 'trigger_test',
39
- 'change_key' => 'first_id|1|second_id|2',
40
- 'change_new_key' => nil,
41
- 'change_type' => 'I'
42
- }
43
-
44
- ensure
45
- session.left.rollback_db_transaction if session
46
- end
47
- end
48
- end