activerecord-sqlserver-adapter 5.1.1 → 5.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +9 -0
- data/README.md +16 -2
- data/VERSION +1 -1
- data/appveyor.yml +1 -1
- data/circle.yml +1 -1
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +39 -0
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +29 -3
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +3 -6
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +3 -0
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +1 -1
- data/test/cases/adapter_test_sqlserver.rb +6 -6
- data/test/cases/coerced_tests.rb +22 -0
- data/test/cases/trigger_test_sqlserver.rb +30 -0
- data/test/models/sqlserver/trigger.rb +7 -0
- data/test/models/sqlserver/trigger_history.rb +3 -0
- data/test/schema/sqlserver_specific_schema.rb +38 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a08a277e4b09e7e807a8e814dbe442a5f819f605
|
4
|
+
data.tar.gz: d05b3a0be20f6c353430b300e78a80952585582d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d66aed80923e34eaa44a3ef7b2845dc1a6a54699a4bfaeb84caab648dee603ddbf2a78d0afd974853e757d8e6eb041426806ee41a77f15b303b7dbf81051d699
|
7
|
+
data.tar.gz: 2b35fd5e358b1178ef89b1bf0b7bff8f005d9f3cc585dd17a40f9bb5eb097e59151a964edbca5753df879374737bb5667ed51d63b5500482a8a6af24fb6d0da6
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## v5.1.2
|
2
|
+
|
3
|
+
#### Fixed
|
4
|
+
|
5
|
+
* The `fast_string_to_time` method when zone local. Fixes #609 #614 #620
|
6
|
+
* Patched `Relation#build_count_subquery`. Fixes #613.
|
7
|
+
* Inserts to tables with triggers using default `OUTPUT INSERTED` style. Fixes #595.
|
8
|
+
|
9
|
+
|
1
10
|
## v5.1.1
|
2
11
|
|
3
12
|
#### Fixed
|
data/README.md
CHANGED
@@ -14,11 +14,10 @@ Both TinyTDS and the Rails SQL Server Adapter are MIT-licensed open source proje
|
|
14
14
|
|
15
15
|
## About The Adapter
|
16
16
|
|
17
|
-
The SQL Server adapter for ActiveRecord v5.
|
17
|
+
The SQL Server adapter for ActiveRecord v5.1 using SQL Server 2012 or higher.
|
18
18
|
|
19
19
|
Interested in older versions? We follow a rational versioning policy that tracks Rails. That means that our 5.0.x version of the adapter is only for the latest 5.0 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.
|
20
20
|
|
21
|
-
|
22
21
|
#### Native Data Type Support
|
23
22
|
|
24
23
|
We support every data type supported by FreeTDS. All simplified Rails types in migrations will coorespond to a matching SQL Server national (unicode) data type. Always check the `initialize_native_database_types` [(here)](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/master/lib/active_record/connection_adapters/sqlserver/schema_statements.rb#L243) for an updated list.
|
@@ -28,6 +27,21 @@ The following types (date, datetime2, datetimeoffset, time) all require TDS vers
|
|
28
27
|
The Rails v5 adapter supports ActiveRecord's `datetime_with_precision` setting. This means that passing `:precision` to a datetime column is supported. Using a pecision with the `:datetime` type will signal the adapter to use the `datetime2` type under the hood.
|
29
28
|
|
30
29
|
|
30
|
+
#### Identity Inserts with Triggers
|
31
|
+
|
32
|
+
The adapter uses `OUTPUT INSERTED` so that we can select any data type key, for example UUID tables. However, this poses a problem with tables that use triggers. The solution requires that we use a more complex insert statement which uses a temporary table to select the inserted identity. To use this format you must declare your table exempt from the simple output inserted style with the table name into a concurrent hash. Optionally, you can set the data type of the table's primary key to return.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
adapter = ActiveRecord::ConnectionAdapters::SQLServerAdapter
|
36
|
+
|
37
|
+
# Will assume `bigint` as the id key temp table type.
|
38
|
+
adapter.exclude_output_inserted_table_names['my_table_name'] = true
|
39
|
+
|
40
|
+
# Explicitly set the data type for the temporary key table.
|
41
|
+
adapter.exclude_output_inserted_table_names['my_uuid_table_name'] = 'uniqueidentifier'
|
42
|
+
```
|
43
|
+
|
44
|
+
|
31
45
|
#### Force Schema To Lowercase
|
32
46
|
|
33
47
|
Although it is not necessary, the Ruby convention is to use lowercase method names. If your database schema is in upper or mixed case, we can force all table and column names during the schema reflection process to be lowercase. Add this to your config/initializers file for the adapter.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.1.
|
1
|
+
5.1.2
|
data/appveyor.yml
CHANGED
data/circle.yml
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'active_record/relation'
|
2
|
+
require 'active_record/version'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module ConnectionAdapters
|
6
|
+
module SQLServer
|
7
|
+
module CoreExt
|
8
|
+
module Calculations
|
9
|
+
private
|
10
|
+
|
11
|
+
def build_count_subquery(relation, column_name, distinct)
|
12
|
+
relation.select_values = [
|
13
|
+
if column_name == :all
|
14
|
+
distinct ? table[Arel.star] : Arel.sql(FinderMethods::ONE_AS_ONE)
|
15
|
+
else
|
16
|
+
column_alias = Arel.sql("count_column")
|
17
|
+
aggregate_column(column_name).as(column_alias)
|
18
|
+
end
|
19
|
+
]
|
20
|
+
|
21
|
+
subquery = relation.arel.as(Arel.sql("subquery_for_count"))
|
22
|
+
select_value = operation_over_aggregate_column(column_alias || Arel.star, "count", false)
|
23
|
+
|
24
|
+
Arel::SelectManager.new(subquery).project(select_value)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
ActiveSupport.on_load(:active_record) do
|
33
|
+
if ActiveRecord::VERSION::MAJOR == 5 &&
|
34
|
+
ActiveRecord::VERSION::MINOR == 1 &&
|
35
|
+
ActiveRecord::VERSION::TINY >= 4
|
36
|
+
mod = ActiveRecord::ConnectionAdapters::SQLServer::CoreExt::Calculations
|
37
|
+
ActiveRecord::Relation.prepend(mod)
|
38
|
+
end
|
39
|
+
end
|
@@ -192,9 +192,19 @@ module ActiveRecord
|
|
192
192
|
table_name = query_requires_identity_insert?(sql)
|
193
193
|
pk = primary_key(table_name)
|
194
194
|
end
|
195
|
-
sql = if pk &&
|
195
|
+
sql = if pk && use_output_inserted? && !database_prefix_remote_server?
|
196
196
|
quoted_pk = SQLServer::Utils.extract_identifiers(pk).quoted
|
197
|
-
|
197
|
+
exclude_output_inserted = exclude_output_inserted_table_name?(table_name, sql)
|
198
|
+
if exclude_output_inserted
|
199
|
+
id_sql_type = exclude_output_inserted.is_a?(TrueClass) ? 'bigint' : exclude_output_inserted
|
200
|
+
<<-SQL.strip_heredoc
|
201
|
+
DECLARE @ssaIdInsertTable table (#{quoted_pk} #{id_sql_type});
|
202
|
+
#{sql.dup.insert sql.index(/ (DEFAULT )?VALUES/), " OUTPUT INSERTED.#{quoted_pk} INTO @ssaIdInsertTable"}
|
203
|
+
SELECT CAST(#{quoted_pk} AS #{id_sql_type}) FROM @ssaIdInsertTable
|
204
|
+
SQL
|
205
|
+
else
|
206
|
+
sql.dup.insert sql.index(/ (DEFAULT )?VALUES/), " OUTPUT INSERTED.#{quoted_pk}"
|
207
|
+
end
|
198
208
|
else
|
199
209
|
"#{sql}; SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident"
|
200
210
|
end
|
@@ -279,6 +289,21 @@ module ActiveRecord
|
|
279
289
|
|
280
290
|
# === SQLServer Specific (Identity Inserts) ===================== #
|
281
291
|
|
292
|
+
def use_output_inserted?
|
293
|
+
self.class.use_output_inserted
|
294
|
+
end
|
295
|
+
|
296
|
+
def exclude_output_inserted_table_names?
|
297
|
+
!self.class.exclude_output_inserted_table_names.empty?
|
298
|
+
end
|
299
|
+
|
300
|
+
def exclude_output_inserted_table_name?(table_name, sql)
|
301
|
+
return false unless exclude_output_inserted_table_names?
|
302
|
+
table_name ||= get_table_name(sql)
|
303
|
+
return false unless table_name
|
304
|
+
self.class.exclude_output_inserted_table_names[table_name]
|
305
|
+
end
|
306
|
+
|
282
307
|
def exec_insert_requires_identity?(sql, pk, binds)
|
283
308
|
query_requires_identity_insert?(sql) if pk && binds.map(&:name).include?(pk)
|
284
309
|
end
|
@@ -287,7 +312,8 @@ module ActiveRecord
|
|
287
312
|
if insert_sql?(sql)
|
288
313
|
table_name = get_table_name(sql)
|
289
314
|
id_column = identity_columns(table_name).first
|
290
|
-
id_column && sql =~ /^\s*(INSERT|EXEC sp_executesql N'INSERT)[^(]+\([^)]*\b(#{id_column.name})\b,?[^)]*\)/i ? quote_table_name(table_name) : false
|
315
|
+
# id_column && sql =~ /^\s*(INSERT|EXEC sp_executesql N'INSERT)[^(]+\([^)]*\b(#{id_column.name})\b,?[^)]*\)/i ? quote_table_name(table_name) : false
|
316
|
+
id_column && sql =~ /^\s*(INSERT|EXEC sp_executesql N'INSERT)[^(]+\([^)]*\b(#{id_column.name})\b,?[^)]*\)/i ? table_name : false
|
291
317
|
else
|
292
318
|
false
|
293
319
|
end
|
@@ -35,7 +35,9 @@ module ActiveRecord
|
|
35
35
|
private
|
36
36
|
|
37
37
|
def fast_string_to_time(string)
|
38
|
-
|
38
|
+
time = ActiveSupport::TimeZone['UTC'].strptime(string, fast_string_to_time_format)
|
39
|
+
new_time(time.year, time.month, time.day, time.hour,
|
40
|
+
time.min, time.sec, Rational(time.nsec, 1_000))
|
39
41
|
rescue ArgumentError
|
40
42
|
super
|
41
43
|
end
|
@@ -43,11 +45,6 @@ module ActiveRecord
|
|
43
45
|
def fast_string_to_time_format
|
44
46
|
"#{::Time::DATE_FORMATS[:_sqlserver_datetime]}.%N".freeze
|
45
47
|
end
|
46
|
-
|
47
|
-
def fast_string_to_time_zone
|
48
|
-
::Time.zone || ActiveSupport::TimeZone['UTC']
|
49
|
-
end
|
50
|
-
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
@@ -3,6 +3,7 @@ require 'active_record'
|
|
3
3
|
require 'arel_sqlserver'
|
4
4
|
require 'active_record/connection_adapters/abstract_adapter'
|
5
5
|
require 'active_record/connection_adapters/sqlserver/core_ext/active_record'
|
6
|
+
require 'active_record/connection_adapters/sqlserver/core_ext/calculations'
|
6
7
|
require 'active_record/connection_adapters/sqlserver/core_ext/explain'
|
7
8
|
require 'active_record/connection_adapters/sqlserver/core_ext/explain_subscriber'
|
8
9
|
require 'active_record/connection_adapters/sqlserver/core_ext/attribute_methods'
|
@@ -44,11 +45,13 @@ module ActiveRecord
|
|
44
45
|
|
45
46
|
cattr_accessor :cs_equality_operator, instance_accessor: false
|
46
47
|
cattr_accessor :use_output_inserted, instance_accessor: false
|
48
|
+
cattr_accessor :exclude_output_inserted_table_names, instance_accessor: false
|
47
49
|
cattr_accessor :showplan_option, instance_accessor: false
|
48
50
|
cattr_accessor :lowercase_schema_reflection
|
49
51
|
|
50
52
|
self.cs_equality_operator = 'COLLATE Latin1_General_CS_AS_WS'
|
51
53
|
self.use_output_inserted = true
|
54
|
+
self.exclude_output_inserted_table_names = Concurrent::Map.new { false }
|
52
55
|
|
53
56
|
def initialize(connection, logger = nil, config = {})
|
54
57
|
super(connection, logger, config)
|
@@ -50,7 +50,7 @@ module ActiveRecord
|
|
50
50
|
|
51
51
|
def structure_dump(filename, extra_flags)
|
52
52
|
command = [
|
53
|
-
"defncopy",
|
53
|
+
"defncopy-ttds",
|
54
54
|
"-S #{Shellwords.escape(configuration['host'])}",
|
55
55
|
"-D #{Shellwords.escape(configuration['database'])}",
|
56
56
|
"-U #{Shellwords.escape(configuration['username'])}",
|
@@ -140,12 +140,12 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it 'return quoted table_name to #query_requires_identity_insert? when INSERT sql contains id column' do
|
143
|
-
assert_equal '
|
144
|
-
assert_equal '
|
145
|
-
assert_equal '
|
146
|
-
assert_equal '
|
147
|
-
assert_equal '
|
148
|
-
assert_equal '
|
143
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql)
|
144
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql_unquoted)
|
145
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql_unordered)
|
146
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql_sp)
|
147
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql_unquoted_sp)
|
148
|
+
assert_equal 'funny_jokes', connection.send(:query_requires_identity_insert?,@identity_insert_sql_unordered_sp)
|
149
149
|
end
|
150
150
|
|
151
151
|
it 'return false to #query_requires_identity_insert? for normal SQL' do
|
data/test/cases/coerced_tests.rb
CHANGED
@@ -90,6 +90,28 @@ class BasicsTest < ActiveRecord::TestCase
|
|
90
90
|
# Caused in Rails v4.2.5 by adding `firm_id` column in this http://git.io/vBfMs
|
91
91
|
# commit. Trust Rails has this covered.
|
92
92
|
coerce_tests! :test_find_keeps_multiple_group_values
|
93
|
+
|
94
|
+
def test_update_date_time_attributes
|
95
|
+
Time.use_zone("Eastern Time (US & Canada)") do
|
96
|
+
topic = Topic.find(1)
|
97
|
+
time = Time.zone.parse("2017-07-17 10:56")
|
98
|
+
topic.update_attributes!(written_on: time)
|
99
|
+
assert_equal(time, topic.written_on)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_update_date_time_attributes_with_default_timezone_local
|
104
|
+
with_env_tz 'America/New_York' do
|
105
|
+
with_timezone_config default: :local do
|
106
|
+
Time.use_zone("Eastern Time (US & Canada)") do
|
107
|
+
topic = Topic.find(1)
|
108
|
+
time = Time.zone.parse("2017-07-17 10:56")
|
109
|
+
topic.update_attributes!(written_on: time)
|
110
|
+
assert_equal(time, topic.written_on)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
93
115
|
end
|
94
116
|
|
95
117
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'cases/helper_sqlserver'
|
3
|
+
|
4
|
+
class SQLServerTriggerTest < ActiveRecord::TestCase
|
5
|
+
after { exclude_output_inserted_table_names.clear }
|
6
|
+
|
7
|
+
let(:exclude_output_inserted_table_names) do
|
8
|
+
ActiveRecord::ConnectionAdapters::SQLServerAdapter.exclude_output_inserted_table_names
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'can insert into a table with output inserted - with a true setting for table name' do
|
12
|
+
exclude_output_inserted_table_names['sst_table_with_trigger'] = true
|
13
|
+
assert SSTestTriggerHistory.all.empty?
|
14
|
+
obj = SSTestTrigger.create! event_name: 'test trigger'
|
15
|
+
['Fixnum', 'Integer'].must_include obj.id.class.name
|
16
|
+
obj.event_name.must_equal 'test trigger'
|
17
|
+
obj.id.must_be :present?
|
18
|
+
obj.id.to_s.must_equal SSTestTriggerHistory.first.id_source
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'can insert into a table with output inserted - with a uniqueidentifier value' do
|
22
|
+
exclude_output_inserted_table_names['sst_table_with_uuid_trigger'] = 'uniqueidentifier'
|
23
|
+
assert SSTestTriggerHistory.all.empty?
|
24
|
+
obj = SSTestTriggerUuid.create! event_name: 'test uuid trigger'
|
25
|
+
obj.id.class.name.must_equal 'String'
|
26
|
+
obj.event_name.must_equal 'test uuid trigger'
|
27
|
+
obj.id.must_be :present?
|
28
|
+
obj.id.to_s.must_equal SSTestTriggerHistory.first.id_source
|
29
|
+
end
|
30
|
+
end
|
@@ -177,6 +177,44 @@ ActiveRecord::Schema.define do
|
|
177
177
|
FROM sst_string_defaults
|
178
178
|
STRINGDEFAULTSBIGVIEW
|
179
179
|
|
180
|
+
# Trigger
|
181
|
+
|
182
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_trigger') DROP TABLE sst_table_with_trigger"
|
183
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_trigger_history') DROP TABLE sst_table_with_trigger_history"
|
184
|
+
execute <<-SQL
|
185
|
+
CREATE TABLE sst_table_with_trigger(
|
186
|
+
id bigint IDENTITY NOT NULL PRIMARY KEY,
|
187
|
+
event_name nvarchar(255)
|
188
|
+
)
|
189
|
+
CREATE TABLE sst_table_with_trigger_history(
|
190
|
+
id bigint IDENTITY NOT NULL PRIMARY KEY,
|
191
|
+
id_source nvarchar(36),
|
192
|
+
event_name nvarchar(255)
|
193
|
+
)
|
194
|
+
SQL
|
195
|
+
execute <<-SQL
|
196
|
+
CREATE TRIGGER sst_table_with_trigger_t ON sst_table_with_trigger
|
197
|
+
FOR INSERT
|
198
|
+
AS
|
199
|
+
INSERT INTO sst_table_with_trigger_history (id_source, event_name)
|
200
|
+
SELECT id AS id_source, event_name FROM INSERTED
|
201
|
+
SQL
|
202
|
+
|
203
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_uuid_trigger') DROP TABLE sst_table_with_uuid_trigger"
|
204
|
+
execute <<-SQL
|
205
|
+
CREATE TABLE sst_table_with_uuid_trigger(
|
206
|
+
id uniqueidentifier DEFAULT NEWID() PRIMARY KEY,
|
207
|
+
event_name nvarchar(255)
|
208
|
+
)
|
209
|
+
SQL
|
210
|
+
execute <<-SQL
|
211
|
+
CREATE TRIGGER sst_table_with_uuid_trigger_t ON sst_table_with_uuid_trigger
|
212
|
+
FOR INSERT
|
213
|
+
AS
|
214
|
+
INSERT INTO sst_table_with_trigger_history (id_source, event_name)
|
215
|
+
SELECT id AS id_source, event_name FROM INSERTED
|
216
|
+
SQL
|
217
|
+
|
180
218
|
# Another schema.
|
181
219
|
|
182
220
|
create_table :sst_schema_columns, force: true do |t|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1.
|
4
|
+
version: 5.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-
|
17
|
+
date: 2017-10-02 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|
@@ -70,6 +70,7 @@ files:
|
|
70
70
|
- circle.yml
|
71
71
|
- lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb
|
72
72
|
- lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb
|
73
|
+
- lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb
|
73
74
|
- lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb
|
74
75
|
- lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb
|
75
76
|
- lib/active_record/connection_adapters/sqlserver/database_limits.rb
|
@@ -156,6 +157,7 @@ files:
|
|
156
157
|
- test/cases/showplan_test_sqlserver.rb
|
157
158
|
- test/cases/specific_schema_test_sqlserver.rb
|
158
159
|
- test/cases/transaction_test_sqlserver.rb
|
160
|
+
- test/cases/trigger_test_sqlserver.rb
|
159
161
|
- test/cases/utils_test_sqlserver.rb
|
160
162
|
- test/cases/uuid_test_sqlserver.rb
|
161
163
|
- test/config.yml
|
@@ -182,6 +184,8 @@ files:
|
|
182
184
|
- test/models/sqlserver/string_defaults_big_view.rb
|
183
185
|
- test/models/sqlserver/string_defaults_view.rb
|
184
186
|
- test/models/sqlserver/tinyint_pk.rb
|
187
|
+
- test/models/sqlserver/trigger.rb
|
188
|
+
- test/models/sqlserver/trigger_history.rb
|
185
189
|
- test/models/sqlserver/upper.rb
|
186
190
|
- test/models/sqlserver/uppered.rb
|
187
191
|
- test/models/sqlserver/uuid.rb
|
@@ -247,6 +251,7 @@ test_files:
|
|
247
251
|
- test/cases/showplan_test_sqlserver.rb
|
248
252
|
- test/cases/specific_schema_test_sqlserver.rb
|
249
253
|
- test/cases/transaction_test_sqlserver.rb
|
254
|
+
- test/cases/trigger_test_sqlserver.rb
|
250
255
|
- test/cases/utils_test_sqlserver.rb
|
251
256
|
- test/cases/uuid_test_sqlserver.rb
|
252
257
|
- test/config.yml
|
@@ -273,6 +278,8 @@ test_files:
|
|
273
278
|
- test/models/sqlserver/string_defaults_big_view.rb
|
274
279
|
- test/models/sqlserver/string_defaults_view.rb
|
275
280
|
- test/models/sqlserver/tinyint_pk.rb
|
281
|
+
- test/models/sqlserver/trigger.rb
|
282
|
+
- test/models/sqlserver/trigger_history.rb
|
276
283
|
- test/models/sqlserver/upper.rb
|
277
284
|
- test/models/sqlserver/uppered.rb
|
278
285
|
- test/models/sqlserver/uuid.rb
|
@@ -287,4 +294,3 @@ test_files:
|
|
287
294
|
- test/support/rake_helpers.rb
|
288
295
|
- test/support/sql_counter_sqlserver.rb
|
289
296
|
- test/support/test_in_memory_oltp.rb
|
290
|
-
has_rdoc:
|