activerecord-sqlserver-adapter 5.2.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/.github/issue_template.md +23 -0
- data/.github/workflows/ci.yml +26 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/CHANGELOG.md +58 -20
- data/{Dockerfile → Dockerfile.ci} +1 -1
- data/Gemfile +48 -41
- data/Guardfile +9 -8
- data/README.md +28 -31
- 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 +24 -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 +3 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +3 -3
- 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 +8 -7
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +36 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +6 -4
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +9 -0
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +88 -44
- 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 +46 -8
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +16 -5
- data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +9 -7
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +210 -163
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +8 -8
- 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/sql_type_metadata.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +43 -44
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +7 -9
- data/lib/active_record/connection_adapters/sqlserver/type.rb +38 -35
- 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 +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +4 -3
- 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/utils.rb +10 -11
- data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +145 -94
- data/lib/active_record/connection_adapters/sqlserver_column.rb +9 -5
- data/lib/active_record/sqlserver_base.rb +9 -1
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +28 -32
- data/lib/activerecord-sqlserver-adapter.rb +3 -1
- data/lib/arel/visitors/sqlserver.rb +108 -34
- data/lib/arel_sqlserver.rb +4 -2
- data/test/appveyor/dbsetup.ps1 +4 -4
- data/test/cases/adapter_test_sqlserver.rb +246 -171
- data/test/cases/change_column_null_test_sqlserver.rb +14 -12
- data/test/cases/coerced_tests.rb +722 -381
- data/test/cases/column_test_sqlserver.rb +287 -285
- data/test/cases/connection_test_sqlserver.rb +17 -20
- data/test/cases/execute_procedure_test_sqlserver.rb +20 -20
- data/test/cases/fetch_test_sqlserver.rb +16 -22
- 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 +36 -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 +67 -27
- data/test/cases/optimizer_hints_test_sqlserver.rb +72 -0
- data/test/cases/order_test_sqlserver.rb +53 -54
- data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
- data/test/cases/rake_test_sqlserver.rb +33 -45
- data/test/cases/schema_dumper_test_sqlserver.rb +115 -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_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/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/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 +31 -21
- data/test/support/coerceable_test_sqlserver.rb +15 -9
- 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/minitest_sqlserver.rb +3 -1
- data/test/support/paths_sqlserver.rb +11 -11
- data/test/support/rake_helpers.rb +13 -10
- data/test/support/sql_counter_sqlserver.rb +3 -4
- data/test/support/test_in_memory_oltp.rb +9 -7
- metadata +27 -12
- data/.travis.yml +0 -25
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/sqlserver/showplan/printer_table"
|
|
4
|
+
require "active_record/connection_adapters/sqlserver/showplan/printer_xml"
|
|
3
5
|
|
|
4
6
|
module ActiveRecord
|
|
5
7
|
module ConnectionAdapters
|
|
6
8
|
module SQLServer
|
|
7
9
|
module Showplan
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
OPTION_XML = 'SHOWPLAN_XML'
|
|
10
|
+
OPTION_ALL = "SHOWPLAN_ALL"
|
|
11
|
+
OPTION_TEXT = "SHOWPLAN_TEXT"
|
|
12
|
+
OPTION_XML = "SHOWPLAN_XML"
|
|
12
13
|
OPTIONS = [OPTION_ALL, OPTION_TEXT, OPTION_XML]
|
|
13
14
|
|
|
14
15
|
def explain(arel, binds = [])
|
|
15
16
|
sql = to_sql(arel)
|
|
16
|
-
result = with_showplan_on { sp_executesql(sql,
|
|
17
|
+
result = with_showplan_on { sp_executesql(sql, "EXPLAIN", binds) }
|
|
17
18
|
printer = showplan_printer.new(result)
|
|
18
19
|
printer.pp
|
|
19
20
|
end
|
|
@@ -59,7 +60,6 @@ module ActiveRecord
|
|
|
59
60
|
else PrinterTable
|
|
60
61
|
end
|
|
61
62
|
end
|
|
62
|
-
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
@@ -41,7 +43,7 @@ module ActiveRecord
|
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
def build_separator
|
|
44
|
-
|
|
46
|
+
"+" + @widths.map { |w| "-" * (w + (cell_padding * 2)) }.join("+") + "+"
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
def build_cells(items)
|
|
@@ -54,7 +56,7 @@ module ActiveRecord
|
|
|
54
56
|
|
|
55
57
|
def cast_item(item)
|
|
56
58
|
case item
|
|
57
|
-
when NilClass then
|
|
59
|
+
when NilClass then "NULL"
|
|
58
60
|
when Float then item.to_s.to(9)
|
|
59
61
|
else item.to_s.truncate(max_column_width)
|
|
60
62
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
@@ -10,7 +12,7 @@ module ActiveRecord
|
|
|
10
12
|
def pp
|
|
11
13
|
xml = @result.rows.first.first
|
|
12
14
|
if defined?(Nokogiri)
|
|
13
|
-
Nokogiri::XML(xml).to_xml indent: 2, encoding:
|
|
15
|
+
Nokogiri::XML(xml).to_xml indent: 2, encoding: "UTF-8"
|
|
14
16
|
else
|
|
15
17
|
xml
|
|
16
18
|
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
4
6
|
class SqlTypeMetadata < ActiveRecord::ConnectionAdapters::SqlTypeMetadata
|
|
5
|
-
|
|
6
7
|
def initialize(**kwargs)
|
|
7
8
|
@sqlserver_options = kwargs.extract!(:sqlserver_options)
|
|
8
9
|
super(**kwargs)
|
|
@@ -13,7 +14,6 @@ module ActiveRecord
|
|
|
13
14
|
def attributes_for_hash
|
|
14
15
|
super + [@sqlserver_options]
|
|
15
16
|
end
|
|
16
|
-
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -1,101 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
4
|
-
|
|
5
6
|
module ColumnMethods
|
|
6
|
-
|
|
7
7
|
def primary_key(name, type = :primary_key, **options)
|
|
8
8
|
if [:integer, :bigint].include?(type)
|
|
9
9
|
options[:is_identity] = true unless options.key?(:default)
|
|
10
10
|
elsif type == :uuid
|
|
11
|
-
options[:default] = options.fetch(:default,
|
|
11
|
+
options[:default] = options.fetch(:default, "NEWID()")
|
|
12
12
|
options[:primary_key] = true
|
|
13
13
|
end
|
|
14
14
|
super
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def primary_key_nonclustered(*
|
|
18
|
-
|
|
17
|
+
def primary_key_nonclustered(*names, **options)
|
|
18
|
+
names.each { |name| column(name, :primary_key_nonclustered, **options) }
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def real(*
|
|
22
|
-
|
|
21
|
+
def real(*names, **options)
|
|
22
|
+
names.each { |name| column(name, :real, **options) }
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
def money(*
|
|
26
|
-
|
|
25
|
+
def money(*names, **options)
|
|
26
|
+
names.each { |name| column(name, :money, **options) }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
def smalldatetime(*
|
|
30
|
-
|
|
29
|
+
def smalldatetime(*names, **options)
|
|
30
|
+
names.each { |name| column(name, :smalldatetime, **options) }
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
def datetime(*
|
|
34
|
-
|
|
33
|
+
def datetime(*names, **options)
|
|
34
|
+
names.each do |name|
|
|
35
35
|
if options[:precision]
|
|
36
|
-
datetime2(name, options)
|
|
36
|
+
datetime2(name, **options)
|
|
37
37
|
else
|
|
38
|
-
column(name, :datetime, options)
|
|
38
|
+
column(name, :datetime, **options)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def datetime2(*
|
|
44
|
-
|
|
43
|
+
def datetime2(*names, **options)
|
|
44
|
+
names.each { |name| column(name, :datetime2, **options) }
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def datetimeoffset(*
|
|
48
|
-
|
|
47
|
+
def datetimeoffset(*names, **options)
|
|
48
|
+
names.each { |name| column(name, :datetimeoffset, **options) }
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def smallmoney(*
|
|
52
|
-
|
|
51
|
+
def smallmoney(*names, **options)
|
|
52
|
+
names.each { |name| column(name, :smallmoney, **options) }
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
def char(*
|
|
56
|
-
|
|
55
|
+
def char(*names, **options)
|
|
56
|
+
names.each { |name| column(name, :char, **options) }
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
def varchar(*
|
|
60
|
-
|
|
59
|
+
def varchar(*names, **options)
|
|
60
|
+
names.each { |name| column(name, :varchar, **options) }
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
def varchar_max(*
|
|
64
|
-
|
|
63
|
+
def varchar_max(*names, **options)
|
|
64
|
+
names.each { |name| column(name, :varchar_max, **options) }
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
def text_basic(*
|
|
68
|
-
|
|
67
|
+
def text_basic(*names, **options)
|
|
68
|
+
names.each { |name| column(name, :text_basic, **options) }
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
def nchar(*
|
|
72
|
-
|
|
71
|
+
def nchar(*names, **options)
|
|
72
|
+
names.each { |name| column(name, :nchar, **options) }
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
def ntext(*
|
|
76
|
-
|
|
75
|
+
def ntext(*names, **options)
|
|
76
|
+
names.each { |name| column(name, :ntext, **options) }
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
def binary_basic(*
|
|
80
|
-
|
|
79
|
+
def binary_basic(*names, **options)
|
|
80
|
+
names.each { |name| column(name, :binary_basic, **options) }
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
def varbinary(*
|
|
84
|
-
|
|
83
|
+
def varbinary(*names, **options)
|
|
84
|
+
names.each { |name| column(name, :varbinary, **options) }
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
def uuid(*
|
|
88
|
-
|
|
87
|
+
def uuid(*names, **options)
|
|
88
|
+
names.each { |name| column(name, :uniqueidentifier, **options) }
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
def ss_timestamp(*
|
|
92
|
-
|
|
91
|
+
def ss_timestamp(*names, **options)
|
|
92
|
+
names.each { |name| column(name, :ss_timestamp, **options) }
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
-
def json(*
|
|
96
|
-
|
|
95
|
+
def json(*names, **options)
|
|
96
|
+
names.each { |name| column(name, :text, **options) }
|
|
97
97
|
end
|
|
98
|
-
|
|
99
98
|
end
|
|
100
99
|
|
|
101
100
|
class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/abstract/transaction"
|
|
2
4
|
|
|
3
5
|
module ActiveRecord
|
|
4
6
|
module ConnectionAdapters
|
|
5
|
-
|
|
6
7
|
module SQLServerTransaction
|
|
7
|
-
|
|
8
8
|
private
|
|
9
9
|
|
|
10
10
|
def sqlserver?
|
|
@@ -13,26 +13,25 @@ module ActiveRecord
|
|
|
13
13
|
|
|
14
14
|
def current_isolation_level
|
|
15
15
|
return unless sqlserver?
|
|
16
|
+
|
|
16
17
|
level = connection.user_options_isolation_level
|
|
17
18
|
# When READ_COMMITTED_SNAPSHOT is set to ON,
|
|
18
19
|
# user_options_isolation_level will be equal to 'read committed
|
|
19
20
|
# snapshot' which is not a valid isolation level
|
|
20
|
-
if level.blank? || level ==
|
|
21
|
-
|
|
21
|
+
if level.blank? || level == "read committed snapshot"
|
|
22
|
+
"READ COMMITTED"
|
|
22
23
|
else
|
|
23
24
|
level.upcase
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
|
-
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
Transaction.send :prepend, SQLServerTransaction
|
|
30
30
|
|
|
31
31
|
module SQLServerRealTransaction
|
|
32
|
-
|
|
33
32
|
attr_reader :starting_isolation_level
|
|
34
33
|
|
|
35
|
-
def initialize(connection, options,
|
|
34
|
+
def initialize(connection, options, **args)
|
|
36
35
|
@connection = connection
|
|
37
36
|
@starting_isolation_level = current_isolation_level if options[:isolation]
|
|
38
37
|
super
|
|
@@ -55,7 +54,6 @@ module ActiveRecord
|
|
|
55
54
|
connection.set_transaction_isolation_level(starting_isolation_level)
|
|
56
55
|
end
|
|
57
56
|
end
|
|
58
|
-
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
RealTransaction.send :prepend, SQLServerRealTransaction
|
|
@@ -1,46 +1,49 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/type"
|
|
2
4
|
# Behaviors
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
+
require "active_record/connection_adapters/sqlserver/type/data"
|
|
6
|
+
require "active_record/connection_adapters/sqlserver/type/time_value_fractional"
|
|
5
7
|
# Exact Numerics
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
8
|
+
require "active_record/connection_adapters/sqlserver/type/integer"
|
|
9
|
+
require "active_record/connection_adapters/sqlserver/type/big_integer"
|
|
10
|
+
require "active_record/connection_adapters/sqlserver/type/small_integer"
|
|
11
|
+
require "active_record/connection_adapters/sqlserver/type/tiny_integer"
|
|
12
|
+
require "active_record/connection_adapters/sqlserver/type/boolean"
|
|
13
|
+
require "active_record/connection_adapters/sqlserver/type/decimal"
|
|
14
|
+
require "active_record/connection_adapters/sqlserver/type/decimal_without_scale"
|
|
15
|
+
require "active_record/connection_adapters/sqlserver/type/money"
|
|
16
|
+
require "active_record/connection_adapters/sqlserver/type/small_money"
|
|
14
17
|
# Approximate Numerics
|
|
15
|
-
require
|
|
16
|
-
require
|
|
18
|
+
require "active_record/connection_adapters/sqlserver/type/float"
|
|
19
|
+
require "active_record/connection_adapters/sqlserver/type/real"
|
|
17
20
|
# Date and Time
|
|
18
|
-
require
|
|
19
|
-
require
|
|
20
|
-
require
|
|
21
|
-
require
|
|
22
|
-
require
|
|
23
|
-
require
|
|
21
|
+
require "active_record/connection_adapters/sqlserver/type/date"
|
|
22
|
+
require "active_record/connection_adapters/sqlserver/type/datetime"
|
|
23
|
+
require "active_record/connection_adapters/sqlserver/type/datetime2"
|
|
24
|
+
require "active_record/connection_adapters/sqlserver/type/datetimeoffset"
|
|
25
|
+
require "active_record/connection_adapters/sqlserver/type/smalldatetime"
|
|
26
|
+
require "active_record/connection_adapters/sqlserver/type/time"
|
|
24
27
|
# Character Strings
|
|
25
|
-
require
|
|
26
|
-
require
|
|
27
|
-
require
|
|
28
|
-
require
|
|
29
|
-
require
|
|
28
|
+
require "active_record/connection_adapters/sqlserver/type/string"
|
|
29
|
+
require "active_record/connection_adapters/sqlserver/type/char"
|
|
30
|
+
require "active_record/connection_adapters/sqlserver/type/varchar"
|
|
31
|
+
require "active_record/connection_adapters/sqlserver/type/varchar_max"
|
|
32
|
+
require "active_record/connection_adapters/sqlserver/type/text"
|
|
30
33
|
# Unicode Character Strings
|
|
31
|
-
require
|
|
32
|
-
require
|
|
33
|
-
require
|
|
34
|
-
require
|
|
35
|
-
require
|
|
34
|
+
require "active_record/connection_adapters/sqlserver/type/unicode_string"
|
|
35
|
+
require "active_record/connection_adapters/sqlserver/type/unicode_char"
|
|
36
|
+
require "active_record/connection_adapters/sqlserver/type/unicode_varchar"
|
|
37
|
+
require "active_record/connection_adapters/sqlserver/type/unicode_varchar_max"
|
|
38
|
+
require "active_record/connection_adapters/sqlserver/type/unicode_text"
|
|
36
39
|
# Binary Strings
|
|
37
|
-
require
|
|
38
|
-
require
|
|
39
|
-
require
|
|
40
|
+
require "active_record/connection_adapters/sqlserver/type/binary"
|
|
41
|
+
require "active_record/connection_adapters/sqlserver/type/varbinary"
|
|
42
|
+
require "active_record/connection_adapters/sqlserver/type/varbinary_max"
|
|
40
43
|
# Other Data Types
|
|
41
|
-
require
|
|
42
|
-
require
|
|
43
|
-
require
|
|
44
|
+
require "active_record/connection_adapters/sqlserver/type/uuid"
|
|
45
|
+
require "active_record/connection_adapters/sqlserver/type/timestamp"
|
|
46
|
+
require "active_record/connection_adapters/sqlserver/type/json"
|
|
44
47
|
|
|
45
48
|
module ActiveRecord
|
|
46
49
|
module Type
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
4
6
|
module Type
|
|
5
7
|
class Binary < ActiveRecord::Type::Binary
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:binary_basic
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
-
type
|
|
13
|
+
"binary".yield_self do |type|
|
|
14
|
+
type += "(#{limit})" if limit
|
|
15
|
+
type
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
|
-
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
end
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
4
6
|
module Type
|
|
5
7
|
class Char < String
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:char
|
|
9
10
|
end
|
|
@@ -11,20 +12,22 @@ module ActiveRecord
|
|
|
11
12
|
def serialize(value)
|
|
12
13
|
return if value.nil?
|
|
13
14
|
return value if value.is_a?(Data)
|
|
15
|
+
|
|
14
16
|
Data.new super, self
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
def sqlserver_type
|
|
18
|
-
|
|
19
|
-
type
|
|
20
|
+
"char".yield_self do |type|
|
|
21
|
+
type += "(#{limit})" if limit
|
|
22
|
+
type
|
|
20
23
|
end
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
def quoted(value)
|
|
24
27
|
return value.quoted_id if value.respond_to?(:quoted_id)
|
|
28
|
+
|
|
25
29
|
Utils.quote_string_single(value)
|
|
26
30
|
end
|
|
27
|
-
|
|
28
31
|
end
|
|
29
32
|
end
|
|
30
33
|
end
|