composite_primary_keys 9.0.6 → 9.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f68e1e5f247cfca5284cf7c4beee35386fefd396
4
- data.tar.gz: 0532ee35ef717e91580af50068588e4d4b623809
3
+ metadata.gz: 935a14ecfff54210eda1de87a8c012555dd8800b
4
+ data.tar.gz: aeeecd538f8856ca32f969cfade0dd6124164a34
5
5
  SHA512:
6
- metadata.gz: 5577302f2ee234fcc8511bf83606bfed415973b3c84fcb8d9d5fc1d26b5545c634c1d671f7dbc5aaf82e636a531d17831bf46f4126198c575f8ef436cbc54d99
7
- data.tar.gz: 452fa7ead38c8a096ac1c4ed106dd4280e77be768d379860c8b790b9ee26d97c79e87de384d86229c689c88e9209037b6d3d59ec173c555d9620ff4c4def5ba9
6
+ metadata.gz: a00381d95c99145e0a03e0e51051dfe69e09ac699316cfd9e9d2767103db7fa38ba40e00045d257bae284e1875a3dbcdb70e555c4d964b4f3f84ab6583c8e6ab
7
+ data.tar.gz: 7eb7dd0107eaa96f8c8adabcd04fe806bf9f40b2aef56469effbd7de01f338f32bed54be8dde25b02cea65364b3c3e3ac38d6f4f4060bdaa12d64c1297d5372b
@@ -1,3 +1,15 @@
1
+ == 9.0.7 (2017-05-22)
2
+
3
+ * Update sqlite3 to support deletes and updates (Charlie Savage)
4
+ * Specify version for sql server gem so it works with Rails 5.0 (Charlie Savage)
5
+ * Use `datetime` datatype to address Invalid default value for updated_at (Yasuo Honda)
6
+ * Fix ORA-00900 error when it attempts to execute blank statement (pustomytnyk)
7
+ * Override ActiveRecord::Associations::CollectionAssociation#ids_reader (pustomytnyk)
8
+ * Only define #primary_keys if #primary_keys=(value) is called (Charlie Savage)
9
+ * Change `timestamp` to `datetime` for MySQL as ActiveRecord timestamps type does (Oriol Collel)
10
+ * Fix incorrect case statement to get PK for SQLServer (Oriol Collel)
11
+ * Fixes random failures in test_preload_of_polymorphic_association (Boris Peterbarg)
12
+
1
13
  == 9.0.6 (2017-01-08)
2
14
 
3
15
  * Uncomment tests (Sammy Larbi)
@@ -26,9 +26,9 @@ module Arel
26
26
  t[name]
27
27
  end
28
28
  when NilClass
29
- [t[column_name]]
30
- else
31
29
  nil
30
+ else
31
+ [t[column_name]]
32
32
  end
33
33
  end
34
34
  end
@@ -6,6 +6,23 @@ module CompositePrimaryKeys
6
6
  super
7
7
  end
8
8
 
9
+ def ids_reader
10
+ if loaded?
11
+ load_target.map do |record|
12
+ if reflection.association_primary_key.is_a?(Array)
13
+ reflection.association_primary_key.map { |key| record.send(key) }
14
+ else
15
+ record.send(reflection.association_primary_key)
16
+ end
17
+ end
18
+ else
19
+ @association_ids ||= (
20
+ column = "#{reflection.quoted_table_name}.#{reflection.association_primary_key}"
21
+ scope.pluck(column)
22
+ )
23
+ end
24
+ end
25
+
9
26
  def ids_writer(ids)
10
27
  pk_type = reflection.primary_key_type
11
28
  ids = Array(ids).reject(&:blank?)
@@ -18,29 +18,29 @@ module ActiveRecord
18
18
  update_counter(-delete_count(method, scope))
19
19
  end
20
20
 
21
- def delete_count(method, scope)
22
- if method == :delete_all
23
- scope.delete_all
24
- else
25
- # CPK
26
- # scope.update_all(reflection.foreign_key => nil)
27
- conds = Array(reflection.foreign_key).inject(Hash.new) do |mem, key|
28
- mem[key] = nil
29
- mem
30
- end
31
- scope.update_all(conds)
21
+ def delete_count(method, scope)
22
+ if method == :delete_all
23
+ scope.delete_all
24
+ else
25
+ # CPK
26
+ # scope.update_all(reflection.foreign_key => nil)
27
+ conds = Array(reflection.foreign_key).inject(Hash.new) do |mem, key|
28
+ mem[key] = nil
29
+ mem
32
30
  end
31
+ scope.update_all(conds)
33
32
  end
33
+ end
34
34
 
35
- def foreign_key_present?
36
- if reflection.klass.primary_key
37
- # CPK
38
- # owner.attribute_present?(reflection.association_primary_key)
39
- Array(reflection.klass.primary_key).all? {|key| owner.attribute_present?(key)}
40
- else
41
- false
42
- end
35
+ def foreign_key_present?
36
+ if reflection.klass.primary_key
37
+ # CPK
38
+ # owner.attribute_present?(reflection.association_primary_key)
39
+ Array(reflection.klass.primary_key).all? {|key| owner.attribute_present?(key)}
40
+ else
41
+ false
43
42
  end
44
43
  end
45
44
  end
45
+ end
46
46
  end
@@ -7,20 +7,6 @@ module ActiveRecord
7
7
  NOT_IMPLEMENTED_YET = 'Not implemented for composite primary keys yet'
8
8
 
9
9
  class << self
