activerecord-sqlserver-adapter 5.2.1 → 7.0.0.0
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 +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
|
@@ -1,10 +1,11 @@
|
|
|
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 Money < Decimal
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@precision = 19
|
|
10
11
|
@scale = 4
|
|
@@ -15,9 +16,8 @@ module ActiveRecord
|
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def sqlserver_type
|
|
18
|
-
|
|
19
|
+
"money"
|
|
19
20
|
end
|
|
20
|
-
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -1,17 +1,17 @@
|
|
|
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 Real < Float
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:real
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
+
"real"
|
|
13
14
|
end
|
|
14
|
-
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 SmallMoney < Money
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@precision = 10
|
|
10
11
|
@scale = 4
|
|
@@ -15,9 +16,8 @@ module ActiveRecord
|
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def sqlserver_type
|
|
18
|
-
|
|
19
|
+
"smallmoney"
|
|
19
20
|
end
|
|
20
|
-
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -1,15 +1,16 @@
|
|
|
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 SmallDateTime < DateTime
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:smalldatetime
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
+
"smalldatetime"
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
private
|
|
@@ -21,7 +22,6 @@ module ActiveRecord
|
|
|
21
22
|
def apply_seconds_precision(value)
|
|
22
23
|
value.change usec: 0 if value
|
|
23
24
|
end
|
|
24
|
-
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
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 String < ActiveRecord::Type::String
|
|
6
|
-
|
|
7
8
|
def changed_in_place?(raw_old_value, new_value)
|
|
8
9
|
if raw_old_value.is_a?(Data)
|
|
9
10
|
raw_old_value.value != new_value
|
|
@@ -11,7 +12,6 @@ module ActiveRecord
|
|
|
11
12
|
super
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
|
-
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,17 +1,17 @@
|
|
|
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 Text < VarcharMax
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:text_basic
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
+
"text"
|
|
13
14
|
end
|
|
14
|
-
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,18 +1,18 @@
|
|
|
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 Time < ActiveRecord::Type::Time
|
|
6
|
-
|
|
7
8
|
include TimeValueFractional2
|
|
8
9
|
|
|
9
10
|
def serialize(value)
|
|
10
11
|
value = super
|
|
11
12
|
return value unless value.acts_like?(:time)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
13
|
+
|
|
14
|
+
time = "#{value.to_formatted_s(:_sqlserver_time)}.#{quote_fractional(value)}"
|
|
15
|
+
|
|
16
16
|
Data.new time, self
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -37,6 +37,7 @@ module ActiveRecord
|
|
|
37
37
|
def cast_value(value)
|
|
38
38
|
value = super
|
|
39
39
|
return if value.blank?
|
|
40
|
+
|
|
40
41
|
value = value.change year: 2000, month: 01, day: 01
|
|
41
42
|
apply_seconds_precision(value)
|
|
42
43
|
end
|
|
@@ -44,7 +45,6 @@ module ActiveRecord
|
|
|
44
45
|
def fractional_scale
|
|
45
46
|
precision
|
|
46
47
|
end
|
|
47
|
-
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module ActiveRecord
|
|
2
4
|
module ConnectionAdapters
|
|
3
5
|
module SQLServer
|
|
4
6
|
module Type
|
|
5
|
-
|
|
6
7
|
module TimeValueFractional
|
|
7
|
-
|
|
8
8
|
private
|
|
9
9
|
|
|
10
10
|
def apply_seconds_precision(value)
|
|
11
11
|
return value if !value.respond_to?(fractional_property) || value.send(fractional_property).zero?
|
|
12
|
+
|
|
12
13
|
value.change fractional_property => seconds_precision(value)
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def seconds_precision(value)
|
|
16
17
|
return 0 if fractional_scale == 0
|
|
18
|
+
|
|
17
19
|
seconds = value.send(fractional_property).to_f / fractional_operator.to_f
|
|
18
20
|
seconds = ((seconds * (1 / fractional_precision)).round / (1 / fractional_precision)).round(fractional_scale)
|
|
19
21
|
(seconds * fractional_operator).round(0).to_i
|
|
@@ -21,9 +23,10 @@ module ActiveRecord
|
|
|
21
23
|
|
|
22
24
|
def quote_fractional(value)
|
|
23
25
|
return 0 if fractional_scale == 0
|
|
26
|
+
|
|
24
27
|
frac_seconds = seconds_precision(value)
|
|
25
28
|
seconds = (frac_seconds.to_f / fractional_operator.to_f).round(fractional_scale)
|
|
26
|
-
seconds.to_d.to_s.split(
|
|
29
|
+
seconds.to_d.to_s.split(".").last.to(fractional_scale - 1)
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
def fractional_property
|
|
@@ -35,7 +38,7 @@ module ActiveRecord
|
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
def fractional_operator
|
|
38
|
-
10
|
|
41
|
+
10**fractional_digits
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
def fractional_precision
|
|
@@ -45,11 +48,9 @@ module ActiveRecord
|
|
|
45
48
|
def fractional_scale
|
|
46
49
|
3
|
|
47
50
|
end
|
|
48
|
-
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
module TimeValueFractional2
|
|
52
|
-
|
|
53
54
|
include TimeValueFractional
|
|
54
55
|
|
|
55
56
|
private
|
|
@@ -80,11 +81,9 @@ module ActiveRecord
|
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
def fractional_scale_max
|
|
83
|
-
(
|
|
84
|
+
("9" * fractional_scale) + ("0" * (fractional_digits - fractional_scale))
|
|
84
85
|
end
|
|
85
|
-
|
|
86
86
|
end
|
|
87
|
-
|
|
88
87
|
end
|
|
89
88
|
end
|
|
90
89
|
end
|
|
@@ -1,17 +1,17 @@
|
|
|
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 Timestamp < Binary
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:ss_timestamp
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
+
"timestamp"
|
|
13
14
|
end
|
|
14
|
-
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,11 +1,12 @@
|
|
|
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 TinyInteger < Integer
|
|
6
|
-
|
|
7
8
|
def sqlserver_type
|
|
8
|
-
|
|
9
|
+
"tinyint"
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
private
|
|
@@ -17,7 +18,6 @@ module ActiveRecord
|
|
|
17
18
|
def min_value
|
|
18
19
|
0
|
|
19
20
|
end
|
|
20
|
-
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -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 UnicodeChar < UnicodeString
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:nchar
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
-
type
|
|
13
|
+
"nchar".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,17 +1,17 @@
|
|
|
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 UnicodeText < UnicodeVarcharMax
|
|
6
|
-
|
|
7
8
|
def type
|
|
8
9
|
:ntext
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def sqlserver_type
|
|
12
|
-
|
|
13
|
+
"ntext"
|
|
13
14
|
end
|
|
14
|
-
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 UnicodeVarchar < UnicodeChar
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 4000 if @limit.to_i == 0
|
|
10
11
|
end
|
|
@@ -14,11 +15,11 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
-
type
|
|
18
|
+
"nvarchar".yield_self do |type|
|
|
19
|
+
type += "(#{limit})" if limit
|
|
20
|
+
type
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
|
-
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 UnicodeVarcharMax < UnicodeVarchar
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 2_147_483_647
|
|
10
11
|
end
|
|
@@ -14,9 +15,8 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
+
"nvarchar(max)"
|
|
18
19
|
end
|
|
19
|
-
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
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 Uuid < String
|
|
6
|
-
|
|
7
8
|
ACCEPTABLE_UUID = %r{\A\{?([a-fA-F0-9]{4}-?){8}\}?\z}x
|
|
8
9
|
|
|
9
10
|
alias_method :serialize, :deserialize
|
|
@@ -13,11 +14,12 @@ module ActiveRecord
|
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def sqlserver_type
|
|
16
|
-
|
|
17
|
+
"uniqueidentifier"
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
def serialize(value)
|
|
20
21
|
return unless value
|
|
22
|
+
|
|
21
23
|
Data.new super, self
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -28,7 +30,6 @@ module ActiveRecord
|
|
|
28
30
|
def quoted(value)
|
|
29
31
|
Utils.quote_string_single(value) if value
|
|
30
32
|
end
|
|
31
|
-
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 Varbinary < Binary
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 8000 if @limit.to_i == 0
|
|
10
11
|
end
|
|
@@ -14,11 +15,11 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
-
type
|
|
18
|
+
"varbinary".yield_self do |type|
|
|
19
|
+
type += "(#{limit})" if limit
|
|
20
|
+
type
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
|
-
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 VarbinaryMax < Varbinary
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 2_147_483_647
|
|
10
11
|
end
|
|
@@ -14,9 +15,8 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
+
"varbinary(max)"
|
|
18
19
|
end
|
|
19
|
-
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 Varchar < Char
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 8000 if @limit.to_i == 0
|
|
10
11
|
end
|
|
@@ -14,11 +15,11 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
-
type
|
|
18
|
+
"varchar".yield_self do |type|
|
|
19
|
+
type += "(#{limit})" if limit
|
|
20
|
+
type
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
|
-
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
end
|
|
@@ -1,10 +1,11 @@
|
|
|
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 VarcharMax < Varchar
|
|
6
|
-
|
|
7
|
-
def initialize(*args)
|
|
8
|
+
def initialize(**args)
|
|
8
9
|
super
|
|
9
10
|
@limit = 2_147_483_647
|
|
10
11
|
end
|
|
@@ -14,9 +15,8 @@ module ActiveRecord
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def sqlserver_type
|
|
17
|
-
|
|
18
|
+
"varchar(max)"
|
|
18
19
|
end
|
|
19
|
-
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -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
|