activerecord-sqlserver-adapter 6.0.2 → 6.0.3

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
  SHA256:
3
- metadata.gz: c6cf80abcc5b46383279819d86c83c095b5aabcf4969e84bdb2ca3e101777b3a
4
- data.tar.gz: e11e7d40bba8a4ce3c2d47e08002c5321f82c25b91fde75caa0f01b37a7f6e70
3
+ metadata.gz: 6a4ddc7c26331060001ac99b3e2ea5c7d30a97204237c48c383b356280a763ac
4
+ data.tar.gz: c9e1154f442e957e1930fa7cc36addf9b8f465d579d44fcb87fb6a4ffe0426bb
5
5
  SHA512:
6
- metadata.gz: b6f04caed7f5cc895fc185e8976d306901dc0563152b8867f40be0319f8572099495ef27bc205aad7733c8aac0e4baf451769cdc46719c2db248f50a802be324
7
- data.tar.gz: 3c8f05837c093f0d44909d1a26bbc97010f8dc5ab07cd5d48bba94d09624c5fe2e5f21488915931c528207eb726860ae0d59b8ca229f353efe0846ff16f7a955
6
+ metadata.gz: fc3e2cbdcd6ef7d2f334a4af20a66e9c1f1a4ec28548dc664e879a94e87aa487a0d68c6468182b3a026f3e05aa0c735ce16c774b8b404cb8f7e140188d8c06f0
7
+ data.tar.gz: 5f759150e7c204c5de007a320897b71bfe80913ee78d162dcfa891ab840102089f3798a7641ccaa2fe6ef6a56250deed62877f2b7900983f705a21677985c291
@@ -13,7 +13,9 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: [2.5.9, 2.6.7, 2.7.3, 3.0.1]
16
+ ruby:
17
+ - 2.7.5
18
+ - 3.0.3
17
19
 
18
20
  steps:
