db-purger 0.1.0 → 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/lib/db-purger/config.rb +8 -1
- data/lib/db-purger/plan_builder.rb +2 -0
- data/lib/db-purger/purge_table_helper.rb +34 -3
- data/lib/db-purger/table.rb +8 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14ec62643b185d00f26b61c57db34008d36fc58f2b92bf2375ba8501d3dd065d
|
4
|
+
data.tar.gz: db80d215880b0b8d889a986ae6f75b524c0fe4297bee086f516a5f5a0fcc2da5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abeaae8ae9930615a84e9639de423cef35869abf5fe5fd0a47caef1682135fcf61fc9e2fc127531db2ee3c104e322d4c6a8ce00984f3efdb569934813c0ce26c
|
7
|
+
data.tar.gz: ecfcd9b6c3557a1ba9fa2933ec0a4dd57698e95b528bf613adff62121136ed2f5514e579bd56775b8e8886c75e6e6d93ce5e6e31ba34c95577c8b7c3dd04881f
|
data/lib/db-purger/config.rb
CHANGED
@@ -3,8 +3,11 @@
|
|
3
3
|
module DBPurger
|
4
4
|
# DBPurger::Config keeps track of global config options for the purge process
|
5
5
|
class Config
|
6
|
+
DEFAULT_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
|
7
|
+
|
6
8
|
attr_writer :explain,
|
7
|
-
:explain_file
|
9
|
+
:explain_file,
|
10
|
+
:datetime_format
|
8
11
|
|
9
12
|
def explain?
|
10
13
|
@explain == true
|
@@ -13,5 +16,9 @@ module DBPurger
|
|
13
16
|
def explain_file
|
14
17
|
(@explain_file || $stdout)
|
15
18
|
end
|
19
|
+
|
20
|
+
def datetime_format
|
21
|
+
@datetime_format || DEFAULT_DATETIME_FORMAT
|
22
|
+
end
|
16
23
|
end
|
17
24
|
end
|
@@ -65,6 +65,8 @@ module DBPurger
|
|
65
65
|
table.foreign_key = options[:foreign_key]
|
66
66
|
table.batch_size = options[:batch_size]
|
67
67
|
table.conditions = options[:conditions]
|
68
|
+
table.mark_deleted_field = options[:mark_deleted_field]
|
69
|
+
table.mark_deleted_value = options[:mark_deleted_value]
|
68
70
|
build_nested_plan(table, &block) if block
|
69
71
|
table
|
70
72
|
end
|
@@ -54,9 +54,9 @@ module DBPurger
|
|
54
54
|
num_records: num_records) do |payload|
|
55
55
|
records_deleted =
|
56
56
|
if ::DBPurger.config.explain?
|
57
|
-
|
58
|
-
|
59
|
-
scope.
|
57
|
+
explain(scope)
|
58
|
+
elsif @table.mark_deleted_field
|
59
|
+
scope.update_all(@table.mark_deleted_field => @table.mark_deleted_value)
|
60
60
|
else
|
61
61
|
scope.delete_all
|
62
62
|
end
|
@@ -66,6 +66,37 @@ module DBPurger
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
def explain(scope)
|
70
|
+
sql =
|
71
|
+
if @table.mark_deleted_field
|
72
|
+
explain_update_sql(scope)
|
73
|
+
else
|
74
|
+
scope.to_sql.sub(/SELECT .*?FROM/, 'DELETE FROM')
|
75
|
+
end
|
76
|
+
::DBPurger.config.explain_file.puts(sql)
|
77
|
+
scope.count
|
78
|
+
end
|
79
|
+
|
80
|
+
def explain_update_sql(scope)
|
81
|
+
sql = scope.to_sql.dup
|
82
|
+
sql.sub!(/SELECT .*?FROM/, 'UPDATE')
|
83
|
+
sql.sub!('WHERE', "SET #{mark_deleted_field_quoted} = #{mark_deleted_value_quoted} WHERE")
|
84
|
+
sql
|
85
|
+
end
|
86
|
+
|
87
|
+
def mark_deleted_field_quoted
|
88
|
+
@mark_deleted_field_quoted ||= model.connection.quote_column_name(@table.mark_deleted_field)
|
89
|
+
end
|
90
|
+
|
91
|
+
def mark_deleted_value_quoted
|
92
|
+
@mark_deleted_value_quoted ||=
|
93
|
+
if @table.mark_deleted_value.is_a?(Time)
|
94
|
+
model.connection.quote(@table.mark_deleted_value.strftime(::DBPurger.config.datetime_format))
|
95
|
+
else
|
96
|
+
model.connection.quote(@table.mark_deleted_value)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
69
100
|
def delete_records(batch)
|
70
101
|
if foreign_tables?
|
71
102
|
delete_records_and_foreign_tables(batch)
|
data/lib/db-purger/table.rb
CHANGED
@@ -8,7 +8,10 @@ module DBPurger
|
|
8
8
|
attr_accessor :foreign_key,
|
9
9
|
:batch_size,
|
10
10
|
:conditions,
|
11
|
-
:search_proc
|
11
|
+
:search_proc,
|
12
|
+
:mark_deleted_field
|
13
|
+
|
14
|
+
attr_writer :mark_deleted_value
|
12
15
|
|
13
16
|
attr_reader :name,
|
14
17
|
:field
|
@@ -40,5 +43,9 @@ module DBPurger
|
|
40
43
|
def fields
|
41
44
|
[@field] + foreign_keys
|
42
45
|
end
|
46
|
+
|
47
|
+
def mark_deleted_value
|
48
|
+
@mark_deleted_value || 1
|
49
|
+
end
|
43
50
|
end
|
44
51
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-purger
|
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
|
- Doug Youch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dynamic-active-model
|