activerecord-sqlserver-adapter 7.0.4.0 → 7.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +3 -3
  3. data/.gitignore +3 -1
  4. data/CHANGELOG.md +2 -69
  5. data/Gemfile +3 -0
  6. data/README.md +16 -11
  7. data/Rakefile +2 -6
  8. data/VERSION +1 -1
  9. data/activerecord-sqlserver-adapter.gemspec +1 -1
  10. data/lib/active_record/connection_adapters/sqlserver/core_ext/abstract_adapter.rb +20 -0
  11. data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +29 -6
  12. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +4 -4
  13. data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +10 -2
  14. data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +15 -3
  15. data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +0 -31
  16. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +87 -131
  17. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +5 -5
  18. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +3 -2
  19. data/lib/active_record/connection_adapters/sqlserver/savepoints.rb +24 -0
  20. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +71 -32
  21. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +3 -3
  22. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +6 -0
  23. data/lib/active_record/connection_adapters/sqlserver/transaction.rb +4 -6
  24. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +10 -0
  25. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +81 -114
  26. data/lib/active_record/connection_adapters/sqlserver_column.rb +1 -0
  27. data/lib/active_record/sqlserver_base.rb +1 -10
  28. data/lib/active_record/tasks/sqlserver_database_tasks.rb +5 -2
  29. data/lib/arel/visitors/sqlserver.rb +0 -33
  30. data/test/cases/adapter_test_sqlserver.rb +8 -7
  31. data/test/cases/coerced_tests.rb +573 -208
  32. data/test/cases/column_test_sqlserver.rb +6 -6
  33. data/test/cases/connection_test_sqlserver.rb +3 -6
  34. data/test/cases/disconnected_test_sqlserver.rb +5 -8
  35. data/test/cases/execute_procedure_test_sqlserver.rb +1 -1
  36. data/test/cases/rake_test_sqlserver.rb +1 -1
  37. data/test/cases/schema_dumper_test_sqlserver.rb +2 -2
  38. data/test/cases/view_test_sqlserver.rb +46 -0
  39. data/test/config.yml +1 -2
  40. data/test/support/connection_reflection.rb +2 -8
  41. data/test/support/core_ext/query_cache.rb +7 -1
  42. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic_associations.dump +0 -0
  43. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic.dump +0 -0
  44. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic_associations.dump +0 -0
  45. metadata +20 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41b4642838dbc7178a170c4b002937e5481bf0c7154446d43cff2dae7800a938
4
- data.tar.gz: fa20040c55e79a8417ec58c414b5ad6617acaa2fe808c5b48fc44c6e3187c5d7
3
+ metadata.gz: '009fdf722e06ca141f900257d1980016e76edc153d5af717d5f15ae6792ea4d4'
4
+ data.tar.gz: 292f605553c6bfbfc357efc6c9e26fca3be1414921d8a4b810ccd17ce46f4e88
5
5
  SHA512:
6
- metadata.gz: b7786aeaaf3f90af8a69208e76901c1263e20ef1c4f410948319108531e128ff2d5247838efb10cbcda0fe6b035d1b130576647824e027a668b0fc3df1988305
7
- data.tar.gz: 3d9db5b28f4b8b8468b71049b14b7000e25c7aa7afcac55f6fec0ec234f0e4cdf76c4158069328da464ad0a718f45ee9b45b2b6f19f00fc058b7d4ab87071308
6
+ metadata.gz: a2c2363f6445554a6067f15ca1467130dfe4499513746e2a1d374c2e27635d68f0eb5c1682cc49621c101c31531723f66c5670e1d73d89b798cb6eda90d52f39
7
+ data.tar.gz: a788af6fbd28c02f0ab1e9d6283f4a11934f9bb702d93a7428d0d1e37aed4cb9e72f9fba4f4e21c18057b789204a9bfd0cc353b988f1751c8e65689ec8b4b686
@@ -14,9 +14,9 @@ jobs:
14
14
  fail-fast: false
15
15
  matrix:
16
16
  ruby:
17
- - 2.7.7
18
- - 3.1.3
19
- - 3.2.1
17
+ - 3.0.6
18
+ - 3.1.4
19
+ - 3.2.2
20
20
 
21
21
  steps:
22
22
  - name: Checkout code
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
1
  nbproject/
2
- debug.log
2
+ debug.log*
3
3
  .DS_Store
4
4
  pkg/
5
5
  doc/
