myreplicator 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.
Files changed (108) hide show
  1. data/app/models/myreplicator/export.rb +5 -1
  2. data/app/views/myreplicator/exports/_form.html.erb +1 -2
  3. data/db/migrate/20130213211927_create_myreplicator_vertica_exports.rb~ +8 -0
  4. data/lib/configuration.rb~ +23 -0
  5. data/lib/exporter/mysql_exporter.rb~ +6 -0
  6. data/lib/exporter.rb~ +1 -0
  7. data/lib/loader/vertica/source_db.rb~ +30 -0
  8. data/lib/loader/vertica/vertica_loader.rb~ +175 -0
  9. data/lib/loader/vertica/vertica_sql.rb~ +60 -0
  10. data/lib/myreplicator/version.rb +1 -1
  11. data/lib/transporter/parallelizer.rb~ +5 -0
  12. data/test/dummy/app/controllers/test_controller.rb~ +8 -0
  13. data/test/dummy/config/database.yml +15 -13
  14. data/test/dummy/config/database.yml~ +54 -0
  15. data/test/dummy/config/myreplicator.yml +13 -9
  16. data/test/dummy/config/myreplicator.yml~ +23 -0
  17. data/test/dummy/db/development.sqlite3 +0 -0
  18. data/test/dummy/db/production.sqlite3 +0 -0
  19. data/test/dummy/log/development.log +2303 -2973
  20. data/test/dummy/tmp/cache/assets/{E76/790/sprockets%2Fdaf734b1fcabd6ca66b333ad0f0fdbf0 → C2E/D00/sprockets%2F667019818351638709494c01bddb5f68} +0 -0
  21. data/test/dummy/tmp/cache/assets/{D36/320/sprockets%2Fc662bfc4a04da6af6804481495bfa108 → C7F/970/sprockets%2F03f29761343991c6cd347bbd2184d560} +0 -0
  22. data/test/dummy/tmp/cache/assets/{D3C/EF0/sprockets%2F3b257fcef04542cf19da19f2f1c62761 → C83/BA0/sprockets%2F701a6339a558e5af28f150c161f43878} +0 -0
  23. data/test/dummy/tmp/cache/assets/C8B/150/sprockets%2F37163d05e55ad0b31b602ac5330412e3 +0 -0
  24. data/test/dummy/tmp/cache/assets/C98/250/sprockets%2F4af1200380a1a28632393d61a50f66cf +0 -0
  25. data/test/dummy/tmp/cache/assets/{DCB/970/sprockets%2Fffc91d7a12aab685d3484b0bfd5c824e → CBF/800/sprockets%2F00142a873933017aaa760316d0e2dcea} +0 -0
  26. data/test/dummy/tmp/cache/assets/CC5/870/sprockets%2F4e91734f6f02a779d39f8272f627dd24 +0 -0
  27. data/test/dummy/tmp/cache/assets/{DEC/900/sprockets%2Fe8ff7b68993fbee4dc864f1d5c373fe1 → CC6/7C0/sprockets%2F881234d3e954859c46bf49bb21f72d79} +0 -0
  28. data/test/dummy/tmp/cache/assets/CC9/1C0/sprockets%2Fa7a2b5a56180e1b21f783a9b30c03167 +0 -0
  29. data/test/dummy/tmp/cache/assets/CCC/A20/sprockets%2F6f3c2f4ae1f4d0219804a257410ce405 +0 -0
  30. data/test/dummy/tmp/cache/assets/{D82/050/sprockets%2F3dfff61e335fbf562b9a98f8742d4b90 → CD5/B90/sprockets%2Fc999d13a6a21113981c0d820e8043bdf} +0 -0
  31. data/test/dummy/tmp/cache/assets/{D06/850/sprockets%2Ff836842d203808ac78fc0cf30b4b0c72 → CD7/030/sprockets%2F9ba4859590582b8b72a650b2b00b6cd2} +0 -0
  32. data/test/dummy/tmp/cache/assets/CDE/780/sprockets%2F6982ce9303b4e69c26f2a1a246a180e7 +0 -0
  33. data/test/dummy/tmp/cache/assets/CE0/180/sprockets%2F8b9055a1b853d0a56ec2e94f79f37010 +0 -0
  34. data/test/dummy/tmp/cache/assets/{D4B/090/sprockets%2F3cfd81b97448f6103d74d0a7b197c7ff → CE5/670/sprockets%2Fe9e4122f1706626a21da6f8457f088ce} +0 -0
  35. data/test/dummy/tmp/cache/assets/D00/9B0/sprockets%2F2bc203eb4802b393a589093debb65c04 +0 -0
  36. data/test/dummy/tmp/cache/assets/D00/A90/sprockets%2F3fa6fcf2205c530208681446cbc36bd3 +0 -0
  37. data/test/dummy/tmp/cache/assets/{CBA/4C0/sprockets%2F54386f4be21f77c788524fa5b11d6850 → D06/5D0/sprockets%2F91850a20c0ddfa3d8814ca91870fb715} +0 -0
  38. data/test/dummy/tmp/cache/assets/D0B/B30/sprockets%2F55059589d999952597c5c86e5becaf4e +0 -0
  39. data/test/dummy/tmp/cache/assets/D0D/DA0/sprockets%2F34d6b075a16a5a58ff4050988d8bd4b0 +0 -0
  40. data/test/dummy/tmp/cache/assets/{D95/F60/sprockets%2F83fff218aa39ccc49352ff3f2a1a06b1 → D14/3A0/sprockets%2Fe59a60053fada52e8185281b4ee887a5} +0 -0
  41. data/test/dummy/tmp/cache/assets/D1B/D40/sprockets%2F7cc2142509e95f7168a82a652d8d9dea +0 -0
  42. data/test/dummy/tmp/cache/assets/D1D/700/sprockets%2Ffe9cb975216709e2881c74b3d1d3e35f +0 -0
  43. data/test/dummy/tmp/cache/assets/{DDC/CD0/sprockets%2Fb4b0d7dc6d4a0bcc2e5600bf5b15d2a1 → D20/A20/sprockets%2Fb503e93ff1966dd94d03e79f291d75c1} +0 -0
  44. data/test/dummy/tmp/cache/assets/D21/D40/sprockets%2Fe5a6e691816fa904f414ea89a6f0586f +0 -0
  45. data/test/dummy/tmp/cache/assets/D26/A70/sprockets%2F63d95ae156df465783cd78e95069b2cc +0 -0
  46. data/test/dummy/tmp/cache/assets/D2B/E60/sprockets%2F8615ecf645b553c959544af9ff8438da +0 -0
  47. data/test/dummy/tmp/cache/assets/D34/F70/sprockets%2Fb93de9992473bee94e369fe3198c529c +0 -0
  48. data/test/dummy/tmp/cache/assets/{D7F/D00/sprockets%2F10b0bae19e1ece503f23252ea80b5cf1 → D36/4D0/sprockets%2Fc050a64b5a803a638e155d05dcfe577d} +0 -0
  49. data/test/dummy/tmp/cache/assets/D3E/310/sprockets%2F333a2a7535eac766267ebb7d5c2ab489 +0 -0
  50. data/test/dummy/tmp/cache/assets/D3F/A00/sprockets%2F7a803404e1f60b8d672d763cb9ba8af5 +0 -0
  51. data/test/dummy/tmp/cache/assets/{C6A/110/sprockets%2F8578e16b59362054b8e3f580e45b7589 → D46/AA0/sprockets%2Ffcd7c5d9d04071ee45fe6a4865d53621} +0 -0
  52. data/test/dummy/tmp/cache/assets/{D3B/060/sprockets%2F049a04139e96acd00a20e6f88b538fbf → D50/570/sprockets%2F6c1d20a178f66e798958d1e437fdb5da} +0 -0
  53. data/test/dummy/tmp/cache/assets/D57/420/sprockets%2F937ea7429c536578ec7b688dee0cdf41 +0 -0
  54. data/test/dummy/tmp/cache/assets/{D74/F80/sprockets%2F9409bb9efe926f0130490fdca7c5ea73 → D69/6F0/sprockets%2F94fff7f55bc4c300b25f3f9361ac1a52} +0 -0
  55. data/test/dummy/tmp/cache/assets/{CA5/3A0/sprockets%2F24338fe3c579f79b67d198549674d48a → D74/DF0/sprockets%2F2db9c6478b8a29583ad20780ebeb4e4d} +0 -0
  56. data/test/dummy/tmp/cache/assets/D7C/E30/sprockets%2F0ba91e21bddfc7e1de102b22183e1e11 +0 -0
  57. data/test/dummy/tmp/cache/assets/D80/780/sprockets%2Fbe257c7a5788c2dfd272922fa399d7db +0 -0
  58. data/test/dummy/tmp/cache/assets/D85/9C0/sprockets%2Ffd0ec212bac1538379d0cc03b1e3bb84 +0 -0
  59. data/test/dummy/tmp/cache/assets/{F08/560/sprockets%2F5ab2cf5fb087fdef95cfe9fe6fabf9df → D86/D00/sprockets%2Fa4f32b4234d0d1bba272cd75e0d48e1d} +0 -0
  60. data/test/dummy/tmp/cache/assets/{CE8/8A0/sprockets%2F2ed5b94e22ac7a692e562c767944093a → D8B/B60/sprockets%2Faa32227c440a378ccd21218eefeb80bf} +0 -0
  61. data/test/dummy/tmp/cache/assets/{DA2/580/sprockets%2Fc8fe3cbc8b57ba600fe4fc3317e70875 → D99/6D0/sprockets%2Fa5e4558ff6808ad03b0f09e03fb4bfb3} +0 -0
  62. data/test/dummy/tmp/cache/assets/D9F/0B0/sprockets%2Faf0d2e69be3a6b56a76c20bf14d9e468 +0 -0
  63. data/test/dummy/tmp/cache/assets/DA7/E50/sprockets%2F47bf4f2b4afeac775e6d572a83343fb8 +0 -0
  64. data/test/dummy/tmp/cache/assets/DA8/910/sprockets%2Fab5775c4a837bd4d97ac394d473cda9b +0 -0
  65. data/test/dummy/tmp/cache/assets/{CC5/C90/sprockets%2F7a318379ad738c7f47aa44862e58e339 → DAA/060/sprockets%2Facc0d22b9d28123cc1c84d0db630d0ba} +0 -0
  66. data/test/dummy/tmp/cache/assets/DB0/8E0/sprockets%2F299733fb380a50e6fccf9fb3cd666eb9 +0 -0
  67. data/test/dummy/tmp/cache/assets/DD2/490/sprockets%2Fa452ee92a092bc2feabc572cce49896d +0 -0
  68. data/test/dummy/tmp/cache/assets/{D45/7C0/sprockets%2F7935d1666c0f916efdb4e44d10ce087c → DE1/320/sprockets%2F9f44ecdec8ceeef70871e15d88a448b1} +0 -0
  69. data/test/dummy/tmp/cache/assets/{C36/4A0/sprockets%2F545908d60919384cf74dd2658832a349 → DF8/5D0/sprockets%2Fb815ed34d61cfed96222daa3bfd1d84d} +0 -0
  70. data/test/dummy/tmp/cache/assets/E16/C70/sprockets%2F21ad93418ff75ceac86c7a85dfffe8f6 +0 -0
  71. data/test/dummy/tmp/cache/assets/E1C/AC0/sprockets%2Faff544a3a34eb7dab7d46b0cb2cd7b70 +0 -0
  72. data/test/dummy/tmp/cache/assets/{DF1/DA0/sprockets%2Fa761efb1e3e1c1cadd288b51b0ad68c8 → E2E/1F0/sprockets%2Fa24e3d7bc5ae4d40adf6f1b8fe94e7c3} +0 -0
  73. data/test/dummy/tmp/cache/assets/{C53/E40/sprockets%2Ff3eadad8548570531548a50069659241 → E35/4F0/sprockets%2F96b1cdf8db6a1c8eb8abcce05958ae74} +0 -0
  74. data/test/dummy/tmp/cache/assets/{D42/4D0/sprockets%2F11ab8d065b2f678ae997dac015972d7a → E3B/400/sprockets%2F5b0ce0efc07fdef9786e786cad5b84ba} +0 -0
  75. data/test/dummy/tmp/cache/assets/E57/E40/sprockets%2Ff3c7dda392bb05e4ffac29c5da6ffc11 +0 -0
  76. data/test/fixtures/myreplicator/vertica_exports.yml +11 -0
  77. metadata +253 -233
  78. data/test/dummy/load_exceptions.log +0 -1
  79. data/test/dummy/tmp/cache/assets/BE9/F00/sprockets%2F71b85f682226652265224563a92d012c +0 -0
  80. data/test/dummy/tmp/cache/assets/C55/470/sprockets%2F7493d2001e124f4fa090fb8664898327 +0 -0
  81. data/test/dummy/tmp/cache/assets/C92/350/sprockets%2F147976739b994ea0e5833048aebc5447 +0 -0
  82. data/test/dummy/tmp/cache/assets/CB0/AD0/sprockets%2F836537535ea3b4aa2d1b6789d11d4926 +0 -0
  83. data/test/dummy/tmp/cache/assets/CC3/5C0/sprockets%2Fe1d5f04ad1787592629a99b22f8c5567 +0 -0
  84. data/test/dummy/tmp/cache/assets/CCF/EA0/sprockets%2F5058706a1b7e72b34903fb00a7a0fc39 +0 -0
  85. data/test/dummy/tmp/cache/assets/CE1/370/sprockets%2Ff1a3b204bb618eba1846687099f640f7 +0 -0
  86. data/test/dummy/tmp/cache/assets/CE2/AD0/sprockets%2F51321b84e79ca92b09e4e6d0680b4f56 +0 -0
  87. data/test/dummy/tmp/cache/assets/CE8/5A0/sprockets%2F7367c62ac3a27578b50b924e2fe8b746 +0 -0
  88. data/test/dummy/tmp/cache/assets/CFB/530/sprockets%2F14190013244760ce4b30b2dbff73a8ef +0 -0
  89. data/test/dummy/tmp/cache/assets/D13/830/sprockets%2Fe39b0c5cb9a9084e314de7ae97026562 +0 -0
  90. data/test/dummy/tmp/cache/assets/D1B/360/sprockets%2Fe0e9b41868bf8a806f190df71512f83e +0 -0
  91. data/test/dummy/tmp/cache/assets/D1B/970/sprockets%2F0e1455d479dbf72d92cd23f28ed75842 +0 -0
  92. data/test/dummy/tmp/cache/assets/D43/100/sprockets%2Fe10493f07854d6da3a883ddd4e911c9a +0 -0
  93. data/test/dummy/tmp/cache/assets/D44/470/sprockets%2F9538d7d811d21efe47400772be4d4efb +0 -0
  94. data/test/dummy/tmp/cache/assets/D4F/E30/sprockets%2F7d4c622d36585e70d9f4ce6d83ae4a58 +0 -0
  95. data/test/dummy/tmp/cache/assets/D51/2D0/sprockets%2F7457c2dac213b0415022ac55fab5cb9a +0 -0
  96. data/test/dummy/tmp/cache/assets/D5B/5C0/sprockets%2F4e0d53616225ee8dbd80d06d3fa20ca2 +0 -0
  97. data/test/dummy/tmp/cache/assets/D6B/F60/sprockets%2Ff897ac3f53a8b248abb51abb812875c1 +0 -0
  98. data/test/dummy/tmp/cache/assets/D6D/7A0/sprockets%2Fece60a47c5639c873cfe144140cd72eb +0 -0
  99. data/test/dummy/tmp/cache/assets/D82/D30/sprockets%2Fcdd32b3338793e35a78f58efad64be96 +0 -0
  100. data/test/dummy/tmp/cache/assets/D91/D90/sprockets%2F60b95ba2a84d6c720cd412c9e0e44afd +0 -0
  101. data/test/dummy/tmp/cache/assets/D98/360/sprockets%2Fc9bf8e838b5afed8e8479876a9419a5e +0 -0
  102. data/test/dummy/tmp/cache/assets/D9B/790/sprockets%2F8182e1ebcce8ca3f3d30e26bd931654f +0 -0
  103. data/test/dummy/tmp/cache/assets/D9C/E60/sprockets%2F788bb2bebc8ed41035ca7cc50c68e553 +0 -0
  104. data/test/dummy/tmp/cache/assets/DBF/E30/sprockets%2Fd5e3199429abe1e1ce22c233ddbaec25 +0 -0
  105. data/test/dummy/tmp/cache/assets/DC5/EA0/sprockets%2Fc3821d00ce6bea8ebf265d439d14b6be +0 -0
  106. data/test/dummy/tmp/cache/assets/DCA/5F0/sprockets%2F15be5a98423136a3c8dcf7dff1ad45ad +0 -0
  107. data/test/dummy/tmp/cache/assets/E2D/2C0/sprockets%2Ff0c2e561abf62fabc69462c2cfeef3d8 +0 -0
  108. data/test/dummy/tmp/pids/server.pid +0 -1
