composite_primary_keys 13.0.3 → 14.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +894 -896
- data/README.rdoc +182 -181
- data/lib/composite_primary_keys/associations/{join_association.rb → join_dependency.rb} +137 -137
- data/lib/composite_primary_keys/associations/preloader/association.rb +68 -53
- data/lib/composite_primary_keys/associations/through_association.rb +25 -24
- data/lib/composite_primary_keys/base.rb +141 -137
- data/lib/composite_primary_keys/composite_predicates.rb +71 -70
- data/lib/composite_primary_keys/persistence.rb +96 -82
- data/lib/composite_primary_keys/relation/calculations.rb +110 -104
- data/lib/composite_primary_keys/version.rb +8 -8
- data/lib/composite_primary_keys.rb +118 -118
- data/test/abstract_unit.rb +118 -114
- data/test/fixtures/department.rb +16 -16
- data/test/fixtures/membership.rb +8 -8
- data/test/test_associations.rb +372 -372
- metadata +5 -5
@@ -1,82 +1,96 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Persistence
|
3
|
-
module ClassMethods
|
4
|
-
def delete(id_or_array)
|
5
|
-
# CPK
|
6
|
-
if self.composite?
|
7
|
-
id_or_array = if id_or_array.is_a?(CompositePrimaryKeys::CompositeKeys)
|
8
|
-
[id_or_array]
|
9
|
-
else
|
10
|
-
Array(id_or_array)
|
11
|
-
end
|
12
|
-
|
13
|
-
# Delete should return the number of deleted records
|
14
|
-
id_or_array.map do |id|
|
15
|
-
# Is the passed in id actually a record?
|
16
|
-
id = id.kind_of?(::ActiveRecord::Base) ? id.id : id
|
17
|
-
delete_by(cpk_id_predicate(self.arel_table, self.primary_key, id))
|
18
|
-
end.sum
|
19
|
-
else
|
20
|
-
delete_by(primary_key => id_or_array)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def _update_record(values, constraints) # :nodoc:
|
25
|
-
# CPK
|
26
|
-
if self.composite? && constraints[primary_key]
|
27
|
-
primary_key_values = constraints.delete(primary_key)
|
28
|
-
primary_key.each_with_index do |key, i|
|
29
|
-
constraints[key] = primary_key_values[i]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
constraints =
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
1
|
+
module ActiveRecord
|
2
|
+
module Persistence
|
3
|
+
module ClassMethods
|
4
|
+
def delete(id_or_array)
|
5
|
+
# CPK
|
6
|
+
if self.composite?
|
7
|
+
id_or_array = if id_or_array.is_a?(CompositePrimaryKeys::CompositeKeys)
|
8
|
+
[id_or_array]
|
9
|
+
else
|
10
|
+
Array(id_or_array)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Delete should return the number of deleted records
|
14
|
+
id_or_array.map do |id|
|
15
|
+
# Is the passed in id actually a record?
|
16
|
+
id = id.kind_of?(::ActiveRecord::Base) ? id.id : id
|
17
|
+
delete_by(cpk_id_predicate(self.arel_table, self.primary_key, id))
|
18
|
+
end.sum
|
19
|
+
else
|
20
|
+
delete_by(primary_key => id_or_array)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def _update_record(values, constraints) # :nodoc:
|
25
|
+
# CPK
|
26
|
+
if self.composite? && constraints[primary_key]
|
27
|
+
primary_key_values = constraints.delete(primary_key)
|
28
|
+
primary_key.each_with_index do |key, i|
|
29
|
+
constraints[key] = primary_key_values[i]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
constraints = constraints.map { |name, value| predicate_builder[name, value] }
|
34
|
+
|
35
|
+
default_constraint = build_default_constraint
|
36
|
+
constraints << default_constraint if default_constraint
|
37
|
+
|
38
|
+
if current_scope = self.global_current_scope
|
39
|
+
constraints << current_scope.where_clause.ast
|
40
|
+
end
|
41
|
+
|
42
|
+
um = Arel::UpdateManager.new(arel_table)
|
43
|
+
um.set(values.transform_keys { |name| arel_table[name] })
|
44
|
+
um.wheres = constraints
|
45
|
+
|
46
|
+
connection.update(um, "#{self} Update")
|
47
|
+
end
|
48
|
+
|
49
|
+
def _delete_record(constraints) # :nodoc:
|
50
|
+
# CPK
|
51
|
+
if self.composite? && constraints[primary_key]
|
52
|
+
primary_key_values = constraints.delete(primary_key)
|
53
|
+
primary_key.each_with_index do |key, i|
|
54
|
+
constraints[key] = primary_key_values[i]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
constraints = constraints.map { |name, value| predicate_builder[name, value] }
|
59
|
+
|
60
|
+
default_constraint = build_default_constraint
|
61
|
+
constraints << default_constraint if default_constraint
|
62
|
+
|
63
|
+
if current_scope = self.global_current_scope
|
64
|
+
constraints << current_scope.where_clause.ast
|
65
|
+
end
|
66
|
+
|
67
|
+
dm = Arel::DeleteManager.new(arel_table)
|
68
|
+
dm.wheres = constraints
|
69
|
+
|
70
|
+
connection.delete(dm, "#{self} Destroy")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def _create_record(attribute_names = self.attribute_names)
|
75
|
+
attribute_names = attributes_for_create(attribute_names)
|
76
|
+
|
77
|
+
new_id = self.class._insert_record(
|
78
|
+
attributes_with_values(attribute_names)
|
79
|
+
)
|
80
|
+
|
81
|
+
# CPK
|
82
|
+
if self.composite?
|
83
|
+
self.id = self.id.zip(Array(new_id)).map {|id1, id2| id2.nil? ? id1 : id2}
|
84
|
+
else
|
85
|
+
self.id ||= new_id if self.class.primary_key
|
86
|
+
end
|
87
|
+
|
88
|
+
@new_record = false
|
89
|
+
@previously_new_record = true
|
90
|
+
|
91
|
+
yield(self) if block_given?
|
92
|
+
|
93
|
+
id
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -1,104 +1,110 @@
|
|
1
|
-
module CompositePrimaryKeys
|
2
|
-
module ActiveRecord
|
3
|
-
module Calculations
|
4
|
-
def aggregate_column(column_name)
|
5
|
-
# CPK
|
6
|
-
if column_name.kind_of?(Array)
|
7
|
-
# Note: Test don't seem to run this code?
|
8
|
-
column_name.map do |column|
|
9
|
-
@klass.arel_table[column]
|
10
|
-
end
|
11
|
-
elsif @klass.has_attribute?(column_name) || @klass.attribute_alias?(column_name)
|
12
|
-
@klass.arel_table[column_name]
|
13
|
-
else
|
14
|
-
Arel.sql(column_name == :all ? "*" : column_name.to_s)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
|
19
|
-
column_alias = column_name
|
20
|
-
|
21
|
-
# CPK
|
22
|
-
# if operation == "count" && (column_name == :all && distinct || has_limit_or_offset?)
|
23
|
-
# # Shortcut when limit is zero.
|
24
|
-
# return 0 if limit_value == 0
|
25
|
-
#
|
26
|
-
# query_builder = build_count_subquery(spawn, column_name, distinct)
|
27
|
-
if operation == "count"
|
28
|
-
relation = unscope(:order)
|
29
|
-
query_builder = build_count_subquery(spawn, column_name, distinct)
|
30
|
-
else
|
31
|
-
# PostgreSQL doesn't like ORDER BY when there are no GROUP BY
|
32
|
-
relation = unscope(:order).distinct!(false)
|
33
|
-
|
34
|
-
column = aggregate_column(column_name)
|
35
|
-
select_value = operation_over_aggregate_column(column, operation, distinct)
|
36
|
-
select_value.distinct = true if operation == "sum" && distinct
|
37
|
-
|
38
|
-
relation.select_values = [select_value]
|
39
|
-
|
40
|
-
query_builder = relation.arel
|
41
|
-
end
|
42
|
-
|
43
|
-
result = skip_query_cache_if_necessary { @klass.connection.select_all(query_builder) }
|
44
|
-
|
45
|
-
|
46
|
-
type = column.try(:type_caster) ||
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
1
|
+
module CompositePrimaryKeys
|
2
|
+
module ActiveRecord
|
3
|
+
module Calculations
|
4
|
+
def aggregate_column(column_name)
|
5
|
+
# CPK
|
6
|
+
if column_name.kind_of?(Array)
|
7
|
+
# Note: Test don't seem to run this code?
|
8
|
+
column_name.map do |column|
|
9
|
+
@klass.arel_table[column]
|
10
|
+
end
|
11
|
+
elsif @klass.has_attribute?(column_name) || @klass.attribute_alias?(column_name)
|
12
|
+
@klass.arel_table[column_name]
|
13
|
+
else
|
14
|
+
Arel.sql(column_name == :all ? "*" : column_name.to_s)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
|
19
|
+
column_alias = column_name
|
20
|
+
|
21
|
+
# CPK
|
22
|
+
# if operation == "count" && (column_name == :all && distinct || has_limit_or_offset?)
|
23
|
+
# # Shortcut when limit is zero.
|
24
|
+
# return 0 if limit_value == 0
|
25
|
+
#
|
26
|
+
# query_builder = build_count_subquery(spawn, column_name, distinct)
|
27
|
+
if operation == "count"
|
28
|
+
relation = unscope(:order)
|
29
|
+
query_builder = build_count_subquery(spawn, column_name, distinct)
|
30
|
+
else
|
31
|
+
# PostgreSQL doesn't like ORDER BY when there are no GROUP BY
|
32
|
+
relation = unscope(:order).distinct!(false)
|
33
|
+
|
34
|
+
column = aggregate_column(column_name)
|
35
|
+
select_value = operation_over_aggregate_column(column, operation, distinct)
|
36
|
+
select_value.distinct = true if operation == "sum" && distinct
|
37
|
+
|
38
|
+
relation.select_values = [select_value]
|
39
|
+
|
40
|
+
query_builder = relation.arel
|
41
|
+
end
|
42
|
+
|
43
|
+
result = skip_query_cache_if_necessary { @klass.connection.select_all(query_builder) }
|
44
|
+
|
45
|
+
if operation != "count"
|
46
|
+
type = column.try(:type_caster) ||
|
47
|
+
lookup_cast_type_from_join_dependencies(column_name.to_s) || ::ActiveRecord::Type.default_value
|
48
|
+
type = type.subtype if ::ActiveRecord::Enum::EnumType === type
|
49
|
+
end
|
50
|
+
|
51
|
+
type_cast_calculated_value(result.cast_values.first, operation, type) do |value|
|
52
|
+
type = column.try(:type_caster) ||
|
53
|
+
# CPK
|
54
|
+
# lookup_cast_type_from_join_dependencies(column_name.to_s) || Type.default_value
|
55
|
+
lookup_cast_type_from_join_dependencies(column_name.to_s) || ::ActiveRecord::Type.default_value
|
56
|
+
type.deserialize(value)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def build_count_subquery(relation, column_name, distinct)
|
61
|
+
if column_name == :all
|
62
|
+
column_alias = Arel.star
|
63
|
+
# CPK
|
64
|
+
# relation.select_values = [ Arel.sql(FinderMethods::ONE_AS_ONE) ] unless distinct
|
65
|
+
relation.select_values = [ Arel.sql(::ActiveRecord::FinderMethods::ONE_AS_ONE) ] unless distinct
|
66
|
+
elsif column_name.is_a?(Array)
|
67
|
+
column_alias = Arel.star
|
68
|
+
relation.select_values = column_name.map do |column|
|
69
|
+
Arel::Attribute.new(@klass.unscoped.table, column)
|
70
|
+
end
|
71
|
+
else
|
72
|
+
column_alias = Arel.sql("count_column")
|
73
|
+
relation.select_values = [ aggregate_column(column_name).as(column_alias) ]
|
74
|
+
end
|
75
|
+
|
76
|
+
subquery_alias = Arel.sql("subquery_for_count")
|
77
|
+
select_value = operation_over_aggregate_column(column_alias, "count", false)
|
78
|
+
|
79
|
+
relation.build_subquery(subquery_alias, select_value)
|
80
|
+
end
|
81
|
+
|
82
|
+
def calculate(operation, column_name)
|
83
|
+
if has_include?(column_name)
|
84
|
+
relation = apply_join_dependency
|
85
|
+
|
86
|
+
if operation.to_s.downcase == "count"
|
87
|
+
unless distinct_value || distinct_select?(column_name || select_for_count)
|
88
|
+
relation.distinct!
|
89
|
+
# CPK
|
90
|
+
# relation.select_values = [ klass.primary_key || table[Arel.star] ]
|
91
|
+
if klass.primary_key.present? && klass.primary_key.is_a?(Array)
|
92
|
+
relation.select_values = klass.primary_key.map do |k|
|
93
|
+
"#{connection.quote_table_name(klass.table_name)}.#{connection.quote_column_name(k)}"
|
94
|
+
end
|
95
|
+
else
|
96
|
+
relation.select_values = [ klass.primary_key || table[Arel.star] ]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
# PostgreSQL: ORDER BY expressions must appear in SELECT list when using DISTINCT
|
100
|
+
relation.order_values = [] if group_values.empty?
|
101
|
+
end
|
102
|
+
|
103
|
+
relation.calculate(operation, column_name)
|
104
|
+
else
|
105
|
+
perform_calculation(operation, column_name)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
module CompositePrimaryKeys
|
2
|
-
module VERSION
|
3
|
-
MAJOR =
|
4
|
-
MINOR = 0
|
5
|
-
TINY =
|
6
|
-
STRING = [MAJOR, MINOR, TINY].join('.')
|
7
|
-
end
|
8
|
-
end
|
1
|
+
module CompositePrimaryKeys
|
2
|
+
module VERSION
|
3
|
+
MAJOR = 14
|
4
|
+
MINOR = 0
|
5
|
+
TINY = 1
|
6
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
7
|
+
end
|
8
|
+
end
|
@@ -1,119 +1,119 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2006-2016 Nic Williams and Charlie Savage
|
3
|
-
#
|
4
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
-
# a copy of this software and associated documentation files (the
|
6
|
-
# "Software"), to deal in the Software without restriction, including
|
7
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
-
# the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be
|
13
|
-
# included in all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
-
#++
|
23
|
-
|
24
|
-
unless defined?(ActiveRecord)
|
25
|
-
require 'rubygems'
|
26
|
-
gem 'activerecord', '~>
|
27
|
-
require 'active_record'
|
28
|
-
end
|
29
|
-
|
30
|
-
# ActiveModel files we override
|
31
|
-
# _write_attribute
|
32
|
-
require 'active_model/attribute_assignment'
|
33
|
-
|
34
|
-
# ActiveRecord files we override
|
35
|
-
require 'active_record/attribute_methods'
|
36
|
-
require 'active_record/autosave_association'
|
37
|
-
require 'active_record/counter_cache'
|
38
|
-
require 'active_record/fixtures'
|
39
|
-
require 'active_record/model_schema'
|
40
|
-
require 'active_record/persistence'
|
41
|
-
require 'active_record/reflection'
|
42
|
-
require 'active_record/relation'
|
43
|
-
require 'active_record/sanitization'
|
44
|
-
require 'active_record/transactions'
|
45
|
-
|
46
|
-
require 'active_record/associations/association'
|
47
|
-
require 'active_record/associations/association_scope'
|
48
|
-
require 'active_record/associations/foreign_association'
|
49
|
-
require 'active_record/associations/has_many_association'
|
50
|
-
require 'active_record/associations/has_many_through_association'
|
51
|
-
require 'active_record/associations/join_dependency'
|
52
|
-
require 'active_record/associations/preloader/association'
|
53
|
-
require 'active_record/associations/singular_association'
|
54
|
-
require 'active_record/associations/collection_association'
|
55
|
-
require 'active_record/associations/through_association'
|
56
|
-
|
57
|
-
require 'active_record/attribute_methods/primary_key'
|
58
|
-
require 'active_record/attribute_methods/read'
|
59
|
-
require 'active_record/attribute_methods/write'
|
60
|
-
require 'active_record/nested_attributes'
|
61
|
-
|
62
|
-
require 'active_record/connection_adapters/abstract/database_statements'
|
63
|
-
require 'active_record/connection_adapters/abstract_adapter'
|
64
|
-
require 'active_record/connection_adapters/postgresql/database_statements'
|
65
|
-
|
66
|
-
require 'active_record/relation/where_clause'
|
67
|
-
require 'active_record/table_metadata'
|
68
|
-
|
69
|
-
# CPK overrides
|
70
|
-
require_relative 'composite_primary_keys/active_model/attribute_assignment'
|
71
|
-
require_relative 'composite_primary_keys/attribute_methods'
|
72
|
-
require_relative 'composite_primary_keys/autosave_association'
|
73
|
-
require_relative 'composite_primary_keys/persistence'
|
74
|
-
require_relative 'composite_primary_keys/base'
|
75
|
-
require_relative 'composite_primary_keys/core'
|
76
|
-
require_relative 'composite_primary_keys/composite_arrays'
|
77
|
-
require_relative 'composite_primary_keys/composite_predicates'
|
78
|
-
require_relative 'composite_primary_keys/counter_cache'
|
79
|
-
require_relative 'composite_primary_keys/fixtures'
|
80
|
-
require_relative 'composite_primary_keys/reflection'
|
81
|
-
require_relative 'composite_primary_keys/relation'
|
82
|
-
require_relative 'composite_primary_keys/sanitization'
|
83
|
-
require_relative 'composite_primary_keys/transactions'
|
84
|
-
require_relative 'composite_primary_keys/version'
|
85
|
-
|
86
|
-
require_relative 'composite_primary_keys/associations/association'
|
87
|
-
require_relative 'composite_primary_keys/associations/association_scope'
|
88
|
-
require_relative 'composite_primary_keys/associations/foreign_association'
|
89
|
-
require_relative 'composite_primary_keys/associations/has_many_association'
|
90
|
-
require_relative 'composite_primary_keys/associations/has_many_through_association'
|
91
|
-
require_relative 'composite_primary_keys/associations/
|
92
|
-
require_relative 'composite_primary_keys/associations/preloader/association'
|
93
|
-
require_relative 'composite_primary_keys/associations/collection_association'
|
94
|
-
require_relative 'composite_primary_keys/associations/through_association'
|
95
|
-
|
96
|
-
require_relative 'composite_primary_keys/attribute_methods/primary_key'
|
97
|
-
require_relative 'composite_primary_keys/attribute_methods/read'
|
98
|
-
require_relative 'composite_primary_keys/attribute_methods/write'
|
99
|
-
require_relative 'composite_primary_keys/nested_attributes'
|
100
|
-
|
101
|
-
require_relative 'composite_primary_keys/connection_adapters/abstract/database_statements'
|
102
|
-
require_relative 'composite_primary_keys/connection_adapters/abstract_adapter'
|
103
|
-
require_relative 'composite_primary_keys/connection_adapters/postgresql/database_statements'
|
104
|
-
require_relative 'composite_primary_keys/connection_adapters/sqlserver/database_statements'
|
105
|
-
|
106
|
-
require_relative 'composite_primary_keys/relation/batches'
|
107
|
-
require_relative 'composite_primary_keys/relation/where_clause'
|
108
|
-
require_relative 'composite_primary_keys/relation/calculations'
|
109
|
-
require_relative 'composite_primary_keys/relation/finder_methods'
|
110
|
-
require_relative 'composite_primary_keys/relation/predicate_builder/association_query_value'
|
111
|
-
require_relative 'composite_primary_keys/relation/query_methods'
|
112
|
-
|
113
|
-
require_relative 'composite_primary_keys/validations/uniqueness'
|
114
|
-
|
115
|
-
require_relative 'composite_primary_keys/composite_relation'
|
116
|
-
|
117
|
-
require_relative 'composite_primary_keys/arel/to_sql'
|
118
|
-
require_relative 'composite_primary_keys/arel/sqlserver'
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2006-2016 Nic Williams and Charlie Savage
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
unless defined?(ActiveRecord)
|
25
|
+
require 'rubygems'
|
26
|
+
gem 'activerecord', '~>7.0.0', '>= 7.0.1'
|
27
|
+
require 'active_record'
|
28
|
+
end
|
29
|
+
|
30
|
+
# ActiveModel files we override
|
31
|
+
# _write_attribute
|
32
|
+
require 'active_model/attribute_assignment'
|
33
|
+
|
34
|
+
# ActiveRecord files we override
|
35
|
+
require 'active_record/attribute_methods'
|
36
|
+
require 'active_record/autosave_association'
|
37
|
+
require 'active_record/counter_cache'
|
38
|
+
require 'active_record/fixtures'
|
39
|
+
require 'active_record/model_schema'
|
40
|
+
require 'active_record/persistence'
|
41
|
+
require 'active_record/reflection'
|
42
|
+
require 'active_record/relation'
|
43
|
+
require 'active_record/sanitization'
|
44
|
+
require 'active_record/transactions'
|
45
|
+
|
46
|
+
require 'active_record/associations/association'
|
47
|
+
require 'active_record/associations/association_scope'
|
48
|
+
require 'active_record/associations/foreign_association'
|
49
|
+
require 'active_record/associations/has_many_association'
|
50
|
+
require 'active_record/associations/has_many_through_association'
|
51
|
+
require 'active_record/associations/join_dependency'
|
52
|
+
require 'active_record/associations/preloader/association'
|
53
|
+
require 'active_record/associations/singular_association'
|
54
|
+
require 'active_record/associations/collection_association'
|
55
|
+
require 'active_record/associations/through_association'
|
56
|
+
|
57
|
+
require 'active_record/attribute_methods/primary_key'
|
58
|
+
require 'active_record/attribute_methods/read'
|
59
|
+
require 'active_record/attribute_methods/write'
|
60
|
+
require 'active_record/nested_attributes'
|
61
|
+
|
62
|
+
require 'active_record/connection_adapters/abstract/database_statements'
|
63
|
+
require 'active_record/connection_adapters/abstract_adapter'
|
64
|
+
require 'active_record/connection_adapters/postgresql/database_statements'
|
65
|
+
|
66
|
+
require 'active_record/relation/where_clause'
|
67
|
+
require 'active_record/table_metadata'
|
68
|
+
|
69
|
+
# CPK overrides
|
70
|
+
require_relative 'composite_primary_keys/active_model/attribute_assignment'
|
71
|
+
require_relative 'composite_primary_keys/attribute_methods'
|
72
|
+
require_relative 'composite_primary_keys/autosave_association'
|
73
|
+
require_relative 'composite_primary_keys/persistence'
|
74
|
+
require_relative 'composite_primary_keys/base'
|
75
|
+
require_relative 'composite_primary_keys/core'
|
76
|
+
require_relative 'composite_primary_keys/composite_arrays'
|
77
|
+
require_relative 'composite_primary_keys/composite_predicates'
|
78
|
+
require_relative 'composite_primary_keys/counter_cache'
|
79
|
+
require_relative 'composite_primary_keys/fixtures'
|
80
|
+
require_relative 'composite_primary_keys/reflection'
|
81
|
+
require_relative 'composite_primary_keys/relation'
|
82
|
+
require_relative 'composite_primary_keys/sanitization'
|
83
|
+
require_relative 'composite_primary_keys/transactions'
|
84
|
+
require_relative 'composite_primary_keys/version'
|
85
|
+
|
86
|
+
require_relative 'composite_primary_keys/associations/association'
|
87
|
+
require_relative 'composite_primary_keys/associations/association_scope'
|
88
|
+
require_relative 'composite_primary_keys/associations/foreign_association'
|
89
|
+
require_relative 'composite_primary_keys/associations/has_many_association'
|
90
|
+
require_relative 'composite_primary_keys/associations/has_many_through_association'
|
91
|
+
require_relative 'composite_primary_keys/associations/join_dependency'
|
92
|
+
require_relative 'composite_primary_keys/associations/preloader/association'
|
93
|
+
require_relative 'composite_primary_keys/associations/collection_association'
|
94
|
+
require_relative 'composite_primary_keys/associations/through_association'
|
95
|
+
|
96
|
+
require_relative 'composite_primary_keys/attribute_methods/primary_key'
|
97
|
+
require_relative 'composite_primary_keys/attribute_methods/read'
|
98
|
+
require_relative 'composite_primary_keys/attribute_methods/write'
|
99
|
+
require_relative 'composite_primary_keys/nested_attributes'
|
100
|
+
|
101
|
+
require_relative 'composite_primary_keys/connection_adapters/abstract/database_statements'
|
102
|
+
require_relative 'composite_primary_keys/connection_adapters/abstract_adapter'
|
103
|
+
require_relative 'composite_primary_keys/connection_adapters/postgresql/database_statements'
|
104
|
+
require_relative 'composite_primary_keys/connection_adapters/sqlserver/database_statements'
|
105
|
+
|
106
|
+
require_relative 'composite_primary_keys/relation/batches'
|
107
|
+
require_relative 'composite_primary_keys/relation/where_clause'
|
108
|
+
require_relative 'composite_primary_keys/relation/calculations'
|
109
|
+
require_relative 'composite_primary_keys/relation/finder_methods'
|
110
|
+
require_relative 'composite_primary_keys/relation/predicate_builder/association_query_value'
|
111
|
+
require_relative 'composite_primary_keys/relation/query_methods'
|
112
|
+
|
113
|
+
require_relative 'composite_primary_keys/validations/uniqueness'
|
114
|
+
|
115
|
+
require_relative 'composite_primary_keys/composite_relation'
|
116
|
+
|
117
|
+
require_relative 'composite_primary_keys/arel/to_sql'
|
118
|
+
require_relative 'composite_primary_keys/arel/sqlserver'
|
119
119
|
require_relative 'composite_primary_keys/table_metadata'
|