activerecord-sqlserver-adapter 2.3.7 → 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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +385 -61
  3. data/MIT-LICENSE +1 -1
  4. data/VERSION +1 -0
  5. data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +42 -0
  6. data/lib/active_record/connection_adapters/sqlserver/core_ext/database_statements.rb +97 -0
  7. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +41 -0
  8. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +26 -0
  9. data/lib/active_record/connection_adapters/sqlserver/core_ext/odbc.rb +38 -0
  10. data/lib/active_record/connection_adapters/sqlserver/core_ext/relation.rb +19 -0
  11. data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +49 -0
  12. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +458 -0
  13. data/lib/active_record/connection_adapters/sqlserver/errors.rb +36 -0
  14. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +113 -0
  15. data/lib/active_record/connection_adapters/sqlserver/schema_cache.rb +85 -0
  16. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +376 -0
  17. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +69 -0
  18. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +25 -0
  19. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +67 -0
  20. data/lib/active_record/connection_adapters/sqlserver/utils.rb +32 -0
  21. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +344 -1055
  22. data/lib/arel/visitors/sqlserver.rb +389 -0
  23. metadata +60 -83
  24. data/README.rdoc +0 -190
  25. data/RUNNING_UNIT_TESTS +0 -65
  26. data/Rakefile +0 -41
  27. data/autotest/discover.rb +0 -4
  28. data/autotest/railssqlserver.rb +0 -16
  29. data/autotest/sqlserver.rb +0 -54
  30. data/lib/active_record/connection_adapters/sqlserver_adapter/core_ext/active_record.rb +0 -151
  31. data/lib/active_record/connection_adapters/sqlserver_adapter/core_ext/odbc.rb +0 -40
  32. data/test/cases/aaaa_create_tables_test_sqlserver.rb +0 -19
  33. data/test/cases/adapter_test_sqlserver.rb +0 -756
  34. data/test/cases/attribute_methods_test_sqlserver.rb +0 -33
  35. data/test/cases/basics_test_sqlserver.rb +0 -21
  36. data/test/cases/calculations_test_sqlserver.rb +0 -20
  37. data/test/cases/column_test_sqlserver.rb +0 -285
  38. data/test/cases/connection_test_sqlserver.rb +0 -146
  39. data/test/cases/eager_association_test_sqlserver.rb +0 -42
  40. data/test/cases/execute_procedure_test_sqlserver.rb +0 -44
  41. data/test/cases/inheritance_test_sqlserver.rb +0 -28
  42. data/test/cases/method_scoping_test_sqlserver.rb +0 -28
  43. data/test/cases/migration_test_sqlserver.rb +0 -123
  44. data/test/cases/named_scope_test_sqlserver.rb +0 -21
  45. data/test/cases/offset_and_limit_test_sqlserver.rb +0 -108
  46. data/test/cases/pessimistic_locking_test_sqlserver.rb +0 -125
  47. data/test/cases/query_cache_test_sqlserver.rb +0 -24
  48. data/test/cases/schema_dumper_test_sqlserver.rb +0 -72
  49. data/test/cases/specific_schema_test_sqlserver.rb +0 -97
  50. data/test/cases/sqlserver_helper.rb +0 -127
  51. data/test/cases/table_name_test_sqlserver.rb +0 -38
  52. data/test/cases/transaction_test_sqlserver.rb +0 -93
  53. data/test/cases/unicode_test_sqlserver.rb +0 -50
  54. data/test/cases/validations_test_sqlserver.rb +0 -35
  55. data/test/connections/native_sqlserver/connection.rb +0 -25
  56. data/test/connections/native_sqlserver_odbc/connection.rb +0 -27
  57. data/test/migrations/transaction_table/1_table_will_never_be_created.rb +0 -11
  58. data/test/schema/sqlserver_specific_schema.rb +0 -94