10
- def primary_keys
11
- unless defined?(@primary_keys)
12
- reset_primary_keys
13
- end
14
- @primary_keys
15
- end
16
-
17
- # Don't like this method name, but its modeled after how AR does it
18
- def reset_primary_keys
19
- if self != base_class
20
- self.primary_keys = base_class.primary_keys
21
- end
22
- end
23
-
24
10
  alias_method :primary_key_without_composite_key_support=, :primary_key=
25
11
  def primary_key=(keys)
26
12
  unless keys.kind_of?(Array)
@@ -60,6 +46,20 @@ module ActiveRecord
60
46
  end
61
47
 
62
48
  module CompositeClassMethods
49
+ def primary_keys
50
+ unless defined?(@primary_keys)
51
+ reset_primary_keys
52
+ end
53
+ @primary_keys
54
+ end
55
+
56
+ # Don't like this method name, but its modeled after how AR does it
57
+ def reset_primary_keys
58
+ if self != base_class
59
+ self.primary_keys = base_class.primary_keys
60
+ end
61
+ end
62
+
63
63
  def primary_key
64
64
  primary_keys
65
65
  end
@@ -0,0 +1,23 @@
1
+ module ActiveRecord
2
+ module ConnectionAdapters
3
+ class SQLite3Adapter
4
+ def join_to_update(update, select, key)
5
+ if key.is_a?(::CompositePrimaryKeys::CompositeKeys)
6
+ subselect = subquery_for(key, select)
7
+ subselect_aliased = Arel::Nodes::TableAlias.new(subselect, 'cpk_inner')
8
+ cpk_subselect = Arel::SelectManager.new(subselect_aliased)
9
+ cpk_subselect.project('*')
10
+ key.each do |a_key|
11
+ where_expr = subselect_aliased[a_key.name].eq(update.ast.relation[a_key.name])
12
+ cpk_subselect.where(where_expr)
13
+ end
14
+ where_clause = Arel::Nodes::SqlLiteral.new("EXISTS (#{cpk_subselect.to_sql})")
15
+ update.where(where_clause)
16
+ else
17
+ super
18
+ end
19
+ end
20
+ alias join_to_delete join_to_update
21
+ end
22
+ end
23
+ end
@@ -2,7 +2,7 @@ module CompositePrimaryKeys
2
2
  module VERSION
3
3
  MAJOR = 9
4
4
  MINOR = 0
5
- TINY = 6
5
+ TINY = 7
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -14,7 +14,7 @@ namespace :oracle do
14
14
  sql = File.read(schema)
15
15
 
16
16
  sql.split(';').each do |command|
17
- ActiveRecord::Base.connection.execute(command)
17
+ ActiveRecord::Base.connection.execute(command) unless command.blank?
18
18
  end
19
19
 
20
20
  ActiveRecord::Base.clear_all_connections!
@@ -18,6 +18,10 @@ puts "Loaded #{spec_name}"
18
18
  # And now connect to the database
19
19
  ActiveRecord::Base.establish_connection(spec)
20
20
 
21
+ if defined?(ActiveRecord::ConnectionAdapters::SQLite3Adapter)
22
+ require 'composite_primary_keys/connection_adapters/sqlite3_adapter'
23
+ end
24
+
21
25
  # Tell active record about the configuration
22
26
  ActiveRecord::Base.configurations[:test] = spec
23
27
 
@@ -39,8 +39,8 @@ create table tariffs (
39
39
  tariff_id int not null,
40
40
  start_date date not null,
41
41
  amount integer(11) default null,
42
- created_at timestamp,
43
- updated_at timestamp,
42
+ created_at datetime,
43
+ updated_at datetime,
44
44
  primary key (tariff_id, start_date)
45
45
  );
46
46
 
@@ -1,19 +1,19 @@
1
- steve:
2
- id: 1
3
- department_id: 1
4
- location_id: 1
5
-
6
- jill:
7
- id: 2
8
- department_id: 1
9
- location_id: 1
10
-
11
- sarah:
12
- id: 3
13
- department_id: 2
14
- location_id: 1
15
-
16
- robert:
17
- id: 4
18
- department_id: 2
1
+ steve:
2
+ id: 1
3
+ department_id: 1
4
+ location_id: 1
5
+
6
+ jill:
7
+ id: 2
8
+ department_id: 1
9
+ location_id: 1
10
+
11
+ sarah:
12
+ id: 3
13
+ department_id: 2
14
+ location_id: 1
15
+
16
+ robert:
17
+ id: 4
18
+ department_id: 2
19
19
  location_id: 1
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../abstract_unit', __FILE__)
2
2
 
3
3
  class TestPreload < ActiveSupport::TestCase
4
- fixtures :comments, :users, :employees, :groups
4
+ fixtures :comments, :users, :employees, :groups, :hacks
5
5
 
6
6
  class UserForPreload < User
7
7
  has_many :comments_with_include_condition, -> { where('person_type = ?', 'User')},
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: composite_primary_keys
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.6
4
+ version: 9.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charlie Savage
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-08 00:00:00.000000000 Z
11
+ date: 2017-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -113,6 +113,7 @@ files:
113
113
  - lib/composite_primary_keys/composite_relation.rb
114
114
  - lib/composite_primary_keys/connection_adapters/abstract_adapter.rb
115
115
  - lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb
116
+ - lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb
116
117
  - lib/composite_primary_keys/connection_adapters/sqlserver_adapter.rb
117
118
  - lib/composite_primary_keys/core.rb
118
119
  - lib/composite_primary_keys/fixtures.rb
@@ -270,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
271
  version: '0'
271
272
  requirements: []
272
273
  rubyforge_project:
273
- rubygems_version: 2.6.8
274
+ rubygems_version: 2.6.11
274
275
  signing_key:
275
276
  specification_version: 4
276
277
  summary: Composite key support for ActiveRecord