rubyrep 1.2.0 → 2.0.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.
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