rubyrep 1.1.1 → 1.1.2

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.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ == 1.1.2 2009-05-10
2
+
3
+ * Bug fix: escape primary keys in replication triggers
4
+
1
5
  == 1.1.1 2009-02-02
2
6
 
3
7
  * Feature: optional use of an SQL logger
@@ -19,8 +19,8 @@ module RR
19
19
  # * a logger instance itself (Logger or Log4r::Logger) or
20
20
  # * the parameter to create a Logger with Logger.new
21
21
  # Examples:
22
- # +config.left[:logger] = STDOUT
23
- # +config.right[:logger] = Logger.new('rubyrep_debug.log')
22
+ # config.left[:logger] = STDOUT
23
+ # config.right[:logger] = Logger.new('rubyrep_debug.log')
24
24
  attr_accessor :right
25
25
 
26
26
  # Returns true unless running on windows...
@@ -39,7 +39,7 @@ module RR
39
39
  # * +params+: the parameter hash as described in #create_rep_trigger
40
40
  def key_clause(trigger_var, params)
41
41
  "concat_ws('#{params[:key_sep]}', " +
42
- params[:keys].map { |key| "'#{key}', #{trigger_var}.#{key}"}.join(", ") +
42
+ params[:keys].map { |key| "'#{key}', #{trigger_var}.#{quote_column_name(key)}"}.join(", ") +
43
43
  ")"
44
44
  end
45
45
  private :key_clause
@@ -10,7 +10,7 @@ module RR
10
10
  # * +params+: the parameter hash as described in #create_rep_trigger
11
11
  def key_clause(trigger_var, params)
12
12
  params[:keys].
13
- map { |key| "'#{key}#{params[:key_sep]}' || #{trigger_var}.#{key}"}.
13
+ map { |key| "'#{key}#{params[:key_sep]}' || #{trigger_var}.#{quote_column_name(key)}"}.
14
14
  join(" || '#{params[:key_sep]}' || ")
15
15
  end
16
16
  private :key_clause
@@ -2,7 +2,7 @@ module RR #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 1
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -64,7 +64,7 @@ describe "Unusual table and column name support" do
64
64
  end
65
65
  end
66
66
 
67
- it "should support trigger operations" do
67
+ it "should support trigger operations for strange tables" do
68
68
  trigger_name = 'rr_' + STRANGE_TABLE
69
69
  session = Session.new
70
70
  begin
@@ -98,4 +98,38 @@ describe "Unusual table and column name support" do
98
98
  session.left.execute "delete from rr_pending_changes"
99
99
  end
100
100
  end
101
+
102
+ it "should support trigger operations for table with strange primary keys" do
103
+ trigger_name = 'rr_table_with_strange_key'
104
+ session = Session.new
105
+ begin
106
+ session.left.replication_trigger_exists?(trigger_name, :table_with_strange_key).should be_false
107
+ session.left.create_replication_trigger({
108
+ :trigger_name => trigger_name,
109
+ :table => :table_with_strange_key,
110
+ :keys => [STRANGE_COLUMN],
111
+ :log_table => 'rr_pending_changes',
112
+ :activity_table => 'rr_running_flags',
113
+ :key_sep => '|',
114
+ :exclude_rr_activity => true
115
+ })
116
+ session.left.replication_trigger_exists?(trigger_name, :table_with_strange_key).should be_true
117
+ session.left.insert_record 'table_with_strange_key', {
118
+ STRANGE_COLUMN => '11'
119
+ }
120
+ log_record = session.left.select_one(
121
+ "select * from rr_pending_changes where change_table = 'table_with_strange_key'")
122
+ log_record['change_key'].should == "#{STRANGE_COLUMN}|11"
123
+ log_record['change_type'].should == 'I'
124
+
125
+ session.left.drop_replication_trigger trigger_name, :table_with_strange_key
126
+ session.left.replication_trigger_exists?(trigger_name, :table_with_strange_key).should be_false
127
+ ensure
128
+ if session.left.replication_trigger_exists?(trigger_name, :table_with_strange_key)
129
+ session.left.drop_replication_trigger trigger_name, :table_with_strange_key
130
+ end
131
+ session.left.execute "delete from #{session.left.quote_table_name(:table_with_strange_key)}"
132
+ session.left.execute "delete from rr_pending_changes"
133
+ end
134
+ end
101
135
  end
data/tasks/database.rake CHANGED
@@ -271,6 +271,15 @@ def create_sample_schema(database, config)
271
271
  return name, nil
272
272
  end
273
273
 
274
+ create_table :table_with_strange_key, :id => false do |t|
275
+ t.column STRANGE_COLUMN, :integer
276
+ end
277
+
278
+ ActiveRecord::Base.connection.execute(<<-end_sql)
279
+ ALTER TABLE table_with_strange_key ADD CONSTRAINT table_with_strange_key_pkey
280
+ PRIMARY KEY (#{ActiveRecord::Base.connection.quote_column_name(STRANGE_COLUMN)})
281
+ end_sql
282
+
274
283
  create_table STRANGE_TABLE do |t|
275
284
  t.column :first_fk, :integer
276
285
  t.column :second_fk, :integer
@@ -330,6 +339,7 @@ def drop_sample_schema(config)
330
339
  ActiveRecord::Schema.define do
331
340
  drop_table :rr_referencing rescue nil
332
341
  drop_table :rr_duplicate rescue nil
342
+ drop_table :table_with_strange_key rescue nil
333
343
  drop_table STRANGE_TABLE rescue nil
334
344
  drop_table :extender_type_check rescue nil
335
345
  drop_table :extender_no_record rescue nil
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyrep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 1
8
+ - 2
9
+ version: 1.1.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Arndt Lehmann
@@ -9,39 +14,51 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-03 00:00:00 +09:00
17
+ date: 2010-05-10 00:00:00 +09:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: activesupport
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 3
30
+ - 5
23
31
  version: 2.3.5
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: activerecord
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 2
43
+ - 3
44
+ - 5
33
45
  version: 2.3.5
34
- version:
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: hoe
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 2
57
+ - 4
58
+ - 0
43
59
  version: 2.4.0
44
- version:
60
+ type: :development
61
+ version_requirements: *id003
45
62
  description: Asynchronous master-master replication of relational databases.
46
63
  email: mail@arndtlehman.com
47
64
  executables:
@@ -219,18 +236,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
236
  requirements:
220
237
  - - ">="
221
238
  - !ruby/object:Gem::Version
239
+ segments:
240
+ - 0
222
241
  version: "0"
223
- version:
224
242
  required_rubygems_version: !ruby/object:Gem::Requirement
225
243
  requirements:
226
244
  - - ">="
227
245
  - !ruby/object:Gem::Version
246
+ segments:
247
+ - 0
228
248
  version: "0"
229
- version:
230
249
  requirements: []
231
250
 
232
251
  rubyforge_project: rubyrep
233
- rubygems_version: 1.3.5
252
+ rubygems_version: 1.3.6
234
253
  signing_key:
235
254
  specification_version: 3
236
255
  summary: Asynchronous master-master replication of relational databases.