@@ -1,33 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/topic'
3
-
4
- class AttributeMethodsTestSqlserver < ActiveRecord::TestCase
5
- end
6
-
7
- class AttributeMethodsTest < ActiveRecord::TestCase
8
-
9
- COERCED_TESTS = [
10
- :test_typecast_attribute_from_select_to_false,
11
- :test_typecast_attribute_from_select_to_true
12
- ]
13
-
14
- include SqlserverCoercedTest
15
-
16
- fixtures :topics
17
-
18
-
19
- def test_coerced_typecast_attribute_from_select_to_false
20
- topic = Topic.create(:title => 'Budget')
21
- topic = Topic.find(:first, :select => "topics.*, CASE WHEN 1=2 THEN 1 ELSE 0 END as is_test")
22
- assert !topic.is_test?
23
- end
24
-
25
- def test_coerced_typecast_attribute_from_select_to_true
26
- topic = Topic.create(:title => 'Budget')
27
- topic = Topic.find(:first, :select => "topics.*, CASE WHEN 2=2 THEN 1 ELSE 0 END as is_test")
28
- assert topic.is_test?
29
- end
30
-
31
-
32
- end
33
-
@@ -1,21 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/developer'
3
-
4
- class BasicsTestSqlserver < ActiveRecord::TestCase
5
- end
6
-
7
- class BasicsTest < ActiveRecord::TestCase
8
-
9
- COERCED_TESTS = [:test_read_attributes_before_type_cast_on_datetime]
10
-
11
- include SqlserverCoercedTest
12
-
13
- fixtures :developers
14
-
15
- def test_coerced_test_read_attributes_before_type_cast_on_datetime
16
- developer = Developer.find(:first)
17
- assert_equal developer.created_at.to_s(:db)+'.000' , developer.attributes_before_type_cast["created_at"]
18
- end
19
-
20
-
21
- end
@@ -1,20 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/company'
3
-
4
- class CalculationsTestSqlserver < ActiveRecord::TestCase
5
- end
6
-
7
- class CalculationsTest < ActiveRecord::TestCase
8
-
9
- COERCED_TESTS = [:test_should_sum_expression]
10
-
11
- include SqlserverCoercedTest
12
-
13
- fixtures :accounts
14
-
15
- def test_coerced_test_should_sum_expression
16
- assert_equal 636, Account.sum("2 * credit_limit")
17
- end
18
-
19
-
20
- end
@@ -1,285 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/binary'
3
-
4
- class SqlServerEdgeSchema < ActiveRecord::Base; end;
5
-
6
- class ColumnTestSqlserver < ActiveRecord::TestCase
7
-
8
- def setup
9
- @connection = ActiveRecord::Base.connection
10
- @column_klass = ActiveRecord::ConnectionAdapters::SQLServerColumn
11
- end
12
-
13
- should 'return real_number as float' do
14
- assert_equal :float, TableWithRealColumn.columns_hash["real_number"].type
15
- end
16
-
17
- should 'know its #table_name and #table_klass' do
18
- Topic.columns.each do |column|
19
- assert_equal 'topics', column.table_name, "This column #{column.inspect} did not know it's #table_name"
20
- assert_equal Topic, column.table_klass, "This column #{column.inspect} did not know it's #table_klass"
21
- end
22
- end
23
-
24
- should 'return correct null, limit, and default for Topic' do
25
- tch = Topic.columns_hash
26
- assert_equal false, tch['id'].null
27
- assert_equal true, tch['title'].null
28
- assert_equal 255, tch['author_name'].limit
29
- assert_equal true, tch['approved'].default
30
- assert_equal 0, tch['replies_count'].default
31
- end
32
-
33
- context 'For binary columns' do
34
-
35
- setup do
36
- @binary_string = "GIF89a\001\000\001\000\200\000\000\377\377\377\000\000\000!\371\004\000\000\000\000\000,\000\000\000\000\001\000\001\000\000\002\002D\001\000;"
37
- @saved_bdata = Binary.create!(:data => @binary_string)
38
- end
39
-
40
- should 'read and write binary data equally' do
41
- assert_equal @binary_string, Binary.find(@saved_bdata).data
42
- end
43
-
44
- should 'have correct attributes' do
45
- column = Binary.columns_hash['data']
46
- assert_equal :binary, column.type
47
- assert_equal @connection.native_binary_database_type, column.sql_type
48
- assert_equal nil, column.limit
49
- end
50
-
51
- should 'quote data for sqlserver with literal 0x prefix' do
52
- # See the output of the stored procedure: 'exec sp_datatype_info'
53
- sqlserver_encoded_bdata = "0x47494638396101000100800000ffffff00000021f90400000000002c00000000010001000002024401003b"
54
- assert_equal sqlserver_encoded_bdata, @column_klass.string_to_binary(@binary_string)
55
- end
56
-
57
- end
58
-
59
- context 'For string columns' do
60
-
61
- setup do
62
- @char = SqlServerString.columns_hash['char']
63
- @char10 = SqlServerString.columns_hash['char_10']
64
- @varcharmax = SqlServerString.columns_hash['varchar_max']
65
- @varcharmax10 = SqlServerString.columns_hash['varchar_max_10']
66
- end
67
-
68
- should 'have correct simplified types' do
69
- assert_equal :string, @char.type
70
- assert_equal :string, @char10.type
71
- if sqlserver_2005? || sqlserver_2008?
72
- assert_equal :text, @varcharmax.type, @varcharmax.inspect
73
- assert_equal :text, @varcharmax10.type, @varcharmax10.inspect
74
- end
75
- end
76
-
77
- should 'have correct #sql_type per schema definition' do
78
- assert_equal 'char(1)', @char.sql_type, 'Specifing a char type with no limit is 1 by SQL Server standards.'
79
- assert_equal 'char(10)', @char10.sql_type, @char10.inspect
80
- if sqlserver_2005? || sqlserver_2008?
81
- assert_equal 'varchar(max)', @varcharmax.sql_type, 'A -1 limit should be converted to max (max) type.'
82
- assert_equal 'varchar(max)', @varcharmax10.sql_type, 'A -1 limit should be converted to max (max) type.'
83
- end
84
- end
85
-
86
- should 'have correct #limit per schema definition' do
87
- assert_equal 1, @char.limit
88
- assert_equal 10, @char10.limit
89
- if sqlserver_2005? || sqlserver_2008?
90
- assert_equal nil, @varcharmax.limit, 'Limits on max types are moot and we should let rails know that.'
91
- assert_equal nil, @varcharmax10.limit, 'Limits on max types are moot and we should let rails know that.'
92
- end
93
- end
94
-
95
- end
96
-
97
-
98
- context 'For all national/unicode columns' do
99
-
100
- setup do
101
- @nchar = SqlServerUnicode.columns_hash['nchar']
102
- @nvarchar = SqlServerUnicode.columns_hash['nvarchar']
103
- @ntext = SqlServerUnicode.columns_hash['ntext']
104
- @ntext10 = SqlServerUnicode.columns_hash['ntext_10']
105
- @nchar10 = SqlServerUnicode.columns_hash['nchar_10']
106
- @nvarchar100 = SqlServerUnicode.columns_hash['nvarchar_100']
107
- @nvarcharmax = SqlServerUnicode.columns_hash['nvarchar_max']
108
- @nvarcharmax10 = SqlServerUnicode.columns_hash['nvarchar_max_10']
109
- end
110
-
111
- should 'all respond true to #is_utf8?' do
112
- SqlServerUnicode.columns_hash.except('id').values.each do |column|
113
- assert column.is_utf8?, "This column #{column.inspect} should have been a unicode column."
114
- end
115
- end
116
-
117
- should 'have correct simplified types' do
118
- assert_equal :string, @nchar.type
119
- assert_equal :string, @nvarchar.type
120
- assert_equal :text, @ntext.type
121
- assert_equal :text, @ntext10.type
122
- assert_equal :string, @nchar10.type
123
- assert_equal :string, @nvarchar100.type
124
- if sqlserver_2005? || sqlserver_2008?
125
- assert_equal :text, @nvarcharmax.type, @nvarcharmax.inspect
126
- assert_equal :text, @nvarcharmax10.type, @nvarcharmax10.inspect
127
- end
128
- end
129
-
130
- should 'have correct #sql_type per schema definition' do
131
- assert_equal 'nchar(1)', @nchar.sql_type, 'Specifing a nchar type with no limit is 1 by SQL Server standards.'
132
- assert_equal 'nvarchar(255)', @nvarchar.sql_type, 'Default nvarchar limit is 255.'
133
- assert_equal 'ntext', @ntext.sql_type, 'Nice and clean ntext, limit means nothing here.'
134
- assert_equal 'ntext', @ntext10.sql_type, 'Even a next with a limit of 10 specified will mean nothing.'
135
- assert_equal 'nchar(10)', @nchar10.sql_type, 'An nchar with a limit of 10 needs to have it show up here.'
136
- assert_equal 'nvarchar(100)', @nvarchar100.sql_type, 'An nvarchar with a specified limit of 100 needs to show it.'
137
- if sqlserver_2005? || sqlserver_2008?
138
- assert_equal 'nvarchar(max)', @nvarcharmax.sql_type, 'A -1 limit should be converted to max (max) type.'
139
- assert_equal 'nvarchar(max)', @nvarcharmax10.sql_type, 'A -1 limit should be converted to max (max) type.'
140
- end
141
- end
142
-
143
- should 'have correct #limit per schema definition' do
144
- assert_equal 1, @nchar.limit
145
- assert_equal 255, @nvarchar.limit
146
- assert_equal nil, @ntext.limit, 'An ntext column limit is moot, it is a fixed variable length'
147
- assert_equal 10, @nchar10.limit
148
- assert_equal 100, @nvarchar100.limit
149
- if sqlserver_2005? || sqlserver_2008?
150
- assert_equal nil, @nvarcharmax.limit, 'Limits on max types are moot and we should let rails know that.'
151
- assert_equal nil, @nvarcharmax10.limit, 'Limits on max types are moot and we should let rails know that.'
152
- end
153
- end
154
-
155
- end
156
-
157
- context 'For datetime columns' do
158
-
159
- setup do
160
- @date = SqlServerChronic.columns_hash['date']
161
- @time = SqlServerChronic.columns_hash['time']
162
- @datetime = SqlServerChronic.columns_hash['datetime']
163
- @smalldatetime = SqlServerChronic.columns_hash['smalldatetime']
164
- end
165
-
166
- should 'have correct simplified type for uncast datetime' do
167
- assert_equal :datetime, @datetime.type
168
- end
169
-
170
- should 'use correct #sql_type for different sql server versions' do
171
- assert_equal 'datetime', @datetime.sql_type
172
- if sqlserver_2000? || sqlserver_2005?
173
- assert_equal 'datetime', @date.sql_type
174
- assert_equal 'datetime', @time.sql_type
175
- else
176
- assert_equal 'date', @date.sql_type
177
- assert_equal 'time', @time.sql_type
178
- end
179
- end
180
-
181
- should 'all be have nil #limit' do
182
- assert_equal nil, @date.limit
183
- assert_equal nil, @time.limit
184
- assert_equal nil, @datetime.limit
185
- end
186
-
187
- context 'For smalldatetime types' do
188
-
189
- should 'have created that type using rails migrations' do
190
- assert_equal 'smalldatetime', @smalldatetime.sql_type
191
- end
192
-
193
- should 'be able to insert column without truncation warnings or the like' do
194
- SqlServerChronic.create! :smalldatetime => Time.now
195
- end
196
-
197
- should 'be able to update column without truncation warnings or the like' do
198
- ssc = SqlServerChronic.create! :smalldatetime => 2.days.ago
199
- ssc.update_attributes! :smalldatetime => Time.now
200
- end
201
-
202
- end
203
-
204
- context 'which have coerced types' do
205
-
206
- setup do
207
- christmas_08 = "2008-12-25".to_time
208
- christmas_08_afternoon = "2008-12-25 12:00".to_time
209
- @chronic_date = SqlServerChronic.create!(:date => christmas_08).reload
210
- @chronic_time = SqlServerChronic.create!(:time => christmas_08_afternoon).reload
211
- end
212
-
213
- should 'have an inheritable attribute ' do
214
- assert SqlServerChronic.coerced_sqlserver_date_columns.include?('date') unless sqlserver_2008?
215
- end
216
-
217
- should 'have column and objects cast to date' do
218
- assert_equal :date, @date.type, "This column: \n#{@date.inspect}"
219
- assert_instance_of Date, @chronic_date.date
220
- end
221
-
222
- should 'have column objects cast to time' do
223
- assert_equal :time, @time.type, "This column: \n#{@time.inspect}"
224
- assert_instance_of Time, @chronic_time.time
225
- end
226
-
227
- end
228
-
229
- end
230
-
231
- context 'For decimal and numeric columns' do
232
-
233
- setup do
234
- @bank_balance = NumericData.columns_hash['bank_balance']
235
- @big_bank_balance = NumericData.columns_hash['big_bank_balance']
236
- @world_population = NumericData.columns_hash['world_population']
237
- @my_house_population = NumericData.columns_hash['my_house_population']
238
- end
239
-
240
- should 'have correct simplified types' do
241
- assert_equal :decimal, @bank_balance.type
242
- assert_equal :decimal, @big_bank_balance.type
243
- assert_equal :integer, @world_population.type, 'Since #extract_scale == 0'
244
- assert_equal :integer, @my_house_population.type, 'Since #extract_scale == 0'
245
- end
246
-
247
- should 'have correct #sql_type' do
248
- assert_equal 'decimal(10,2)', @bank_balance.sql_type
249
- assert_equal 'decimal(15,2)', @big_bank_balance.sql_type
250
- assert_equal 'decimal(10,0)', @world_population.sql_type
251
- assert_equal 'decimal(2,0)', @my_house_population.sql_type
252
- end
253
-
254
- should 'have correct #limit' do
255
- assert_equal nil, @bank_balance.limit
256
- assert_equal nil, @big_bank_balance.limit
257
- assert_equal nil, @world_population.limit
258
- assert_equal nil, @my_house_population.limit
259
- end
260
-
261
- should 'return correct precisions and scales' do
262
- assert_equal [10,2], [@bank_balance.precision, @bank_balance.scale]
263
- assert_equal [15,2], [@big_bank_balance.precision, @big_bank_balance.scale]
264
- assert_equal [10,0], [@world_population.precision, @world_population.scale]
265
- assert_equal [2,0], [@my_house_population.precision, @my_house_population.scale]
266
- end
267
-
268
- end
269
-
270
- context 'For tinyint columns' do
271
-
272
- setup do
273
- @tinyint = SqlServerEdgeSchema.columns_hash['tinyint']
274
- end
275
-
276
- should 'be all it should be' do
277
- assert_equal :integer, @tinyint.type
278
- assert_nil @tinyint.scale
279
- assert_equal 'tinyint(1)', @tinyint.sql_type
280
- end
281
-
282
- end
283
-
284
-
285
- end
@@ -1,146 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/reply'
3
-
4
- class ConnectionTestSqlserver < ActiveRecord::TestCase
5
-
6
- self.use_transactional_fixtures = false
7
-
8
- fixtures :topics, :accounts
9
-
10
- def setup
11
- @connection = ActiveRecord::Base.connection
12
- end
13
-
14
-
15
- should 'return finished ODBC statment handle from #execute without block' do
16
- assert_all_statements_used_are_closed do
17
- @connection.execute('SELECT * FROM [topics]')
18
- end
19
- end
20
-
21
- should 'finish ODBC statment handle from #execute with block' do
22
- assert_all_statements_used_are_closed do
23
- @connection.execute('SELECT * FROM [topics]') { }
24
- end
25
- end
26
-
27
- should 'finish connection from #raw_select' do
28
- assert_all_statements_used_are_closed do
29
- @connection.send(:raw_select,'SELECT * FROM [topics]')
30
- end
31
- end
32
-
33
- should 'affect rows' do
34
- topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
35
- updated = Topic.update(topic_data.keys, topic_data.values)
36
- assert_equal 2, updated.size
37
- assert_equal "1 updated", Topic.find(1).content
38
- assert_equal "2 updated", Topic.find(2).content
39
- assert_equal 2, Topic.delete([1, 2])
40
- end
41
-
42
- should 'execute without block closes statement' do
43
- assert_all_statements_used_are_closed do
44
- @connection.execute("SELECT 1")
45
- end
46
- end
47
-
48
- should 'execute with block closes statement' do
49
- assert_all_statements_used_are_closed do
50
- @connection.execute("SELECT 1") do |sth|
51
- assert !sth.finished?, "Statement should still be alive within block"
52
- end
53
- end
54
- end
55
-
56
- should 'insert with identity closes statement' do
57
- assert_all_statements_used_are_closed do
58
- @connection.insert("INSERT INTO accounts ([id], [firm_id],[credit_limit]) values (999, 1, 50)")
59
- end
60
- end
61
-
62
- should 'insert without identity closes statement' do
63
- assert_all_statements_used_are_closed do
64
- @connection.insert("INSERT INTO accounts ([firm_id],[credit_limit]) values (1, 50)")
65
- end
66
- end
67
-
68
- should 'active closes statement' do
69
- assert_all_statements_used_are_closed do
70
- @connection.active?
71
- end
72
- end
73
-
74
- should 'allow usage of :database connection option to remove setting from dsn' do
75
- assert_equal 'activerecord_unittest', @connection.current_database
76
- begin
77
- @connection.use_database('activerecord_unittest2')
78
- assert_equal 'activerecord_unittest2', @connection.current_database
79
- ensure
80
- @connection.use_database
81
- assert_equal 'activerecord_unittest', @connection.current_database, 'Would default back to connection options'
82
- end
83
- end
84
-
85
- context 'Connection management' do
86
-
87
- setup do
88
- assert @connection.active?
89
- end
90
-
91
- should 'be able to disconnect and reconnect at will' do
92
- @connection.disconnect!
93
- assert !@connection.active?
94
- @connection.reconnect!
95
- assert @connection.active?
96
- end
97
-
98
- should 'auto reconnect when setting is on' do
99
- with_auto_connect(true) do
100
- @connection.disconnect!
101
- assert_nothing_raised() { Topic.count }
102
- assert @connection.active?
103
- end
104
- end
105
-
106
- should 'not auto reconnect when setting is off' do
107
- with_auto_connect(false) do
108
- @connection.disconnect!
109
- assert_raise(ActiveRecord::StatementInvalid) { Topic.count }
110
- end
111
- end
112
-
113
- end
114
-
115
-
116
-
117
- private
118
-
119
- def assert_all_statements_used_are_closed(&block)
120
- existing_handles = []
121
- ObjectSpace.each_object(ODBC::Statement) {|handle| existing_handles << handle}
122
- GC.disable
123
- yield
124
- used_handles = []
125
- ObjectSpace.each_object(ODBC::Statement) {|handle| used_handles << handle unless existing_handles.include? handle}
126
- assert_block "No statements were used within given block" do
127
- used_handles.size > 0
128
- end
129
- ObjectSpace.each_object(ODBC::Statement) do |handle|
130
- assert_block "Statement should have been closed within given block" do
131
- handle.finished?
132
- end
133
- end
134
- ensure
135
- GC.enable
136
- end
137
-
138
- def with_auto_connect(boolean)
139
- existing = ActiveRecord::ConnectionAdapters::SQLServerAdapter.auto_connect
140
- ActiveRecord::ConnectionAdapters::SQLServerAdapter.auto_connect = boolean
141
- yield
142
- ensure
143
- ActiveRecord::ConnectionAdapters::SQLServerAdapter.auto_connect = existing
144
- end
145
-
146
- end
@@ -1,42 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/post'
3
- require 'models/author'
4
- require 'models/comment'
5
-
6
- class EagerAssociationTestSqlserver < ActiveRecord::TestCase
7
- end
8
-
9
- class EagerAssociationTest < ActiveRecord::TestCase
10
-
11
- COERCED_TESTS = [
12
- :test_count_with_include,
13
- :test_eager_with_has_many_and_limit_and_high_offset_and_multiple_array_conditions,
14
- :test_eager_with_has_many_and_limit_and_high_offset_and_multiple_hash_conditions
15
- ]
16
-
17
- include SqlserverCoercedTest
18
-
19
- fixtures :authors, :posts, :comments
20
-
21
- def test_coerced_test_count_with_include
22
- assert_equal 3, authors(:david).posts_with_comments.count(:conditions => "len(comments.body) > 15")
23
- end
24
-
25
- def test_coerced_eager_with_has_many_and_limit_and_high_offset_and_multiple_array_conditions
26
- assert_queries(2) do
27
- posts = Post.find(:all, :include => [ :author, :comments ], :limit => 2, :offset => 10,
28
- :conditions => [ "authors.name = ? and comments.body = ?", 'David', 'go crazy' ])
29
- assert_equal 0, posts.size
30
- end
31
- end
32
-
33
- def test_coerced_eager_with_has_many_and_limit_and_high_offset_and_multiple_hash_conditions
34
- assert_queries(2) do
35
- posts = Post.find(:all, :include => [ :author, :comments ], :limit => 2, :offset => 10,
36
- :conditions => { 'authors.name' => 'David', 'comments.body' => 'go crazy' })
37
- assert_equal 0, posts.size
38
- end
39
- end unless active_record_2_point_2?
40
-
41
-
42
- end
@@ -1,44 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
-
3
- class ExecuteProcedureTestSqlserver < ActiveRecord::TestCase
4
-
5
- def setup
6
- @klass = ActiveRecord::Base
7
- end
8
-
9
- should 'execute a simple procedure' do
10
- tables = @klass.execute_procedure :sp_tables
11
- assert_instance_of Array, tables
12
- assert_instance_of HashWithIndifferentAccess, tables.first
13
- end
14
-
15
- should 'take parameter arguments' do
16
- tables = @klass.execute_procedure :sp_tables, 'sql_server_chronics'
17
- table_info = tables.first
18
- assert_equal 1, tables.size
19
- assert_equal (ENV['ARUNIT_DB_NAME'] || 'activerecord_unittest'), table_info[:TABLE_QUALIFIER], "Table Info: #{table_info.inspect}"
20
- assert_equal 'TABLE', table_info[:TABLE_TYPE], "Table Info: #{table_info.inspect}"
21
- end
22
-
23
- should 'quote bind vars correctly' do
24
- assert_sql(/EXEC sp_tables '%sql_server%', NULL, NULL, NULL, 1/) do
25
- @klass.execute_procedure :sp_tables, '%sql_server%', nil, nil, nil, true
26
- end if sqlserver_2005? || sqlserver_2008?
27
- assert_sql(/EXEC sp_tables '%sql_server%', NULL, NULL, NULL/) do
28
- @klass.execute_procedure :sp_tables, '%sql_server%', nil, nil, nil
29
- end if sqlserver_2000?
30
- end
31
-
32
- should 'allow multiple result sets to be returned' do
33
- results1, results2 = @klass.execute_procedure('sp_helpconstraint','accounts')
34
- assert_instance_of Array, results1
35
- assert_instance_of HashWithIndifferentAccess, results1.first
36
- assert results1.first['Object Name']
37
- assert_instance_of Array, results2
38
- assert_instance_of HashWithIndifferentAccess, results2.first
39
- assert results2.first['constraint_name']
40
- assert results2.first['constraint_type']
41
- end
42
-
43
-
44
- end
@@ -1,28 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/company'
3
-
4
- class InheritanceTestSqlserver < ActiveRecord::TestCase
5
- end
6
-
7
- class InheritanceTest < ActiveRecord::TestCase
8
-
9
- COERCED_TESTS = [
10
- :test_eager_load_belongs_to_primary_key_quoting,
11
- :test_a_bad_type_column
12
- ]
13
-
14
- include SqlserverCoercedTest
15
-
16
- def test_coerced_test_eager_load_belongs_to_primary_key_quoting
17
- assert_sql(/\(\[companies\].\[id\] = 1\)/) do
18
- Account.find(1, :include => :firm)
19
- end
20
- end
21
-
22
- def test_coerced_test_a_bad_type_column
23
- Company.connection.insert "INSERT INTO [companies] ([id], #{QUOTED_TYPE}, [name]) VALUES(100, 'bad_class!', 'Not happening')"
24
- assert_raises(ActiveRecord::SubclassNotFound) { Company.find(100) }
25
- end
26
-
27
-
28
- end
@@ -1,28 +0,0 @@
1
- require 'cases/sqlserver_helper'
2
- require 'models/developer'
3
-
4
- class MethodScopingTestSqlServer < ActiveRecord::TestCase
5
- end
6
-
7
- class NestedScopingTest < ActiveRecord::TestCase
8
-
9
- COERCED_TESTS = [:test_merged_scoped_find]
10
-
11
- include SqlserverCoercedTest
12
-
13
- fixtures :developers
14
-
15
- def test_coerced_test_merged_scoped_find
16
- poor_jamis = developers(:poor_jamis)
17
- Developer.with_scope(:find => { :conditions => "salary < 100000" }) do
18
- Developer.with_scope(:find => { :offset => 1, :order => 'id asc' }) do
19
- assert_sql /ORDER BY id ASC/ do
20
- assert_equal(poor_jamis, Developer.find(:first, :order => 'id asc'))
21
- end
22
- end
23
- end
24
- end
25
-
26
- end
27
-
28
-