@@ -39,7 +39,11 @@ module Myreplicator
39
39
  ActiveRecord::Base.verify_active_connections!
40
40
  ActiveRecord::Base.connection.reconnect!
41
41
  export_obj = Export.find(export_id)
42
- export_obj.export
42
+
43
+ if export_obj.active
44
+ export_obj.export
45
+ end
46
+
43
47
  end
44
48
 
45
49
  ##
@@ -232,9 +232,8 @@ function editInit(){
232
232
  }
233
233
  }
234
234
  CronUI.translate();
235
- <% if @export.export_to != 'vertica' %>
236
235
  $("#export_table_name").select2("val","<%= @export.table_name %>")
237
- <% else %>
236
+ <% if @export.export_to == 'vertica' %>
238
237
  $("#export_destination_schema").select2("destroy").before('<input type="text" id="export_destination_schema" name="export[destination_schema]" value="<%= @export.destination_schema %>"/>').remove();
239
238
  <% end %>
240
239
  }
@@ -0,0 +1,8 @@
1
+ class CreateMyreplicatorVerticaExports < ActiveRecord::Migration
2
+ def change
3
+ create_table :myreplicator_vertica_exports do |t|
4
+
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module Myreplicator
2
+ ##
3
+ # Configuration class for avoiding load the yml file everytime and cleaner config settings
4
+ ##
5
+ class Configuration
6
+ class << self; attr_accessor :tmp_path, :mysqldump, :mysql end
7
+
8
+ # yml = YAML.load(File.read("#{Myreplicator.app_root}/config/myreplicator.yml"))
9
+ # Kernel.p yml["myreplicator"]
10
+
11
+ # @@tmp_path = yml["myreplicator"]["tmp_path"]
12
+ # @@mysql = yml["myreplicator"]["mysql"]
13
+ # @@mysqldump = yml["myreplicator"]["mysqldump"]
14
+ end
15
+
16
+ def self.config(&block)
17
+ @@config ||= Myreplicator::Configuration.new
18
+
19
+ yield @@config if block
20
+
21
+ return @@config
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ module Myreplicator
2
+ class MysqlExporter
3
+
4
+
5
+ end
6
+ end
data/lib/exporter.rb~ ADDED
@@ -0,0 +1 @@
1
+ require ""
@@ -0,0 +1,30 @@
1
+ module VerticaUtils
2
+ class SourceDb < ActiveRecord::Base
3
+
4
+ def self.connect db
5
+ establish_connection(ActiveRecord::Base.configurations[db])
6
+ end
7
+
8
+ ##
9
+ # Returns tables as an Array
10
+ # releases the connection
11
+ ##
12
+ def self.get_tables(db)
13
+ tables = []
14
+ begin
15
+ self.connect(db)
16
+ tables = self.connection.tables
17
+ self.connection_pool.release_connection
18
+ rescue Mysql2::Error => e
19
+ puts "Connection to #{db} Failed!"
20
+ puts e.message
21
+ end
22
+ return tables
23
+ end
24
+
25
+ def self.exec_sql source_db,sql
26
+ SourceDb.connect(source_db)
27
+ return SourceDb.connection.execute(sql)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,175 @@
1
+ require 'vertica_utils/types'
2
+ require 'vertica_utils/source_db'
3
+ require 'vertica_utils/vertica_sql'
4
+
5
+ module VerticaUtils
6
+ class VerticaLoader
7
+ class << self
8
+ def create_table *args
9
+ options = args.extract_options!
10
+ columns = []
11
+ table_definition(options).each(:as => :hash) do |row|
12
+ columns << row
13
+ end
14
+ options[:columns] = columns
15
+
16
+ sql = VerticaUtils::VerticaSql.create_table_stmt options
17
+ end
18
+
19
+ def create_all_tables db
20
+ tables = VerticaUtils::SourceDb.get_tables(db)
21
+ sqls = {}
22
+ tables.each do |table|
23
+ puts "Creating #{db}.#{table}"
24
+ sql = "DROP TABLE IF EXISTS #{db}.#{table} CASCADE;"
25
+ VerticaDb::Base.connection.execute sql
26
+ sql = VerticaUtils::VerticaLoader.create_table(:vertica_db => "bidw",
27
+ :vertica_table => table,
28
+ :vertica_schema => db,
29
+ :table => table,
30
+ :db => db)
31
+ sqls["#{table}"] = sql
32
+ VerticaDb::Base.connection.execute sql
33
+ end
34
+ end
35
+
36
+ def prepare_options *args
37
+ options = args.extract_options!
38
+ options.reverse_merge!(
39
+ :host => "sfo-load-dw-01",
40
+ :user => "vertica",
41
+ :pass => "test",
42
+ :db => "bidw",
43
+ :schema => "test",
44
+ :table => "",
45
+ :file => "",
46
+ :delimiter => "\t",
47
+ :null_value => "NULL",
48
+ :enclosed => ""
49
+ )
50
+ return options
51
+ end
52
+
53
+ # VerticaUtils::VerticaLoader.load_to_vertica({:schema => "king", :table => "category_overview_data", :file => "tmp/vertica/category_overview_data.tsv", :null_value => "NULL"})
54
+ def load_to_vertica *args
55
+ list_of_nulls = ["0000-00-00"]
56
+ options = args.extract_options!
57
+ prepared_options = prepare_options options
58
+ Kernel.p prepared_options[:file]
59
+ if prepared_options[:file].blank?
60
+ raise "No input file"
61
+ end
62
+
63
+ begin
64
+ process_file(:file => prepared_options[:file], :list_of_nulls => list_of_nulls, :null_value => prepared_options[:null_value])
65
+ cmd = get_vsql_command(prepared_options)
66
+ Kernel.p cmd
67
+ system(cmd)
68
+ rescue Exception => e
69
+ raise e.message
70
+ end
71
+ end
72
+
73
+ def get_vsql_command prepared_options
74
+ file_extension = prepared_options[:file].split('.').last
75
+ file_handler = ""
76
+ file_handler = "GZIP" if file_extension == "gz"
77
+ sql = "COPY #{prepared_options[:schema]}.#{prepared_options[:table]} FROM LOCAL \'#{prepared_options[:file]}\' #{file_handler} DELIMITER E\'#{prepared_options[:delimiter]}\' NULL as \'#{prepared_options[:null_value]}\' ENCLOSED BY \'#{prepared_options[:enclosed]}\' EXCEPTIONS 'tmp/vertica/load_exceptions.log';"
78
+ cmd = "/opt/vertica/bin/vsql -h #{prepared_options[:host]} -U #{prepared_options[:user]} -w #{prepared_options[:pass]} -d #{prepared_options[:db]} -c \"#{sql}\""
79
+ return cmd
80
+ end
81
+
82
+ def process_file *args
83
+ ### replace the null values in the input file
84
+ options = args.extract_options!
85
+ options[:file].blank? ? return : file = options[:file]
86
+ options[:list_of_nulls].blank? ? list_of_nulls = [] : list_of_nulls = options[:list_of_nulls]
87
+ options[:null_value].blank? ? null_value = "NULL" : null_value = options[:null_value]
88
+
89
+ file_extension = file.split('.').last
90
+ case file_extension
91
+ when "tsv", "csv"
92
+ process_flat_file(file, list_of_nulls, null_value)
93
+ when "gz"
94
+ process_gzip_file(file, list_of_nulls, null_value)
95
+ else
96
+ raise "Un supported file extension"
97
+ end
98
+ end
99
+
100
+ def replace_null(file, list_of_nulls, null_value = "NULL")
101
+ list_of_nulls.each do | value|
102
+ # special case for NULL MySQL datetime/date type but the column is defined NOT NULL
103
+ if value == '0000-00-00'
104
+ cmd1 = "sed -i 's/#{value}/1900-01-01/g' #{file}"
105
+ Kernel.p cmd1
106
+ system(cmd1)
107
+ else
108
+ cmd1 = "sed -i 's/#{value}/#{null_value}/g' #{file}"
109
+ Kernel.p cmd1
110
+ system(cmd1)
111
+ end
112
+ end
113
+ end
114
+
115
+ def process_flat_file file, list_of_nulls, null_value
116
+ # sed
117
+ replace_null(file, list_of_nulls, null_value)
118
+ end
119
+
120
+ def process_gzip_file file, list_of_nulls, null_value
121
+ # unzip
122
+ cmd = "gunzip -f #{file} -c > tmp/temp.txt"
123
+ system(cmd)
124
+ # sed
125
+ replace_null(file, list_of_nulls, null_value)
126
+ # zip
127
+ cmd2 = "gzip tmp/temp.txt -c > #{file}"
128
+ system(cmd2)
129
+ end
130
+
131
+ def get_table_columns * args
132
+ options = args.extract_options!
133
+ if options[:host].blank? or options[:user].blank? or options[:pass].blank? or options[:db].blank? or options[:schema].blank? or options[:table].blank?
134
+ raise "Unspecified host, user, pass, db, schema or table"
135
+ end
136
+ result = {}
137
+ count = 0
138
+ begin
139
+ cmd = "/opt/vertica/bin/vsql -h #{options[:host]} -U #{options[:user]} -w #{options[:pass]} -d #{options[:db]} -c '\\d #{options[:schema]}.#{options[:table]}';"
140
+ puts cmd
141
+ output = `#{cmd}`
142
+ lines = output.split("\n")
143
+ data = lines[3..lines.size-2]
144
+ data.each do |item|
145
+ count += 1
146
+ column_name = item.split("|")[2].lstrip!.rstrip!
147
+ column_type = item.split("|")[3].lstrip!.rstrip!
148
+ puts column_name + " " + column_type
149
+ result[count] = {column_name => column_type}
150
+ end
151
+ rescue Exception => e
152
+ raise e.message
153
+ end
154
+ return result
155
+ end
156
+
157
+ def ssh_connection options
158
+ ssh = Net::SSH.start(options[:ssh_host], options[:ssh_user], :password => options[:ssh_password])
159
+ end
160
+
161
+ def table_definition options
162
+ sql = "SELECT table_schema, table_name, column_name, is_nullable, data_type, column_type, column_key "
163
+ sql += "FROM INFORMATION_SCHEMA.COLUMNS where table_name = '#{options[:table]}' "
164
+ sql += "and table_schema = '#{options[:db]}';"
165
+
166
+ puts sql
167
+
168
+ desc = SourceDb.exec_sql(options[:db], sql)
169
+
170
+ return desc
171
+ end
172
+ end
173
+ end
174
+ end
175
+
@@ -0,0 +1,60 @@
1
+ module VerticaUtils
2
+ class VerticaSql
3
+
4
+ def self.create_table_stmt options
5
+
6
+ sql = "CREATE TABLE IF NOT EXISTS #{options[:vertica_db]}."
7
+ sql += "#{options[:vertica_schema]}." if options[:vertica_schema]
8
+ sql += "#{options[:table]} ("
9
+
10
+ index = 1
11
+ primary_set = false
12
+
13
+ options[:columns].each do |column|
14
+ sql += "\"#{column['column_name']}\" "
15
+
16
+ sql += data_type(column['data_type'], column['column_type'])
17
+ sql += " "
18
+
19
+ if column['column_key'] == "PRI"
20
+ sql += key(column['column_key']) + " " unless primary_set # set only one primary key
21
+ primary_set = true
22
+ end
23
+
24
+ sql += nullable(column['is_nullable'])
25
+ sql += " "
26
+
27
+ if index < options[:columns].size
28
+ sql += ", "
29
+ else
30
+ sql += ");"
31
+ end
32
+ index += 1
33
+ end
34
+
35
+ puts sql
36
+
37
+ return sql
38
+ end
39
+
40
+ def self.nullable is_nullable
41
+ if is_nullable == "YES"
42
+ return "NULL"
43
+ elsif is_nullable == "NO"
44
+ return "NOT NULL"
45
+ end
46
+ return ""
47
+ end
48
+
49
+ def self.data_type type, col_type
50
+ type = VerticaTypes.convert type, col_type
51
+ result = " #{type} "
52
+ return result
53
+ end
54
+
55
+ def self.key col_key
56
+ col_key = VerticaTypes.convert_key col_key
57
+ return "#{col_key} "
58
+ end
59
+ end
60
+ end
@@ -1,3 +1,3 @@
1
1
  module Myreplicator
