percona_migrator 0.1.0.rc.2 → 0.1.0.rc.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/active_record/connection_adapters/percona_adapter.rb +22 -0
- data/lib/percona_migrator/alter_argument.rb +9 -1
- data/lib/percona_migrator/cli_generator.rb +17 -0
- data/lib/percona_migrator/railtie.rb +12 -0
- data/lib/percona_migrator/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fe6a75f0b0d56a2d50aab13a8a633347e6aaa3a
|
4
|
+
data.tar.gz: 961dccefa1160b2da61286331390161f6a5a0f65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 123bdaea1db477acf87c5fbd4f6a48a8a9466efa21fb993f70fc701323d651ebd87a26c595dedebd9b71b01bb8a06fdd8631e146d0c34c2b1a5fa6e6e643bf18
|
7
|
+
data.tar.gz: 2b84763f317b1f980dc0604bbf44417034b95ae5331ae5bb0636deee98dabdc8f956c9b6090b45922fae15dc27d39d1f327fc2946842a7d4cc8f56ee0c281605
|
data/CHANGELOG.md
CHANGED
@@ -5,9 +5,19 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
5
5
|
Please follow the format in [Keep a Changelog](http://keepachangelog.com/)
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
|
+
|
9
|
+
## [0.1.0.rc.3] - 2016-03-10
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Support #execute. Allows to execute raw SQL from the migration
|
14
|
+
|
15
|
+
## [0.1.0.rc.2] - 2016-03-09
|
16
|
+
|
8
17
|
### Added
|
9
18
|
|
10
19
|
- VERBOSE env var in tests. Specially useful for integration tests.
|
20
|
+
- Fix #create_table migration method. Now it does create the table.
|
11
21
|
|
12
22
|
### Changed
|
13
23
|
|
@@ -130,6 +130,20 @@ module ActiveRecord
|
|
130
130
|
true
|
131
131
|
end
|
132
132
|
|
133
|
+
# Executes the passed statement through pt-online-schema-change if it's
|
134
|
+
# an alter statement, or through the mysql adapter otherwise
|
135
|
+
#
|
136
|
+
# @param sql [String]
|
137
|
+
# @param name [String]
|
138
|
+
def percona_execute(sql, name)
|
139
|
+
if alter_statement?(sql)
|
140
|
+
command = cli_generator.parse_statement(sql)
|
141
|
+
runner.execute(command)
|
142
|
+
else
|
143
|
+
mysql_adapter.execute(sql, name)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
133
147
|
# This abstract method leaves up to the connection adapter freeing the
|
134
148
|
# result, if it needs to. Check out: https://github.com/rails/rails/blob/330c6af05c8b188eb072afa56c07d5fe15767c3c/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L247
|
135
149
|
#
|
@@ -142,6 +156,14 @@ module ActiveRecord
|
|
142
156
|
private
|
143
157
|
|
144
158
|
attr_reader :mysql_adapter, :logger, :runner, :cli_generator
|
159
|
+
|
160
|
+
# Checks whether the sql statement is an ALTER TABLE
|
161
|
+
#
|
162
|
+
# @param sql [String]
|
163
|
+
# @return [Boolean]
|
164
|
+
def alter_statement?(sql)
|
165
|
+
sql =~ /alter table/i
|
166
|
+
end
|
145
167
|
end
|
146
168
|
end
|
147
169
|
end
|
@@ -3,6 +3,7 @@ module PerconaMigrator
|
|
3
3
|
# Represents the '--alter' argument of Percona's pt-online-schema-change
|
4
4
|
# See https://www.percona.com/doc/percona-toolkit/2.0/pt-online-schema-change.html
|
5
5
|
class AlterArgument
|
6
|
+
ALTER_TABLE_REGEX = /ALTER TABLE `(\w+)` /
|
6
7
|
|
7
8
|
# Constructor
|
8
9
|
#
|
@@ -17,6 +18,13 @@ module PerconaMigrator
|
|
17
18
|
"--alter \"#{parsed_statement}\""
|
18
19
|
end
|
19
20
|
|
21
|
+
# Returns the name of the table the alter statement refers to
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
def table_name
|
25
|
+
statement.match(ALTER_TABLE_REGEX).captures[0]
|
26
|
+
end
|
27
|
+
|
20
28
|
private
|
21
29
|
|
22
30
|
attr_reader :statement
|
@@ -26,7 +34,7 @@ module PerconaMigrator
|
|
26
34
|
# @return [String]
|
27
35
|
def parsed_statement
|
28
36
|
@parsed_statement ||= statement
|
29
|
-
.gsub(
|
37
|
+
.gsub(ALTER_TABLE_REGEX, '')
|
30
38
|
.gsub('`','\\\`')
|
31
39
|
end
|
32
40
|
end
|
@@ -56,8 +56,23 @@ module PerconaMigrator
|
|
56
56
|
# @param statement [String] MySQL statement
|
57
57
|
# @return [String]
|
58
58
|
def generate(table_name, statement)
|
59
|
+
alter_argument = AlterArgument.new(statement)
|
59
60
|
dsn = DSN.new(database, table_name)
|
61
|
+
|
62
|
+
"#{to_s} #{dsn} #{alter_argument}"
|
63
|
+
end
|
64
|
+
|
65
|
+
# Generates the percona command for a raw MySQL statement. Fills all the
|
66
|
+
# connection credentials from the current AR connection, but that can
|
67
|
+
# amended via ENV-vars: PERCONA_DB_HOST, PERCONA_DB_USER,
|
68
|
+
# PERCONA_DB_PASSWORD, PERCONA_DB_NAME Table name can't not be amended, it
|
69
|
+
# populates automatically from the migration data
|
70
|
+
#
|
71
|
+
# @param statement [String] MySQL statement
|
72
|
+
# @return [String]
|
73
|
+
def parse_statement(statement)
|
60
74
|
alter_argument = AlterArgument.new(statement)
|
75
|
+
dsn = DSN.new(database, alter_argument.table_name)
|
61
76
|
|
62
77
|
"#{to_s} #{dsn} #{alter_argument}"
|
63
78
|
end
|
@@ -79,6 +94,8 @@ module PerconaMigrator
|
|
79
94
|
end
|
80
95
|
|
81
96
|
# Returns the command as a string that can be executed in a shell
|
97
|
+
#
|
98
|
+
# @return [String]
|
82
99
|
def to_s
|
83
100
|
@command.join(' ')
|
84
101
|
end
|
@@ -37,6 +37,18 @@ module PerconaMigrator
|
|
37
37
|
connection_config.merge(adapter: 'percona')
|
38
38
|
)
|
39
39
|
end
|
40
|
+
|
41
|
+
# It executes the passed statement through the PerconaAdapter if it's
|
42
|
+
# an alter statement. It uses the mysql adapter otherwise.
|
43
|
+
#
|
44
|
+
# This is because +pt-online-schema-change+ is intended for alter
|
45
|
+
# statements only.
|
46
|
+
#
|
47
|
+
# @param sql [String]
|
48
|
+
# @param name [String] optional
|
49
|
+
def execute(sql, name = nil)
|
50
|
+
percona_execute(sql, name)
|
51
|
+
end
|
40
52
|
end
|
41
53
|
end
|
42
54
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: percona_migrator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.rc.
|
4
|
+
version: 0.1.0.rc.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Zayats
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-03-
|
13
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|