activerecord-sqlserver-adapter 7.0.5.0 → 7.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) 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 -76
  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 +68 -29
  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/config.yml +1 -2
  39. data/test/support/connection_reflection.rb +2 -8
  40. data/test/support/core_ext/query_cache.rb +7 -1
  41. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic_associations.dump +0 -0
  42. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic.dump +0 -0
  43. data/test/support/marshal_compatibility_fixtures/SQLServer/rails_7_1_topic_associations.dump +0 -0
  44. 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, :clear_active_connections!,
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: "inexistent_activerecord_unittest")
106
- ActiveRecord::Base.sqlserver_connection configuration
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: "inexistent_activerecord_unittest")
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 useroptions command" do
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 greateer than 4" do
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)