foreign_key_checker 0.2.2 → 0.3.0
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 +6 -0
- data/lib/foreign_key_checker.rb +1 -0
- data/lib/foreign_key_checker/utils.rb +61 -0
- data/lib/foreign_key_checker/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04ba348e8860c85305d58ec740c7d49dd318a11f2d80fff5905e434281b0f75e
|
4
|
+
data.tar.gz: 0e40f9cff0e3af05525c529217c28eb360e008f6e20cf1b6268d0146c71955e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f66ab3eacf8fd3238740483184683f871bbf0cd482ae3fa644d7120a8f01bde616ef571ab19638c6bae9e2a677650838370858a9f2e8ab776829a17d48a75f8a
|
7
|
+
data.tar.gz: 53fd8d518399d7b61ee42cb7e47ac01f5604852e724e78971c7fd63a2009ac8b95afbc4ddd17a433da453dc7b4b0427d3c813a241015c0525b233473af9bb319
|
data/README.md
CHANGED
@@ -23,6 +23,12 @@ ForeignKeyChecker.check.each do |key, result|
|
|
23
23
|
end
|
24
24
|
```
|
25
25
|
|
26
|
+
Get general information about foreign keys (only postgresql, mysql2)
|
27
|
+
```ruby
|
28
|
+
ForeignKeyChecker::Utils.get_foreign_keys_hash
|
29
|
+
# => {"users"=>[#<ForeignKeyChecker::Utils::Result:0x00005645e51756e8 @from_table="user_rating_changes", @from_column="user_id", @to_table="users", @to_column="id">]}
|
30
|
+
```
|
31
|
+
|
26
32
|
## Installation
|
27
33
|
Add this line to your application's Gemfile:
|
28
34
|
|
data/lib/foreign_key_checker.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
module ForeignKeyChecker
|
2
|
+
module Utils
|
3
|
+
class Result
|
4
|
+
attr_reader :from_table, :to_table, :from_column, :to_column
|
5
|
+
def initialize(args)
|
6
|
+
args.each { |k, v| instance_variable_set("@#{k}", v) }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
class UnsupportedConnectionAdapter < StandardError; end
|
10
|
+
def self.get_foreign_keys(model = ActiveRecord::Base)
|
11
|
+
adapter = model.connection_config[:adapter]
|
12
|
+
raise(UnsupportedConnectionAdapter, adapter) unless %w[postgresql mysql2].include?(adapter)
|
13
|
+
|
14
|
+
connection = model.connection
|
15
|
+
send("get_#{adapter}_foreign_keys", connection)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get_foreign_keys_hash(model = ActiveRecord::Base)
|
19
|
+
get_foreign_keys(model).to_a.each_with_object({}) do |datum, obj|
|
20
|
+
obj[datum.to_table] ||= []
|
21
|
+
obj[datum.to_table].push(datum)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.get_mysql2_foreign_keys(connection)
|
26
|
+
res = connection.select_all <<-SQL
|
27
|
+
SELECT
|
28
|
+
fks.TABLE_NAME AS from_table,
|
29
|
+
fks.COLUMN_NAME AS from_column,
|
30
|
+
fks.REFERENCED_TABLE_NAME AS to_table,
|
31
|
+
fks.REFERENCED_COLUMN_NAME AS to_column
|
32
|
+
FROM information_schema.KEY_COLUMN_USAGE AS fks
|
33
|
+
INNER JOIN information_schema.REFERENTIAL_CONSTRAINTS rules ON rules.CONSTRAINT_NAME = fks.CONSTRAINT_NAME
|
34
|
+
WHERE
|
35
|
+
fks.CONSTRAINT_SCHEMA = DATABASE()
|
36
|
+
AND rules.CONSTRAINT_SCHEMA = DATABASE();
|
37
|
+
SQL
|
38
|
+
res.to_a.map{|i| Result.new(i) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.get_postgresql_foreign_keys(connection)
|
42
|
+
res = connection.select_all <<-SQL
|
43
|
+
SELECT
|
44
|
+
tc.table_name AS from_table,
|
45
|
+
kcu.column_name AS from_column,
|
46
|
+
ccu.table_name AS to_table,
|
47
|
+
ccu.column_name AS to_column
|
48
|
+
FROM
|
49
|
+
information_schema.table_constraints AS tc
|
50
|
+
JOIN information_schema.key_column_usage AS kcu
|
51
|
+
ON tc.constraint_name = kcu.constraint_name
|
52
|
+
AND tc.table_schema = kcu.table_schema
|
53
|
+
JOIN information_schema.constraint_column_usage AS ccu
|
54
|
+
ON ccu.constraint_name = tc.constraint_name
|
55
|
+
AND ccu.table_schema = tc.table_schema
|
56
|
+
WHERE tc.constraint_type = 'FOREIGN KEY';
|
57
|
+
SQL
|
58
|
+
res.to_a.map{ |i| Result.new(i) }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreign_key_checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AnatolyShirykalov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- lib/foreign_key_checker.rb
|
52
52
|
- lib/foreign_key_checker/railtie.rb
|
53
|
+
- lib/foreign_key_checker/utils.rb
|
53
54
|
- lib/foreign_key_checker/version.rb
|
54
55
|
- lib/generators/foreign_key_checker/migration/migration_generator.rb
|
55
56
|
- lib/generators/foreign_key_checker/migration/templates/migrations/fix_foreign_keys.rb.erb
|