activerecord-sqlserver-adapter 7.0.5.0 → 7.1.0.beta1
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/.github/workflows/ci.yml +3 -3
- data/.gitignore +3 -1
- data/CHANGELOG.md +2 -76
- data/Gemfile +3 -0
- data/README.md +16 -11
- data/Rakefile +2 -6
- data/VERSION +1 -1
- data/activerecord-sqlserver-adapter.gemspec +1 -1
- data/lib/active_record/connection_adapters/sqlserver/core_ext/abstract_adapter.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +29 -6
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +10 -2
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +15 -3
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +0 -31
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +87 -131
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +5 -5
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +3 -2
- data/lib/active_record/connection_adapters/sqlserver/savepoints.rb +24 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +68 -29
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +6 -0
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +4 -6
- data/lib/active_record/connection_adapters/sqlserver/type/data.rb +10 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +81 -114
- data/lib/active_record/connection_adapters/sqlserver_column.rb +1 -0
- data/lib/active_record/sqlserver_base.rb +1 -10
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +5 -2
- data/lib/arel/visitors/sqlserver.rb +0 -33
- data/test/cases/adapter_test_sqlserver.rb +8 -7
- data/test/cases/coerced_tests.rb +573 -208
- data/test/cases/column_test_sqlserver.rb +6 -6
- data/test/cases/connection_test_sqlserver.rb +3 -6
- data/test/cases/disconnected_test_sqlserver.rb +5 -8
- data/test/cases/execute_procedure_test_sqlserver.rb +1 -1
- data/test/cases/rake_test_sqlserver.rb +1 -1
- data/test/cases/schema_dumper_test_sqlserver.rb +2 -2
- data/test/config.yml +1 -2
- data/test/support/connection_reflection.rb +2 -8
- data/test/support/core_ext/query_cache.rb +7 -1
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic_associations.dump +0 -0
- metadata +13 -7
@@ -10,8 +10,7 @@ module ActiveRecord
|
|
10
10
|
class SQLServerDatabaseTasks
|
11
11
|
DEFAULT_COLLATION = "SQL_Latin1_General_CP1_CI_AS"
|
12
12
|
|
13
|
-
delegate :connection, :establish_connection, :
|
14
|
-
to: ActiveRecord::Base
|
13
|
+
delegate :connection, :establish_connection, to: ActiveRecord::Base
|
15
14
|
|
16
15
|
def self.using_database_configurations?
|
17
16
|
true
|
@@ -53,6 +52,10 @@ module ActiveRecord
|
|
53
52
|
create true
|
54
53
|
end
|
55
54
|
|
55
|
+
def clear_active_connections!
|
56
|
+
ActiveRecord::Base.connection_handler.clear_active_connections!
|
57
|
+
end
|
58
|
+
|
56
59
|
def structure_dump(filename, extra_flags)
|
57
60
|
server_arg = "-S #{Shellwords.escape(configuration_hash[:host])}"
|
58
61
|
server_arg += ":#{Shellwords.escape(configuration_hash[:port])}" if configuration_hash[:port]
|
@@ -64,39 +64,6 @@ module Arel
|
|
64
64
|
super
|
65
65
|
end
|
66
66
|
|
67
|
-
def visit_Arel_Nodes_HomogeneousIn(o, collector)
|
68
|
-
collector.preparable = false
|
69
|
-
|
70
|
-
collector << quote_table_name(o.table_name) << "." << quote_column_name(o.column_name)
|
71
|
-
|
72
|
-
if o.type == :in
|
73
|
-
collector << " IN ("
|
74
|
-
else
|
75
|
-
collector << " NOT IN ("
|
76
|
-
end
|
77
|
-
|
78
|
-
values = o.casted_values
|
79
|
-
|
80
|
-
if values.empty?
|
81
|
-
collector << @connection.quote(nil)
|
82
|
-
elsif @connection.prepared_statements
|
83
|
-
# Monkey-patch start. Add query attribute bindings rather than just values.
|
84
|
-
column_name = o.column_name
|
85
|
-
column_type = o.attribute.relation.type_for_attribute(o.column_name)
|
86
|
-
# Use cast_type on encrypted attributes. Don't encrypt them again
|
87
|
-
column_type = column_type.cast_type if column_type.is_a?(ActiveRecord::Encryption::EncryptedAttributeType)
|
88
|
-
attrs = values.map { |value| ActiveRecord::Relation::QueryAttribute.new(column_name, value, column_type) }
|
89
|
-
|
90
|
-
collector.add_binds(attrs, &bind_block)
|
91
|
-
# Monkey-patch end.
|
92
|
-
else
|
93
|
-
collector.add_binds(values, &bind_block)
|
94
|
-
end
|
95
|
-
|
96
|
-
collector << ")"
|
97
|
-
collector
|
98
|
-
end
|
99
|
-
|
100
67
|
def visit_Arel_Nodes_SelectStatement(o, collector)
|
101
68
|
@select_statement = o
|
102
69
|
distinct_One_As_One_Is_So_Not_Fetch o
|
@@ -19,7 +19,6 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
|
|
19
19
|
string = connection.inspect
|
20
20
|
_(string).must_match %r{ActiveRecord::ConnectionAdapters::SQLServerAdapter}
|
21
21
|
_(string).must_match %r{version\: \d.\d}
|
22
|
-
_(string).must_match %r{mode: dblib}
|
23
22
|
_(string).must_match %r{azure: (true|false)}
|
24
23
|
_(string).wont_match %r{host}
|
25
24
|
_(string).wont_match %r{password}
|
@@ -102,16 +101,18 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
|
|
102
101
|
it "test bad connection" do
|
103
102
|
assert_raise ActiveRecord::NoDatabaseError do
|
104
103
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
105
|
-
configuration = db_config.configuration_hash.merge(database: "
|
106
|
-
|
104
|
+
configuration = db_config.configuration_hash.merge(database: "nonexistent_activerecord_unittest")
|
105
|
+
|
106
|
+
connection = ActiveRecord::Base.sqlserver_connection configuration
|
107
|
+
connection.exec_query("SELECT 1")
|
107
108
|
end
|
108
109
|
end
|
109
110
|
|
110
111
|
it "test database exists returns false if database does not exist" do
|
111
112
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
112
|
-
configuration = db_config.configuration_hash.merge(database: "
|
113
|
+
configuration = db_config.configuration_hash.merge(database: "nonexistent_activerecord_unittest")
|
113
114
|
assert_not ActiveRecord::ConnectionAdapters::SQLServerAdapter.database_exists?(configuration),
|
114
|
-
"expected database to not exist"
|
115
|
+
"expected database #{configuration[:database]} to not exist"
|
115
116
|
end
|
116
117
|
|
117
118
|
it "test database exists returns true when the database exists" do
|
@@ -306,7 +307,7 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
|
|
306
307
|
end
|
307
308
|
|
308
309
|
describe "database statements" do
|
309
|
-
it "run the database consistency checker
|
310
|
+
it "run the database consistency checker 'user_options' command" do
|
310
311
|
skip "on azure" if connection_sqlserver_azure?
|
311
312
|
keys = [:textsize, :language, :isolation_level, :dateformat]
|
312
313
|
user_options = connection.user_options
|
@@ -345,7 +346,7 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
|
|
345
346
|
assert_equal "tinyint", connection.type_to_sql(:integer, limit: 1)
|
346
347
|
end
|
347
348
|
|
348
|
-
it "create bigints when limit is
|
349
|
+
it "create bigints when limit is greater than 4" do
|
349
350
|
assert_equal "bigint", connection.type_to_sql(:integer, limit: 5)
|
350
351
|
assert_equal "bigint", connection.type_to_sql(:integer, limit: 6)
|
351
352
|
assert_equal "bigint", connection.type_to_sql(:integer, limit: 7)
|