2
- VERSION = "1.1.1"
2
+ VERSION = "1.1.2"
3
3
  end
@@ -0,0 +1,5 @@
1
+ module Myreplicator
2
+ class Parallelizer
3
+
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class TestController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ def index
5
+
6
+ end
7
+
8
+ end
@@ -1,20 +1,13 @@
1
1
  # SQLite version 3.x
2
- # gem install sqlite3
2
+ # gem install sqlite3
3
3
  #
4
- # Ensure the SQLite 3 gem is defined in your Gemfile
5
- # gem 'sqlite3'
6
- vertica:
7
- adapter: vertica
8
- database: test
9
- username: jferris
10
- password: okl
11
- host: ec2-23-22-175-247.compute-1.amazonaws.com
12
- vsql: /Users/lnguyen/opt/vertica/bin/vsql
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
13
6
  development:
14
7
  adapter: mysql2
15
8
  database: myreplicator
16
- username:
17
- password:
9
+ username: sas
10
+ password: sasan
18
11
  host: 127.0.0.1
19
12
 
20
13
  okl_dev:
@@ -23,6 +16,7 @@ okl_dev:
23
16
  username: sas
24
17
  password: sasan
25
18
  host: 127.0.0.1
19
+ myreplicator: true
26
20
 
27
21
  okl_test:
