activerecord-creating_foreign_keys 0.1.1 → 0.2.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
  SHA1:
3
- metadata.gz: d4c5a35e6a8a7b83f2673c41c0d9ed7c6992c823
4
- data.tar.gz: feb454ca176f7146438926a8412f170cc7276601
3
+ metadata.gz: ad851761b4eb31ec42e08fd116be1dcebd19652c
4
+ data.tar.gz: 39ffb4137360cdb52edef99d77619d8c8811eb89
5
5
  SHA512:
6
- metadata.gz: 9a68d697adf0721d4a3ab0bbeda9475e75a52ba3323cfc3c62602d854cf27ff3a4e52c80915884590262db8f1cecc301a5ea90b3f4fb1f9ae272725acfec1b18
7
- data.tar.gz: dcf29bbf8929e716fccff4926e0f2646dacfa8c6e70076de711ced74ddc85e8ae6c0c9ec350c28a5a8c9c2575a34fc841eaccc5acf507afec20891a25d57ccf3
6
+ metadata.gz: f1c4242b13aa86fc1fb84f7a65a3aabc09b55aa88374618934044f38398da6e2df6fdbedac18f419fa38a2f8ba0dc01bf4cf867f3860365ad15194ec85f08fa4
7
+ data.tar.gz: 01ce381513bfaffb3f8318a702e94cbcb9597be0a26f552c699b643c66a2cb5dd54d6b3e7eb88f7109d0631cb43019be7571b9185c6f123aa62b4a02cc94812a
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/lazy_load_hooks"
4
+
5
+ ActiveSupport.on_load(:active_record) do
6
+ require "activerecord/creating_foreign_keys/connection_specification/resolver"
7
+
8
+ ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.prepend(ActiveRecord::CreatingForeignKeys::ConnectionSpecification::Resolver)
9
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module CreatingForeignKeys
5
+ module ConnectionSpecification
6
+ module Resolver
7
+ def spec(config)
8
+ connection_specification = super(config)
9
+
10
+ if connection_specification.config[:adapter] == "mysql2"
11
+ require "activerecord/creating_foreign_keys/schema_creation"
12
+ require "activerecord/creating_foreign_keys/schema_statements"
13
+
14
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter::SchemaCreation.prepend(ActiveRecord::CreatingForeignKeys::SchemaCreation)
15
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(ActiveRecord::CreatingForeignKeys::SchemaStatements)
16
+ end
17
+
18
+ connection_specification
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module CreatingForeignKeys
5
+ module SchemaCreation
6
+ private
7
+ def visit_TableDefinition(o)
8
+ return super(o) if o.foreign_keys.empty?
9
+
10
+ name = o.name
11
+ create_sql = +"CREATE#{' TEMPORARY' if o.temporary} TABLE #{quote_table_name(name)} "
12
+
13
+ statements = o.columns.map { |c| accept c }
14
+ statements.concat(o.indexes.map { |column_name, options| index_in_create(name, column_name, options) })
15
+ statements.concat(o.foreign_keys.map { |to_table, options| foreign_key_in_create(o.name, to_table, options) })
16
+
17
+ create_sql << "(#{statements.join(', ')}) " if statements.present?
18
+ create_sql << "#{o.options}"
19
+ create_sql << " AS #{@conn.to_sql(o.as)}" if o.as
20
+ create_sql
21
+ end
22
+
23
+ def visit_ForeignKeyDefinition(o)
24
+ sql = +<<-SQL.strip_heredoc
25
+ CONSTRAINT #{quote_column_name(o.name)}
26
+ FOREIGN KEY (#{quote_column_name(o.column)})
27
+ REFERENCES #{quote_table_name(o.to_table)} (#{quote_column_name(o.primary_key)})
28
+ SQL
29
+ sql << " #{action_sql('DELETE', o.on_delete)}" if o.on_delete
30
+ sql << " #{action_sql('UPDATE', o.on_update)}" if o.on_update
31
+ sql
32
+ end
33
+
34
+ def foreign_key_in_create(from_table, to_table, options)
35
+ options = @conn.foreign_key_options(from_table, to_table, options)
36
+ accept ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(from_table, to_table, options)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module CreatingForeignKeys
5
+ module SchemaStatements
6
+ def create_table(table_name, options = {})
7
+ td = create_table_definition table_name, options[:temporary], options[:options], options[:as]
8
+
9
+ if options[:id] != false && !options[:as]
10
+ pk = options.fetch(:primary_key) do
11
+ Base.get_primary_key table_name.to_s.singularize
12
+ end
13
+
14
+ td.primary_key pk, options.fetch(:id, :primary_key), options
15
+ end
16
+
17
+ yield td if block_given?
18
+
19
+ if options[:force] && table_exists?(table_name)
20
+ drop_table(table_name, options)
21
+ end
22
+
23
+ result = execute schema_creation.accept td
24
+
25
+ unless supports_indexes_in_create?
26
+ td.indexes.each_pair do |column_name, index_options|
27
+ add_index(table_name, column_name, index_options)
28
+ end
29
+ end
30
+
31
+ result
32
+ end
33
+
34
+ def foreign_key_options(from_table, to_table, options) # :nodoc:
35
+ options = options.dup
36
+ options[:column] ||= foreign_key_column_for(to_table)
37
+ options[:name] ||= foreign_key_name(from_table, options)
38
+ options
39
+ end
40
+ end
41
+ end
42
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module CreatingForeignKeys
5
- VERSION = "0.1.1"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
@@ -3,7 +3,7 @@ require File.expand_path('../boot', __FILE__)
3
3
  require 'rails/all'
4
4
 
5
5
  Bundler.require(*Rails.groups)
6
- require "active_record/creating_foreign_keys"
6
+ require "activerecord/creating_foreign_keys"
7
7
 
8
8
  module Dummy
9
9
  class Application < Rails::Application
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-creating_foreign_keys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hamuyuuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-10 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -161,11 +161,11 @@ files:
161
161
  - MIT-LICENSE
162
162
  - README.md
163
163
  - Rakefile
164
- - lib/active_record/connection_adapters/mysql2/creating_foreign_keys/connection_specification/resolver.rb
165
- - lib/active_record/connection_adapters/mysql2/creating_foreign_keys/schema_creation.rb
166
- - lib/active_record/connection_adapters/mysql2/creating_foreign_keys/schema_statements.rb
167
- - lib/active_record/creating_foreign_keys.rb
168
- - lib/active_record/creating_foreign_keys/version.rb
164
+ - lib/activerecord/creating_foreign_keys.rb
165
+ - lib/activerecord/creating_foreign_keys/connection_specification/resolver.rb
166
+ - lib/activerecord/creating_foreign_keys/schema_creation.rb
167
+ - lib/activerecord/creating_foreign_keys/schema_statements.rb
168
+ - lib/activerecord/creating_foreign_keys/version.rb
169
169
  - test/creating_foreign_keys_test.rb
170
170
  - test/dummy/README.rdoc
171
171
  - test/dummy/Rakefile
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- module ConnectionAdapters
5
- module Mysql2
6
- module CreatingForeignKeys
7
- module ConnectionSpecification
8
- module Resolver
9
- def spec(config)
10
- connection_specification = super(config)
11
-
12
- if connection_specification.config[:adapter] == "mysql2"
13
- require "active_record/connection_adapters/mysql2/creating_foreign_keys/schema_creation"
14
- require "active_record/connection_adapters/mysql2/creating_foreign_keys/schema_statements"
15
-
16
- ActiveRecord::ConnectionAdapters::Mysql2Adapter::SchemaCreation.prepend(ActiveRecord::ConnectionAdapters::Mysql2::CreatingForeignKeys::SchemaCreation)
17
- ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(ActiveRecord::ConnectionAdapters::Mysql2::CreatingForeignKeys::SchemaStatements)
18
- end
19
-
20
- connection_specification
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- module ConnectionAdapters
5
- module Mysql2
6
- module CreatingForeignKeys
7
- module SchemaCreation
8
- private
9
- def visit_TableDefinition(o)
10
- return super(o) if o.foreign_keys.empty?
11
-
12
- name = o.name
13
- create_sql = +"CREATE#{' TEMPORARY' if o.temporary} TABLE #{quote_table_name(name)} "
14
-
15
- statements = o.columns.map { |c| accept c }
16
- statements.concat(o.indexes.map { |column_name, options| index_in_create(name, column_name, options) })
17
- statements.concat(o.foreign_keys.map { |to_table, options| foreign_key_in_create(o.name, to_table, options) })
18
-
19
- create_sql << "(#{statements.join(', ')}) " if statements.present?
20
- create_sql << "#{o.options}"
21
- create_sql << " AS #{@conn.to_sql(o.as)}" if o.as
22
- create_sql
23
- end
24
-
25
- def visit_ForeignKeyDefinition(o)
26
- sql = +<<-SQL.strip_heredoc
27
- CONSTRAINT #{quote_column_name(o.name)}
28
- FOREIGN KEY (#{quote_column_name(o.column)})
29
- REFERENCES #{quote_table_name(o.to_table)} (#{quote_column_name(o.primary_key)})
30
- SQL
31
- sql << " #{action_sql('DELETE', o.on_delete)}" if o.on_delete
32
- sql << " #{action_sql('UPDATE', o.on_update)}" if o.on_update
33
- sql
34
- end
35
-
36
- def foreign_key_in_create(from_table, to_table, options)
37
- options = @conn.foreign_key_options(from_table, to_table, options)
38
- accept ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(from_table, to_table, options)
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- module ConnectionAdapters
5
- module Mysql2
6
- module CreatingForeignKeys
7
- module SchemaStatements
8
- def create_table(table_name, options = {})
9
- td = create_table_definition table_name, options[:temporary], options[:options], options[:as]
10
-
11
- if options[:id] != false && !options[:as]
12
- pk = options.fetch(:primary_key) do
13
- Base.get_primary_key table_name.to_s.singularize
14
- end
15
-
16
- td.primary_key pk, options.fetch(:id, :primary_key), options
17
- end
18
-
19
- yield td if block_given?
20
-
21
- if options[:force] && table_exists?(table_name)
22
- drop_table(table_name, options)
23
- end
24
-
25
- result = execute schema_creation.accept td
26
-
27
- unless supports_indexes_in_create?
28
- td.indexes.each_pair do |column_name, index_options|
29
- add_index(table_name, column_name, index_options)
30
- end
31
- end
32
-
33
- result
34
- end
35
-
36
- def foreign_key_options(from_table, to_table, options) # :nodoc:
37
- options = options.dup
38
- options[:column] ||= foreign_key_column_for(to_table)
39
- options[:name] ||= foreign_key_name(from_table, options)
40
- options
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/lazy_load_hooks"
4
-
5
- ActiveSupport.on_load(:active_record) do
6
- require "active_record/connection_adapters/mysql2/creating_foreign_keys/connection_specification/resolver"
7
-
8
- ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.prepend(ActiveRecord::ConnectionAdapters::Mysql2::CreatingForeignKeys::ConnectionSpecification::Resolver)
9
- end