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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cefd15f97041e89257c6487ba55dfeed549c4b97abcd577af614e38a2a23c54b
4
- data.tar.gz: 322939db9133f937b95bb7f7324c418eae65758a0f4c50f422abc0387e7706ea
3
+ metadata.gz: 04ba348e8860c85305d58ec740c7d49dd318a11f2d80fff5905e434281b0f75e
4
+ data.tar.gz: 0e40f9cff0e3af05525c529217c28eb360e008f6e20cf1b6268d0146c71955e7
5
5
  SHA512:
6
- metadata.gz: d8a8b3c7e1e308935781008935029c850d57db6cfb17127eced235580f3b2eaf75dcd9d2b8d1692130e4f83f6dabead19410fe7d15c886b1105b3524a66db60e
7
- data.tar.gz: aab87280fdcba657ac5737ac4bf793713528d689f95d7a73ffaa558f3ab75bc107af6b61dd635b6faaa7a6df143973cf77e618b2687013d10f930ff0184a2ca2
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
 
@@ -1,4 +1,5 @@
1
1
  require "foreign_key_checker/railtie"
2
+ require 'foreign_key_checker/utils'
2
3
 
3
4
  module ForeignKeyChecker
4
5
  class TypeMismatch < StandardError; end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ForeignKeyChecker
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  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.2.2
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-24 00:00:00.000000000 Z
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