mysql_rewinder 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -1
- data/lib/mysql_rewinder/cleaner.rb +19 -3
- data/lib/mysql_rewinder/version.rb +1 -1
- data/lib/mysql_rewinder.rb +7 -4
- data/sig/mysql_rewinder/cleaner.rbs +6 -1
- data/sig/mysql_rewinder.rbs +3 -2
- metadata +3 -4
- data/mysql_rewinder.gemspec +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a2e247f212ee2a165527969e69188036a554e5e812f156adb4f13136b302fbe
|
4
|
+
data.tar.gz: 9ca4cf5ad37d8ab1343882e0012ea2c350c4fd6305d043fc2dde901a3ae068dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfe1906efd4de0b8ee5c3eafcb5e102d7fda767f24c9f16da594a19deb081f515281b1c9aec8f6646ae49023271eeb730876f48a6b725f4bbe724d91749e15f2
|
7
|
+
data.tar.gz: d7a6f5a4e43799a49270f1b65412a3aebb627e2d313be5ff7842ae0d19db70744a7768607aad8255214cad377d1229cf731d8897e088ad4094b3ec898fab3dbf
|
data/README.md
CHANGED
@@ -89,7 +89,7 @@ MysqlRewinder.setup(db_configs, adapter: :mysql2)
|
|
89
89
|
If you want to use MysqlRewinder with ActiveRecord, do the following:
|
90
90
|
|
91
91
|
* Generate db_configs from `ActiveRecord::Base.configurations`
|
92
|
-
* Pass `ActiveRecord::SchemaMigration.new(nil).table_name` and `ActiveRecord::Base.internal_metadata_table_name` to `
|
92
|
+
* Pass `ActiveRecord::SchemaMigration.new(nil).table_name` and `ActiveRecord::Base.internal_metadata_table_name` to `MysqlRewinder.setup` as `except_tables`
|
93
93
|
|
94
94
|
```ruby
|
95
95
|
db_configs = ActiveRecord::Base.configurations.configs_for(env_name: 'test').map(&:configuration_hash)
|
@@ -105,6 +105,14 @@ except_tables = [
|
|
105
105
|
MysqlRewinder.setup(db_configs, except_tables: except_tables)
|
106
106
|
```
|
107
107
|
|
108
|
+
### Logging
|
109
|
+
|
110
|
+
If you want to enable logging, specify `logger` for `MysqlRewinder.setup`
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
MysqlRewinder.setup(db_configs, logger: Logger.new(STDOUT))
|
114
|
+
```
|
115
|
+
|
108
116
|
## Contributing
|
109
117
|
|
110
118
|
Bug reports and pull requests are welcome on GitHub at https://github.com/DeNA/mysql_rewinder. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/DeNA/mysql_rewinder/blob/trunk/CODE_OF_CONDUCT.md).
|
@@ -6,10 +6,11 @@ class MysqlRewinder
|
|
6
6
|
class Cleaner
|
7
7
|
attr_reader :db_config
|
8
8
|
|
9
|
-
def initialize(db_config, except_tables:, adapter:)
|
9
|
+
def initialize(db_config, except_tables:, adapter:, logger: nil)
|
10
10
|
@db_config = db_config
|
11
11
|
@client = Adapter.generate(adapter, db_config.transform_keys(&:to_sym))
|
12
12
|
@except_tables = except_tables
|
13
|
+
@logger = logger
|
13
14
|
end
|
14
15
|
|
15
16
|
def clean_all
|
@@ -20,8 +21,8 @@ class MysqlRewinder
|
|
20
21
|
target_tables = (tables - @except_tables) & all_tables
|
21
22
|
return if target_tables.empty?
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
log_and_execute("SET FOREIGN_KEY_CHECKS = 0;")
|
25
|
+
log_and_execute(target_tables.map { |table| "DELETE FROM #{table}" }.join(';'))
|
25
26
|
end
|
26
27
|
|
27
28
|
def all_tables
|
@@ -31,5 +32,20 @@ class MysqlRewinder
|
|
31
32
|
WHERE TABLE_SCHEMA = DATABASE()
|
32
33
|
SQL
|
33
34
|
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def log_and_execute(sql)
|
39
|
+
return @client.execute(sql) unless @logger&.debug?
|
40
|
+
|
41
|
+
start_ts = Time.now
|
42
|
+
res = @client.execute(sql)
|
43
|
+
duration = (Time.now - start_ts) * 1000
|
44
|
+
|
45
|
+
name = "[MysqlRewinder] Cleaner SQL (#{duration.round(1)}ms)"
|
46
|
+
msg = "\e[1m\e[30m#{name}\e[0m \e[34m#{sql}\e[0m"
|
47
|
+
@logger.debug msg
|
48
|
+
res
|
49
|
+
end
|
34
50
|
end
|
35
51
|
end
|
data/lib/mysql_rewinder.rb
CHANGED
@@ -6,27 +6,30 @@ require 'set'
|
|
6
6
|
require 'tmpdir'
|
7
7
|
require 'fileutils'
|
8
8
|
require 'forwardable'
|
9
|
+
require 'logger'
|
9
10
|
|
10
11
|
class MysqlRewinder
|
11
12
|
class << self
|
12
13
|
extend Forwardable
|
13
14
|
delegate %i[clean clean_all record_inserted_table] => :@instance
|
14
15
|
|
15
|
-
def setup(db_configs, except_tables: [], adapter: :trilogy)
|
16
|
-
@instance = new(db_configs: db_configs, except_tables: except_tables, adapter: adapter)
|
16
|
+
def setup(db_configs, except_tables: [], adapter: :trilogy, logger: nil)
|
17
|
+
@instance = new(db_configs: db_configs, except_tables: except_tables, adapter: adapter, logger: logger)
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
|
-
def initialize(db_configs:, except_tables:, adapter:)
|
21
|
+
def initialize(db_configs:, except_tables:, adapter:, logger:)
|
21
22
|
@initialized_pid = Process.pid
|
22
23
|
@inserted_table_record_dir = Pathname(Dir.tmpdir)
|
23
24
|
@cleaners = db_configs.map do |db_config|
|
24
25
|
Cleaner.new(
|
25
26
|
db_config.transform_keys(&:to_sym),
|
26
27
|
except_tables: except_tables,
|
27
|
-
adapter: adapter
|
28
|
+
adapter: adapter,
|
29
|
+
logger: logger
|
28
30
|
)
|
29
31
|
end
|
32
|
+
@logger = logger
|
30
33
|
reset_inserted_tables
|
31
34
|
end
|
32
35
|
|
@@ -4,12 +4,17 @@ class MysqlRewinder
|
|
4
4
|
@client: Adapter
|
5
5
|
@except_tables: Array[String]
|
6
6
|
@all_tables: Array[String]
|
7
|
+
@logger: untyped
|
7
8
|
|
8
9
|
attr_reader db_config: Hash[Symbol,String]
|
9
10
|
|
10
|
-
def initialize: (Hash[Symbol,String] db_config, except_tables: Array[String], adapter: Symbol) -> untyped
|
11
|
+
def initialize: (Hash[Symbol,String] db_config, except_tables: Array[String], adapter: Symbol, ?logger: untyped) -> untyped
|
11
12
|
def clean_all: () -> void
|
12
13
|
def clean: (tables: untyped) -> void
|
13
14
|
def all_tables: () -> void
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def log_and_execute: (String sql) -> void
|
14
19
|
end
|
15
20
|
end
|
data/sig/mysql_rewinder.rbs
CHANGED
@@ -5,13 +5,14 @@ class MysqlRewinder
|
|
5
5
|
# @inserted_table_record_dir: Pathname
|
6
6
|
@cleaners: Array[Cleaner]
|
7
7
|
@inserted_tables: Set[String]
|
8
|
+
@logger: untyped
|
8
9
|
|
9
|
-
def self.setup: (Array[Hash[Symbol,String]] db_configs, ?except_tables: Array[String], ?adapter: ::Symbol) -> void
|
10
|
+
def self.setup: (Array[Hash[Symbol,String]] db_configs, ?except_tables: Array[String], ?adapter: ::Symbol, ?logger: untyped) -> void
|
10
11
|
def self.clean_all: () -> void
|
11
12
|
def self.clean: () -> void
|
12
13
|
def self.record_inserted_table: (String sql) -> void
|
13
14
|
|
14
|
-
def initialize: (db_configs: Array[Hash[Symbol,String]], except_tables: Array[String], adapter: ::Symbol) -> untyped
|
15
|
+
def initialize: (db_configs: Array[Hash[Symbol,String]], except_tables: Array[String], adapter: ::Symbol, logger: untyped) -> untyped
|
15
16
|
def record_inserted_table: (String sql) -> void
|
16
17
|
def reset_inserted_tables: () -> void
|
17
18
|
def calculate_inserted_tables: () -> void
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mysql_rewinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yusuke Sangenya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04
|
11
|
+
date: 2024-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -33,7 +33,6 @@ files:
|
|
33
33
|
- lib/mysql_rewinder/ext/mysql2_client.rb
|
34
34
|
- lib/mysql_rewinder/ext/trilogy.rb
|
35
35
|
- lib/mysql_rewinder/version.rb
|
36
|
-
- mysql_rewinder.gemspec
|
37
36
|
- sig/mysql_rewinder.rbs
|
38
37
|
- sig/mysql_rewinder/cleaner.rbs
|
39
38
|
- sig/mysql_rewinder/cleaner/adapter.rbs
|
@@ -63,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
62
|
- !ruby/object:Gem::Version
|
64
63
|
version: '0'
|
65
64
|
requirements: []
|
66
|
-
rubygems_version: 3.
|
65
|
+
rubygems_version: 3.3.26
|
67
66
|
signing_key:
|
68
67
|
specification_version: 4
|
69
68
|
summary: Simple, stable, and fast database cleaner for mysql
|
data/mysql_rewinder.gemspec
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "lib/mysql_rewinder/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = "mysql_rewinder"
|
7
|
-
spec.version = MysqlRewinder::VERSION
|
8
|
-
spec.authors = ["Yusuke Sangenya"]
|
9
|
-
spec.email = ["longinus.eva@gmail.com"]
|
10
|
-
|
11
|
-
spec.summary = "Simple, stable, and fast database cleaner for mysql"
|
12
|
-
spec.homepage = "https://github.com/genya0407/mysql_rewinder"
|
13
|
-
spec.license = "MIT"
|
14
|
-
spec.required_ruby_version = ">= 3.0.0"
|
15
|
-
|
16
|
-
spec.files = Dir.chdir(__dir__) do
|
17
|
-
`git ls-files -z`.split("\x0").reject do |f|
|
18
|
-
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
19
|
-
end
|
20
|
-
end
|
21
|
-
spec.require_paths = ["lib"]
|
22
|
-
end
|