@@ -16,3 +16,5 @@ coverage/*
16
16
  .flooignore
17
17
  .floo
18
18
  .byebug_history
19
+ tmp/*
20
+ test/storage/test.sqlite3*
data/CHANGELOG.md CHANGED
@@ -1,76 +1,9 @@
1
- ## v7.0.4.0
1
+ ## v7.1.0.beta1
2
2
 
3
3
  #### Changed
4
4
 
5
- - [#1073](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1073) Improve performance of view default function lookup
6
-
7
- #### Fixed
8
-
9
- - [#1088](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1088) Fix creation of stored procedures that contain insert statements
10
- - [#1089](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1089) When changing columns set date-time columns to datetime(6) by default
11
-
12
- ## v7.0.3.0
13
-
14
- #### Fixed
15
-
16
- - [#1052](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1052) Ignore casing of VALUES clause when inserting records using SQL
17
- - [#1053](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1053) Fix insertion of records to non-default schema table using raw SQL
18
- - [#1059](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1059) Fix enums defined on string columns
19
-
20
- #### Changed
21
-
22
- - [#1057](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1057) Set precision 6 by default for timestamps.
23
-
24
- ## v7.0.2.0
25
-
26
- [Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/v7.0.1.0...v7.0.2.0)
27
-
28
- #### Fixed
29
-
30
- - [#1049](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1049) Fix for inserting records into non-dbo schema table.
31
-
32
- ## v7.0.1.0
33
-
34
- [Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/v7.0.0.0...v7.0.1.0)
35
-
36
5
  #### Fixed
37
6
 
38
- - [#1029](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1029) Handle views defined in other databases.
39
- - [#1033](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1033) Support proc default values in ruby 3.2.
40
- - [#1020](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1020) Support using adapter as a stand-alone gem.
41
- - [#1039](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1039) Fix hook method that allows custom connection configuration.
42
-
43
- #### Changed
44
-
45
- - [#1021](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1021) Freeze the SQL sent to instrumentation.
46
-
47
- ## v7.0.0.0
48
-
49
- [Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/v7.0.0.0.rc1...v7.0.0.0)
50
-
51
- #### Fixed
52
-
53
- - [#1002](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1002) Fix support for index types
54
-
55
- #### Changed
56
-
57
- - [#1004](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1004) Dump the precision for datetime columns following the new defaults.
58
-
59
- ## v7.0.0.0.rc1
60
-
61
- [Full changelog](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/6-1-stable...v7.0.0.0.rc1)
62
-
63
- #### Changed
64
-
65
- - [#968](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/968) Define adapter type maps statically
66
- - [#983](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/983) Optimize remove_columns to use a single SQL statement
67
- - [#984](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/984) Better handle SQL queries with invalid encoding
68
- - [#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***)
69
-
70
7
  #### Added
71
8
 
72
- - [#972](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/972) Support `ActiveRecord::QueryLogs`
73
- - [#981](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/981) Support `find_by` an encrypted attribute
74
- - [#985](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/985) Support string returning clause for `ActiveRecord#insert_all`
75
-
76
- Please check [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/6-1-stable/CHANGELOG.md) for previous changes.
9
+ Please check [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/7-0-stable/CHANGELOG.md) for previous changes.
data/Gemfile CHANGED
@@ -12,9 +12,12 @@ gem "sqlite3", "~> 1.4"
12
12
  gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
13
13
  gem "benchmark-ips"
14
14
  gem "minitest", ">= 5.15.0", "< 5.16"
15
+ gem "msgpack", ">= 1.7.0"
15
16
 
16
17
  if ENV["RAILS_SOURCE"]
17
18
  gemspec path: ENV["RAILS_SOURCE"]
19
+ elsif ENV["RAILS_MAIN"]
20
+ gem "rails", github: "rails/rails", branch: 'main'
18
21
  else
19
22
  # Need to get rails source because the gem doesn't include tests
20
23
  version = ENV["RAILS_VERSION"] || begin
data/README.md CHANGED
@@ -11,15 +11,16 @@ The SQL Server adapter for ActiveRecord using SQL Server 2012 or higher.
11
11
 
12
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
13
 
14
- | Adapter Version | Rails Version | Support |
15
- |-----------------| ------------- | ------------------------------------------------------------------------------------------- |
16
- | `7.0.4.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.3` | `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) |
14
+ | Adapter Version | Rails Version | Support | Branch |
15
+ |-----------------|---------------|----------------|-------------------------------------------------------------------------------------------------|
16
+ | `v7.1.0.beta1` | `7.1.0` | In development | [main](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
17
+ | `7.0.4.0` | `7.0.x` | Active | [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-0-stable) |
18
+ | `6.1.2.1` | `6.1.x` | Active | [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
19
+ | `6.0.3` | `6.0.x` | Active | [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
20
+ | `5.2.1` | `5.2.x` | Ended | [5-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-2-stable) |
21
+ | `5.1.6` | `5.1.x` | Ended | [5-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-1-stable) |
22
+ | `4.2.18` | `4.2.x` | Ended | [4-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-2-stable) |
23
+ | `4.1.8` | `4.1.x` | Ended | [4-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-1-stable) |
23
24
 
24
25
  For older versions, please check their stable branches.
25
26
 
@@ -89,13 +90,16 @@ end
89
90
 
90
91
  #### Configure Connection
91
92
 
92
- We currently conform to an unpublished and non-standard AbstractAdapter interface to configure connections made to the database. To do so, just implement the `configure_connection` method in an initializer like so. In this case below we are setting the `TEXTSIZE` to 64 megabytes.
93
+ The adapter conforms to the AbstractAdapter interface to configure connections. If you require additional connection
94
+ configuration then implement the `configure_connection` method in an initializer like so. In the following
95
+ example we are setting the `TEXTSIZE` to 64 megabytes.
93
96
 
94
97
  ```ruby
95
98
  module ActiveRecord
96
99
  module ConnectionAdapters
97
100
  class SQLServerAdapter < AbstractAdapter
98
101
  def configure_connection
102
+ super
99
103
  raw_connection_do "SET TEXTSIZE #{64.megabytes}"
100
104
  end
101
105
  end
@@ -170,7 +174,8 @@ To then connect the application to your SQL Server instance edit the `config/dat
170
174
 
171
175
  ## Installation
172
176
 
173
- 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.
177
+ The adapter has no strict gem dependencies outside of `ActiveRecord` and
178
+ [TinyTDS](https://github.com/rails-sqlserver/tiny_tds).
174
179
 
175
180
  ```ruby
176
181
  gem 'activerecord-sqlserver-adapter'
data/Rakefile CHANGED
@@ -9,6 +9,8 @@ task test: ["test:dblib"]
9
9
  task default: [:test]
10
10
 
11
11
  namespace :test do
12
+ ENV["ARCONN"] = "sqlserver"
13
+
12
14
  %w(dblib).each do |mode|
13
15
  Rake::TestTask.new(mode) do |t|
14
16
  t.libs = ARTest::SQLServer.test_load_paths
@@ -17,14 +19,8 @@ namespace :test do
17
19
  t.verbose = false
18
20
  end
19
21
  end
20
-
21
- task "dblib:env" do
22
- ENV["ARCONN"] = "dblib"
23
- end
24
22
  end
25
23
 
26
- task "test:dblib" => "test:dblib:env"
27
-
28
24
  namespace :profile do
29
25
  ["dblib"].each do |mode|
30
26
  namespace mode.to_sym do
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.0.4.0
1
+ 7.1.0.beta1
@@ -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", "~> 7.0.0"
30
+ spec.add_dependency "activerecord", "~> 7.1.1"
31
31
  spec.add_dependency "tiny_tds"
32
32
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module SQLServer
6
+ module CoreExt
7
+ module AbstractAdapter
8
+ def sqlserver?
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ ActiveSupport.on_load(:active_record) do
18
+ mod = ActiveRecord::ConnectionAdapters::SQLServer::CoreExt::AbstractAdapter
19
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.prepend(mod)
20
+ end
@@ -8,18 +8,43 @@ module ActiveRecord
8
8
  module SQLServer
9
9
  module CoreExt
10
10
  module Calculations
11
- # Same as original except we don't perform PostgreSQL hack that removes ordering.
12
11
  def calculate(operation, column_name)
13
- return super unless klass.connection.adapter_name == "SQLServer"
12
+ if klass.connection.sqlserver?
13
+ _calculate(operation, column_name)
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ # Same as original `calculate` method except we don't perform PostgreSQL hack that removes ordering.
22
+ def _calculate(operation, column_name)
23
+ operation = operation.to_s.downcase
24
+
25
+ if @none
26
+ case operation
27
+ when "count", "sum"
28
+ result = group_values.any? ? Hash.new : 0
29
+ return @async ? Promise::Complete.new(result) : result
30
+ when "average", "minimum", "maximum"
31
+ result = group_values.any? ? Hash.new : nil
32
+ return @async ? Promise::Complete.new(result) : result
33
+ end
34
+ end
14
35
 
15
36
  if has_include?(column_name)
16
37
  relation = apply_join_dependency
17
38
 
18
- if operation.to_s.downcase == "count"
39
+ if operation == "count"
19
40
  unless distinct_value || distinct_select?(column_name || select_for_count)
20
41
  relation.distinct!
21
- relation.select_values = [klass.primary_key || table[Arel.star]]
42
+ relation.select_values = [ klass.primary_key || table[Arel.star] ]
22
43
  end
44
+ # PostgreSQL: ORDER BY expressions must appear in SELECT list when using DISTINCT
45
+ # Start of monkey-patch
46
+ # relation.order_values = [] if group_values.empty?
47
+ # End of monkey-patch
23
48
  end
24
49
 
25
50
  relation.calculate(operation, column_name)
@@ -28,8 +53,6 @@ module ActiveRecord
28
53
  end
29
54
  end
30
55
 
31
- private
32
-
33
56
  def build_count_subquery(relation, column_name, distinct)
34
57
  return super unless klass.connection.adapter_name == "SQLServer"
35
58
 
@@ -8,20 +8,20 @@ module ActiveRecord
8
8
  SQLSERVER_STATEMENT_PREFIX = "EXEC sp_executesql "
9
9
  SQLSERVER_STATEMENT_REGEXP = /N'(.+)', N'(.+)', (.+)/
10
10
 
11
- def exec_explain(queries)
11
+ def exec_explain(queries, options = [])
12
12
  return super unless connection.adapter_name == "SQLServer"
13
13
 
14
14
  unprepared_queries = queries.map do |(sql, binds)|
15
15
  [unprepare_sqlserver_statement(sql, binds), binds]
16
16
  end
17
- super(unprepared_queries)
17
+ super(unprepared_queries, options)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
- # This is somewhat hacky, but it should reliably reformat our prepared sql statment
22
+ # This is somewhat hacky, but it should reliably reformat our prepared sql statement
23
23
  # which uses sp_executesql to just the first argument, then unquote it. Likewise our
24
- # `sp_executesql` method should substitude the @n args with the quoted values.
24
+ # `sp_executesql` method should substitute the @n args with the quoted values.
25
25
  def unprepare_sqlserver_statement(sql, binds)
26
26
  return sql unless sql.start_with?(SQLSERVER_STATEMENT_PREFIX)
27
27
 
@@ -10,18 +10,26 @@ module ActiveRecord
10
10
  module FinderMethods
11
11
  private
12
12
 
13
- # Same as original except we order by values in distinct select if present.
14
13
  def construct_relation_for_exists(conditions)
15
- return super unless klass.connection.adapter_name == "SQLServer"
14
+ if klass.connection.sqlserver?
15
+ _construct_relation_for_exists(conditions)
16
+ else
17
+ super
18
+ end
19
+ end
16
20
 
21
+ # Same as original except we order by values in distinct select if present.
22
+ def _construct_relation_for_exists(conditions)
17
23
  conditions = sanitize_forbidden_attributes(conditions)
18
24
 
19
25
  if distinct_value && offset_value
26
+ # Start of monkey-patch
20
27
  if select_values.present?
21
28
  relation = order(*select_values).limit!(1)
22
29
  else
23
30
  relation = except(:order).limit!(1)
24
31
  end
32
+ # End of monkey-patch
25
33
  else
26
34
  relation = except(:select, :distinct, :order)._select!(::ActiveRecord::FinderMethods::ONE_AS_ONE).limit!(1)
27
35
  end
@@ -8,10 +8,22 @@ module ActiveRecord
8
8
  module CoreExt
9
9
  module LoaderQuery
10
10
  def load_records_for_keys(keys, &block)
11
- return super unless scope.connection.adapter_name == "SQLServer"
11
+ return super unless scope.connection.sqlserver?
12
12
 
13
- keys.each_slice(in_clause_length).flat_map do |slice|
14
- scope.where(association_key_name => slice).load(&block).records
13
+ if association_key_name.is_a?(Array)
14
+ query_constraints = Hash.new { |hsh, key| hsh[key] = Set.new }
15
+
16
+ keys.each_with_object(query_constraints) do |values_set, constraints|
17
+ association_key_name.zip(values_set).each do |key_name, value|
18
+ constraints[key_name] << value
19
+ end
20
+ end
21
+
22
+ scope.where(query_constraints).load(&block)
23
+ else
24
+ keys.each_slice(in_clause_length).flat_map do |slice|
25
+ scope.where(association_key_name => slice).load(&block).records
26
+ end
15
27
  end
16
28
  end
17
29
 
@@ -8,45 +8,14 @@ module ActiveRecord
8
8
  128
9
9
  end
10
10
 
11
- def column_name_length
12
- 128
13
- end
14
- deprecate :column_name_length
15
-
16
11
  def table_name_length
17
12
  128
18
13
  end
19
- deprecate :table_name_length
20
14
 
21
15
  def index_name_length
22
16
  128
23
17
  end
24
18
 
25
- def columns_per_table
26
- 1024
27
- end
28
- deprecate :columns_per_table
29
-
30
- def indexes_per_table
31
- 999
32
- end
33
- deprecate :indexes_per_table
34
-
35
- def columns_per_multicolumn_index
36
- 16
37
- end
38
- deprecate :columns_per_multicolumn_index
39
-
40
- def sql_query_length
41
- 65_536 * 4_096
42
- end
43
- deprecate :sql_query_length
44
-
45
- def joins_per_query
46
- 256
47
- end
48
- deprecate :joins_per_query
49
-
50
19
  private
51
20
 
52
21
  # The max number of binds is 2100, but because sp_executesql takes