database_consistency 2.0.4 → 3.0.5
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/bin/database_consistency +19 -2
- data/lib/database_consistency/checkers/association_checkers/association_checker.rb +11 -0
- data/lib/database_consistency/checkers/association_checkers/foreign_key_cascade_checker.rb +5 -4
- data/lib/database_consistency/checkers/association_checkers/foreign_key_checker.rb +1 -1
- data/lib/database_consistency/checkers/association_checkers/foreign_key_type_checker.rb +46 -35
- data/lib/database_consistency/checkers/association_checkers/missing_dependent_destroy_checker.rb +53 -0
- data/lib/database_consistency/checkers/base_checker.rb +1 -2
- data/lib/database_consistency/checkers/column_checkers/column_checker.rb +4 -0
- data/lib/database_consistency/checkers/column_checkers/missing_index_find_by_checker.rb +192 -0
- data/lib/database_consistency/checkers/column_checkers/null_constraint_checker.rb +1 -1
- data/lib/database_consistency/checkers/enum_checkers/enum_checker.rb +4 -0
- data/lib/database_consistency/checkers/index_checkers/index_checker.rb +4 -0
- data/lib/database_consistency/checkers/index_checkers/redundant_index_checker.rb +2 -2
- data/lib/database_consistency/checkers/index_checkers/unique_index_checker.rb +7 -4
- data/lib/database_consistency/checkers/model_checkers/model_checker.rb +4 -0
- data/lib/database_consistency/checkers/model_checkers/view_primary_key_checker.rb +36 -0
- data/lib/database_consistency/checkers/validator_checkers/missing_unique_index_checker.rb +16 -4
- data/lib/database_consistency/checkers/validator_checkers/validator_checker.rb +4 -0
- data/lib/database_consistency/checkers/validators_fraction_checkers/validators_fraction_checker.rb +4 -0
- data/lib/database_consistency/configuration.rb +8 -7
- data/lib/database_consistency/debug_context.rb +0 -1
- data/lib/database_consistency/files_helper.rb +53 -0
- data/lib/database_consistency/helper.rb +215 -2
- data/lib/database_consistency/prism_helper.rb +38 -0
- data/lib/database_consistency/rescue_error.rb +3 -3
- data/lib/database_consistency/version.rb +1 -1
- data/lib/database_consistency/writers/autofix/migration_base.rb +1 -1
- data/lib/database_consistency/writers/autofix_writer.rb +32 -1
- data/lib/database_consistency/writers/base_writer.rb +5 -4
- data/lib/database_consistency/writers/simple/association_foreign_type_missing_null_constraint.rb +1 -1
- data/lib/database_consistency/writers/simple/association_missing_index.rb +1 -1
- data/lib/database_consistency/writers/simple/association_missing_null_constraint.rb +1 -1
- data/lib/database_consistency/writers/simple/enum_values_inconsistent_with_ar_enum.rb +1 -1
- data/lib/database_consistency/writers/simple/enum_values_inconsistent_with_inclusion.rb +1 -1
- data/lib/database_consistency/writers/simple/has_one_missing_unique_index.rb +1 -1
- data/lib/database_consistency/writers/simple/implicit_order_column_missing.rb +1 -1
- data/lib/database_consistency/writers/simple/inconsistent_enum_type.rb +1 -1
- data/lib/database_consistency/writers/simple/inconsistent_types.rb +2 -2
- data/lib/database_consistency/writers/simple/length_validator_greater_limit.rb +1 -1
- data/lib/database_consistency/writers/simple/length_validator_lower_limit.rb +1 -1
- data/lib/database_consistency/writers/simple/length_validator_missing.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_association_class.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_dependent_destroy.rb +22 -0
- data/lib/database_consistency/writers/simple/missing_foreign_key.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_foreign_key_cascade.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_index_find_by.rb +32 -0
- data/lib/database_consistency/writers/simple/missing_table.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_unique_index.rb +1 -1
- data/lib/database_consistency/writers/simple/missing_uniqueness_validation.rb +1 -1
- data/lib/database_consistency/writers/simple/null_constraint_association_misses_validator.rb +1 -1
- data/lib/database_consistency/writers/simple/null_constraint_misses_validator.rb +1 -1
- data/lib/database_consistency/writers/simple/null_constraint_missing.rb +1 -1
- data/lib/database_consistency/writers/simple/possible_null.rb +1 -1
- data/lib/database_consistency/writers/simple/redundant_case_insensitive_option.rb +1 -1
- data/lib/database_consistency/writers/simple/redundant_index.rb +1 -1
- data/lib/database_consistency/writers/simple/redundant_unique_index.rb +1 -1
- data/lib/database_consistency/writers/simple/small_primary_key.rb +1 -1
- data/lib/database_consistency/writers/simple/three_state_boolean.rb +1 -1
- data/lib/database_consistency/writers/simple/view_missing_primary_key.rb +21 -0
- data/lib/database_consistency/writers/simple/view_primary_key_column_missing.rb +21 -0
- data/lib/database_consistency.rb +14 -7
- metadata +13 -4
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DatabaseConsistency
|
|
4
|
+
module Writers
|
|
5
|
+
module Simple
|
|
6
|
+
class MissingIndexFindBy < Base # :nodoc:
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def template
|
|
10
|
+
'column is used in find_by but is missing an index%<source_location>s'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def attributes
|
|
14
|
+
if report.source_location
|
|
15
|
+
count = report.total_findings_count || 1
|
|
16
|
+
count_str = count > 1 ? ", and #{count - 1} more" : ''
|
|
17
|
+
{ source_location: " (found at #{report.source_location}#{count_str})" }
|
|
18
|
+
else
|
|
19
|
+
{ source_location: '' }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def unique_attributes
|
|
24
|
+
{
|
|
25
|
+
table_or_model_name: report.table_or_model_name,
|
|
26
|
+
column_or_attribute_name: report.column_or_attribute_name
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/database_consistency/writers/simple/null_constraint_association_misses_validator.rb
CHANGED
|
@@ -7,7 +7,7 @@ module DatabaseConsistency
|
|
|
7
7
|
private
|
|
8
8
|
|
|
9
9
|
def template
|
|
10
|
-
'column is
|
|
10
|
+
'column is NOT NULL but does not have a presence validator for association %<association_name>s'
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def attributes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DatabaseConsistency
|
|
4
|
+
module Writers
|
|
5
|
+
module Simple
|
|
6
|
+
class ViewMissingPrimaryKey < Base # :nodoc:
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def template
|
|
10
|
+
'model backed by a database view should have primary_key set'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def unique_attributes
|
|
14
|
+
{
|
|
15
|
+
table_or_model_name: report.table_or_model_name
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DatabaseConsistency
|
|
4
|
+
module Writers
|
|
5
|
+
module Simple
|
|
6
|
+
class ViewPrimaryKeyColumnMissing < Base # :nodoc:
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def template
|
|
10
|
+
'model backed by a database view has primary_key set to a non-existent column'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def unique_attributes
|
|
14
|
+
{
|
|
15
|
+
table_or_model_name: report.table_or_model_name
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/database_consistency.rb
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'active_record'
|
|
4
|
-
require 'active_support/inflector'
|
|
5
|
-
|
|
6
|
-
ActiveSupport::Inflector.inflections do |inflect|
|
|
7
|
-
inflect.irregular 'index', 'indexes'
|
|
8
|
-
end
|
|
9
4
|
|
|
10
5
|
require 'database_consistency/version'
|
|
11
6
|
require 'database_consistency/helper'
|
|
7
|
+
require 'database_consistency/files_helper'
|
|
8
|
+
require 'database_consistency/prism_helper'
|
|
12
9
|
require 'database_consistency/configuration'
|
|
13
10
|
require 'database_consistency/rescue_error'
|
|
14
11
|
require 'database_consistency/errors'
|
|
@@ -48,6 +45,10 @@ require 'database_consistency/writers/simple/three_state_boolean'
|
|
|
48
45
|
require 'database_consistency/writers/simple/missing_association_class'
|
|
49
46
|
require 'database_consistency/writers/simple/missing_table'
|
|
50
47
|
require 'database_consistency/writers/simple/implicit_order_column_missing'
|
|
48
|
+
require 'database_consistency/writers/simple/missing_dependent_destroy'
|
|
49
|
+
require 'database_consistency/writers/simple/missing_index_find_by'
|
|
50
|
+
require 'database_consistency/writers/simple/view_missing_primary_key'
|
|
51
|
+
require 'database_consistency/writers/simple/view_primary_key_column_missing'
|
|
51
52
|
require 'database_consistency/writers/simple_writer'
|
|
52
53
|
|
|
53
54
|
require 'database_consistency/writers/autofix/helpers/migration'
|
|
@@ -81,6 +82,7 @@ require 'database_consistency/checkers/enum_checkers/enum_type_checker'
|
|
|
81
82
|
|
|
82
83
|
require 'database_consistency/checkers/model_checkers/model_checker'
|
|
83
84
|
require 'database_consistency/checkers/model_checkers/missing_table_checker'
|
|
85
|
+
require 'database_consistency/checkers/model_checkers/view_primary_key_checker'
|
|
84
86
|
|
|
85
87
|
require 'database_consistency/checkers/association_checkers/association_checker'
|
|
86
88
|
require 'database_consistency/checkers/association_checkers/missing_index_checker'
|
|
@@ -88,6 +90,7 @@ require 'database_consistency/checkers/association_checkers/foreign_key_checker'
|
|
|
88
90
|
require 'database_consistency/checkers/association_checkers/foreign_key_type_checker'
|
|
89
91
|
require 'database_consistency/checkers/association_checkers/foreign_key_cascade_checker'
|
|
90
92
|
require 'database_consistency/checkers/association_checkers/missing_association_class_checker'
|
|
93
|
+
require 'database_consistency/checkers/association_checkers/missing_dependent_destroy_checker'
|
|
91
94
|
|
|
92
95
|
require 'database_consistency/checkers/column_checkers/column_checker'
|
|
93
96
|
require 'database_consistency/checkers/column_checkers/null_constraint_checker'
|
|
@@ -96,6 +99,7 @@ require 'database_consistency/checkers/column_checkers/primary_key_type_checker'
|
|
|
96
99
|
require 'database_consistency/checkers/column_checkers/enum_value_checker'
|
|
97
100
|
require 'database_consistency/checkers/column_checkers/three_state_boolean_checker'
|
|
98
101
|
require 'database_consistency/checkers/column_checkers/implicit_ordering_checker'
|
|
102
|
+
require 'database_consistency/checkers/column_checkers/missing_index_find_by_checker'
|
|
99
103
|
|
|
100
104
|
require 'database_consistency/checkers/validator_checkers/validator_checker'
|
|
101
105
|
require 'database_consistency/checkers/validator_checkers/missing_unique_index_checker'
|
|
@@ -112,12 +116,15 @@ require 'database_consistency/checkers/index_checkers/redundant_unique_index_che
|
|
|
112
116
|
# The root module
|
|
113
117
|
module DatabaseConsistency
|
|
114
118
|
class << self
|
|
115
|
-
def run(*args, **opts) # rubocop:disable Metrics/MethodLength
|
|
119
|
+
def run(*args, **opts) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
116
120
|
configuration = Configuration.new(*args)
|
|
121
|
+
|
|
122
|
+
Writers::AutofixWriter.validate_scope!(opts[:only_checkers]) if opts[:autofix]
|
|
123
|
+
|
|
117
124
|
reports = Processors.reports(configuration)
|
|
118
125
|
|
|
119
126
|
if opts[:autofix]
|
|
120
|
-
Writers::AutofixWriter.write(reports, config: configuration)
|
|
127
|
+
Writers::AutofixWriter.write(reports, config: configuration, opts: opts[:only_checkers])
|
|
121
128
|
|
|
122
129
|
0
|
|
123
130
|
elsif opts[:todo]
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: database_consistency
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Evgeniy Demin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-05-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -151,12 +151,14 @@ files:
|
|
|
151
151
|
- lib/database_consistency/checkers/association_checkers/foreign_key_checker.rb
|
|
152
152
|
- lib/database_consistency/checkers/association_checkers/foreign_key_type_checker.rb
|
|
153
153
|
- lib/database_consistency/checkers/association_checkers/missing_association_class_checker.rb
|
|
154
|
+
- lib/database_consistency/checkers/association_checkers/missing_dependent_destroy_checker.rb
|
|
154
155
|
- lib/database_consistency/checkers/association_checkers/missing_index_checker.rb
|
|
155
156
|
- lib/database_consistency/checkers/base_checker.rb
|
|
156
157
|
- lib/database_consistency/checkers/column_checkers/column_checker.rb
|
|
157
158
|
- lib/database_consistency/checkers/column_checkers/enum_value_checker.rb
|
|
158
159
|
- lib/database_consistency/checkers/column_checkers/implicit_ordering_checker.rb
|
|
159
160
|
- lib/database_consistency/checkers/column_checkers/length_constraint_checker.rb
|
|
161
|
+
- lib/database_consistency/checkers/column_checkers/missing_index_find_by_checker.rb
|
|
160
162
|
- lib/database_consistency/checkers/column_checkers/null_constraint_checker.rb
|
|
161
163
|
- lib/database_consistency/checkers/column_checkers/primary_key_type_checker.rb
|
|
162
164
|
- lib/database_consistency/checkers/column_checkers/three_state_boolean_checker.rb
|
|
@@ -168,6 +170,7 @@ files:
|
|
|
168
170
|
- lib/database_consistency/checkers/index_checkers/unique_index_checker.rb
|
|
169
171
|
- lib/database_consistency/checkers/model_checkers/missing_table_checker.rb
|
|
170
172
|
- lib/database_consistency/checkers/model_checkers/model_checker.rb
|
|
173
|
+
- lib/database_consistency/checkers/model_checkers/view_primary_key_checker.rb
|
|
171
174
|
- lib/database_consistency/checkers/validator_checkers/case_sensitive_unique_validation_checker.rb
|
|
172
175
|
- lib/database_consistency/checkers/validator_checkers/missing_unique_index_checker.rb
|
|
173
176
|
- lib/database_consistency/checkers/validator_checkers/validator_checker.rb
|
|
@@ -179,7 +182,9 @@ files:
|
|
|
179
182
|
- lib/database_consistency/databases/types/sqlite.rb
|
|
180
183
|
- lib/database_consistency/debug_context.rb
|
|
181
184
|
- lib/database_consistency/errors.rb
|
|
185
|
+
- lib/database_consistency/files_helper.rb
|
|
182
186
|
- lib/database_consistency/helper.rb
|
|
187
|
+
- lib/database_consistency/prism_helper.rb
|
|
183
188
|
- lib/database_consistency/processors/associations_processor.rb
|
|
184
189
|
- lib/database_consistency/processors/base_processor.rb
|
|
185
190
|
- lib/database_consistency/processors/columns_processor.rb
|
|
@@ -225,8 +230,10 @@ files:
|
|
|
225
230
|
- lib/database_consistency/writers/simple/length_validator_lower_limit.rb
|
|
226
231
|
- lib/database_consistency/writers/simple/length_validator_missing.rb
|
|
227
232
|
- lib/database_consistency/writers/simple/missing_association_class.rb
|
|
233
|
+
- lib/database_consistency/writers/simple/missing_dependent_destroy.rb
|
|
228
234
|
- lib/database_consistency/writers/simple/missing_foreign_key.rb
|
|
229
235
|
- lib/database_consistency/writers/simple/missing_foreign_key_cascade.rb
|
|
236
|
+
- lib/database_consistency/writers/simple/missing_index_find_by.rb
|
|
230
237
|
- lib/database_consistency/writers/simple/missing_table.rb
|
|
231
238
|
- lib/database_consistency/writers/simple/missing_unique_index.rb
|
|
232
239
|
- lib/database_consistency/writers/simple/missing_uniqueness_validation.rb
|
|
@@ -239,6 +246,8 @@ files:
|
|
|
239
246
|
- lib/database_consistency/writers/simple/redundant_unique_index.rb
|
|
240
247
|
- lib/database_consistency/writers/simple/small_primary_key.rb
|
|
241
248
|
- lib/database_consistency/writers/simple/three_state_boolean.rb
|
|
249
|
+
- lib/database_consistency/writers/simple/view_missing_primary_key.rb
|
|
250
|
+
- lib/database_consistency/writers/simple/view_primary_key_column_missing.rb
|
|
242
251
|
- lib/database_consistency/writers/simple_writer.rb
|
|
243
252
|
- lib/database_consistency/writers/todo_writer.rb
|
|
244
253
|
homepage: https://github.com/djezzzl/database_consistency
|
|
@@ -266,14 +275,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
266
275
|
requirements:
|
|
267
276
|
- - ">="
|
|
268
277
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: 2.
|
|
278
|
+
version: 2.6.0
|
|
270
279
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
280
|
requirements:
|
|
272
281
|
- - ">="
|
|
273
282
|
- !ruby/object:Gem::Version
|
|
274
283
|
version: '0'
|
|
275
284
|
requirements: []
|
|
276
|
-
rubygems_version: 3.
|
|
285
|
+
rubygems_version: 3.4.19
|
|
277
286
|
signing_key:
|
|
278
287
|
specification_version: 4
|
|
279
288
|
summary: Provide an easy way to check the consistency of the database constraints
|