myreplicator 1.1.31 → 1.1.32

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,9 +15,16 @@ class CreateMyreplicatorExports < ActiveRecord::Migration
15
15
  t.text :error
16
16
  t.boolean :active, :default => true
17
17
  t.integer :exporter_pid
18
+ t.integer :transporter_pid
19
+ t.integer :loader_pid
18
20
  t.datetime :export_started_at, :default => nil
19
21
  t.datetime :export_finished_at, :default => nil
22
+ t.datetime :load_started_at, :default => nil
23
+ t.datetime :load_finished_at, :default => nil
24
+ t.datetime :transfer_started_at, :default => nil
25
+ t.datetime :transfer_finished_at, :default => nil
20
26
  t.timestamps
27
+ t.boolean :analyze_constraints, :default => false
21
28
  end
22
29
  add_index :myreplicator_exports, [:source_schema, :destination_schema, :table_name], :unique => true, :name => "unique_index"
23
30
  end
@@ -151,22 +151,21 @@ module Myreplicator
151
151
  Loader.cleanup metadata #Remove incremental file
152
152
  Kernel.p "===== Remove incremental file ====="
153
153
  end
154
+ elsif get_analyze_constraints(ops) > 0 # check for primary key/unique keys violations
155
+ exp = Export.find(metadata.export_id)
156
+ Loader.clear_older_files metadata
157
+ Loader.cleanup metadata
158
+ Kernel.p "===== DROP CURRENT TABLE ====="
159
+ sql = "DROP TABLE IF EXISTS #{options[:db]}.#{options[:destination_schema]}.#{options[:table]} CASCADE;"
160
+ # run the export. The next time loader runs, it will load the file
161
+ exp.export
154
162
  else
155
163
  temp_table = create_temp_table ops
156
164
  options[:table] = temp_table
157
165
  Kernel.p "===== COPY TO TEMP TABLE #{temp_table} ====="
158
166
  vertica_copy options
159
167
  exp = Export.find(metadata.export_id)
160
- if exp.export_type == 'incremental'
161
- options.reverse_merge!(:temp_table => "#{temp_table}")
162
- options[:table] = options[:table_name]
163
- Kernel.p "===== MERGE ====="
164
- vertica_merge options
165
- #drop the temp table
166
- Kernel.p "===== DROP TEMP TABLE ====="
167
- sql = "DROP TABLE IF EXISTS #{options[:db]}.#{options[:destination_schema]}.#{temp_table} CASCADE;"
168
- Myreplicator::DB.exec_sql("vertica",sql)
169
- elsif exp.export_type == 'all'
168
+ if exp.export_type == 'all'
170
169
  options.reverse_merge!(:temp_table => "#{temp_table}")
171
170
  options[:table] = options[:table_name]
172
171
  Kernel.p "===== DROP CURRENT TABLE ====="
@@ -175,6 +174,15 @@ module Myreplicator
175
174
  sql = "ALTER TABLE #{options[:db]}.#{options[:destination_schema]}.#{options[:temp_table]} RENAME TO \"#{options[:table]}\";"
176
175
  Kernel.p sql
177
176
  Myreplicator::DB.exec_sql("vertica",sql)
177
+ elsif exp.export_type == 'incremental'
178
+ options.reverse_merge!(:temp_table => "#{temp_table}")
179
+ options[:table] = options[:table_name]
180
+ Kernel.p "===== MERGE ====="
181
+ vertica_merge options
182
+ #drop the temp table
183
+ Kernel.p "===== DROP TEMP TABLE ====="
184
+ sql = "DROP TABLE IF EXISTS #{options[:db]}.#{options[:destination_schema]}.#{temp_table} CASCADE;"
185
+ Myreplicator::DB.exec_sql("vertica",sql)
178
186
  end
179
187
  end
180
188
  end
@@ -270,7 +278,7 @@ module Myreplicator
270
278
  def get_mysql_keys mysql_schema_simple_form
271
279
  result = []
272
280
  mysql_schema_simple_form.each do |col|
273
- if col["column_key"] == "PRI"
281
+ if col["column_key"] == "PRI" || col["column_key"] == "UNI"
274
282
  result << col["column_name"]
275
283
  end
276
284
  end
@@ -280,7 +288,7 @@ module Myreplicator
280
288
  def get_mysql_none_keys mysql_schema_simple_form
281
289
  result = []
282
290
  mysql_schema_simple_form.each do |col|
283
- if col["column_key"].blank?
291
+ if col["column_key"] != "PRI" && col["column_key"] != "UNI"
284
292
  result << col["column_name"]