19
21
  - name: Checkout code
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## v6.0.3
2
+
3
+ #### Fixed
4
+
5
+ [#1054](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1054) Conditionally apply SQL Server monkey patches to ActiveRecord so that it is safe to use this gem alongside other database adapters (e.g. PostgreSQL) in a multi-database Rails app
6
+
1
7
  ## v6.0.2
2
8
 
3
9
  #### Fixed
data/Gemfile CHANGED
@@ -7,9 +7,10 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
7
7
  gemspec
8
8
 
9
9
  gem "bcrypt"
10
- gem "pg", ">= 0.18.0"
10
+ gem "pg", "~> 1.3"
11
11
  gem "sqlite3", "~> 1.4"
12
12
  gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
13
+ gem "minitest", ">= 5.15.0", "< 5.16"
13
14
 
14
15
  if ENV["RAILS_SOURCE"]
15
16
  gemspec path: ENV["RAILS_SOURCE"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.0.2
1
+ 6.0.3
data/appveyor.yml CHANGED
@@ -5,10 +5,10 @@ build: off
5
5
  matrix:
6
6
  fast_finish: true
7
7
  allow_failures:
8
- - ruby_version: "25"
9
- - ruby_version: "26"
10
- - ruby_version: "27"
11
8
  - ruby_version: "27-x64"
9
+ - ruby_version: "27"
10
+ - ruby_version: "30"
11
+ - ruby_version: "30-x64"
12
12
  services:
13
13
  - mssql2014
14
14
 
@@ -38,9 +38,7 @@ environment:
38
38
  CI_AZURE_PASS:
39
39
  secure: cSQp8sk4urJYvq0utpsK+r7J+snJ2wpcdp8RdXJfB+w=
40
40
  matrix:
41
- - ruby_version: "25-x64"
42
- - ruby_version: "25"
43
- - ruby_version: "26-x64"
44
- - ruby_version: "26"
45
41
  - ruby_version: "27-x64"
46
42
  - ruby_version: "27"
43
+ - ruby_version: "30"
44
+ - ruby_version: "30-x64"
@@ -10,6 +10,8 @@ module ActiveRecord
10
10
  private
11
11
 
12
12
  def attributes_for_update(attribute_names)
13
+ return super unless self.class.connection.adapter_name == "SQLServer"
14
+
13
15
  super.reject do |name|
14
16
  column = self.class.columns_hash[name]
15
17
  column && column.respond_to?(:is_identity?) && column.is_identity?
@@ -10,6 +10,8 @@ module ActiveRecord
10
10
  module Calculations
11
11
  # Same as original except we don't perform PostgreSQL hack that removes ordering.
12
12
  def calculate(operation, column_name)
13
+ return super unless klass.connection.adapter_name == "SQLServer"
14
+
13
15
  if has_include?(column_name)
14
16
  relation = apply_join_dependency
15
17
 
@@ -29,6 +31,8 @@ module ActiveRecord
29
31
  private
30
32
 
31
33
  def build_count_subquery(relation, column_name, distinct)
34
+ return super unless klass.connection.adapter_name == "SQLServer"
35
+
32
36
  super(relation.unscope(:order), column_name, distinct)
33
37
  end
34
38
 
@@ -9,6 +9,8 @@ module ActiveRecord
9
9
  SQLSERVER_STATEMENT_REGEXP = /N'(.+)', N'(.+)', (.+)/
10
10
 
11
11
  def exec_explain(queries)
12
+ return super unless connection.adapter_name == "SQLServer"
13
+
12
14
  unprepared_queries = queries.map do |(sql, binds)|
13
15
  [unprepare_sqlserver_statement(sql, binds), binds]
14
16
  end
@@ -12,6 +12,8 @@ module ActiveRecord
12
12
 
13
13
  # Same as original except we order by values in distinct select if present.
14
14
  def construct_relation_for_exists(conditions)
15
+ return super unless klass.connection.adapter_name == "SQLServer"
16
+
15
17
  conditions = sanitize_forbidden_attributes(conditions)
16
18
 
17
19
  if distinct_value && offset_value
@@ -10,6 +10,8 @@ module ActiveRecord
10
10
  private
11
11
 
12
12
  def records_for(ids)
13
+ return super unless klass.connection.adapter_name == "SQLServer"
14
+
13
15
  ids.each_slice(in_clause_length).flat_map do |slice|
14
16
  scope.where(association_key_name => slice).load do |record|
15
17
  # Processing only the first owner
@@ -1088,7 +1088,8 @@ class YamlSerializationTest < ActiveRecord::TestCase
1088
1088
  coerce_tests! :test_types_of_virtual_columns_are_not_changed_on_round_trip
1089
1089
  def test_types_of_virtual_columns_are_not_changed_on_round_trip_coerced
1090
1090
  author = Author.select("authors.*, 5 as posts_count").first
1091
- dumped = YAML.load(YAML.dump(author))
1091
+ dumped_author = YAML.dump(author)
1092
+ dumped = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(dumped_author) : YAML.load(dumped_author)
1092
1093
  assert_equal 5, author.posts_count
1093
1094
  assert_equal 5, dumped.posts_count
1094
1095
  end
@@ -1207,6 +1208,7 @@ module ActiveRecord
1207
1208
 
1208
1209
  original_test_statement_cache_values_differ
1209
1210
  ensure
1211
+ Book.where(author_id: nil, name: 'my book').delete_all
1210
1212
  Book.connection.add_index(:books, [:author_id, :name], unique: true)
1211
1213
  end
1212
1214
  end
@@ -1399,6 +1401,7 @@ class EnumTest < ActiveRecord::TestCase
1399
1401
 
1400
1402
  send(:'original_enums are distinct per class')
1401
1403
  ensure
1404
+ Book.where(author_id: nil, name: nil).delete_all
1402
1405
  Book.connection.add_index(:books, [:author_id, :name], unique: true)
1403
1406
  end
1404
1407
 
@@ -1409,6 +1412,7 @@ class EnumTest < ActiveRecord::TestCase
1409
1412
 
1410
1413
  send(:'original_creating new objects with enum scopes')
1411
1414
  ensure
1415
+ Book.where(author_id: nil, name: nil).delete_all
1412
1416
  Book.connection.add_index(:books, [:author_id, :name], unique: true)
1413
1417
  end
1414
1418
 
@@ -1419,6 +1423,7 @@ class EnumTest < ActiveRecord::TestCase
1419
1423
 
1420
1424
  send(:'original_enums are inheritable')
1421
1425
  ensure
1426
+ Book.where(author_id: nil, name: nil).delete_all
1422
1427
  Book.connection.add_index(:books, [:author_id, :name], unique: true)
1423
1428
  end
1424
1429
 
@@ -1429,6 +1434,7 @@ class EnumTest < ActiveRecord::TestCase
1429
1434
 
1430
1435
  send(:'original_declare multiple enums at a time')
1431
1436
  ensure
1437
+ Book.where(author_id: nil, name: nil).delete_all
1432
1438
  Book.connection.add_index(:books, [:author_id, :name], unique: true)
1433
1439
  end
1434
1440
  end
@@ -1522,3 +1528,76 @@ class ReloadModelsTest < ActiveRecord::TestCase
1522
1528
  # `activesupport/lib/active_support/testing/isolation.rb` exceeds what Windows can handle.
1523
1529
  coerce_tests! :test_has_one_with_reload if RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
1524
1530
  end
1531
+
1532
+ require "models/post"
1533
+ class AnnotateTest < ActiveRecord::TestCase
1534
+ # Same as original coerced test except our SQL starts with `EXEC sp_executesql`.
1535
+ # TODO: Remove coerce after Rails 7 (see https://github.com/rails/rails/pull/42027)
1536
+ coerce_tests! :test_annotate_wraps_content_in_an_inline_comment
1537
+ def test_annotate_wraps_content_in_an_inline_comment_coerced
1538
+ quoted_posts_id, quoted_posts = regexp_escape_table_name("posts.id"), regexp_escape_table_name("posts")
1539
+
1540
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* foo \*/}i) do
1541
+ posts = Post.select(:id).annotate("foo")
1542
+ assert posts.first
1543
+ end
1544
+ end
1545
+
1546
+ # Same as original coerced test except our SQL starts with `EXEC sp_executesql`.
1547
+ # TODO: Remove coerce after Rails 7 (see https://github.com/rails/rails/pull/42027)
1548
+ coerce_tests! :test_annotate_is_sanitized
1549
+ def test_annotate_is_sanitized_coerced
1550
+ quoted_posts_id, quoted_posts = regexp_escape_table_name("posts.id"), regexp_escape_table_name("posts")
1551
+
1552
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* \* /foo/ \* \*/}i) do
1553
+ posts = Post.select(:id).annotate("*/foo/*")
1554
+ assert posts.first
1555
+ end
1556
+
1557
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* \*\* //foo// \*\* \*/}i) do
1558
+ posts = Post.select(:id).annotate("**//foo//**")
1559
+ assert posts.first
1560
+ end
1561
+
1562
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* \* \* //foo// \* \* \*/}i) do
1563
+ posts = Post.select(:id).annotate("* *//foo//* *")
1564
+ assert posts.first
1565
+ end
1566
+
1567
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* \* /foo/ \* \*/ /\* \* /bar \*/}i) do
1568
+ posts = Post.select(:id).annotate("*/foo/*").annotate("*/bar")
1569
+ assert posts.first
1570
+ end
1571
+
1572
+ assert_sql(%r{SELECT #{quoted_posts_id} FROM #{quoted_posts} /\* \+ MAX_EXECUTION_TIME\(1\) \*/}i) do
1573
+ posts = Post.select(:id).annotate("+ MAX_EXECUTION_TIME(1)")
1574
+ assert posts.first
1575
+ end
1576
+ end
1577
+ end
1578
+
1579
+ class NestedThroughAssociationsTest < ActiveRecord::TestCase
1580
+ # Same as original but replace order with "order(:id)" to ensure that assert_includes_and_joins_equal doesn't raise
1581
+ # "A column has been specified more than once in the order by list"
1582
+ # Example: original test generate queries like "ORDER BY authors.id, [authors].[id]". We don't support duplicate columns in the order list
1583
+ coerce_tests! :test_has_many_through_has_many_with_has_many_through_habtm_source_reflection_preload_via_joins, :test_has_many_through_has_and_belongs_to_many_with_has_many_source_reflection_preload_via_joins
1584
+ def test_has_many_through_has_many_with_has_many_through_habtm_source_reflection_preload_via_joins_coerced
1585
+ # preload table schemas
1586
+ Author.joins(:category_post_comments).first
1587
+
1588
+ assert_includes_and_joins_equal(
1589
+ Author.where("comments.id" => comments(:does_it_hurt).id).order(:id),
1590
+ [authors(:david), authors(:mary)], :category_post_comments
1591
+ )
1592
+ end
1593
+
1594
+ def test_has_many_through_has_and_belongs_to_many_with_has_many_source_reflection_preload_via_joins_coerced
1595
+ # preload table schemas
1596
+ Category.joins(:post_comments).first
1597
+
1598
+ assert_includes_and_joins_equal(
1599
+ Category.where("comments.id" => comments(:more_greetings).id).order(:id),
1600
+ [categories(:general), categories(:technology)], :post_comments
1601
+ )
1602
+ end
1603
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-sqlserver-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.2
4
+ version: 6.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2021-04-12 00:00:00.000000000 Z
17
+ date: 2023-05-23 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord
@@ -217,8 +217,8 @@ licenses:
217
217
  - MIT
218
218
  metadata:
219
219
  bug_tracker_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues
220
- changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v6.0.2/CHANGELOG.md
221
- source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v6.0.2
220
+ changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v6.0.3/CHANGELOG.md
221
+ source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v6.0.3
222
222
  post_install_message:
223
223
  rdoc_options: []
224
224
  require_paths:
@@ -234,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
234
  - !ruby/object:Gem::Version
235
235
  version: '0'
236
236
  requirements: []
237
- rubygems_version: 3.1.4
237
+ rubygems_version: 3.4.7
238
238
  signing_key:
239
239
  specification_version: 4
240
240
  summary: ActiveRecord SQL Server Adapter.