activerecord-sqlserver-adapter 6.0.0.rc1 → 6.1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +26 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/CHANGELOG.md +18 -23
- data/Gemfile +11 -5
- data/Guardfile +9 -8
- data/README.md +32 -3
- data/RUNNING_UNIT_TESTS.md +1 -1
- data/Rakefile +12 -16
- data/VERSION +1 -1
- data/activerecord-sqlserver-adapter.gemspec +4 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +0 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +1 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +3 -13
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +8 -5
- data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +0 -4
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +58 -43
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +7 -12
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +0 -3
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +15 -15
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +22 -3
- data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +16 -10
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +131 -105
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +6 -8
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +1 -1
- data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +25 -7
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +1 -5
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +6 -10
- data/lib/active_record/connection_adapters/sqlserver/type.rb +36 -35
- data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/data.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/decimal_without_scale.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/type/float.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/json.rb +0 -1
- data/lib/active_record/connection_adapters/sqlserver/type/money.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/real.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/string.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/text.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +6 -9
- data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +1 -3
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +1 -2
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +1 -3
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +1 -3
- data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +8 -11
- data/lib/active_record/connection_adapters/sqlserver/version.rb +0 -2
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +170 -136
- data/lib/active_record/connection_adapters/sqlserver_column.rb +16 -1
- data/lib/active_record/sqlserver_base.rb +9 -15
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +36 -39
- data/lib/activerecord-sqlserver-adapter.rb +1 -1
- data/lib/arel/visitors/sqlserver.rb +126 -50
- data/lib/arel_sqlserver.rb +2 -2
- data/test/cases/adapter_test_sqlserver.rb +203 -190
- data/test/cases/change_column_collation_test_sqlserver.rb +33 -0
- data/test/cases/change_column_null_test_sqlserver.rb +12 -12
- data/test/cases/coerced_tests.rb +656 -318
- data/test/cases/column_test_sqlserver.rb +285 -284
- data/test/cases/connection_test_sqlserver.rb +15 -20
- data/test/cases/disconnected_test_sqlserver.rb +39 -0
- data/test/cases/execute_procedure_test_sqlserver.rb +26 -19
- data/test/cases/fetch_test_sqlserver.rb +14 -22
- data/test/cases/fully_qualified_identifier_test_sqlserver.rb +12 -18
- data/test/cases/helper_sqlserver.rb +13 -15
- data/test/cases/in_clause_test_sqlserver.rb +36 -9
- data/test/cases/index_test_sqlserver.rb +13 -15
- data/test/cases/json_test_sqlserver.rb +23 -25
- data/test/cases/lateral_test_sqlserver.rb +35 -0
- data/test/cases/migration_test_sqlserver.rb +71 -26
- data/test/cases/optimizer_hints_test_sqlserver.rb +72 -0
- data/test/cases/order_test_sqlserver.rb +57 -53
- data/test/cases/pessimistic_locking_test_sqlserver.rb +25 -33
- data/test/cases/primary_keys_test_sqlserver.rb +103 -0
- data/test/cases/rake_test_sqlserver.rb +33 -46
- data/test/cases/schema_dumper_test_sqlserver.rb +121 -108
- data/test/cases/schema_test_sqlserver.rb +18 -26
- data/test/cases/scratchpad_test_sqlserver.rb +2 -4
- data/test/cases/showplan_test_sqlserver.rb +24 -33
- data/test/cases/specific_schema_test_sqlserver.rb +66 -65
- data/test/cases/transaction_test_sqlserver.rb +16 -19
- data/test/cases/trigger_test_sqlserver.rb +12 -12
- data/test/cases/utils_test_sqlserver.rb +68 -70
- data/test/cases/uuid_test_sqlserver.rb +11 -13
- data/test/debug.rb +6 -6
- data/test/migrations/create_clients_and_change_column_collation.rb +19 -0
- data/test/migrations/create_clients_and_change_column_null.rb +1 -1
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +2 -4
- data/test/models/sqlserver/booking.rb +1 -1
- data/test/models/sqlserver/customers_view.rb +1 -1
- data/test/models/sqlserver/dollar_table_name.rb +1 -1
- data/test/models/sqlserver/edge_schema.rb +1 -3
- data/test/models/sqlserver/fk_has_fk.rb +1 -1
- data/test/models/sqlserver/fk_has_pk.rb +1 -1
- data/test/models/sqlserver/natural_pk_data.rb +2 -2
- data/test/models/sqlserver/natural_pk_int_data.rb +1 -1
- data/test/models/sqlserver/no_pk_data.rb +1 -1
- data/test/models/sqlserver/object_default.rb +1 -1
- data/test/models/sqlserver/quoted_table.rb +2 -2
- data/test/models/sqlserver/quoted_view_1.rb +1 -1
- data/test/models/sqlserver/quoted_view_2.rb +1 -1
- data/test/models/sqlserver/sst_memory.rb +1 -1
- data/test/models/sqlserver/sst_string_collation.rb +3 -0
- data/test/models/sqlserver/string_default.rb +1 -1
- data/test/models/sqlserver/string_defaults_big_view.rb +1 -1
- data/test/models/sqlserver/string_defaults_view.rb +1 -1
- data/test/models/sqlserver/tinyint_pk.rb +1 -1
- data/test/models/sqlserver/trigger.rb +2 -2
- data/test/models/sqlserver/trigger_history.rb +1 -1
- data/test/models/sqlserver/upper.rb +1 -1
- data/test/models/sqlserver/uppered.rb +1 -1
- data/test/models/sqlserver/uuid.rb +1 -1
- data/test/schema/sqlserver_specific_schema.rb +36 -21
- data/test/support/coerceable_test_sqlserver.rb +1 -4
- data/test/support/connection_reflection.rb +1 -2
- data/test/support/core_ext/query_cache.rb +1 -1
- data/test/support/load_schema_sqlserver.rb +3 -5
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_0_topic_associations.dump +0 -0
- data/test/support/minitest_sqlserver.rb +1 -1
- data/test/support/paths_sqlserver.rb +9 -11
- data/test/support/rake_helpers.rb +12 -10
- data/test/support/sql_counter_sqlserver.rb +14 -16
- data/test/support/test_in_memory_oltp.rb +7 -7
- metadata +31 -11
- data/.travis.yml +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 257660386743662b1e8052c5073aaa07bdff955924fae3da4ba83c41229deb85
|
4
|
+
data.tar.gz: 288cf426206b713aeca8b0647f57059a4a781d00cab800340d8f5c0bad0acbdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22efb62e73df4116659bbac023f3694192476cc5d4d2840c469b19b0f6c37145cf989803c94c53d45aa78943b2a72df419ffbc15b452f612ab6f420fee10a19c
|
7
|
+
data.tar.gz: 70d8088ec4278d48beb73cc1319f681d6f3ee874d200b2868370425a2a0a9b2e2859171b5cc3817b3abf63cd512911655813bafe65ae5e319dc1bb889bf0f575
|
@@ -0,0 +1,26 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
name: Run test suite
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
|
10
|
+
env:
|
11
|
+
COMPOSE_FILE: docker-compose.ci.yml
|
12
|
+
|
13
|
+
strategy:
|
14
|
+
fail-fast: false
|
15
|
+
matrix:
|
16
|
+
ruby: [2.5.9, 2.6.7, 2.7.3, 3.0.1]
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- name: Checkout code
|
20
|
+
uses: actions/checkout@v2
|
21
|
+
|
22
|
+
- name: Build docker images
|
23
|
+
run: docker-compose build --build-arg TARGET_VERSION=${{ matrix.ruby }}
|
24
|
+
|
25
|
+
- name: Run tests
|
26
|
+
run: docker-compose run ci
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.5
|
3
|
+
|
4
|
+
Layout/LineLength:
|
5
|
+
Max: 120
|
6
|
+
|
7
|
+
Naming/AccessorMethodName:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Naming/FileName:
|
11
|
+
Exclude:
|
12
|
+
- lib/activerecord-sqlserver-adapter.rb
|
13
|
+
|
14
|
+
Naming/MethodName:
|
15
|
+
IgnoredPatterns:
|
16
|
+
- visit_.*
|
17
|
+
- primary_Key_From_Table
|
18
|
+
- table_From_Statement
|
19
|
+
- distinct_One_As_One_Is_So_Not_Fetch
|
20
|
+
- make_Fetch_Possible_And_Deterministic
|
21
|
+
|
22
|
+
Naming/MethodParameterName:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Naming/PredicateName:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Style/StringLiterals:
|
29
|
+
EnforcedStyle: double_quotes
|
data/CHANGELOG.md
CHANGED
@@ -1,30 +1,25 @@
|
|
1
|
-
## v6.0.0.rc1
|
1
|
+
## v6.1.0.0.rc1
|
2
2
|
|
3
3
|
#### Fixed
|
4
4
|
|
5
|
-
- [#
|
6
|
-
- [#
|
7
|
-
- [#
|
8
|
-
- [#
|
9
|
-
- [#
|
10
|
-
- [#
|
11
|
-
- [#
|
12
|
-
- [#
|
13
|
-
- [#
|
5
|
+
- [#872](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/872) Use native String#start_with
|
6
|
+
- [#876](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/876) Use native String#end_with
|
7
|
+
- [#873](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/873) Various fixes to get the tests running for Rails 6.1
|
8
|
+
- [#874](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/874) Deduplicate schema cache structures
|
9
|
+
- [#875](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/875) Handle default boolean column values when deduplicating
|
10
|
+
- [#879](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/879) Added visit method for HomogeneousIn
|
11
|
+
- [#880](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/880) Handle any default column class when deduplicating
|
12
|
+
- [#861](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/861) Fix Rails 6.1 database config
|
13
|
+
- [#890](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/890) Fix removal of invalid ordering from select statements
|
14
|
+
- [#881](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/881) Dump column collation to schema.rb and allow collation changes using column_change
|
15
|
+
- [#891](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/891) Add support for if_not_exists to indexes
|
16
|
+
- [#892](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/892) Add support for if_exists on remove_column
|
17
|
+
- [#883](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/885) Fix quoting of ActiveRecord::Relation::QueryAttribute and ActiveModel::Attributes
|
18
|
+
- [#893](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/893) Add Active Record Marshal forward compatibility tests
|
19
|
+
- [#903](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/903) Raise ActiveRecord::ConnectionNotEstablished on calls to execute with a disconnected connection
|
14
20
|
|
15
21
|
#### Changed
|
16
22
|
|
17
|
-
- [#
|
18
|
-
- [#763](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/763) Refactor columns introspection query to make it faster
|
19
|
-
- [#783](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/783) Update test matrix
|
20
|
-
- [#820](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/820) Enable frozen strings for tests
|
21
|
-
- [#821](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/821) Enable frozen strings - part 1
|
22
|
-
- [#822](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/822) Enable frozen strings - part 2
|
23
|
-
- [#823](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/823) Enable frozen strings - final
|
24
|
-
- [#824](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/824) Tidy up Gemfile
|
23
|
+
- [#917](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/917) Refactored to use new_client connection pattern
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
- [#726](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/726) How to Develop ActiveRecord SQL Server Adapter with Pre-Installed MS SQL
|
29
|
-
|
30
|
-
Please check [5-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/5-2-stable/CHANGELOG.md) for previous changes.
|
25
|
+
Please check [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/6-0-stable/CHANGELOG.md) for previous changes.
|
data/Gemfile
CHANGED
@@ -21,8 +21,8 @@ else
|
|
21
21
|
require "yaml"
|
22
22
|
|
23
23
|
spec = eval(File.read("activerecord-sqlserver-adapter.gemspec"))
|
24
|
-
ver = spec.dependencies.detect{ |d|d.name == "activerecord" }.requirement.requirements.first.last.version
|
25
|
-
major, minor,
|
24
|
+
ver = spec.dependencies.detect { |d| d.name == "activerecord" }.requirement.requirements.first.last.version
|
25
|
+
major, minor, _tiny, pre = ver.split(".")
|
26
26
|
|
27
27
|
if pre
|
28
28
|
ver
|
@@ -32,7 +32,7 @@ else
|
|
32
32
|
http.use_ssl = true
|
33
33
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
34
34
|
YAML.load(http.request(Net::HTTP::Get.new(uri.request_uri)).body).find do |data|
|
35
|
-
a, b,
|
35
|
+
a, b, = data["number"].split(".")
|
36
36
|
!data["prerelease"] && major == a && (minor.nil? || minor == b)
|
37
37
|
end["number"]
|
38
38
|
end
|
@@ -40,6 +40,7 @@ else
|
|
40
40
|
gem "rails", github: "rails/rails", tag: "v#{version}"
|
41
41
|
end
|
42
42
|
|
43
|
+
# rubocop:disable Bundler/DuplicatedGem
|
43
44
|
group :tinytds do
|
44
45
|
if ENV["TINYTDS_SOURCE"]
|
45
46
|
gem "tiny_tds", path: ENV["TINYTDS_SOURCE"]
|
@@ -49,11 +50,12 @@ group :tinytds do
|
|
49
50
|
gem "tiny_tds"
|
50
51
|
end
|
51
52
|
end
|
53
|
+
# rubocop:enable Bundler/DuplicatedGem
|
52
54
|
|
53
55
|
group :development do
|
54
|
-
gem "pry-byebug", platform: [:mri, :mingw, :x64_mingw]
|
55
|
-
gem "mocha"
|
56
56
|
gem "minitest-spec-rails"
|
57
|
+
gem "mocha"
|
58
|
+
gem "pry-byebug", platform: [:mri, :mingw, :x64_mingw]
|
57
59
|
end
|
58
60
|
|
59
61
|
group :guard do
|
@@ -61,3 +63,7 @@ group :guard do
|
|
61
63
|
gem "guard-minitest"
|
62
64
|
gem "terminal-notifier-guard" if RbConfig::CONFIG["host_os"] =~ /darwin/
|
63
65
|
end
|
66
|
+
|
67
|
+
group :rubocop do
|
68
|
+
gem "rubocop", require: false
|
69
|
+
end
|
data/Guardfile
CHANGED
@@ -1,29 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
require_relative
|
3
|
+
require_relative "test/support/paths_sqlserver"
|
3
4
|
|
4
5
|
clearing :on
|
5
6
|
notification :terminal_notifier if defined?(TerminalNotifier)
|
6
7
|
ignore %r{debug\.log}
|
7
8
|
|
8
|
-
ar_lib = File.join ARTest::SQLServer.root_activerecord,
|
9
|
-
ar_test = File.join ARTest::SQLServer.root_activerecord,
|
9
|
+
ar_lib = File.join ARTest::SQLServer.root_activerecord, "lib"
|
10
|
+
ar_test = File.join ARTest::SQLServer.root_activerecord, "test"
|
10
11
|
|
11
12
|
guard :minitest, {
|
12
13
|
all_on_start: false,
|
13
14
|
autorun: false,
|
14
|
-
include: [
|
15
|
-
test_folders: [
|
15
|
+
include: ["lib", "test", ar_lib, ar_test],
|
16
|
+
test_folders: ["test"],
|
16
17
|
test_file_patterns: ["*_test.rb", "*_test_sqlserver.rb"]
|
17
18
|
} do
|
18
19
|
# Our project watchers.
|
19
|
-
if ENV[
|
20
|
-
ENV[
|
20
|
+
if ENV["TEST_FILES"]
|
21
|
+
ENV["TEST_FILES"].split(",").map(&:strip).each do |file|
|
21
22
|
watch(%r{.*}) { file }
|
22
23
|
end
|
23
24
|
else
|
24
25
|
watch(%r{^test/cases/\w+_test_sqlserver\.rb$})
|
25
26
|
watch(%r{^test/cases/coerced_tests\.rb$}) { "test/cases/coerced_tests.rb" }
|
26
27
|
watch(%r{^lib/active_record/connection_adapters/sqlserver/([^/]+)\.rb$}) { |m| "test/cases/#{m[1]}_test_sqlserver.rb" }
|
27
|
-
watch(%r{^test/cases/helper_sqlserver\.rb$}) {
|
28
|
+
watch(%r{^test/cases/helper_sqlserver\.rb$}) { "test" }
|
28
29
|
end
|
29
30
|
end
|
data/README.md
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
# ActiveRecord SQL Server Adapter. For SQL Server 2012 And Higher.
|
2
2
|
|
3
|
-
* [![
|
3
|
+
* [![CI](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/actions/workflows/ci.yml/badge.svg)](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/actions/workflows/ci.yml) - CI
|
4
4
|
* [![Build Status](https://ci.appveyor.com/api/projects/status/mtgbx8f57vr7k2qa/branch/master?svg=true)](https://ci.appveyor.com/project/rails-sqlserver/activerecord-sqlserver-adapter/branch/master) - Appveyor
|
5
5
|
* [![Gem Version](http://img.shields.io/gem/v/activerecord-sqlserver-adapter.svg)](https://rubygems.org/gems/activerecord-sqlserver-adapter) - Gem Version
|
6
6
|
* [![Gitter chat](https://img.shields.io/badge/%E2%8A%AA%20GITTER%20-JOIN%20CHAT%20%E2%86%92-brightgreen.svg?style=flat)](https://gitter.im/rails-sqlserver/activerecord-sqlserver-adapter) - Community
|
7
7
|
|
8
8
|
## About The Adapter
|
9
9
|
|
10
|
-
The SQL Server adapter for ActiveRecord
|
10
|
+
The SQL Server adapter for ActiveRecord using SQL Server 2012 or higher.
|
11
11
|
|
12
|
-
Interested in older versions? We follow a rational versioning policy that tracks Rails. That means that our
|
12
|
+
Interested in older versions? We follow a rational versioning policy that tracks Rails. That means that our 6.x version of the adapter is only for the latest 6.x version of Rails. If you need the adapter for SQL Server 2008 or 2005, you are still in the right spot. Just install the latest 3.2.x to 4.1.x version of the adapter that matches your Rails version. We also have stable branches for each major/minor release of ActiveRecord.
|
13
|
+
|
14
|
+
| Adapter Version | Rails Version | Support |
|
15
|
+
| ------------- | --- | --- |
|
16
|
+
| `6.1.0.0.rc1` | `6.1.x` | [wip](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
|
17
|
+
| `6.0.2` | `6.0.x` | [active](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
|
18
|
+
| `5.2.1` | `5.2.x` | [active](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-2-stable) |
|
19
|
+
| `5.1.6` | `5.1.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-1-stable) |
|
20
|
+
| `4.2.18` | `4.2.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-2-stable) |
|
21
|
+
| `4.1.8` | `4.1.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-1-stable) |
|
22
|
+
|
23
|
+
For older versions, please check their stable branches.
|
13
24
|
|
14
25
|
#### Native Data Type Support
|
15
26
|
|
@@ -52,6 +63,24 @@ Depending on your user and schema setup, it may be needed to use a table name pr
|
|
52
63
|
ActiveRecord::Base.table_name_prefix = 'dbo.'
|
53
64
|
```
|
54
65
|
|
66
|
+
It's also possible to create/change/drop a schema in the migration file as in the example below:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
class CreateFooSchema < ActiveRecord::Migration[6.0]
|
70
|
+
def up
|
71
|
+
create_schema('foo')
|
72
|
+
|
73
|
+
# Or you could move a table to a different schema
|
74
|
+
|
75
|
+
change_table_schema('foo', 'dbo.admin')
|
76
|
+
end
|
77
|
+
|
78
|
+
def down
|
79
|
+
drop_schema('foo')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
```
|
83
|
+
|
55
84
|
|
56
85
|
#### Configure Connection & App Name
|
57
86
|
|
data/RUNNING_UNIT_TESTS.md
CHANGED
@@ -5,7 +5,7 @@ This process is much easier than it has been before!
|
|
5
5
|
|
6
6
|
## MS SQL SERVER
|
7
7
|
|
8
|
-
If you don't have easy access to MS SQL Server, you can set up a Vagrant/VirtualBox virtual machine with MS SQL Server. [Here's how](
|
8
|
+
If you don't have easy access to MS SQL Server, you can set up a Vagrant/VirtualBox virtual machine with MS SQL Server. [Here's how](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter-dev-box).
|
9
9
|
|
10
10
|
## TL;DR
|
11
11
|
|
data/Rakefile
CHANGED
@@ -1,39 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require_relative
|
6
|
-
require_relative
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
require_relative "test/support/paths_sqlserver"
|
6
|
+
require_relative "test/support/rake_helpers"
|
7
7
|
|
8
|
-
task test: [
|
8
|
+
task test: ["test:dblib"]
|
9
9
|
task default: [:test]
|
10
10
|
|
11
11
|
namespace :test do
|
12
|
-
|
13
12
|
%w(dblib).each do |mode|
|
14
|
-
|
15
13
|
Rake::TestTask.new(mode) do |t|
|
16
14
|
t.libs = ARTest::SQLServer.test_load_paths
|
17
15
|
t.test_files = test_files
|
18
|
-
t.warning = !!ENV[
|
16
|
+
t.warning = !!ENV["WARNING"]
|
19
17
|
t.verbose = false
|
20
18
|
end
|
21
|
-
|
22
19
|
end
|
23
20
|
|
24
|
-
task
|
25
|
-
ENV[
|
21
|
+
task "dblib:env" do
|
22
|
+
ENV["ARCONN"] = "dblib"
|
26
23
|
end
|
27
|
-
|
28
24
|
end
|
29
25
|
|
30
|
-
task
|
26
|
+
task "test:dblib" => "test:dblib:env"
|
31
27
|
|
32
28
|
namespace :profile do
|
33
|
-
[
|
29
|
+
["dblib"].each do |mode|
|
34
30
|
namespace mode.to_sym do
|
35
|
-
Dir.glob(
|
36
|
-
profile_case = File.basename(test_file).sub(
|
31
|
+
Dir.glob("test/profile/*_profile_case.rb").sort.each do |test_file|
|
32
|
+
profile_case = File.basename(test_file).sub("_profile_case.rb", "")
|
37
33
|
Rake::TestTask.new(profile_case) do |t|
|
38
34
|
t.libs = ARTest::SQLServer.test_load_paths
|
39
35
|
t.test_files = [test_file]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.0.0.rc1
|
1
|
+
6.1.0.0.rc1
|
@@ -17,9 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.description = "ActiveRecord SQL Server Adapter. SQL Server 2012 and upward."
|
18
18
|
|
19
19
|
spec.metadata = {
|
20
|
-
"bug_tracker_uri"
|
21
|
-
"changelog_uri"
|
22
|
-
"source_code_uri"
|
20
|
+
"bug_tracker_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues",
|
21
|
+
"changelog_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v#{version}/CHANGELOG.md",
|
22
|
+
"source_code_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v#{version}",
|
23
23
|
}
|
24
24
|
|
25
25
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -27,6 +27,6 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
|
-
spec.add_dependency "activerecord", "~> 6.
|
30
|
+
spec.add_dependency "activerecord", "~> 6.1.0"
|
31
31
|
spec.add_dependency "tiny_tds"
|
32
32
|
end
|
@@ -5,11 +5,9 @@ module ActiveRecord
|
|
5
5
|
module SQLServer
|
6
6
|
module CoreExt
|
7
7
|
module ActiveRecord
|
8
|
-
|
9
8
|
extend ActiveSupport::Concern
|
10
9
|
|
11
10
|
module ClassMethods
|
12
|
-
|
13
11
|
def execute_procedure(proc_name, *variables)
|
14
12
|
if connection.respond_to?(:execute_procedure)
|
15
13
|
connection.execute_procedure(proc_name, *variables)
|
@@ -17,9 +15,7 @@ module ActiveRecord
|
|
17
15
|
[]
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
21
18
|
end
|
22
|
-
|
23
19
|
end
|
24
20
|
end
|
25
21
|
end
|
@@ -1,14 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "active_record/attribute_methods"
|
4
4
|
|
5
5
|
module ActiveRecord
|
6
6
|
module ConnectionAdapters
|
7
7
|
module SQLServer
|
8
8
|
module CoreExt
|
9
9
|
module AttributeMethods
|
10
|
-
|
11
|
-
|
12
10
|
private
|
13
11
|
|
14
12
|
def attributes_for_update(attribute_names)
|
@@ -17,7 +15,6 @@ module ActiveRecord
|
|
17
15
|
column && column.respond_to?(:is_identity?) && column.is_identity?
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
21
18
|
end
|
22
19
|
end
|
23
20
|
end
|
@@ -1,14 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "active_record/relation"
|
4
|
+
require "active_record/version"
|
5
5
|
|
6
6
|
module ActiveRecord
|
7
7
|
module ConnectionAdapters
|
8
8
|
module SQLServer
|
9
9
|
module CoreExt
|
10
10
|
module Calculations
|
11
|
-
|
12
11
|
# Same as original except we don't perform PostgreSQL hack that removes ordering.
|
13
12
|
def calculate(operation, column_name)
|
14
13
|
if has_include?(column_name)
|
@@ -17,7 +16,7 @@ module ActiveRecord
|
|
17
16
|
if operation.to_s.downcase == "count"
|
18
17
|
unless distinct_value || distinct_select?(column_name || select_for_count)
|
19
18
|
relation.distinct!
|
20
|
-
relation.select_values = [
|
19
|
+
relation.select_values = [klass.primary_key || table[Arel.star]]
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
@@ -32,15 +31,6 @@ module ActiveRecord
|
|
32
31
|
def build_count_subquery(relation, column_name, distinct)
|
33
32
|
super(relation.unscope(:order), column_name, distinct)
|
34
33
|
end
|
35
|
-
|
36
|
-
def type_cast_calculated_value(value, type, operation = nil)
|
37
|
-
case operation
|
38
|
-
when "count" then value.to_i
|
39
|
-
when "sum" then type.deserialize(value || 0)
|
40
|
-
when "average" then value&.respond_to?(:to_d) ? value.to_d : value
|
41
|
-
else type.deserialize(value)
|
42
|
-
end
|
43
|
-
end
|
44
34
|
end
|
45
35
|
end
|
46
36
|
end
|