28
22
  adapter: mysql2
@@ -30,6 +24,7 @@ okl_test:
30
24
  username: xbox
31
25
  password: okl
32
26
  host: 54.243.176.8
27
+ myreplicator: true
33
28
 
34
29
  myreplicator:
35
30
  adapter: mysql2
@@ -38,6 +33,13 @@ myreplicator:
38
33
  password: sasan
39
34
  host: 127.0.0.1
40
35
 
36
+ vertica:
37
+ adapter: vertica
38
+ host: ec2-23-22-175-247.compute-1.amazonaws.com
39
+ username: jferris
40
+ password: okl
41
+ database: test
42
+
41
43
  # Warning: The database defined as "test" will be erased and
42
44
  # re-generated from your development database when you run "rake".
43
45
  # Do not set this db to the same as development or production.
@@ -51,4 +53,4 @@ production:
51
53
  adapter: sqlite3
52
54
  database: db/production.sqlite3
53
55
  pool: 5
54
- timeout: 5000
56
+ timeout: 5000
@@ -0,0 +1,54 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ #
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
6
+ development:
7
+ adapter: mysql2
8
+ database: myreplicator
9
+ username: sas
10
+ password: sasan
11
+ host: 127.0.0.1
12
+
13
+ okl_dev:
14
+ adapter: mysql2
15
+ database: okl_dev
16
+ username: sas
17
+ password: sasan
18
+ host: 127.0.0.1
19
+
20
+ okl_test:
21
+ adapter: mysql2
22
+ database: okl_test
23
+ username: xbox
24
+ password: okl
25
+ host: 54.243.176.8
26
+
27
+ myreplicator:
28
+ adapter: mysql2
29
+ database: myreplicator
30
+ username: sas
31
+ password: sasan
32
+ host: 127.0.0.1
33
+
34
+ vertica:
35
+ adapter: vertica
36
+ host: ec2-23-22-175-247.compute-1.amazonaws.com
37
+ username: jferris
38
+ password: okl
39
+ database: test
40
+
41
+ # Warning: The database defined as "test" will be erased and
42
+ # re-generated from your development database when you run "rake".
43
+ # Do not set this db to the same as development or production.
44
+ test:
45
+ adapter: sqlite3
46
+ database: db/test.sqlite3
47
+ pool: 5
48
+ timeout: 5000
49
+
50
+ production:
51
+ adapter: sqlite3
52
+ database: db/production.sqlite3
53
+ pool: 5
54
+ timeout: 5000
@@ -1,24 +1,28 @@
1
1
  myreplicator:
