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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 378063f22d136e43bd1ed0f9bc52eb8958ccfb30
4
- data.tar.gz: 97a3056adb1e8502d4e0c59ab6ce8a7367532651
3
+ metadata.gz: a08a277e4b09e7e807a8e814dbe442a5f819f605
4
+ data.tar.gz: d05b3a0be20f6c353430b300e78a80952585582d
5
5
  SHA512:
6
- metadata.gz: d0fa22bb008d291d299b5d3cd9b9df7d94880076f0ca6de524036551e7a7a3d145a6472d53e6709b30d67a01bc44e7c7095583dcee107f6340f05e593cdabc7a
7
- data.tar.gz: e1ed20a3214446b06a99aecab587f7163cffcdb0d6036669598ece9f0c162e6e6cca213202248ecb7239ac563cf218abf1b415bebc767278aa636e5bf84d2f94
6
+ metadata.gz: d66aed80923e34eaa44a3ef7b2845dc1a6a54699a4bfaeb84caab648dee603ddbf2a78d0afd974853e757d8e6eb041426806ee41a77f15b303b7dbf81051d699
7
+ data.tar.gz: 2b35fd5e358b1178ef89b1bf0b7bff8f005d9f3cc585dd17a40f9bb5eb097e59151a964edbca5753df879374737bb5667ed51d63b5500482a8a6af24fb6d0da6
@@ -4,7 +4,7 @@ services:
4
4
  - docker
5
5
  env:
6
6
  global:
7
- - TINYTDS_VERSION=1.3.0
7
+ - TINYTDS_VERSION=2.1.0.pre4
8
8
  - ACTIVERECORD_UNITTEST_HOST=localhost
9
9
  - ACTIVERECORD_UNITTEST_DATASERVER=localhost
10
10
  rvm:
@@ -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.0 using SQL Server 2012 or higher.
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
1
+ 5.1.2
@@ -2,7 +2,7 @@ init:
2
2
  - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
3
3
  - SET PATH=C:\MinGW\msys\1.0\bin;%PATH%
4
4
  - SET RAKEOPT=-rdevkit
5
- - SET TINYTDS_VERSION=1.3.0
5
+ - SET TINYTDS_VERSION=2.1.0.pre4
6
6
  clone_depth: 5
7
7
  skip_tags: true
8
8
  matrix:
data/circle.yml CHANGED
@@ -6,7 +6,7 @@ general:
6
6
  machine:
7
7
  environment:
8
8
  PATH: /opt/local/bin:${PATH}
9
- TINYTDS_VERSION: 1.3.0
9
+ TINYTDS_VERSION: 2.1.0.pre4
10
10
  ACTIVERECORD_UNITTEST_HOST: localhost
11
11
  ACTIVERECORD_UNITTEST_DATASERVER: localhost
12
12
  services:
@@ -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 && self.class.use_output_inserted && !database_prefix_remote_server?
195
+ sql = if pk && use_output_inserted? && !database_prefix_remote_server?
196
196
  quoted_pk = SQLServer::Utils.extract_identifiers(pk).quoted
197
- sql.dup.insert sql.index(/ (DEFAULT )?VALUES/), " OUTPUT INSERTED.#{quoted_pk}"
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
- fast_string_to_time_zone.strptime(string, fast_string_to_time_format).time
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 '[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)
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
@@ -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
@@ -0,0 +1,7 @@
1
+ class SSTestTrigger < ActiveRecord::Base
2
+ self.table_name = 'sst_table_with_trigger'
3
+ end
4
+
5
+ class SSTestTriggerUuid < ActiveRecord::Base
6
+ self.table_name = 'sst_table_with_uuid_trigger'
7
+ end
@@ -0,0 +1,3 @@
1
+ class SSTestTriggerHistory < ActiveRecord::Base
2
+ self.table_name = 'sst_table_with_trigger_history'
3
+ 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.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-06-21 00:00:00.000000000 Z
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: