schema_transformer 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/TODO +1 -0
- data/lib/schema_transformer/cli.rb +2 -0
- data/lib/schema_transformer/transform.rb +3 -6
- data/lib/schema_transformer/version.rb +1 -1
- data/test/fake_app/config/schema_transformations/articles.json +1 -0
- data/test/fake_app/config/schema_transformations/books.json +1 -1
- data/test/fake_app/config/schema_transformations/users.json +1 -0
- data/test/fake_app/log/schema_transformer.log +26822 -0
- data/test/schema_transformer_test.rb +122 -122
- metadata +9 -6
@@ -13,128 +13,128 @@ class SchemaTransformerTest < Test::Unit::TestCase
|
|
13
13
|
File.delete(@transform_file) if File.exist?(@transform_file)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
16
|
+
def test_books_no_updated_at_no_data
|
17
|
+
@transformer = SchemaTransformer::Transform.new(@base, :batch_size => 10, :stagger => 0)
|
18
|
+
@conn.execute("delete from books")
|
19
|
+
|
20
|
+
@transformer.expects(:gets).with(:table).returns("books")
|
21
|
+
@transformer.expects(:gets).with(:mod).returns("ADD COLUMN active tinyint(1) DEFAULT '0'")
|
22
|
+
|
23
|
+
@transformer.generate
|
24
|
+
@transformer.gather_info("books")
|
25
|
+
|
26
|
+
assert_table_exist("books")
|
27
|
+
assert_table_not_exist("books_st_temp")
|
28
|
+
@transformer.create
|
29
|
+
assert_table_exist("books_st_temp")
|
30
|
+
|
31
|
+
@transformer.final_sync
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_books_no_updated_at_with_data
|
35
|
+
@transformer = SchemaTransformer::Transform.new(@base, :batch_size => 10, :stagger => 0)
|
36
|
+
@transformer.expects(:gets).with(:table).returns("books")
|
37
|
+
@transformer.expects(:gets).with(:mod).returns("ADD COLUMN active tinyint(1) DEFAULT '0'")
|
38
|
+
|
39
|
+
@transformer.generate
|
40
|
+
@transformer.gather_info("books")
|
41
|
+
|
42
|
+
assert_table_exist("books")
|
43
|
+
assert_table_not_exist("books_st_temp")
|
44
|
+
@transformer.create
|
45
|
+
assert_table_exist("books_st_temp")
|
46
|
+
|
47
|
+
@transformer.final_sync
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_find_in_batches
|
51
|
+
i = 0
|
52
|
+
bounds = [[8, 17], [18, 27], [28,35]]
|
53
|
+
@transformer.find_in_batches("users", :start => 8, :batch_size => 10) do |batch|
|
54
|
+
# puts "batch #{batch.inspect}"
|
55
|
+
lower = batch.first
|
56
|
+
upper = batch.last
|
57
|
+
assert_equal bounds[i][0], lower
|
58
|
+
assert_equal bounds[i][1], upper
|
59
|
+
# puts("syncing over records #{lower} to #{upper}...")
|
60
|
+
i += 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_run_sync_black_box
|
65
|
+
@transformer.generate
|
66
|
+
c1 = count("users")
|
67
|
+
SchemaTransformer::Transform.run(:base => @base, :action => ["sync", "users"])
|
68
|
+
c2 = count("users_st_temp")
|
69
|
+
assert_equal c1, c2
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_run_sync_black_box_repeatedly
|
73
|
+
@transformer.generate
|
74
|
+
c1 = count("users")
|
75
|
+
# first run
|
76
|
+
SchemaTransformer::Transform.run(:base => @base, :action => ["sync", "users"])
|
77
|
+
assert_equal c1, count("users_st_temp")
|
78
|
+
@conn.execute("delete from users_st_temp order by id desc limit 10")
|
79
|
+
assert_equal c1, count("users_st_temp") + 10
|
80
|
+
# second run
|
81
|
+
SchemaTransformer::Transform.run(:base => @base, :action => ["sync", "users"])
|
82
|
+
assert_equal c1, count("users_st_temp")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_run_switch_black_box
|
86
|
+
@transformer.generate
|
87
|
+
c1 = count("users")
|
88
|
+
SchemaTransformer::Transform.run(:base => @base, :action => ["sync", "users"])
|
89
|
+
c2 = count("users_st_temp")
|
90
|
+
assert_equal c1, c2
|
91
|
+
@conn.execute("delete from users_st_temp order by id desc limit 10")
|
92
|
+
assert_equal c1, count("users_st_temp") + 10
|
93
|
+
|
94
|
+
# This is what Im testing
|
95
|
+
col1 = User.columns.size
|
96
|
+
SchemaTransformer::Transform.run(:base => @base, :action => ["switch", "users"])
|
97
|
+
User.reset_column_information
|
98
|
+
assert_equal col1 + 1, User.columns.size
|
99
|
+
assert_equal c1, count("users") # this is the new table
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_run_tranformations_white_box
|
103
|
+
@transformer.generate
|
104
|
+
@transformer.gather_info("users")
|
105
|
+
|
106
|
+
assert_table_exist("users")
|
107
|
+
assert_table_not_exist("users_st_temp")
|
108
|
+
@transformer.create
|
109
|
+
assert_table_exist("users_st_temp")
|
110
|
+
|
111
|
+
assert_equal 0, UsersStTemp.count
|
112
|
+
@transformer.sync
|
113
|
+
assert_equal User.count, UsersStTemp.count
|
114
|
+
|
115
|
+
assert_table_exist("users")
|
116
|
+
@transformer.switch
|
117
|
+
assert_table_exist("users_st_trash")
|
118
|
+
assert_table_not_exist("users_st_temp")
|
119
|
+
|
120
|
+
@transformer.cleanup
|
121
|
+
assert_table_exist("users")
|
122
|
+
assert_table_not_exist("users_st_trash")
|
123
|
+
assert_table_not_exist("users_st_temp")
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_generate_transformations
|
127
|
+
assert !File.exist?(@transform_file)
|
128
|
+
@transformer.generate
|
129
|
+
assert File.exist?(@transform_file)
|
130
|
+
data = JSON.parse(IO.read(@transform_file))
|
131
|
+
assert_equal "users", data["table"]
|
132
|
+
assert_match /ADD COLUMN/, data["mod"]
|
133
|
+
|
134
|
+
@transformer.gather_info("users")
|
135
|
+
assert_equal "users", @transformer.instance_variable_get(:@table)
|
136
|
+
assert_match /ADD COLUMN/, @transformer.instance_variable_get(:@mod)
|
137
|
+
end
|
138
138
|
|
139
139
|
def test_analyze_timestamps
|
140
140
|
@analyze = SchemaTransformer::Analyze.new(@base)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_transformer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tung Nguyen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-31 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -29,6 +29,7 @@ extra_rdoc_files:
|
|
29
29
|
- README.markdown
|
30
30
|
files:
|
31
31
|
- bin/schema_transformer
|
32
|
+
- CHANGELOG
|
32
33
|
- gemspec.rb
|
33
34
|
- lib/schema_transformer/analyze.rb
|
34
35
|
- lib/schema_transformer/base.rb
|
@@ -40,7 +41,9 @@ files:
|
|
40
41
|
- Rakefile
|
41
42
|
- README.markdown
|
42
43
|
- test/fake_app/config/database.yml
|
44
|
+
- test/fake_app/config/schema_transformations/articles.json
|
43
45
|
- test/fake_app/config/schema_transformations/books.json
|
46
|
+
- test/fake_app/config/schema_transformations/users.json
|
44
47
|
- test/fake_app/log/schema_transformer.log
|
45
48
|
- test/schema_transformer_test.rb
|
46
49
|
- test/test_helper.rb
|
@@ -75,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
78
|
requirements: []
|
76
79
|
|
77
80
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.
|
81
|
+
rubygems_version: 1.4.2
|
79
82
|
signing_key:
|
80
83
|
specification_version: 3
|
81
84
|
summary: Way is alter database schemas on large tables with little downtime
|