mysql_rewinder 0.1.1 → 0.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.
- 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
|