composite_primary_keys 8.1.1 → 8.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +4 -1
- data/lib/composite_primary_keys.rb +5 -1
- data/lib/composite_primary_keys/arel/visitors/to_sql.rb +24 -0
- data/lib/composite_primary_keys/associations/association_scope.rb +32 -58
- data/lib/composite_primary_keys/associations/join_dependency/join_association.rb +22 -22
- data/lib/composite_primary_keys/associations/preloader/association.rb +12 -6
- data/lib/composite_primary_keys/associations/preloader/belongs_to.rb +19 -19
- data/lib/composite_primary_keys/attribute_methods/primary_key.rb +1 -2
- data/lib/composite_primary_keys/attribute_methods/read.rb +2 -2
- data/lib/composite_primary_keys/attribute_methods/write.rb +1 -1
- data/lib/composite_primary_keys/composite_predicates.rb +55 -50
- data/lib/composite_primary_keys/composite_relation.rb +48 -48
- data/lib/composite_primary_keys/connection_adapters/abstract/connection_specification_changes.rb +2 -2
- data/lib/composite_primary_keys/connection_adapters/postgresql_adapter.rb +19 -46
- data/lib/composite_primary_keys/connection_adapters/sqlserver_adapter.rb +8 -4
- data/lib/composite_primary_keys/fixtures.rb +26 -22
- data/lib/composite_primary_keys/locking/optimistic.rb +54 -55
- data/lib/composite_primary_keys/relation.rb +15 -8
- data/lib/composite_primary_keys/relation/batches.rb +23 -19
- data/lib/composite_primary_keys/relation/calculations.rb +4 -2
- data/lib/composite_primary_keys/relation/finder_methods.rb +33 -27
- data/lib/composite_primary_keys/relation/predicate_builder.rb +18 -3
- data/lib/composite_primary_keys/relation/query_methods.rb +41 -41
- data/lib/composite_primary_keys/sanitization.rb +7 -5
- data/lib/composite_primary_keys/validations/uniqueness.rb +20 -16
- data/lib/composite_primary_keys/version.rb +1 -1
- data/tasks/databases/oracle.rake +27 -25
- data/tasks/databases/oracle_enhanced.rake +27 -0
- data/test/connections/databases.ci.yml +15 -15
- data/test/connections/native_oracle/connection.rb +11 -11
- data/test/connections/native_oracle_enhanced/connection.rb +16 -16
- data/test/fixtures/comment.rb +7 -7
- data/test/fixtures/db_definitions/db2-create-tables.sql +126 -126
- data/test/fixtures/db_definitions/db2-drop-tables.sql +18 -18
- data/test/fixtures/db_definitions/oracle.drop.sql +48 -45
- data/test/fixtures/db_definitions/oracle.sql +236 -223
- data/test/fixtures/dorm.rb +2 -2
- data/test/fixtures/membership.rb +6 -6
- data/test/fixtures/membership_statuses.yml +16 -16
- data/test/fixtures/memberships.yml +10 -10
- data/test/fixtures/product_tariffs.yml +14 -14
- data/test/fixtures/reference_code.rb +7 -7
- data/test/fixtures/restaurants_suburb.rb +2 -2
- data/test/fixtures/suburb.rb +5 -5
- data/test/fixtures/topic.rb +5 -5
- data/test/fixtures/topic_source.rb +6 -6
- data/test/fixtures/topic_sources.yml +3 -3
- data/test/fixtures/topics.yml +8 -8
- data/test/fixtures/users.yml +10 -10
- data/test/test_attribute_methods.rb +63 -63
- data/test/test_calculations.rb +42 -37
- data/test/test_callbacks.rb +99 -99
- data/test/test_delete.rb +28 -21
- data/test/test_delete_all.rb +5 -4
- data/test/test_dumpable.rb +15 -15
- data/test/test_nested_attributes.rb +124 -124
- data/test/test_optimistic.rb +18 -18
- data/test/test_polymorphic.rb +1 -1
- data/test/test_predicates.rb +40 -40
- data/test/test_santiago.rb +23 -23
- data/test/test_suite.rb +34 -34
- data/test/test_touch.rb +23 -23
- data/test/test_update.rb +71 -71
- metadata +9 -8
- data/lib/composite_primary_keys/model_schema.rb +0 -15
@@ -21,7 +21,7 @@ module CompositePrimaryKeys
|
|
21
21
|
column_alias = column_name
|
22
22
|
|
23
23
|
bind_values = nil
|
24
|
-
|
24
|
+
|
25
25
|
# CPK
|
26
26
|
# if operation == "count" && (relation.limit_value || relation.offset_value)
|
27
27
|
if operation == "count"
|
@@ -36,6 +36,7 @@ module CompositePrimaryKeys
|
|
36
36
|
select_value = operation_over_aggregate_column(column, operation, distinct)
|
37
37
|
|
38
38
|
column_alias = select_value.alias
|
39
|
+
column_alias ||= @klass.connection.column_name_for_operation(operation, select_value)
|
39
40
|
relation.select_values = [select_value]
|
40
41
|
|
41
42
|
query_builder = relation.arel
|
@@ -69,6 +70,7 @@ module CompositePrimaryKeys
|
|
69
70
|
subquery = relation.arel.as(subquery_alias)
|
70
71
|
|
71
72
|
sm = Arel::SelectManager.new relation.engine
|
73
|
+
sm.bind_values = relation.arel.bind_values
|
72
74
|
# CPK
|
73
75
|
# select_value = operation_over_aggregate_column(column_alias, 'count', distinct)
|
74
76
|
select_value = operation_over_aggregate_column(Arel.sql("*"), 'count', false)
|
@@ -76,4 +78,4 @@ module CompositePrimaryKeys
|
|
76
78
|
end
|
77
79
|
end
|
78
80
|
end
|
79
|
-
end
|
81
|
+
end
|
@@ -11,7 +11,7 @@ module CompositePrimaryKeys
|
|
11
11
|
if relation.limit_value
|
12
12
|
limited_ids = limited_ids_for(relation)
|
13
13
|
# CPK
|
14
|
-
#limited_ids.empty? ? relation.none! : relation.where!(table[primary_key].in(limited_ids))
|
14
|
+
# limited_ids.empty? ? relation.none! : relation.where!(table[primary_key].in(limited_ids))
|
15
15
|
limited_ids.empty? ? relation.none! : relation.where!(cpk_in_predicate(table, self.primary_keys, limited_ids))
|
16
16
|
end
|
17
17
|
relation.except(:limit, :offset)
|
@@ -20,16 +20,17 @@ module CompositePrimaryKeys
|
|
20
20
|
|
21
21
|
def limited_ids_for(relation)
|
22
22
|
# CPK
|
23
|
-
#values = @klass.connection.columns_for_distinct(
|
24
|
-
#
|
23
|
+
# values = @klass.connection.columns_for_distinct(
|
24
|
+
# "#{quoted_table_name}.#{quoted_primary_key}", relation.order_values)
|
25
25
|
columns = @klass.primary_keys.map do |key|
|
26
26
|
"#{quoted_table_name}.#{connection.quote_column_name(key)}"
|
27
27
|
end
|
28
28
|
values = @klass.connection.columns_for_distinct(columns, relation.order_values)
|
29
29
|
|
30
30
|
relation = relation.except(:select).select(values).distinct!
|
31
|
+
arel = relation.arel
|
31
32
|
|
32
|
-
id_rows = @klass.connection.select_all(
|
33
|
+
id_rows = @klass.connection.select_all(arel, 'SQL', arel.bind_values + relation.bind_values)
|
33
34
|
|
34
35
|
# CPK
|
35
36
|
#id_rows.map {|row| row[primary_key]}
|
@@ -37,12 +38,14 @@ module CompositePrimaryKeys
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def exists?(conditions = :none)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
if ::ActiveRecord::Base === conditions
|
42
|
+
conditions = conditions.id
|
43
|
+
::ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
44
|
+
You are passing an instance of ActiveRecord::Base to `exists?`.
|
45
|
+
Please pass the id of the object by calling `.id`
|
46
|
+
MSG
|
47
|
+
end
|
44
48
|
|
45
|
-
conditions = conditions.id if ::ActiveRecord::Base === conditions
|
46
49
|
return false if !conditions
|
47
50
|
|
48
51
|
relation = apply_join_dependency(self, construct_join_dependency)
|
@@ -50,14 +53,14 @@ module CompositePrimaryKeys
|
|
50
53
|
|
51
54
|
relation = relation.except(:select, :order).select(::ActiveRecord::FinderMethods::ONE_AS_ONE).limit(1)
|
52
55
|
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#end
|
60
|
-
|
56
|
+
# case conditions
|
57
|
+
# when Array, Hash
|
58
|
+
# relation = relation.where(conditions)
|
59
|
+
# else
|
60
|
+
# unless conditions == :none
|
61
|
+
# relation = relation.where(primary_key => conditions)
|
62
|
+
# end
|
63
|
+
# end
|
61
64
|
case conditions
|
62
65
|
when CompositePrimaryKeys::CompositeKeys
|
63
66
|
relation = relation.where(cpk_id_predicate(table, primary_key, conditions))
|
@@ -80,14 +83,14 @@ module CompositePrimaryKeys
|
|
80
83
|
raise UnknownPrimaryKey.new(@klass) if primary_key.nil?
|
81
84
|
|
82
85
|
# CPK
|
83
|
-
#expects_array = ids.first.kind_of?(Array)
|
86
|
+
# expects_array = ids.first.kind_of?(Array)
|
84
87
|
ids = CompositePrimaryKeys.normalize(ids)
|
85
88
|
expects_array = ids.flatten != ids.flatten(1)
|
86
89
|
|
87
90
|
return ids.first if expects_array && ids.first.empty?
|
88
91
|
|
89
92
|
# CPK
|
90
|
-
#ids = ids.flatten.compact.uniq
|
93
|
+
# ids = ids.flatten.compact.uniq
|
91
94
|
ids = expects_array ? ids.first : ids
|
92
95
|
|
93
96
|
case ids.size
|
@@ -105,24 +108,27 @@ module CompositePrimaryKeys
|
|
105
108
|
|
106
109
|
def find_one(id)
|
107
110
|
# CPK
|
108
|
-
#
|
109
|
-
|
111
|
+
# if ActiveRecord::Base === id
|
112
|
+
if ::ActiveRecord::Base === id
|
113
|
+
id = id.id
|
114
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
115
|
+
You are passing an instance of ActiveRecord::Base to `find`.
|
116
|
+
Please pass the id of the object by calling `.id`
|
117
|
+
MSG
|
118
|
+
end
|
110
119
|
|
111
|
-
# CPK
|
112
|
-
#column = columns_hash[primary_key]
|
113
|
-
#substitute = connection.substitute_at(column, bind_values.length)
|
114
|
-
#relation = where(table[primary_key].eq(substitute))
|
115
|
-
#relation.bind_values += [[column, id]]
|
116
|
-
#record = relation.take
|
117
120
|
relation = self
|
118
121
|
values = primary_keys.each_with_index.map do |primary_key, i|
|
119
122
|
column = columns_hash[primary_key]
|
120
123
|
relation.bind_values += [[column, id[i]]]
|
121
124
|
connection.substitute_at(column, bind_values.length - 1)
|
122
125
|
end
|
126
|
+
|
123
127
|
relation = relation.where(cpk_id_predicate(table, primary_keys, values))
|
124
128
|
record = relation.take
|
129
|
+
|
125
130
|
raise_record_not_found_exception!(id, 0, 1) unless record
|
131
|
+
|
126
132
|
record
|
127
133
|
end
|
128
134
|
|
@@ -2,12 +2,27 @@ module ActiveRecord
|
|
2
2
|
class PredicateBuilder
|
3
3
|
def self.expand(klass, table, column, value)
|
4
4
|
queries = []
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
# Find the foreign key when using queries such as:
|
7
|
+
# Post.where(author: author)
|
8
|
+
#
|
9
|
+
# For polymorphic relationships, find the foreign key and type:
|
10
|
+
# PriceEstimate.where(estimate_of: treasure)
|
11
|
+
if klass && reflection = klass._reflect_on_association(column)
|
12
|
+
base_class = polymorphic_base_class_from_value(value)
|
13
|
+
|
14
|
+
if reflection.polymorphic? && base_class
|
7
15
|
queries << build(table[reflection.foreign_type], base_class)
|
8
16
|
end
|
9
17
|
|
10
18
|
column = reflection.foreign_key
|
19
|
+
|
20
|
+
# CPK
|
21
|
+
# if base_class
|
22
|
+
if base_class && !(Base === value && value.composite?)
|
23
|
+
primary_key = reflection.association_primary_key(base_class)
|
24
|
+
value = convert_value_to_association_ids(value, primary_key)
|
25
|
+
end
|
11
26
|
end
|
12
27
|
|
13
28
|
#CPK
|
@@ -19,4 +34,4 @@ module ActiveRecord
|
|
19
34
|
queries
|
20
35
|
end
|
21
36
|
end
|
22
|
-
end
|
37
|
+
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
module CompositePrimaryKeys::ActiveRecord::QueryMethods
|
2
|
-
|
3
|
-
def reverse_sql_order(order_query)
|
4
|
-
# CPK
|
5
|
-
# order_query = ["#{quoted_table_name}.#{quoted_primary_key} ASC"] if order_query.empty?
|
6
|
-
|
7
|
-
# break apart CPKs
|
8
|
-
order_query = primary_key.map do |key|
|
9
|
-
"#{quoted_table_name}.#{connection.quote_column_name(key)} ASC"
|
10
|
-
end if order_query.empty?
|
11
|
-
|
12
|
-
order_query.map do |o|
|
13
|
-
case o
|
14
|
-
when Arel::Nodes::Ordering
|
15
|
-
o.reverse
|
16
|
-
when String, Symbol
|
17
|
-
o.to_s.split(',').collect do |s|
|
18
|
-
s.strip!
|
19
|
-
s.gsub!(/\sasc\Z/i, ' DESC') || s.gsub!(/\sdesc\Z/i, ' ASC') || s.concat(' DESC')
|
20
|
-
end
|
21
|
-
else
|
22
|
-
o
|
23
|
-
end
|
24
|
-
end.flatten
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
def order(*args)
|
29
|
-
args.map! do |arg|
|
30
|
-
if arg.is_a?(Arel::Nodes::Ordering) && arg.expr.name.is_a?(Array)
|
31
|
-
arg = arg.expr.name.map do |key|
|
32
|
-
cloned_node = arg.clone
|
33
|
-
cloned_node.expr.name = key
|
34
|
-
cloned_node
|
35
|
-
end
|
36
|
-
end
|
37
|
-
arg
|
38
|
-
end if composite?
|
39
|
-
super(*args)
|
40
|
-
end
|
41
|
-
end
|
1
|
+
module CompositePrimaryKeys::ActiveRecord::QueryMethods
|
2
|
+
|
3
|
+
def reverse_sql_order(order_query)
|
4
|
+
# CPK
|
5
|
+
# order_query = ["#{quoted_table_name}.#{quoted_primary_key} ASC"] if order_query.empty?
|
6
|
+
|
7
|
+
# break apart CPKs
|
8
|
+
order_query = primary_key.map do |key|
|
9
|
+
"#{quoted_table_name}.#{connection.quote_column_name(key)} ASC"
|
10
|
+
end if order_query.empty?
|
11
|
+
|
12
|
+
order_query.map do |o|
|
13
|
+
case o
|
14
|
+
when Arel::Nodes::Ordering
|
15
|
+
o.reverse
|
16
|
+
when String, Symbol
|
17
|
+
o.to_s.split(',').collect do |s|
|
18
|
+
s.strip!
|
19
|
+
s.gsub!(/\sasc\Z/i, ' DESC') || s.gsub!(/\sdesc\Z/i, ' ASC') || s.concat(' DESC')
|
20
|
+
end
|
21
|
+
else
|
22
|
+
o
|
23
|
+
end
|
24
|
+
end.flatten
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def order(*args)
|
29
|
+
args.map! do |arg|
|
30
|
+
if arg.is_a?(Arel::Nodes::Ordering) && arg.expr.name.is_a?(Array)
|
31
|
+
arg = arg.expr.name.map do |key|
|
32
|
+
cloned_node = arg.clone
|
33
|
+
cloned_node.expr.name = key
|
34
|
+
cloned_node
|
35
|
+
end
|
36
|
+
end
|
37
|
+
arg
|
38
|
+
end if composite?
|
39
|
+
super(*args)
|
40
|
+
end
|
41
|
+
end
|
@@ -16,6 +16,8 @@ module ActiveRecord
|
|
16
16
|
def expand_hash_conditions_for_aggregates(attrs)
|
17
17
|
expanded_attrs = {}
|
18
18
|
attrs.each do |attr, value|
|
19
|
+
# CPK
|
20
|
+
# if aggregation = reflect_on_aggregation(attr.to_sym)
|
19
21
|
if attr.is_a?(CompositePrimaryKeys::CompositeKeys)
|
20
22
|
attr.each_with_index do |key,i|
|
21
23
|
expanded_attrs[key] = value.respond_to?(:flatten) ? value.flatten[i] : value
|
@@ -38,13 +40,13 @@ module ActiveRecord
|
|
38
40
|
|
39
41
|
def quoted_id
|
40
42
|
# CPK
|
41
|
-
#quote_value(id, column_for_attribute(self.class.primary_key))
|
43
|
+
# self.class.quote_value(id, column_for_attribute(self.class.primary_key))
|
42
44
|
if self.composite?
|
43
|
-
[self.class.primary_keys, ids].
|
44
|
-
|
45
|
-
|
45
|
+
[self.class.primary_keys, ids].transpose.map { |attr_name,id|
|
46
|
+
self.class.quote_value(id, column_for_attribute(attr_name))
|
47
|
+
}
|
46
48
|
else
|
47
|
-
quote_value(id, column_for_attribute(self.class.primary_key))
|
49
|
+
self.class.quote_value(id, column_for_attribute(self.class.primary_key))
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -6,24 +6,28 @@ module ActiveRecord
|
|
6
6
|
table = finder_class.arel_table
|
7
7
|
value = map_enum_attribute(finder_class, attribute, value)
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
begin
|
10
|
+
relation = build_relation(finder_class, table, attribute, value)
|
11
|
+
# CPK
|
12
|
+
# relation = relation.and(table[finder_class.primary_key.to_sym].not_eq(record.id)) if record.persisted?
|
13
|
+
if record.persisted?
|
14
|
+
not_eq_conditions = Array(finder_class.primary_key).zip(Array(record.send(:id))).map do |name, value|
|
15
|
+
table[name.to_sym].not_eq(value)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
condition = not_eq_conditions.shift
|
19
|
+
not_eq_conditions.each do |not_eq_condition|
|
20
|
+
condition = condition.or(not_eq_condition)
|
21
|
+
end
|
22
|
+
relation = relation.and(condition)
|
20
23
|
end
|
21
|
-
|
24
|
+
# End CPK
|
25
|
+
relation = scope_relation(record, table, relation)
|
26
|
+
relation = finder_class.unscoped.where(relation)
|
27
|
+
relation = relation.merge(options[:conditions]) if options[:conditions]
|
28
|
+
rescue RangeError
|
29
|
+
relation = finder_class.none
|
22
30
|
end
|
23
|
-
|
24
|
-
relation = scope_relation(record, table, relation)
|
25
|
-
relation = finder_class.unscoped.where(relation)
|
26
|
-
relation = relation.merge(options[:conditions]) if options[:conditions]
|
27
31
|
|
28
32
|
if relation.exists?
|
29
33
|
error_options = options.except(:case_sensitive, :scope, :conditions)
|
@@ -34,4 +38,4 @@ module ActiveRecord
|
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
37
|
-
end
|
41
|
+
end
|
data/tasks/databases/oracle.rake
CHANGED
@@ -1,25 +1,27 @@
|
|
1
|
-
require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
|
2
|
-
require File.join(PROJECT_ROOT, 'test', 'connections', 'connection_spec')
|
3
|
-
|
4
|
-
namespace :oracle do
|
5
|
-
desc 'Build the Oracle test database'
|
6
|
-
task :build_database => :load_connection do
|
7
|
-
options_str = connection_string
|
8
|
-
|
9
|
-
|
10
|
-
sh %( sqlplus #{options_str} < #{
|
11
|
-
end
|
12
|
-
|
13
|
-
desc 'Drop the Oracle test database'
|
14
|
-
task :drop_database => :load_connection do
|
15
|
-
options_str = connection_string
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
task :
|
23
|
-
|
24
|
-
|
25
|
-
|
1
|
+
require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
|
2
|
+
require File.join(PROJECT_ROOT, 'test', 'connections', 'connection_spec')
|
3
|
+
|
4
|
+
namespace :oracle do
|
5
|
+
desc 'Build the Oracle test database'
|
6
|
+
task :build_database => :load_connection do
|
7
|
+
options_str = connection_string
|
8
|
+
|
9
|
+
sql = File.join(PROJECT_ROOT, 'test', 'fixtures', 'db_definitions', 'oracle.sql')
|
10
|
+
sh %( sqlplus #{options_str} < #{sql} )
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Drop the Oracle test database'
|
14
|
+
task :drop_database => :load_connection do
|
15
|
+
options_str = connection_string
|
16
|
+
|
17
|
+
sql = File.join(PROJECT_ROOT, 'test', 'fixtures', 'db_definitions', 'oracle.drop.sql')
|
18
|
+
sh %( sqlplus #{options_str} < #{sql} )
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Rebuild the Oracle test database'
|
22
|
+
task :rebuild_database => [:drop_database, :build_database]
|
23
|
+
|
24
|
+
task :load_connection do
|
25
|
+
require File.join(PROJECT_ROOT, "test", "connections", "native_oracle", "connection")
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys')
|
2
|
+
require File.join(PROJECT_ROOT, 'test', 'connections', 'connection_spec')
|
3
|
+
|
4
|
+
namespace :oracle_enhanced do
|
5
|
+
desc 'Build the Oracle test database'
|
6
|
+
task :build_database => :load_connection do
|
7
|
+
options_str = connection_string
|
8
|
+
|
9
|
+
sql = File.join(PROJECT_ROOT, 'test', 'fixtures', 'db_definitions', 'oracle.sql')
|
10
|
+
sh %( sqlplus #{options_str} < #{sql} )
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Drop the Oracle test database'
|
14
|
+
task :drop_database => :load_connection do
|
15
|
+
options_str = connection_string
|
16
|
+
|
17
|
+
sql = File.join(PROJECT_ROOT, 'test', 'fixtures', 'db_definitions', 'oracle.drop.sql')
|
18
|
+
sh %( sqlplus #{options_str} < #{sql} )
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Rebuild the Oracle test database'
|
22
|
+
task :rebuild_database => [:drop_database, :build_database]
|
23
|
+
|
24
|
+
task :load_connection do
|
25
|
+
require File.join(PROJECT_ROOT, "test", "connections", "native_oracle_enhanced", "connection")
|
26
|
+
end
|
27
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
mysql:
|
2
|
-
adapter: mysql2
|
3
|
-
username: travis
|
4
|
-
password: ""
|
5
|
-
database: composite_primary_keys_unittest
|
6
|
-
|
7
|
-
sqlite3:
|
8
|
-
adapter: sqlite3
|
9
|
-
database: db/composite_primary_keys_unittest.sqlite
|
10
|
-
|
11
|
-
postgresql:
|
12
|
-
adapter: postgresql
|
13
|
-
database: composite_primary_keys_unittest
|
14
|
-
username: postgres
|
15
|
-
host: localhost
|
1
|
+
mysql:
|
2
|
+
adapter: mysql2
|
3
|
+
username: travis
|
4
|
+
password: ""
|
5
|
+
database: composite_primary_keys_unittest
|
6
|
+
|
7
|
+
sqlite3:
|
8
|
+
adapter: sqlite3
|
9
|
+
database: db/composite_primary_keys_unittest.sqlite
|
10
|
+
|
11
|
+
postgresql:
|
12
|
+
adapter: postgresql
|
13
|
+
database: composite_primary_keys_unittest
|
14
|
+
username: postgres
|
15
|
+
host: localhost
|