285
293
  end
286
294
  end
@@ -413,6 +421,20 @@ module Myreplicator
413
421
  end
414
422
  end
415
423
  end
424
+
425
+ def get_analyze_constraints *args
426
+ options = args.extract_options!
427
+ exp = Export.find(options[:export_id])
428
+ begin
429
+ if exp.analyze_constraints == 1
430
+ sql = "SELECT analyze_constraints('#{options[:vertica_db]}.#{options[:vertica_schema]}.#{options[:table]}');"
431
+ result = Myreplicator::DB.exec_sql("vertica",sql)
432
+ return result.entries.size
433
+ end
434
+ rescue Exception => e
435
+ puts e.message
436
+ end
437
+ end
416
438
  =begin
417
439
  def create_all_tables db
418
440
  tables = Myreplicator::DB.get_tables(db)
@@ -7,7 +7,7 @@ module Myreplicator
7
7
  sql += "#{options[:table]} ("
8
8
 
9
9
  index = 1
10
- primary_set = false
10
+ #primary_set = false
11
11
 
12
12
  options[:columns].each do |column|
13
13
  sql += "\"#{column['column_name']}\" "
@@ -15,22 +15,40 @@ module Myreplicator
15
15
  sql += data_type(column['data_type'], column['column_type'])
16
16
  sql += " "
17
17
 
18
- if column['column_key'] == "PRI"
19
- sql += key(column['column_key']) + " " unless primary_set # set only one primary key
20
- primary_set = true
21
- end
22
-
23
18
  sql += nullable(column['is_nullable'])
24
19
  sql += " "
25
20
 
26
21
  if index < options[:columns].size
27
22
  sql += ", "
28
- else
29
- sql += ");"
30
23
  end
31
24
  index += 1
32
25
  end
33
-
26
+
27
+ # Add primary key
28
+ primary_set = false
29
+ options[:columns].each do |column|
30
+ if column['column_key'] == "PRI"
31
+ if !primary_set
32
+ sql += ", PRIMARY KEY (" + "\"#{column['column_name']}\" "
33
+ else
34
+ sql += ", " + "\"#{column['column_name']}\" "
35
+ end
36
+ primary_set = true
37
+ end
38
+ end
39
+ if primary_set
40
+ sql += ") "
41
+ end
42
+
43
+ # Add unique key
44
+ options[:columns].each do |column|
45
+ if column['column_key'] == "UNI"
46
+ sql += ", UNIQUE (" + "\"#{column['column_name']}\" "
47
+ sql += ") "
48
+ end
49
+ end
50
+
51
+ sql += ");"
34
52
  puts sql
35
53
 
36
54
  return sql
@@ -46,13 +64,13 @@ module Myreplicator
46
64
  end
47
65
 
48
66
  def self.data_type type, col_type
49
- type = VerticaTypes.convert type, col_type
67
+ type = Myreplicator::VerticaTypes.convert type, col_type
50
68
  result = " #{type} "
51
69
  return result
52
70
  end
53
71
 
54
72
  def self.key col_key
55
- col_key = VerticaTypes.convert_key col_key
73
+ col_key = Myreplicator::VerticaTypes.convert_key col_key
56
74
  return "#{col_key} "
57
75
  end
58
76
  end
@@ -1,3 +1,3 @@
1
1
  module Myreplicator
2
- VERSION = "1.1.31"
2
+ VERSION = "1.1.32"
3
3
  end
@@ -8868,3 +8868,5 @@ Connecting to database specified by database.yml
8868
8868
  Connecting to database specified by database.yml
8869
8869
  Connecting to database specified by database.yml
8870
8870
  Connecting to database specified by database.yml
8871
+ Connecting to database specified by database.yml
8872
+ Connecting to database specified by database.yml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: myreplicator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.31
4
+ version: 1.1.32
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-15 00:00:00.000000000 Z
12
+ date: 2013-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -359,7 +359,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
359
359
  version: '0'
360
360
  segments:
361
361
  - 0
362
- hash: 3491987006208937872
362
+ hash: -984056559556813446
363
363
  required_rubygems_version: !ruby/object:Gem::Requirement
364
364
  none: false
365
365
  requirements:
@@ -368,7 +368,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
368
368
  version: '0'
369
369
  segments:
370
370
  - 0
371
- hash: 3491987006208937872
371
+ hash: -984056559556813446
372
372
  requirements: []
373
373
  rubyforge_project:
374
374
  rubygems_version: 1.8.24