activerecord-sqlserver-adapter 3.1.1 → 3.2.18
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 +7 -0
- data/CHANGELOG +253 -63
- data/VERSION +1 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +0 -7
- data/lib/active_record/connection_adapters/sqlserver/core_ext/database_statements.rb +97 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +41 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +26 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/relation.rb +19 -0
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +169 -61
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +3 -0
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +12 -4
- data/lib/active_record/connection_adapters/sqlserver/schema_cache.rb +85 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +102 -123
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +69 -0
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +25 -0
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +67 -0
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +32 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +185 -122
- data/lib/arel/visitors/sqlserver.rb +32 -9
- metadata +46 -63
- data/README.rdoc +0 -176
- data/lib/active_record/connection_adapters/sqlserver/version.rb +0 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 518484bb28fd5a4a70ac12e7d994071c645ff0ea
|
4
|
+
data.tar.gz: 1eac15ea4105d11cc1f80e4e1416e173808ae9e3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f570f10c5ec18d26353568f985bbc06b9d621f6afecc0c71e8f7ad2ee2eca80754d7c7c06cd413e7813394960abaf69d3c9832772095bba5ac5bb4638ae774a
|
7
|
+
data.tar.gz: e4f8c5d50c6fb2ce27460af6ea53592438964c5c93105ee5c66ce88c7a44e050e9c4faa5a7eec13197365dc531e5be25a4e08ec0b5f696934aec88348f7bd0cd
|
data/CHANGELOG
CHANGED
@@ -1,7 +1,197 @@
|
|
1
|
+
* 3.2.18 *
|
2
|
+
|
3
|
+
* Added 2017 to supported list. Fixes #601. Thanks @catks.
|
4
|
+
|
5
|
+
* 3.2.17 *
|
6
|
+
|
7
|
+
* Add `WITH NO_INFOMSGS` to `user_options` method. Fixes #580
|
8
|
+
|
9
|
+
|
10
|
+
* 3.2.16 *
|
11
|
+
|
12
|
+
* All user optons to be array/hash. Fixes #540
|
13
|
+
|
14
|
+
|
15
|
+
* 3.2.15 *
|
16
|
+
|
17
|
+
* Added vNext support.
|
18
|
+
|
19
|
+
|
20
|
+
* 3.2.14 *
|
21
|
+
|
22
|
+
* Added 2016 to supported list.
|
23
|
+
|
24
|
+
|
25
|
+
* 3.2.13 *
|
26
|
+
|
27
|
+
* Allow 2014 to be used.
|
28
|
+
|
29
|
+
|
30
|
+
* 3.2.12 *
|
31
|
+
|
32
|
+
* Revert string_to_binary changes in 457af60e. Fixes #273.
|
33
|
+
|
34
|
+
|
35
|
+
* 3.2.11 *
|
36
|
+
|
37
|
+
* Handle "No such column" when renaming some columns in the migrations. Fixes #237. Thanks @michelgrootjans.
|
38
|
+
* Update regex for `RecordNotUnique` exception. Fixes #257. Thanks @pbatorre.
|
39
|
+
* Pass tds_version to TinyTDS. Fixes #233. Thanks @denispeplin.
|
40
|
+
* Use CONCAT_NULL_YIELDS_NULL for all TinyTDS connections. Fixes #262. Thanks @noel.
|
41
|
+
* Fix for Azure SQL. Fixed #263. Thanks @eklipse2k8.
|
42
|
+
* Drop shoulda and use minitest-spec-rails!!!
|
43
|
+
* Test TinyTDS 0.6.0.
|
44
|
+
* Fixed the unit tests due to changes in ActiveRecord that removes blank config values.
|
45
|
+
* Fixed explain tests that were failing due to changes in ExplainSubscriber, cause was regex
|
46
|
+
* Fixed change_column to update existing table column rows with new default value if there are any NULL values
|
47
|
+
and the column does not accept nulls
|
48
|
+
* Fixed change_column to drop and add indexes if the colun type is changes
|
49
|
+
* Fixed string_to_binary and binary_to_string in some cases where the binary data is not UTF-8
|
50
|
+
* Fixing generating profile report to create output dir if needed, and code change for printing report
|
51
|
+
* Adding ruby-prof to Gemfile, needed when running profile test cases
|
52
|
+
* Updating mocha to work with newer ActiveRecord test cases
|
53
|
+
|
54
|
+
|
55
|
+
* 3.2.10 *
|
56
|
+
|
57
|
+
* Remove connection defaults for host/username/password. Since we want to suppoert Windows Authentication
|
58
|
+
and there are just to many possibilities. So we now have to be explicit.
|
59
|
+
* Remove really old TinyTDS warning.
|
60
|
+
|
61
|
+
|
62
|
+
* 3.2.9 *
|
63
|
+
|
64
|
+
* The #remove_default_constraint uses #execute_procedure now. Fixes #223. Thanks @gicappa and @clintmiller.
|
65
|
+
* Mimic other adapters quoting for empty strings passed to integer columns. Fixes #164.
|
66
|
+
* Allow named parameters in stored procedures. Fixes #216. Thanks @sixfeetover.
|
67
|
+
* Make sure exclude [__rnt] table names form relation reflection. Fixes #219 and #221. Thanks @sphogan.
|
68
|
+
|
69
|
+
|
70
|
+
* 3.2.8 *
|
71
|
+
|
72
|
+
* Include VERSION in gemspec's files.
|
73
|
+
|
74
|
+
|
75
|
+
* 3.2.7 *
|
76
|
+
|
77
|
+
* Find VERSION in base file out of module namespace. Fixes #208
|
78
|
+
* Better support for explain without sp_execute args. FIxes #207
|
79
|
+
|
80
|
+
|
81
|
+
* 3.2.6 *
|
82
|
+
|
83
|
+
* Unique has_many associations with pagination now work. Fixes #209
|
84
|
+
|
85
|
+
|
86
|
+
* 3.2.5 *
|
87
|
+
|
88
|
+
* Fix a few test from ActiveRecord 3.2.6 upgrade.
|
89
|
+
|
90
|
+
* Fix db_name usage bug in #column_definitions [Altonymous]
|
91
|
+
|
92
|
+
|
93
|
+
* 3.2.4 *
|
94
|
+
|
95
|
+
* Fixed schema reflection for identity columns using ODBC. Fixes #193.
|
96
|
+
|
97
|
+
|
98
|
+
* 3.2.3 *
|
99
|
+
|
100
|
+
* Fixed datetime quoting for ActiveSupport::TimeWithZone objects. Fixes #187 and #189.
|
101
|
+
|
102
|
+
|
103
|
+
* 3.2.2 *
|
104
|
+
|
105
|
+
* Fixes all known issues with cross database schema reflection. Fixes #185 [Chris Altman]
|
106
|
+
|
107
|
+
* Fix exists? with offset by patching visitor. Fixes #171 and Fixes #167
|
108
|
+
|
109
|
+
* Set default text size to 2147483647 for TinyTDS connections. Fixes #181
|
110
|
+
|
111
|
+
* Set @config ivar for 3rd party libs. Fixes #177
|
112
|
+
|
113
|
+
* Make #sql_type_for_statement work for integers that may have empty parens or none at all. Fixes #175
|
114
|
+
|
115
|
+
|
116
|
+
* 3.2.1 *
|
117
|
+
|
118
|
+
* Add explicit order-by clause for windowed results. Fixes #161.
|
119
|
+
|
120
|
+
|
121
|
+
* 3.2.0 *
|
122
|
+
|
123
|
+
* ActiveRecord explain (SHOWPLAN) support.
|
124
|
+
http://youtu.be/ckb3YYZZZ2Q
|
125
|
+
|
126
|
+
* Remove our log_info_schema_queries config since we are not hooking properly into AR's 'SCHEMA' names.
|
127
|
+
|
128
|
+
* Properly use 'SCHEMA' name arguement in DB statements to comply with ActiveRecord::ExplainSubscriber::IGNORED_PAYLOADS.
|
129
|
+
|
130
|
+
* Make use of the new ConnectionAdapters::SchemaCache for our needs.
|
131
|
+
|
132
|
+
* New Sqlserver::Utils class for out helpers. Moved table name unquotes there.
|
133
|
+
|
134
|
+
|
135
|
+
* 3.1.5 *
|
136
|
+
|
137
|
+
* Better support for orders with an expression. Fixes #155. [Jason Frey, Joe Rafaniello]
|
138
|
+
|
139
|
+
|
140
|
+
* 3.1.4 *
|
141
|
+
|
142
|
+
* Use INFORMATION_SCHEMA.KEY_COLUMN_USAGE for schema reflection speed.
|
143
|
+
Fixes #125. [Wüthrich Hannes @hwuethrich]
|
144
|
+
|
145
|
+
* New deadlock victim retry using the #retry_deadlock_victim config. [Jason Frey, Joe Rafaniello]
|
146
|
+
|
147
|
+
* Renamed #with_auto_reconnect to #with_sqlserver_error_handling now that it handles both dropped
|
148
|
+
connections and deadlock victim errors. Fixes #150 [Jason Frey, Joe Rafaniello]
|
149
|
+
|
150
|
+
* Add activity_stats method that mimics the SQL Server Activity Monitor. Fixes #146 [Jason Frey, Joe Rafaniello]
|
151
|
+
|
152
|
+
* Add methods for sqlserver's #product_version, #product_level, #edition and include them in inspect.
|
153
|
+
Fixes #145 [Jason Frey, Joe Rafaniello]
|
154
|
+
|
155
|
+
* Handle statements that cannot be retried on a new database connection by not reconnecting.
|
156
|
+
Fixes #147 [Jason Frey, Joe Rafaniello]
|
157
|
+
|
158
|
+
* Added connection#spid for debugging. Fixes #144 [Jason Frey, Joe Rafaniello]
|
159
|
+
|
160
|
+
* Add ENV['TEST_FILES'] to Rakefile for easy single case tests. [Jason Frey, Joe Rafaniello]
|
161
|
+
|
162
|
+
* Pass ActiveRecord tests. Made windowed distinct pass all orders to groups.
|
163
|
+
- test_limited_eager_with_multiple_order_columns
|
164
|
+
- test_limited_eager_with_order
|
165
|
+
|
166
|
+
* Pass AR tests by moving DISTINCT to GROUP BY in windowed SQL.
|
167
|
+
- test_count_eager_with_has_many_and_limit_and_high_offset
|
168
|
+
- test_eager_with_has_many_and_limit_and_high_offset
|
169
|
+
|
170
|
+
|
171
|
+
* 3.1.3 *
|
172
|
+
|
173
|
+
* Distinguish between identity and primary key key columns during schema reflection. Allows us
|
174
|
+
us to only do identity inserts when technically needed. Fixes #139 [chadcf] & [joncanady]
|
175
|
+
|
176
|
+
|
177
|
+
* 3.1.2 *
|
178
|
+
|
179
|
+
* Fix SQL Azure conflicts with DBCC useroptions. Use new #user_options_xyz methods. [kazamachi]
|
180
|
+
|
181
|
+
* Fix identity inserts for tables with natural PKs. [Gian Carlo Pace]
|
182
|
+
|
183
|
+
* Create a #configure_connection method that can be overridden. Think "SET TEXTSIZE...".
|
184
|
+
|
185
|
+
* Create a #configure_application_name method that can be overridden for unique TinyTDS app names
|
186
|
+
|
187
|
+
* Fixed the #finish_statement_handle to cancel the TinyTDS connection if needed.
|
188
|
+
|
1
189
|
|
2
190
|
* 3.1.1 *
|
3
191
|
|
4
|
-
*
|
192
|
+
* Make #rollback_db_transaction smarter.
|
193
|
+
|
194
|
+
* Provide a method to override for the quoted string prefix. Not a config because trumping this method will
|
5
195
|
have drastically bad results. Fixes #124
|
6
196
|
|
7
197
|
* Allow :limit/:offset to be used with fully qualified table and column in :select.
|
@@ -14,12 +204,12 @@
|
|
14
204
|
* Make auto reconnect duration configurable. Fixes #109 [David Chelimsky]
|
15
205
|
|
16
206
|
* Quote most time objects to use ISO8601 format to be multi-language dateformat compatible. The [datetime] data type is
|
17
|
-
automatically limited to milliseconds while [time] & [datetimeoffset] have full support. Even included a Date/Time
|
207
|
+
automatically limited to milliseconds while [time] & [datetimeoffset] have full support. Even included a Date/Time
|
18
208
|
ActiveSupport formatter that is used per the language settings of the connection.
|
19
209
|
|
20
210
|
* Include a visit_Arel_Nodes_UpdateStatement method in our Arel visitor to add a limit/top for update
|
21
211
|
that has order and no limit/top. https://github.com/rails/rails/commit/787194ee43ab1fb0a7dc8bfbbfbd5079b047d833
|
22
|
-
|
212
|
+
|
23
213
|
* Allow drop_database to be called even when DB does not exist.
|
24
214
|
|
25
215
|
* Remove totally broken ADONET connection mode. Want it back, submit a patch.
|
@@ -81,7 +271,7 @@
|
|
81
271
|
* Support for ActiveRecord v3.0.3 and ARel v2.0.7
|
82
272
|
|
83
273
|
|
84
|
-
* 3.0.7 *
|
274
|
+
* 3.0.7 *
|
85
275
|
|
86
276
|
* Properly quote table names when reflecting on views.
|
87
277
|
|
@@ -121,7 +311,7 @@
|
|
121
311
|
|
122
312
|
* 3.0.1
|
123
313
|
|
124
|
-
* Support DSN'less connections. Resolves ticket 38.
|
314
|
+
* Support DSN'less connections. Resolves ticket 38.
|
125
315
|
|
126
316
|
* Support upcoming ruby odbc 0.99992
|
127
317
|
|
@@ -152,14 +342,14 @@
|
|
152
342
|
|
153
343
|
* 2.3.5
|
154
344
|
|
155
|
-
* Initial IronRuby ADONET connection mode support baked right in. Removed most &block
|
156
|
-
parameters, no handle/request object yielded anymore. Better abstraction and compliance
|
157
|
-
per the ActiveRecord abstract adapter to not yielding handles for #execute and only for
|
158
|
-
low level #select. Better wrapping of all queries at lowest level in #log so exceptions
|
159
|
-
at anytime can be handled correctly by core AR. Critical for System::Data's command
|
160
|
-
readers. Better abstraction for introspecting on #connection_mode. Added support for
|
345
|
+
* Initial IronRuby ADONET connection mode support baked right in. Removed most &block
|
346
|
+
parameters, no handle/request object yielded anymore. Better abstraction and compliance
|
347
|
+
per the ActiveRecord abstract adapter to not yielding handles for #execute and only for
|
348
|
+
low level #select. Better wrapping of all queries at lowest level in #log so exceptions
|
349
|
+
at anytime can be handled correctly by core AR. Critical for System::Data's command
|
350
|
+
readers. Better abstraction for introspecting on #connection_mode. Added support for
|
161
351
|
running singular test cases via TextMate's Command-R. [Ken Collins]
|
162
|
-
|
352
|
+
|
163
353
|
* Force a binary encoding on values coming in and out of those columns for ruby 1.9.
|
164
354
|
Fixes ticket #33 [Jeroen Zwartepoorte]
|
165
355
|
|
@@ -178,22 +368,22 @@
|
|
178
368
|
* For tables that named with schema(ex. rails.users), they could not get length of column.
|
179
369
|
column of varchar(40) gets length => nil. Ticket #27 & #15 [Ken Tachiya]
|
180
370
|
|
181
|
-
* Altered limited_update_conditions regex conditions, the .* would greedily fail
|
371
|
+
* Altered limited_update_conditions regex conditions, the .* would greedily fail
|
182
372
|
if the where_sql had WHERE in a table or field, etc. [Ransom Briggs]
|
183
373
|
|
184
|
-
* Changing test to allow ENV['ARUNIT_DB_NAME'] as the database name for the test units.
|
374
|
+
* Changing test to allow ENV['ARUNIT_DB_NAME'] as the database name for the test units.
|
185
375
|
Matches up with AR conventions. [Ransom Briggs]
|
186
376
|
|
187
377
|
|
188
378
|
2.3.3
|
189
|
-
|
190
|
-
* Revert #ad83df82 and again cache column information at the connection's instance. The
|
379
|
+
|
380
|
+
* Revert #ad83df82 and again cache column information at the connection's instance. The
|
191
381
|
previous commit was causing all sorts of view and schema reflection problems. [Ken Collins]
|
192
382
|
|
193
383
|
|
194
384
|
2.3.2
|
195
385
|
|
196
|
-
* Insert queries that include the word "insert" as a partial column name with the word
|
386
|
+
* Insert queries that include the word "insert" as a partial column name with the word
|
197
387
|
"id" as a value were falsely being matched as identity inserts. [Sean Caffery/bfabry]
|
198
388
|
|
199
389
|
* Delegate all low level #raw_connection calls to #raw_connection_run and #raw_connection_do
|
@@ -211,10 +401,10 @@
|
|
211
401
|
* Coerce a few tests that were failing in 2.3.x [Ken Collins]
|
212
402
|
|
213
403
|
* Change column/view cache to happen at class level. Allows connection pool to share same
|
214
|
-
caches as well as the ability to expire the caches when needed. Also fix change_column so
|
404
|
+
caches as well as the ability to expire the caches when needed. Also fix change_column so
|
215
405
|
that exceptions are not raised when the column contains an existing default. [Ken Collins]
|
216
406
|
|
217
|
-
* Allow query_requires_identity_insert? method to return quoted table name in situations where the
|
407
|
+
* Allow query_requires_identity_insert? method to return quoted table name in situations where the
|
218
408
|
INSERT parts are not quoted themselves. [Gary/iawgens, Richard Penwell, Ken Collins]
|
219
409
|
|
220
410
|
* Fixed namespace in calling test_sqlserver_odbc within test_unicode_types. [Gary/iawgens]
|
@@ -226,7 +416,7 @@
|
|
226
416
|
|
227
417
|
* Support Identity-key-column judgement on multiple schema environment [Ken Tachiya]
|
228
418
|
|
229
|
-
* Add support for tinyint data types. In MySQL all these types would be boolean, however in
|
419
|
+
* Add support for tinyint data types. In MySQL all these types would be boolean, however in
|
230
420
|
our adapter, they will use the full 1 => 255 Fixnum value as you would expect. [Ken Collins]
|
231
421
|
|
232
422
|
|
@@ -244,10 +434,10 @@
|
|
244
434
|
|
245
435
|
* Implement a new remove_default_constraint method that uses sp_helpconstraint [Ken Collins]
|
246
436
|
|
247
|
-
* Use a lazy match in add_order_by_for_association_limiting! to allow sub selects to be used. Resolves
|
437
|
+
* Use a lazy match in add_order_by_for_association_limiting! to allow sub selects to be used. Resolves
|
248
438
|
ticket #11.
|
249
439
|
|
250
|
-
* Add default rake task back for testing. Runs the namespaced sqlserver:test_sqlserver_odbc.
|
440
|
+
* Add default rake task back for testing. Runs the namespaced sqlserver:test_sqlserver_odbc.
|
251
441
|
Resolves ticket #10 [Ken Collins]
|
252
442
|
|
253
443
|
* Default value detection in column_definitions is kinder to badly formatted, or long winded user
|
@@ -260,7 +450,7 @@
|
|
260
450
|
|
261
451
|
* Leave quoted column names as is. Resolves ticket #36 [Vince Puzzella]
|
262
452
|
|
263
|
-
* Changing add_limit! in ActiveRecord::Base for SQLServer so that it passes through any scoped :order
|
453
|
+
* Changing add_limit! in ActiveRecord::Base for SQLServer so that it passes through any scoped :order
|
264
454
|
parameters. Resolves ticket #35 [Murray Steele]
|
265
455
|
|
266
456
|
|
@@ -273,45 +463,45 @@
|
|
273
463
|
|
274
464
|
* 2.2.17 * (May 14th, 2009)
|
275
465
|
|
276
|
-
* Add simplified type recognition for varchar(max) and nvarchar(max) under SQL Server 2005 to be a
|
466
|
+
* Add simplified type recognition for varchar(max) and nvarchar(max) under SQL Server 2005 to be a
|
277
467
|
:text type. This ensures schema dumper does the right thing. Fixes ticket #30. [Ken Collins]
|
278
468
|
|
279
|
-
* Tested ruby 1.9, ruby-odbc 0.9996, and DBI 0.4.1. Also added correct support for UTF-8 character
|
280
|
-
encoding going in and out of the DB. See before gist http://gist.github.com/111709 and after gist
|
469
|
+
* Tested ruby 1.9, ruby-odbc 0.9996, and DBI 0.4.1. Also added correct support for UTF-8 character
|
470
|
+
encoding going in and out of the DB. See before gist http://gist.github.com/111709 and after gist
|
281
471
|
http://gist.github.com/111719 [Ken Collins]
|
282
472
|
|
283
473
|
|
284
474
|
* 2.2.16 * (April 21st, 2009)
|
285
475
|
|
286
|
-
* Make add_limit_offset! only add locking hints (for tally) when the :lock option is present. Added tests
|
287
|
-
to make sure tally SQL is augmented correctly and tests to make sure that add_lock! is doing what it needs
|
476
|
+
* Make add_limit_offset! only add locking hints (for tally) when the :lock option is present. Added tests
|
477
|
+
to make sure tally SQL is augmented correctly and tests to make sure that add_lock! is doing what it needs
|
288
478
|
for deep sub selects in paginated results. [Ken Collins]
|
289
479
|
|
290
|
-
* Add auto reconnect support utilizing a new #with_auto_reconnect block. By default each query run through
|
291
|
-
the adapter will automatically reconnect at standard intervals, logging attempts along the way, till success
|
292
|
-
or the original exception bubbles up. See docs for more details. Resolves ticket #18 [Ken Collins]
|
480
|
+
* Add auto reconnect support utilizing a new #with_auto_reconnect block. By default each query run through
|
481
|
+
the adapter will automatically reconnect at standard intervals, logging attempts along the way, till success
|
482
|
+
or the original exception bubbles up. See docs for more details. Resolves ticket #18 [Ken Collins]
|
293
483
|
|
294
|
-
* Update internal helper method #orders_and_dirs_set to cope with an order clause like "description desc". This
|
484
|
+
* Update internal helper method #orders_and_dirs_set to cope with an order clause like "description desc". This
|
295
485
|
resolves ticket #26 [Ken Collins]
|
296
486
|
|
297
|
-
* Provide support for running queries at different isolation levels using #run_with_isolation_level method
|
298
|
-
that can take a block or not. Also implement a #user_options method that reflects on the current user
|
487
|
+
* Provide support for running queries at different isolation levels using #run_with_isolation_level method
|
488
|
+
that can take a block or not. Also implement a #user_options method that reflects on the current user
|
299
489
|
session values. Resolves #20 [Murray Steele]
|
300
490
|
|
301
491
|
|
302
492
|
* 2.2.15 * (March 23rd, 2009)
|
303
493
|
|
304
|
-
* Better add_lock! method that can add the lock to just about all the elements in the statement. This
|
305
|
-
could be eager loaded associations, joins, etc. Done so that paginated results can easily add lock
|
306
|
-
options for performance. Note, the tally count in add_limit_offset! use "WITH (NOLOCK)" explicitly
|
494
|
+
* Better add_lock! method that can add the lock to just about all the elements in the statement. This
|
495
|
+
could be eager loaded associations, joins, etc. Done so that paginated results can easily add lock
|
496
|
+
options for performance. Note, the tally count in add_limit_offset! use "WITH (NOLOCK)" explicitly
|
307
497
|
as it can not hurt and is needed. [Ken Collins]
|
308
498
|
|
309
499
|
|
310
500
|
* 2.2.14 * (March 17th, 2009)
|
311
501
|
|
312
|
-
* Rails2.3 - Back passing tests on 2.2 work. Includes: (1) Created new test helpers that check ActiveRecord
|
313
|
-
version strings so we can conditionally run 2.2 and 2.3 tests. (2) Making TransactionTestSqlserver use Ship vs
|
314
|
-
Bird model. Also made it conditional run a few blocks for different versions of ActiveRecord. (3) Previous
|
502
|
+
* Rails2.3 - Back passing tests on 2.2 work. Includes: (1) Created new test helpers that check ActiveRecord
|
503
|
+
version strings so we can conditionally run 2.2 and 2.3 tests. (2) Making TransactionTestSqlserver use Ship vs
|
504
|
+
Bird model. Also made it conditional run a few blocks for different versions of ActiveRecord. (3) Previous
|
315
505
|
JoinDependency#aliased_table_name_for is now only patched in ActiveRecord equal or greater than 2.3. [Ken Collins]
|
316
506
|
|
317
507
|
* Rails2.3 - Implement new savepoint support [Ken Collins]
|
@@ -323,24 +513,24 @@
|
|
323
513
|
* Rails2.3 - Implement a custom ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation#aliased_table_name_for
|
324
514
|
method that uses a Regexp.escape so that table/column quoting does not get ignored. [Ken Collins]
|
325
515
|
|
326
|
-
* Rails2.3 - Implement #outside_transaction? and a new transaction test case to test some SQL Server
|
516
|
+
* Rails2.3 - Implement #outside_transaction? and a new transaction test case to test some SQL Server
|
327
517
|
basic support while implementing this method. Future home of some savepoint tests too. [Ken Collins]
|
328
518
|
|
329
|
-
* Rails2.3 - Coerced tests that ensure hash conditions on referenced tables are considered when eager
|
519
|
+
* Rails2.3 - Coerced tests that ensure hash conditions on referenced tables are considered when eager
|
330
520
|
loading with limit/offset. Information on these changes and the ticket in rails are.
|
331
521
|
http://github.com/rails/rails/commit/9a4d557713acb0fc8e80f61af18094034aca029a
|
332
522
|
http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/1404-conditions_tables-doesnt-understand-condition-hashes
|
333
523
|
|
334
524
|
* Rails2.3 - Add coerced tests for true/false attributes in selects use SQL Server case statement. [Ken Collins]
|
335
525
|
|
336
|
-
* Making sure that smalldatetime types are OK to use. Also fixed a bug in the #view_information method that
|
337
|
-
checks to see if a view definition is equal to 4000 chars, meaning that it is most likely truncated and
|
526
|
+
* Making sure that smalldatetime types are OK to use. Also fixed a bug in the #view_information method that
|
527
|
+
checks to see if a view definition is equal to 4000 chars, meaning that it is most likely truncated and
|
338
528
|
needs to use the backup method of sp_helptext to get it's view definition. [Ken Collins]
|
339
529
|
|
340
530
|
|
341
531
|
* 2.2.13 * (February 10th, 2009)
|
342
532
|
|
343
|
-
* Update #indexes to use unqualified table name. Fixes cases where users may decide to use table
|
533
|
+
* Update #indexes to use unqualified table name. Fixes cases where users may decide to use table
|
344
534
|
name prefixes like 'dbo.'. [Ken Collins]
|
345
535
|
|
346
536
|
|
@@ -356,11 +546,11 @@
|
|
356
546
|
|
357
547
|
* 2.2.9 * (January 22nd, 2009)
|
358
548
|
|
359
|
-
* Fixing a small bug in the deprecated DBI::Timestamp conversion so it correctly converts nanosecond whole
|
360
|
-
numbers to back to pre type cast SQL Server milliseconds, ultimately allow ruby's Time#usec which is
|
549
|
+
* Fixing a small bug in the deprecated DBI::Timestamp conversion so it correctly converts nanosecond whole
|
550
|
+
numbers to back to pre type cast SQL Server milliseconds, ultimately allow ruby's Time#usec which is
|
361
551
|
microseconds to be correct. [Ken Collins]
|
362
|
-
|
363
|
-
* Sometimes views are more than 4000 chars long and will return NULL for the VIEW_DEFINITION. If so, use
|
552
|
+
|
553
|
+
* Sometimes views are more than 4000 chars long and will return NULL for the VIEW_DEFINITION. If so, use
|
364
554
|
sp_helptext procedure as a backup method. [Ken Collins]
|
365
555
|
|
366
556
|
|
@@ -371,13 +561,13 @@
|
|
371
561
|
|
372
562
|
* 2.2.7 (January 9th, 2009)
|
373
563
|
|
374
|
-
* Created a connection#execute_procedure method that takes can take any number of ruby objects as variables
|
375
|
-
and quotes them according to the connection's rules. Also added an ActiveRecord::Base class level core
|
376
|
-
extension that hooks into this. It also checks if the connection responds to #execute_procedure and if
|
564
|
+
* Created a connection#execute_procedure method that takes can take any number of ruby objects as variables
|
565
|
+
and quotes them according to the connection's rules. Also added an ActiveRecord::Base class level core
|
566
|
+
extension that hooks into this. It also checks if the connection responds to #execute_procedure and if
|
377
567
|
not returns an empty array. [Ken Collins]
|
378
568
|
|
379
|
-
* Added a #enable_default_unicode_types class attribute access to make all new added or changed string types
|
380
|
-
like :string/:text default to unicode/national data types. See the README for full details. Added a rake
|
569
|
+
* Added a #enable_default_unicode_types class attribute access to make all new added or changed string types
|
570
|
+
like :string/:text default to unicode/national data types. See the README for full details. Added a rake
|
381
571
|
task that assists setting this to true when running tests. [Ken Collins]
|
382
572
|
|
383
573
|
|
@@ -388,15 +578,15 @@
|
|
388
578
|
|
389
579
|
* 2.2.5 (January 4th, 2009)
|
390
580
|
|
391
|
-
* Added a log_info_schema_queries class attribute and make all queries to INFORMATION_SCHEMA silent by
|
581
|
+
* Added a log_info_schema_queries class attribute and make all queries to INFORMATION_SCHEMA silent by
|
392
582
|
default. [Ken Collins]
|
393
583
|
|
394
584
|
* Fix millisecond support in datetime columns. ODBC::Timestamp incorrectly takes SQL Server milliseconds
|
395
|
-
and applies them as nanoseconds. We cope with this at the DBI layer by using SQLServerDBI::Type::SqlserverTimestamp
|
396
|
-
class to parse the before type cast value appropriately. Also update the adapters #quoted_date method
|
585
|
+
and applies them as nanoseconds. We cope with this at the DBI layer by using SQLServerDBI::Type::SqlserverTimestamp
|
586
|
+
class to parse the before type cast value appropriately. Also update the adapters #quoted_date method
|
397
587
|
to work more simply by converting ruby's #usec milliseconds to SQL Server microseconds. [Ken Collins]
|
398
588
|
|
399
|
-
* Core extensions for ActiveRecord now reflect on the connection before doing SQL Server things. Now
|
589
|
+
* Core extensions for ActiveRecord now reflect on the connection before doing SQL Server things. Now
|
400
590
|
this adapter is compatible for using with other adapters. [Ken Collins]
|
401
591
|
|
402
592
|
|
@@ -407,9 +597,9 @@
|
|
407
597
|
|
408
598
|
* 2.2.3 (December 5th, 2008)
|
409
599
|
|
410
|
-
* Changing back to using real table name in column_definitions. Makes sure views get back only the columns
|
411
|
-
that are defined for them with correct names, etc. Now supporting views by looking for NULL default and
|
412
|
-
then if table name is a view, perform a targeted with sub select to the real table name and column name
|
600
|
+
* Changing back to using real table name in column_definitions. Makes sure views get back only the columns
|
601
|
+
that are defined for them with correct names, etc. Now supporting views by looking for NULL default and
|
602
|
+
then if table name is a view, perform a targeted with sub select to the real table name and column name
|
413
603
|
to find true default. [Ken Collins]
|
414
604
|
|
415
605
|
* Ensure that add_limit_offset! does not alter sub queries. [Erik Bryn]
|
@@ -424,10 +614,10 @@
|
|
424
614
|
|
425
615
|
2.2.1 (November 25th, 2008)
|
426
616
|
|
427
|
-
* Add identity insert support for views. Cache #views so that identity #table_name_or_views_table_name
|
617
|
+
* Add identity insert support for views. Cache #views so that identity #table_name_or_views_table_name
|
428
618
|
will run quickly. [Ken Collins]
|
429
619
|
|
430
|
-
* Add views support. ActiveRecord classes can use views. The connection now has a #views method and
|
620
|
+
* Add views support. ActiveRecord classes can use views. The connection now has a #views method and
|
431
621
|
#table_exists? will now fall back to checking views too. [Ken Collins]
|
432
622
|
|
433
623
|
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.2.18
|
@@ -1,9 +1,3 @@
|
|
1
|
-
require 'set'
|
2
|
-
require 'active_record/base'
|
3
|
-
require 'active_record/version'
|
4
|
-
require 'active_support/concern'
|
5
|
-
require 'active_support/core_ext/class/attribute'
|
6
|
-
|
7
1
|
module ActiveRecord
|
8
2
|
module ConnectionAdapters
|
9
3
|
module Sqlserver
|
@@ -46,4 +40,3 @@ end
|
|
46
40
|
|
47
41
|
|
48
42
|
ActiveRecord::Base.send :include, ActiveRecord::ConnectionAdapters::Sqlserver::CoreExt::ActiveRecord
|
49
|
-
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
module Sqlserver
|
4
|
+
module CoreExt
|
5
|
+
module DatabaseStatements
|
6
|
+
|
7
|
+
# This is a copy of the current (3.1.3) ActiveRecord's transaction method. We should propose
|
8
|
+
# a patch to the default transaction method to make it more callback for adapters that want to
|
9
|
+
# do deadlock retry logic. Because this is a copy, we really need to keep an eye out on this when
|
10
|
+
# upgradding the adapter.
|
11
|
+
def transaction_with_retry_deadlock_victim(options = {})
|
12
|
+
options.assert_valid_keys :requires_new, :joinable
|
13
|
+
|
14
|
+
last_transaction_joinable = defined?(@transaction_joinable) ? @transaction_joinable : nil
|
15
|
+
if options.has_key?(:joinable)
|
16
|
+
@transaction_joinable = options[:joinable]
|
17
|
+
else
|
18
|
+
@transaction_joinable = true
|
19
|
+
end
|
20
|
+
requires_new = options[:requires_new] || !last_transaction_joinable
|
21
|
+
|
22
|
+
transaction_open = false
|
23
|
+
@_current_transaction_records ||= []
|
24
|
+
|
25
|
+
begin
|
26
|
+
if block_given?
|
27
|
+
if requires_new || open_transactions == 0
|
28
|
+
if open_transactions == 0
|
29
|
+
begin_db_transaction
|
30
|
+
elsif requires_new
|
31
|
+
create_savepoint
|
32
|
+
end
|
33
|
+
increment_open_transactions
|
34
|
+
transaction_open = true
|
35
|
+
@_current_transaction_records.push([])
|
36
|
+
end
|
37
|
+
yield
|
38
|
+
end
|
39
|
+
rescue Exception => database_transaction_rollback
|
40
|
+
if transaction_open && !outside_transaction?
|
41
|
+
transaction_open = false
|
42
|
+
decrement_open_transactions
|
43
|
+
# handle deadlock victim retries at the outermost transaction
|
44
|
+
if open_transactions == 0
|
45
|
+
if database_transaction_rollback.is_a?(::ActiveRecord::DeadlockVictim)
|
46
|
+
# SQL Server has already rolled back, so rollback activerecord's history
|
47
|
+
rollback_transaction_records(true)
|
48
|
+
retry
|
49
|
+
else
|
50
|
+
rollback_db_transaction
|
51
|
+
rollback_transaction_records(true)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
rollback_to_savepoint
|
55
|
+
rollback_transaction_records(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
raise unless database_transaction_rollback.is_a?(::ActiveRecord::Rollback)
|
59
|
+
end
|
60
|
+
ensure
|
61
|
+
@transaction_joinable = last_transaction_joinable
|
62
|
+
|
63
|
+
if outside_transaction?
|
64
|
+
@open_transactions = 0
|
65
|
+
elsif transaction_open
|
66
|
+
decrement_open_transactions
|
67
|
+
begin
|
68
|
+
if open_transactions == 0
|
69
|
+
commit_db_transaction
|
70
|
+
commit_transaction_records
|
71
|
+
else
|
72
|
+
release_savepoint
|
73
|
+
save_point_records = @_current_transaction_records.pop
|
74
|
+
unless save_point_records.blank?
|
75
|
+
@_current_transaction_records.push([]) if @_current_transaction_records.empty?
|
76
|
+
@_current_transaction_records.last.concat(save_point_records)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
rescue Exception => database_transaction_rollback
|
80
|
+
if open_transactions == 0
|
81
|
+
rollback_db_transaction
|
82
|
+
rollback_transaction_records(true)
|
83
|
+
else
|
84
|
+
rollback_to_savepoint
|
85
|
+
rollback_transaction_records(false)
|
86
|
+
end
|
87
|
+
raise
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
module Sqlserver
|
4
|
+
module CoreExt
|
5
|
+
module Explain
|
6
|
+
|
7
|
+
SQLSERVER_STATEMENT_PREFIX = "EXEC sp_executesql "
|
8
|
+
SQLSERVER_PARAM_MATCHER = /@\d+ =/
|
9
|
+
|
10
|
+
def exec_explain(queries)
|
11
|
+
unprepared_queries = queries.map { |sql, bind| [unprepare_sqlserver_statement(sql), bind] }
|
12
|
+
super(unprepared_queries)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# This is somewhat hacky, but it should reliably reformat our prepared sql statment
|
18
|
+
# which uses sp_executesql to just the first argument, then unquote it. Likewise our
|
19
|
+
# do_exec_query method should substitude the @n args withe the quoted values.
|
20
|
+
def unprepare_sqlserver_statement(sql)
|
21
|
+
if sql.starts_with?(SQLSERVER_STATEMENT_PREFIX)
|
22
|
+
executesql = sql.from(SQLSERVER_STATEMENT_PREFIX.length)
|
23
|
+
executesql_args = executesql.split(', ')
|
24
|
+
found_args = executesql_args.reject! { |arg| arg =~ SQLSERVER_PARAM_MATCHER }
|
25
|
+
executesql_args.pop if found_args && executesql_args.many?
|
26
|
+
executesql = executesql_args.join(', ').strip.match(/N'(.*)'/m)[1]
|
27
|
+
Utils.unquote_string(executesql)
|
28
|
+
else
|
29
|
+
sql
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
ActiveRecord::Base.extend ActiveRecord::ConnectionAdapters::Sqlserver::CoreExt::Explain
|
41
|
+
ActiveRecord::Relation.send :include, ActiveRecord::ConnectionAdapters::Sqlserver::CoreExt::Explain
|