activerecord-sqlserver-adapter 5.2.1 → 7.0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/.github/issue_template.md +23 -0
- data/.github/workflows/ci.yml +29 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/CHANGELOG.md +17 -27
- data/{Dockerfile → Dockerfile.ci} +1 -1
- data/Gemfile +49 -41
- data/Guardfile +9 -8
- data/MIT-LICENSE +1 -1
- data/README.md +65 -42
- data/RUNNING_UNIT_TESTS.md +3 -0
- data/Rakefile +14 -16
- data/VERSION +1 -1
- data/activerecord-sqlserver-adapter.gemspec +25 -14
- data/appveyor.yml +22 -17
- data/docker-compose.ci.yml +7 -5
- data/guides/RELEASING.md +11 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +2 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +10 -14
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +12 -5
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +2 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +10 -7
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +30 -0
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +9 -4
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +117 -52
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +9 -12
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +51 -14
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +40 -6
- data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +18 -10
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +235 -167
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +4 -2
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +3 -1
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +8 -8
- data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +36 -7
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +43 -45
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +8 -10
- data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +7 -4
- data/lib/active_record/connection_adapters/sqlserver/type/data.rb +5 -3
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +7 -5
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +8 -8
- data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/decimal_without_scale.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/type/float.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/json.rb +2 -1
- data/lib/active_record/connection_adapters/sqlserver/type/money.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/real.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/string.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/text.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +6 -6
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +8 -9
- data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +4 -3
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type.rb +38 -35
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +26 -12
- data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +271 -180
- data/lib/active_record/connection_adapters/sqlserver_column.rb +76 -16
- data/lib/active_record/sqlserver_base.rb +11 -9
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +38 -39
- data/lib/activerecord-sqlserver-adapter.rb +3 -1
- data/lib/arel/visitors/sqlserver.rb +177 -56
- data/lib/arel_sqlserver.rb +4 -2
- data/test/appveyor/dbsetup.ps1 +4 -4
- data/test/cases/active_schema_test_sqlserver.rb +55 -0
- data/test/cases/adapter_test_sqlserver.rb +258 -173
- data/test/cases/change_column_collation_test_sqlserver.rb +33 -0
- data/test/cases/change_column_null_test_sqlserver.rb +14 -12
- data/test/cases/coerced_tests.rb +1421 -397
- data/test/cases/column_test_sqlserver.rb +321 -315
- data/test/cases/connection_test_sqlserver.rb +17 -20
- data/test/cases/disconnected_test_sqlserver.rb +39 -0
- data/test/cases/eager_load_too_many_ids_test_sqlserver.rb +18 -0
- data/test/cases/execute_procedure_test_sqlserver.rb +28 -19
- data/test/cases/fetch_test_sqlserver.rb +33 -21
- data/test/cases/fully_qualified_identifier_test_sqlserver.rb +15 -19
- data/test/cases/helper_sqlserver.rb +15 -15
- data/test/cases/in_clause_test_sqlserver.rb +63 -0
- data/test/cases/index_test_sqlserver.rb +15 -15
- data/test/cases/json_test_sqlserver.rb +25 -25
- data/test/cases/lateral_test_sqlserver.rb +35 -0
- data/test/cases/migration_test_sqlserver.rb +74 -27
- data/test/cases/optimizer_hints_test_sqlserver.rb +72 -0
- data/test/cases/order_test_sqlserver.rb +59 -53
- data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
- data/test/cases/primary_keys_test_sqlserver.rb +103 -0
- data/test/cases/rake_test_sqlserver.rb +70 -45
- data/test/cases/schema_dumper_test_sqlserver.rb +124 -109
- data/test/cases/schema_test_sqlserver.rb +20 -26
- data/test/cases/scratchpad_test_sqlserver.rb +4 -4
- data/test/cases/showplan_test_sqlserver.rb +28 -35
- data/test/cases/specific_schema_test_sqlserver.rb +68 -65
- data/test/cases/transaction_test_sqlserver.rb +18 -20
- data/test/cases/trigger_test_sqlserver.rb +14 -13
- data/test/cases/utils_test_sqlserver.rb +70 -70
- data/test/cases/uuid_test_sqlserver.rb +13 -14
- data/test/debug.rb +8 -6
- data/test/migrations/create_clients_and_change_column_collation.rb +19 -0
- data/test/migrations/create_clients_and_change_column_null.rb +3 -1
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +4 -4
- data/test/models/sqlserver/booking.rb +3 -1
- data/test/models/sqlserver/composite_pk.rb +9 -0
- data/test/models/sqlserver/customers_view.rb +3 -1
- data/test/models/sqlserver/datatype.rb +2 -0
- data/test/models/sqlserver/datatype_migration.rb +2 -0
- data/test/models/sqlserver/dollar_table_name.rb +3 -1
- data/test/models/sqlserver/edge_schema.rb +3 -3
- data/test/models/sqlserver/fk_has_fk.rb +3 -1
- data/test/models/sqlserver/fk_has_pk.rb +3 -1
- data/test/models/sqlserver/natural_pk_data.rb +4 -2
- data/test/models/sqlserver/natural_pk_int_data.rb +3 -1
- data/test/models/sqlserver/no_pk_data.rb +3 -1
- data/test/models/sqlserver/object_default.rb +3 -1
- data/test/models/sqlserver/quoted_table.rb +4 -2
- data/test/models/sqlserver/quoted_view_1.rb +3 -1
- data/test/models/sqlserver/quoted_view_2.rb +3 -1
- data/test/models/sqlserver/sst_memory.rb +3 -1
- data/test/models/sqlserver/sst_string_collation.rb +3 -0
- data/test/models/sqlserver/string_default.rb +3 -1
- data/test/models/sqlserver/string_defaults_big_view.rb +3 -1
- data/test/models/sqlserver/string_defaults_view.rb +3 -1
- data/test/models/sqlserver/tinyint_pk.rb +3 -1
- data/test/models/sqlserver/trigger.rb +4 -2
- data/test/models/sqlserver/trigger_history.rb +3 -1
- data/test/models/sqlserver/upper.rb +3 -1
- data/test/models/sqlserver/uppered.rb +3 -1
- data/test/models/sqlserver/uuid.rb +3 -1
- data/test/schema/sqlserver_specific_schema.rb +56 -21
- data/test/support/coerceable_test_sqlserver.rb +19 -13
- data/test/support/connection_reflection.rb +3 -2
- data/test/support/core_ext/query_cache.rb +4 -1
- data/test/support/load_schema_sqlserver.rb +5 -5
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic_associations.dump +0 -0
- data/test/support/minitest_sqlserver.rb +3 -1
- data/test/support/paths_sqlserver.rb +11 -11
- data/test/support/rake_helpers.rb +15 -10
- data/test/support/sql_counter_sqlserver.rb +16 -15
- data/test/support/test_in_memory_oltp.rb +9 -7
- metadata +47 -13
- data/.travis.yml +0 -25
- data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da2be1cf7b3b5d8c8ad40cb1c79e037d5054cdf522e8e98b53fd22185af10a24
|
4
|
+
data.tar.gz: 9d1da7dc2e59761988098939f3254979df4862f26a7edcb617d7a35ff720155d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51b6f8a1d55f2e27dd0301ee9b65a2922c7120b20db3831a774c33acd3b736035f6a6238c26a3491c817ebe808ccd8719eabfd957766a2064c8368ad2c6cd2ee
|
7
|
+
data.tar.gz: dc7b43ee4d532e44f1106064d3757ea3dd636ecc0bc5cec64d58a5c4de3e4b6bf5ce4017ad9bf6ee8c5a4503627b345e2b83811b71318765f5c4072c5e327456
|
data/.editorconfig
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
## Issue
|
2
|
+
<!-- Give a brief summary of the issue. -->
|
3
|
+
|
4
|
+
## Expected behavior
|
5
|
+
<!-- Tell us what should happen -->
|
6
|
+
|
7
|
+
## Actual behavior
|
8
|
+
<!-- Tell us what happens instead -->
|
9
|
+
|
10
|
+
## How to reproduce
|
11
|
+
<!-- See https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/How-to-report-a-bug -->
|
12
|
+
|
13
|
+
## Details
|
14
|
+
|
15
|
+
- **Rails version**: `x.x.x`
|
16
|
+
- **SQL Server adapter version**: `x.x.x`
|
17
|
+
- **TinyTDS version**: `x.x.x`
|
18
|
+
- **FreeTDS details**:
|
19
|
+
|
20
|
+
```
|
21
|
+
run `tsql -C` and paste here the output.
|
22
|
+
```
|
23
|
+
|
@@ -0,0 +1,29 @@
|
|
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:
|
17
|
+
- 2.7.5
|
18
|
+
- 3.0.3
|
19
|
+
- 3.1.0
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- name: Checkout code
|
23
|
+
uses: actions/checkout@v2
|
24
|
+
|
25
|
+
- name: Build docker images
|
26
|
+
run: docker-compose build --build-arg TARGET_VERSION=${{ matrix.ruby }}
|
27
|
+
|
28
|
+
- name: Run tests
|
29
|
+
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,40 +1,30 @@
|
|
1
|
-
##
|
1
|
+
## v7.0.0.0
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
- #691 Fix constraints bug
|
6
|
-
- #700 SET SINGLE_USER before dropping the database
|
7
|
-
- #733 Calculate should not remove ordering for MSSQL
|
8
|
-
- #735 Order by selected items when using distinct exists
|
9
|
-
- #737 Use default precision for 'time' column type
|
10
|
-
- #744 Adapter does not use prepared statement cache
|
11
|
-
- #743 Set default time precision when registering time type
|
12
|
-
- #745 Quoted table names containing square brackets need to be regex escaped
|
13
|
-
|
14
|
-
## v5.2.0
|
3
|
+
[Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/v7.0.0.0.rc1...v7.0.0.0)
|
15
4
|
|
16
5
|
#### Fixed
|
17
6
|
|
18
|
-
- #
|
7
|
+
- [#1002](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1002) Fix support for index types
|
19
8
|
|
20
|
-
|
21
|
-
|
22
|
-
#### Fixed
|
23
|
-
|
24
|
-
- #681 change_column_null should not clear other column attributes. Fixes #582.
|
25
|
-
- #684 Fix explain with array conditions. Fixes #673.
|
9
|
+
#### Changed
|
26
10
|
|
27
|
-
|
11
|
+
- [#1004](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1004) Dump the precision for datetime columns following the new defaults.
|
28
12
|
|
29
|
-
|
13
|
+
## v7.0.0.0.rc1
|
30
14
|
|
31
|
-
|
32
|
-
- #646 Make String equality check work for Type::Data values. Fixes #645.
|
33
|
-
- #671 Fix tinyint columns schema migration. Fixes #670.
|
15
|
+
[Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/6-1-stable...v7.0.0.0.rc1)
|
34
16
|
|
35
17
|
#### Changed
|
36
18
|
|
37
|
-
- #
|
19
|
+
- [#968](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/968) Define adapter type maps statically
|
20
|
+
- [#983](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/983) Optimize remove_columns to use a single SQL statement
|
21
|
+
- [#984](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/984) Better handle SQL queries with invalid encoding
|
22
|
+
- [#988](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/988) Raise `ActiveRecord::StatementInvalid` when `columns` is called with a non-existing table (***breaking change***)
|
23
|
+
|
24
|
+
#### Added
|
38
25
|
|
26
|
+
- [#972](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/972) Support `ActiveRecord::QueryLogs`
|
27
|
+
- [#981](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/981) Support `find_by` an encrypted attribute
|
28
|
+
- [#985](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/985) Support string returning clause for `ActiveRecord#insert_all`
|
39
29
|
|
40
|
-
Please check [
|
30
|
+
Please check [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/6-1-stable/CHANGELOG.md) for previous changes.
|
data/Gemfile
CHANGED
@@ -1,62 +1,70 @@
|
|
1
|
-
|
2
|
-
source 'https://rubygems.org'
|
3
|
-
gemspec
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
gem 'bcrypt'
|
7
|
-
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
3
|
+
source "https://rubygems.org"
|
8
4
|
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
6
|
+
|
7
|
+
gemspec
|
12
8
|
|
13
|
-
|
14
|
-
|
9
|
+
gem "bcrypt"
|
10
|
+
gem "pg", ">= 0.18.0"
|
11
|
+
gem "sqlite3", "~> 1.4"
|
12
|
+
gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
13
|
+
gem "benchmark-ips"
|
14
|
+
|
15
|
+
if ENV["RAILS_SOURCE"]
|
16
|
+
gemspec path: ENV["RAILS_SOURCE"]
|
15
17
|
else
|
16
|
-
# Need to get rails source
|
17
|
-
version = ENV[
|
18
|
-
require
|
19
|
-
require
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
# Need to get rails source because the gem doesn't include tests
|
19
|
+
version = ENV["RAILS_VERSION"] || begin
|
20
|
+
require "openssl"
|
21
|
+
require "net/http"
|
22
|
+
require "yaml"
|
23
|
+
|
24
|
+
spec = eval(File.read("activerecord-sqlserver-adapter.gemspec"))
|
25
|
+
ver = spec.dependencies.detect { |d| d.name == "activerecord" }.requirement.requirements.first.last.version
|
26
|
+
major, minor, _tiny, pre = ver.split(".")
|
27
|
+
|
28
|
+
if pre
|
29
|
+
ver
|
30
|
+
else
|
31
|
+
uri = URI.parse("https://rubygems.org/api/v1/versions/activerecord.yaml")
|
25
32
|
http = Net::HTTP.new(uri.host, uri.port)
|
26
33
|
http.use_ssl = true
|
27
34
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
28
|
-
YAML.load(http.request(Net::HTTP::Get.new(uri.request_uri)).body).
|
29
|
-
a, b,
|
30
|
-
!data[
|
31
|
-
end
|
32
|
-
else
|
33
|
-
ver
|
35
|
+
YAML.load(http.request(Net::HTTP::Get.new(uri.request_uri)).body).find do |data|
|
36
|
+
a, b, = data["number"].split(".")
|
37
|
+
!data["prerelease"] && major == a && (minor.nil? || minor == b)
|
38
|
+
end["number"]
|
34
39
|
end
|
35
40
|
end
|
36
|
-
gem
|
37
|
-
end
|
38
|
-
|
39
|
-
if ENV['AREL']
|
40
|
-
gem 'arel', path: ENV['AREL']
|
41
|
+
gem "rails", github: "rails/rails", tag: "v#{version}"
|
41
42
|
end
|
42
43
|
|
44
|
+
# rubocop:disable Bundler/DuplicatedGem
|
43
45
|
group :tinytds do
|
44
|
-
if ENV[
|
45
|
-
gem
|
46
|
-
elsif ENV[
|
47
|
-
gem
|
46
|
+
if ENV["TINYTDS_SOURCE"]
|
47
|
+
gem "tiny_tds", path: ENV["TINYTDS_SOURCE"]
|
48
|
+
elsif ENV["TINYTDS_VERSION"]
|
49
|
+
gem "tiny_tds", ENV["TINYTDS_VERSION"]
|
48
50
|
else
|
49
|
-
gem
|
51
|
+
gem "tiny_tds"
|
50
52
|
end
|
51
53
|
end
|
54
|
+
# rubocop:enable Bundler/DuplicatedGem
|
52
55
|
|
53
56
|
group :development do
|
54
|
-
gem
|
55
|
-
gem
|
56
|
-
gem
|
57
|
+
gem "minitest-spec-rails"
|
58
|
+
gem "mocha"
|
59
|
+
gem "pry-byebug", platform: [:mri, :mingw, :x64_mingw]
|
57
60
|
end
|
58
61
|
|
59
62
|
group :guard do
|
60
|
-
gem
|
61
|
-
gem
|
63
|
+
gem "guard"
|
64
|
+
gem "guard-minitest"
|
65
|
+
gem "terminal-notifier-guard" if RbConfig::CONFIG["host_os"] =~ /darwin/
|
66
|
+
end
|
67
|
+
|
68
|
+
group :rubocop do
|
69
|
+
gem "rubocop", require: false
|
62
70
|
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/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,23 +1,35 @@
|
|
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 7.x version of the adapter is only for the latest 7.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
|
+
| `7.0.0.0` | `7.0.x` | [active](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
|
17
|
+
| `6.1.2.1` | `6.1.x` | [active](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
|
18
|
+
| `6.0.2` | `6.0.x` | [active](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
|
19
|
+
| `5.2.1` | `5.2.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-2-stable) |
|
20
|
+
| `5.1.6` | `5.1.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-1-stable) |
|
21
|
+
| `4.2.18` | `4.2.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-2-stable) |
|
22
|
+
| `4.1.8` | `4.1.x` | [ended](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-1-stable) |
|
23
|
+
|
24
|
+
For older versions, please check their stable branches.
|
13
25
|
|
14
26
|
#### Native Data Type Support
|
15
27
|
|
16
28
|
We support every data type supported by FreeTDS. All simplified Rails types in migrations will coorespond to a matching SQL Server national (unicode) data type. Always check the `initialize_native_database_types` [(here)](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/master/lib/active_record/connection_adapters/sqlserver/schema_statements.rb) for an updated list.
|
17
29
|
|
18
|
-
The following types (date
|
30
|
+
The following types (`date`, `datetime2`, `datetimeoffset`, `time`) all require TDS version `7.3` with TinyTDS. We recommend using FreeTDS 1.0 or higher which default to using `TDSVER` to `7.3`. The adapter also sets TinyTDS's `tds_version` to this as well if non is specified.
|
19
31
|
|
20
|
-
The Rails v5 adapter supports ActiveRecord's `datetime_with_precision` setting. This means that passing `:precision` to a datetime column is supported. Using a
|
32
|
+
The Rails v5 adapter supports ActiveRecord's `datetime_with_precision` setting. This means that passing `:precision` to a datetime column is supported. Using a precision with the `:datetime` type will signal the adapter to use the `datetime2` type under the hood.
|
21
33
|
|
22
34
|
|
23
35
|
#### Identity Inserts with Triggers
|
@@ -52,37 +64,61 @@ Depending on your user and schema setup, it may be needed to use a table name pr
|
|
52
64
|
ActiveRecord::Base.table_name_prefix = 'dbo.'
|
53
65
|
```
|
54
66
|
|
67
|
+
It's also possible to create/change/drop a schema in the migration file as in the example below:
|
55
68
|
|
56
|
-
|
69
|
+
```ruby
|
70
|
+
class CreateFooSchema < ActiveRecord::Migration[7.0]
|
71
|
+
def up
|
72
|
+
create_schema('foo')
|
57
73
|
|
58
|
-
|
74
|
+
# Or you could move a table to a different schema
|
75
|
+
|
76
|
+
change_table_schema('foo', 'dbo.admin')
|
77
|
+
end
|
78
|
+
|
79
|
+
def down
|
80
|
+
drop_schema('foo')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
```
|
84
|
+
|
85
|
+
|
86
|
+
#### Configure Connection
|
87
|
+
|
88
|
+
We currently conform to an unpublished and non-standard AbstractAdapter interface to configure connections made to the database. To do so, just override the `configure_connection` method in an initializer like so. In this case below we are setting the `TEXTSIZE` to 64 megabytes.
|
59
89
|
|
60
90
|
```ruby
|
61
91
|
module ActiveRecord
|
62
92
|
module ConnectionAdapters
|
63
93
|
class SQLServerAdapter < AbstractAdapter
|
64
|
-
|
65
94
|
def configure_connection
|
66
95
|
raw_connection_do "SET TEXTSIZE #{64.megabytes}"
|
67
96
|
end
|
68
|
-
|
69
|
-
def configure_application_name
|
70
|
-
"myapp_#{$$}_#{Thread.current.object_id}".to(29)
|
71
|
-
end
|
72
|
-
|
73
97
|
end
|
74
98
|
end
|
75
99
|
end
|
76
100
|
```
|
77
101
|
|
102
|
+
#### Configure Application Name
|
103
|
+
|
104
|
+
TinyTDS supports an application name when it logs into SQL Server. This can be used to identify the connection in SQL Server's activity monitor. By default it will use the `appname` from your database.yml file or your Rails::Application name.
|
105
|
+
|
106
|
+
Below shows how you might use the database.yml file to use the process ID in your application name.
|
107
|
+
|
108
|
+
```yaml
|
109
|
+
development:
|
110
|
+
adapter: sqlserver
|
111
|
+
appname: <%= "myapp_#{Process.pid}" %>
|
112
|
+
```
|
113
|
+
|
78
114
|
#### Executing Stored Procedures
|
79
115
|
|
80
116
|
Every class that sub classes ActiveRecord::Base will now have an execute_procedure class method to use. This method takes the name of the stored procedure which can be a string or symbol and any number of variables to pass to the procedure. Arguments will automatically be quoted per the connection's standards as normal. For example:
|
81
117
|
|
82
118
|
```ruby
|
83
|
-
Account.execute_procedure
|
119
|
+
Account.execute_procedure(:update_totals, 'admin', nil, true)
|
84
120
|
# Or with named parameters.
|
85
|
-
Account.execute_procedure
|
121
|
+
Account.execute_procedure(:update_totals, named: 'params')
|
86
122
|
```
|
87
123
|
|
88
124
|
#### Explain Support (SHOWPLAN)
|
@@ -117,16 +153,25 @@ ActiveRecord::ConnectionAdapters::SQLServerAdapter.showplan_option = 'SHOWPLAN_X
|
|
117
153
|
**NOTE:** The method we utilize to make SHOWPLANs work is very brittle to complex SQL. There is no getting around this as we have to deconstruct an already prepared statement for the sp_executesql method. If you find that explain breaks your app, simple disable it. Do not open a github issue unless you have a patch. Please [consult the Rails guides](http://guides.rubyonrails.org/active_record_querying.html#running-explain) for more info.
|
118
154
|
|
119
155
|
|
156
|
+
## New Rails Applications
|
157
|
+
|
158
|
+
When creating a new Rails application you can specify that you want to use the SQL Server adapter using the `database` option:
|
159
|
+
|
160
|
+
```
|
161
|
+
rails new my_app --database=sqlserver
|
162
|
+
```
|
163
|
+
|
164
|
+
To then connect the application to your SQL Server instance edit the `config/database.yml` file with the username, password and host of your SQL Server instance.
|
165
|
+
|
166
|
+
|
120
167
|
## Installation
|
121
168
|
|
122
|
-
The adapter has no strict gem dependencies outside of ActiveRecord
|
169
|
+
The adapter has no strict gem dependencies outside of `ActiveRecord`. You will have to pick a connection mode, the default is dblib which uses the `TinyTDS` gem. Just bundle the gem and the adapter will use it.
|
123
170
|
|
124
171
|
```ruby
|
125
|
-
gem 'tiny_tds'
|
126
172
|
gem 'activerecord-sqlserver-adapter'
|
127
173
|
```
|
128
174
|
|
129
|
-
|
130
175
|
## Contributing
|
131
176
|
|
132
177
|
If you would like to contribute a feature or bugfix, thanks! To make sure your fix/feature has a high chance of being added, please read the following guidelines. First, ask on the Gitter, or post a ticket on github issues. Second, make sure there are tests! We will not accept any patch that is not tested. Please read the [`RUNNING_UNIT_TESTS`](RUNNING_UNIT_TESTS.md) file for the details of how to run the unit tests.
|
@@ -139,30 +184,8 @@ If you would like to contribute a feature or bugfix, thanks! To make sure your f
|
|
139
184
|
|
140
185
|
Many many people have contributed. If you do not see your name here and it should be let us know. Also, many thanks go out to those that have pledged financial contributions.
|
141
186
|
|
142
|
-
|
143
|
-
## Contributors
|
144
|
-
|
145
|
-
Up-to-date list of contributors: http://github.com/rails-sqlserver/activerecord-sqlserver-adapter/contributors
|
146
|
-
|
147
|
-
* metaskills (Ken Collins)
|
148
|
-
* Annaswims (Annaswims)
|
149
|
-
* wbond (Will Bond)
|
150
|
-
* Thirdshift (Garrett Hart)
|
151
|
-
* h-lame (Murray Steele)
|
152
|
-
* vegantech
|
153
|
-
* cjheath (Clifford Heath)
|
154
|
-
* fryguy (Jason Frey)
|
155
|
-
* jrafanie (Joe Rafaniello)
|
156
|
-
* nerdrew (Andrew Ryan)
|
157
|
-
* snowblink (Jonathan Lim)
|
158
|
-
* koppen (Jakob Skjerning)
|
159
|
-
* ebryn (Erik Bryn)
|
160
|
-
* adzap (Adam Meehan)
|
161
|
-
* neomindryan (Ryan Findley)
|
162
|
-
* jeremydurham (Jeremy Durham)
|
163
|
-
|
187
|
+
You can see an up-to-date list of contributors here: http://github.com/rails-sqlserver/activerecord-sqlserver-adapter/contributors
|
164
188
|
|
165
189
|
## License
|
166
190
|
|
167
|
-
Copyright © 2008-
|
168
|
-
|
191
|
+
Copyright © 2008-2022. It is free software, and may be redistributed under the terms specified in the [MIT-LICENSE](MIT-LICENSE) file.
|
data/RUNNING_UNIT_TESTS.md
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
|
4
4
|
This process is much easier than it has been before!
|
5
5
|
|
6
|
+
## MS SQL SERVER
|
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](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter-dev-box).
|
6
9
|
|
7
10
|
## TL;DR
|
8
11
|
|
data/Rakefile
CHANGED
@@ -1,37 +1,35 @@
|
|
1
|
-
|
2
|
-
require 'rake/testtask'
|
3
|
-
require_relative 'test/support/paths_sqlserver'
|
4
|
-
require_relative 'test/support/rake_helpers'
|
1
|
+
# frozen_string_literal: true
|
5
2
|
|
6
|
-
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
require_relative "test/support/paths_sqlserver"
|
6
|
+
require_relative "test/support/rake_helpers"
|
7
|
+
|
8
|
+
task test: ["test:dblib"]
|
7
9
|
task default: [:test]
|
8
10
|
|
9
11
|
namespace :test do
|
10
|
-
|
11
12
|
%w(dblib).each do |mode|
|
12
|
-
|
13
13
|
Rake::TestTask.new(mode) do |t|
|
14
14
|
t.libs = ARTest::SQLServer.test_load_paths
|
15
15
|
t.test_files = test_files
|
16
|
-
t.warning = !!ENV[
|
16
|
+
t.warning = !!ENV["WARNING"]
|
17
17
|
t.verbose = false
|
18
18
|
end
|
19
|
-
|
20
19
|
end
|
21
20
|
|
22
|
-
task
|
23
|
-
ENV[
|
21
|
+
task "dblib:env" do
|
22
|
+
ENV["ARCONN"] = "dblib"
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
27
25
|
|
28
|
-
task
|
26
|
+
task "test:dblib" => "test:dblib:env"
|
29
27
|
|
30
28
|
namespace :profile do
|
31
|
-
[
|
29
|
+
["dblib"].each do |mode|
|
32
30
|
namespace mode.to_sym do
|
33
|
-
Dir.glob(
|
34
|
-
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", "")
|
35
33
|
Rake::TestTask.new(profile_case) do |t|
|
36
34
|
t.libs = ARTest::SQLServer.test_load_paths
|
37
35
|
t.test_files = [test_file]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
7.0.0.0
|
@@ -1,21 +1,32 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
version = File.read(File.expand_path("VERSION", __dir__)).strip
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
7
|
-
spec.version = ActiveRecord::ConnectionAdapters::SQLServer::Version::VERSION
|
6
|
+
spec.name = "activerecord-sqlserver-adapter"
|
8
7
|
spec.platform = Gem::Platform::RUBY
|
9
|
-
spec.
|
10
|
-
|
11
|
-
spec.
|
12
|
-
|
13
|
-
spec.
|
14
|
-
spec.
|
8
|
+
spec.version = version
|
9
|
+
|
10
|
+
spec.required_ruby_version = ">= 2.7.0"
|
11
|
+
|
12
|
+
spec.license = "MIT"
|
13
|
+
spec.authors = ["Ken Collins", "Anna Carey", "Will Bond", "Murray Steele", "Shawn Balestracci", "Joe Rafaniello", "Tom Ward"]
|
14
|
+
spec.email = ["ken@metaskills.net", "will@wbond.net"]
|
15
|
+
spec.homepage = "http://github.com/rails-sqlserver/activerecord-sqlserver-adapter"
|
16
|
+
spec.summary = "ActiveRecord SQL Server Adapter."
|
17
|
+
spec.description = "ActiveRecord SQL Server Adapter. SQL Server 2012 and upward."
|
18
|
+
|
19
|
+
spec.metadata = {
|
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
|
+
}
|
24
|
+
|
15
25
|
spec.files = `git ls-files -z`.split("\x0")
|
16
26
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
27
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
-
spec.require_paths = [
|
19
|
-
|
20
|
-
spec.add_dependency
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_dependency "activerecord", "~> 7.0.0"
|
31
|
+
spec.add_dependency "tiny_tds"
|
21
32
|
end
|