2
2
  tmp_path:
3
- mysqldump: /usr/local/mysql/bin/mysqldump
4
- mysqlimport: /usr/local/mysql/bin/mysqlimport
3
+ mysqldump: mysqldump
4
+ mysqlimport: mysqlimport
5
5
  mysql: mysql
6
6
  outfile_location: /tmp/myreplicator
7
7
  escape_by: '"'
8
8
  terminate_by: '\t'
9
9
  enclosed_by: '"'
10
10
  lines_terminate_by: '\n'
11
- login_redirect: /
12
11
 
13
- okl_dev:
14
12
  ssh_host: localhost
15
- ssh_user: lnguyen
16
- ssh_password: 'H!13lPa:'
17
- ssh_tmp_dir: /Users/lnguyen/tmp
13
+ ssh_user: guest
14
+ ssh_password: sasanguest
15
+ ssh_tmp_dir: /home/guest/tmp
18
16
 
17
+ okl_dev:
18
+ ssh_host: localhost
19
+ ssh_user: guest
20
+ ssh_password: sasanguest
21
+ ssh_tmp_dir: /home/guest/tmp
22
+
19
23
  okl_test:
20
24
  ssh_host: 54.243.176.8
21
25
  ssh_user: ubuntu
22
26
  ssh_db_host: 127.0.0.1
23
- ssh_private_key: ~/oklbi-team.pem
24
- ssh_tmp_dir: /tmp
27
+ ssh_private_key: ~/.ssh/oklbi-team.pem
28
+ ssh_tmp_dir: /home/ubuntu/myreplicator_tmp
@@ -0,0 +1,23 @@
1
+ myreplicator:
2
+ tmp_path:
3
+ mysqldump: mysqldump
4
+ mysqlimport: mysqlimport
5
+ mysql: mysql
6
+ outfile_location: /tmp/myreplicator
7
+ escape_by: '"'
8
+ terminate_by: '\t'
9
+ enclosed_by: '"'
10
+ lines_terminate_by: '\n'
11
+
12
+ okl_dev:
13
+ ssh_host: localhost
14
+ ssh_user: guest
15
+ ssh_password: sasanguest
16
+ ssh_tmp_dir: /home/guest/tmp
17
+
18
+ okl_test:
19
+ ssh_host: 54.243.176.8
20
+ ssh_user: ubuntu
21
+ ssh_db_host: 127.0.0.1
22
+ ssh_private_key: ~/.ssh/oklbi-team.pem
23
+ ssh_tmp_dir: /home/ubuntu/myreplicator_tmp
Binary file
File without changes