activerecord-sqlserver-adapter 2.3.24 → 3.0.0

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 (45) hide show
  1. data/CHANGELOG +5 -108
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +33 -61
  4. data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +57 -0
  5. data/lib/active_record/connection_adapters/sqlserver/core_ext/odbc.rb +57 -0
  6. data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +49 -0
  7. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +336 -0
  8. data/lib/active_record/connection_adapters/sqlserver/errors.rb +33 -0
  9. data/lib/active_record/connection_adapters/sqlserver/query_cache.rb +17 -0
  10. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +61 -0
  11. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +373 -0
  12. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +131 -1121
  13. data/lib/arel/engines/sql/compilers/sqlserver_compiler.rb +267 -0
  14. metadata +26 -76
  15. data/RUNNING_UNIT_TESTS +0 -31
  16. data/Rakefile +0 -60
  17. data/lib/active_record/connection_adapters/sqlserver_adapter/core_ext/active_record.rb +0 -151
  18. data/lib/active_record/connection_adapters/sqlserver_adapter/core_ext/odbc.rb +0 -40
  19. data/test/cases/aaaa_create_tables_test_sqlserver.rb +0 -19
  20. data/test/cases/adapter_test_sqlserver.rb +0 -755
  21. data/test/cases/attribute_methods_test_sqlserver.rb +0 -33
  22. data/test/cases/basics_test_sqlserver.rb +0 -86
  23. data/test/cases/calculations_test_sqlserver.rb +0 -20
  24. data/test/cases/column_test_sqlserver.rb +0 -354
  25. data/test/cases/connection_test_sqlserver.rb +0 -148
  26. data/test/cases/eager_association_test_sqlserver.rb +0 -42
  27. data/test/cases/execute_procedure_test_sqlserver.rb +0 -35
  28. data/test/cases/inheritance_test_sqlserver.rb +0 -28
  29. data/test/cases/method_scoping_test_sqlserver.rb +0 -28
  30. data/test/cases/migration_test_sqlserver.rb +0 -108
  31. data/test/cases/named_scope_test_sqlserver.rb +0 -21
  32. data/test/cases/offset_and_limit_test_sqlserver.rb +0 -108
  33. data/test/cases/pessimistic_locking_test_sqlserver.rb +0 -125
  34. data/test/cases/query_cache_test_sqlserver.rb +0 -24
  35. data/test/cases/schema_dumper_test_sqlserver.rb +0 -72
  36. data/test/cases/specific_schema_test_sqlserver.rb +0 -154
  37. data/test/cases/sqlserver_helper.rb +0 -140
  38. data/test/cases/table_name_test_sqlserver.rb +0 -38
  39. data/test/cases/transaction_test_sqlserver.rb +0 -93
  40. data/test/cases/unicode_test_sqlserver.rb +0 -54
  41. data/test/cases/validations_test_sqlserver.rb +0 -18
  42. data/test/connections/native_sqlserver/connection.rb +0 -26
  43. data/test/connections/native_sqlserver_odbc/connection.rb +0 -28
  44. data/test/migrations/transaction_table/1_table_will_never_be_created.rb +0 -11
  45. data/test/schema/sqlserver_specific_schema.rb +0 -113
@@ -0,0 +1,267 @@
1
+ module Arel
2
+ class Lock < Compound
3
+ def initialize(relation, locked)
4
+ super(relation)
5
+ @locked = true == locked ? "WITH(HOLDLOCK, ROWLOCK)" : locked
6
+ end
7
+ end
8
+ end
9
+
10
+ module Arel
11
+ module SqlCompiler
12
+ class SQLServerCompiler < GenericCompiler
13
+
14
+ def select_sql
15
+ if complex_count_sql?
16
+ select_sql_with_complex_count
17
+ elsif relation.skipped
18
+ select_sql_with_skipped
19
+ else
20
+ select_sql_without_skipped
21
+ end
22
+ end
23
+
24
+ def delete_sql
25
+ build_query \
26
+ "DELETE #{taken_clause if relation.taken.present?}".strip,
27
+ "FROM #{relation.table_sql}",
28
+ ("WHERE #{relation.wheres.collect(&:to_sql).join(' AND ')}" unless relation.wheres.blank? )
29
+ end
30
+
31
+
32
+ protected
33
+
34
+ def complex_count_sql?
35
+ projections = relation.projections
36
+ projections.first.is_a?(Arel::Count) && projections.size == 1 &&
37
+ (relation.taken.present? || relation.wheres.present?) && relation.joins(self).blank?
38
+ end
39
+
40
+ def taken_only?
41
+ relation.taken.present? && relation.skipped.blank?
42
+ end
43
+
44
+ def taken_clause
45
+ "TOP (#{relation.taken.to_i}) "
46
+ end
47
+
48
+ def expression_select?
49
+ relation.select_clauses.any? { |sc| sc.match /(COUNT|SUM|MAX|MIN|AVG)\s*\(.*\)/ }
50
+ end
51
+
52
+ def eager_limiting_select?
53
+ single_distinct_select? && taken_only? && relation.group_clauses.blank?
54
+ end
55
+
56
+ def single_distinct_select?
57
+ relation.select_clauses.size == 1 && relation.select_clauses.first.to_s.include?('DISTINCT')
58
+ end
59
+
60
+ def all_select_clauses_aliased?
61
+ relation.select_clauses.all? do |sc|
62
+ sc.split(',').all? { |c| c.include?(' AS ') }
63
+ end
64
+ end
65
+
66
+ def select_sql_with_complex_count
67
+ joins = correlated_safe_joins
68
+ wheres = relation.where_clauses
69
+ groups = relation.group_clauses
70
+ havings = relation.having_clauses
71
+ orders = relation.order_clauses
72
+ taken = relation.taken.to_i
73
+ skipped = relation.skipped.to_i
74
+ top_clause = "TOP (#{taken+skipped}) " if relation.taken.present?
75
+ build_query \
76
+ "SELECT COUNT([count]) AS [count_id]",
77
+ "FROM (",
78
+ "SELECT #{top_clause}ROW_NUMBER() OVER (ORDER BY #{unique_orders(rowtable_order_clauses).join(', ')}) AS [__rn],",
79
+ "1 AS [count]",
80
+ "FROM #{relation.from_clauses}",
81
+ (locked unless locked.blank?),
82
+ (joins unless joins.blank?),
83
+ ("WHERE #{wheres.join(' AND ')}" unless wheres.blank?),
84
+ ("GROUP BY #{groups.join(', ')}" unless groups.blank?),
85
+ ("HAVING #{havings.join(' AND ')}" unless havings.blank?),
86
+ ("ORDER BY #{unique_orders(orders).join(', ')}" unless orders.blank?),
87
+ ") AS [__rnt]",
88
+ "WHERE [__rnt].[__rn] > #{relation.skipped.to_i}"
89
+ end
90
+
91
+ def select_sql_without_skipped(windowed=false)
92
+ selects = relation.select_clauses
93
+ joins = correlated_safe_joins
94
+ wheres = relation.where_clauses
95
+ groups = relation.group_clauses
96
+ havings = relation.having_clauses
97
+ orders = relation.order_clauses
98
+ if windowed
99
+ selects = expression_select? ? selects : selects.map{ |sc| clause_without_expression(sc) }
100
+ elsif eager_limiting_select?
101
+ groups = selects.map { |sc| clause_without_expression(sc) }
102
+ selects = selects.map { |sc| "#{taken_clause}#{clause_without_expression(sc)}" }
103
+ orders = orders.map do |oc|
104
+ oc.split(',').reject(&:blank?).map do |c|
105
+ max = c =~ /desc\s*/i
106
+ c = clause_without_expression(c).sub(/(asc|desc)/i,'').strip
107
+ max ? "MAX(#{c})" : "MIN(#{c})"
108
+ end.join(', ')
109
+ end
110
+ elsif taken_only?
111
+ fsc = "#{taken_clause}#{selects.first}"
112
+ selects = selects.tap { |sc| sc.shift ; sc.unshift(fsc) }
113
+ end
114
+ build_query(
115
+ (windowed ? selects.join(', ') : "SELECT #{selects.join(', ')}"),
116
+ "FROM #{relation.from_clauses}",
117
+ (locked unless locked.blank?),
118
+ (joins unless joins.blank?),
119
+ ("WHERE #{wheres.join(' AND ')}" unless wheres.blank?),
120
+ ("GROUP BY #{groups.join(', ')}" unless groups.blank?),
121
+ ("HAVING #{havings.join(' AND ')}" unless havings.blank?),
122
+ ("ORDER BY #{unique_orders(orders).join(', ')}" if orders.present? && !windowed))
123
+ end
124
+
125
+ def select_sql_with_skipped
126
+ tc = taken_clause if relation.taken.present? && !single_distinct_select?
127
+ build_query \
128
+ "SELECT #{tc}#{rowtable_select_clauses.join(', ')}",
129
+ "FROM (",
130
+ "SELECT ROW_NUMBER() OVER (ORDER BY #{unique_orders(rowtable_order_clauses).join(', ')}) AS [__rn],",
131
+ select_sql_without_skipped(true),
132
+ ") AS [__rnt]",
133
+ "WHERE [__rnt].[__rn] > #{relation.skipped.to_i}"
134
+ end
135
+
136
+ def rowtable_select_clauses
137
+ if single_distinct_select?
138
+ ::Array.wrap(relation.select_clauses.first.dup.tap do |sc|
139
+ sc.sub! 'DISTINCT', "DISTINCT #{taken_clause if relation.taken.present?}".strip
140
+ sc.sub! table_name_from_select_clause(sc), '__rnt'
141
+ sc.strip!
142
+ end)
143
+ elsif relation.join? && all_select_clauses_aliased?
144
+ relation.select_clauses.map do |sc|
145
+ sc.split(',').map { |c| c.split(' AS ').last.strip }.join(', ')
146
+ end
147
+ elsif expression_select?
148
+ ['*']
149
+ else
150
+ relation.select_clauses.map do |sc|
151
+ sc.gsub /\[#{relation.table.name}\]\./, '[__rnt].'
152
+ end
153
+ end
154
+ end
155
+
156
+ def rowtable_order_clauses
157
+ orders = relation.order_clauses
158
+ if orders.present?
159
+ orders
160
+ elsif relation.join?
161
+ table_names_from_select_clauses.map { |tn| quote("#{tn}.#{pk_for_table(tn)}") }
162
+ else
163
+ [quote("#{relation.table.name}.#{relation.primary_key}")]
164
+ end
165
+ end
166
+
167
+ def limited_update_conditions(conditions,taken)
168
+ quoted_primary_key = engine.connection.quote_column_name(relation.primary_key)
169
+ conditions = " #{conditions}".strip
170
+ build_query \
171
+ "WHERE #{quoted_primary_key} IN",
172
+ "(SELECT #{taken_clause if relation.taken.present?}#{quoted_primary_key} FROM #{engine.connection.quote_table_name(relation.table.name)}#{conditions})"
173
+ end
174
+
175
+ def quote(value)
176
+ engine.connection.quote_column_name(value)
177
+ end
178
+
179
+ def pk_for_table(table_name)
180
+ engine.connection.primary_key(table_name)
181
+ end
182
+
183
+ def clause_without_expression(clause)
184
+ clause.to_s.split(',').map do |c|
185
+ c.strip!
186
+ c.sub!(/^(COUNT|SUM|MAX|MIN|AVG)\s*(\((.*)\))?/,'\3')
187
+ c.sub!(/^DISTINCT\s*/,'')
188
+ c.sub!(/TOP\s*\(\d+\)\s*/i,'')
189
+ c.strip
190
+ end.join(', ')
191
+ end
192
+
193
+ def unqualify_table_name(table_name)
194
+ table_name.to_s.split('.').last.tr('[]','')
195
+ end
196
+
197
+ def table_name_from_select_clause(sc)
198
+ parts = clause_without_expression(sc).split('.')
199
+ tn = parts.third ? parts.second : (parts.second ? parts.first : nil)
200
+ tn ? tn.tr('[]','') : nil
201
+ end
202
+
203
+ def table_names_from_select_clauses
204
+ relation.select_clauses.map do |sc|
205
+ sc.split(',').map { table_name_from_select_clause(sc) }
206
+ end.flatten.compact.uniq
207
+ end
208
+
209
+ def unique_orders(orders)
210
+ existing_columns = {}
211
+ orders.inject([]) do |queued_orders, order|
212
+ table_column, dir = clause_without_expression(order).split
213
+ table_column = table_column.tr('[]','').split('.')
214
+ table, column = table_column.size == 2 ? table_column : table_column.unshift('')
215
+ existing_columns[table] ||= []
216
+ unless existing_columns[table].include?(column)
217
+ existing_columns[table] << column
218
+ queued_orders << order
219
+ end
220
+ queued_orders
221
+ end
222
+ end
223
+
224
+ def correlated_safe_joins
225
+ joins = relation.joins(self)
226
+ if joins.present?
227
+ find_and_fix_uncorrelated_joins
228
+ relation.joins(self)
229
+ else
230
+ joins
231
+ end
232
+ end
233
+
234
+ def find_and_fix_uncorrelated_joins
235
+ join_relation = relation
236
+ while join_relation.present?
237
+ return join_relation if uncorrelated_inner_join_relation?(join_relation)
238
+ join_relation = join_relation.relation rescue nil
239
+ end
240
+ end
241
+
242
+ def uncorrelated_inner_join_relation?(r)
243
+ if r.is_a?(Arel::StringJoin) && r.relation1.is_a?(Arel::OuterJoin) &&
244
+ r.relation2.is_a?(String) && r.relation2.starts_with?('INNER JOIN')
245
+ outter_join_table1 = r.relation1.relation1.table
246
+ outter_join_table2 = r.relation1.relation2.table
247
+ string_join_table_info = r.relation2.split(' ON ').first.sub('INNER JOIN ','')
248
+ return nil if string_join_table_info.include?(' AS ') # Assume someone did something right.
249
+ string_join_table_name = unqualify_table_name(string_join_table_info)
250
+ uncorrelated_table1 = string_join_table_name == outter_join_table1.name && string_join_table_name == outter_join_table1.alias.name
251
+ uncorrelated_table2 = string_join_table_name == outter_join_table2.name && string_join_table_name == outter_join_table2.alias.name
252
+ if uncorrelated_table1 || uncorrelated_table2
253
+ on_index = r.relation2.index(' ON ')
254
+ r.relation2.insert on_index, " AS [#{string_join_table_name}_crltd]"
255
+ r.relation2.sub! "[#{string_join_table_name}].", "[#{string_join_table_name}_crltd]."
256
+ return r
257
+ else
258
+ return nil
259
+ end
260
+ end
261
+ rescue
262
+ nil
263
+ end
264
+
265
+ end
266
+ end
267
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-sqlserver-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
5
- prerelease:
4
+ hash: 7
5
+ prerelease: false
6
6
  segments:
7
- - 2
8
7
  - 3
9
- - 24
10
- version: 2.3.24
8
+ - 0
9
+ - 0
10
+ version: 3.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ken Collins
@@ -19,7 +19,7 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2011-10-23 00:00:00 -04:00
22
+ date: 2010-08-29 00:00:00 -04:00
23
23
  default_executable:
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
@@ -32,12 +32,12 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  hash: 7
34
34
  segments:
35
- - 2
36
- - 2
37
- version: "2.2"
35
+ - 3
36
+ - 0
37
+ version: "3.0"
38
38
  type: :runtime
39
39
  version_requirements: *id001
40
- description: SQL Server 2000, 2005 and 2008 Adapter For Rails.
40
+ description: SQL Server 2005 and 2008 Adapter For ActiveRecord
41
41
  email: ken@metaskills.net
42
42
  executables: []
43
43
 
@@ -48,48 +48,24 @@ extra_rdoc_files:
48
48
  files:
49
49
  - CHANGELOG
50
50
  - MIT-LICENSE
51
- - Rakefile
52
51
  - README.rdoc
53
- - RUNNING_UNIT_TESTS
54
- - lib/activerecord-sqlserver-adapter.rb
52
+ - lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb
53
+ - lib/active_record/connection_adapters/sqlserver/core_ext/odbc.rb
54
+ - lib/active_record/connection_adapters/sqlserver/database_limits.rb
55
+ - lib/active_record/connection_adapters/sqlserver/database_statements.rb
56
+ - lib/active_record/connection_adapters/sqlserver/errors.rb
57
+ - lib/active_record/connection_adapters/sqlserver/query_cache.rb
58
+ - lib/active_record/connection_adapters/sqlserver/quoting.rb
59
+ - lib/active_record/connection_adapters/sqlserver/schema_statements.rb
55
60
  - lib/active_record/connection_adapters/sqlserver_adapter.rb
56
- - lib/active_record/connection_adapters/sqlserver_adapter/core_ext/active_record.rb
57
- - lib/active_record/connection_adapters/sqlserver_adapter/core_ext/odbc.rb
58
- - test/cases/aaaa_create_tables_test_sqlserver.rb
59
- - test/cases/adapter_test_sqlserver.rb
60
- - test/cases/attribute_methods_test_sqlserver.rb
61
- - test/cases/basics_test_sqlserver.rb
62
- - test/cases/calculations_test_sqlserver.rb
63
- - test/cases/column_test_sqlserver.rb
64
- - test/cases/connection_test_sqlserver.rb
65
- - test/cases/eager_association_test_sqlserver.rb
66
- - test/cases/execute_procedure_test_sqlserver.rb
67
- - test/cases/inheritance_test_sqlserver.rb
68
- - test/cases/method_scoping_test_sqlserver.rb
69
- - test/cases/migration_test_sqlserver.rb
70
- - test/cases/named_scope_test_sqlserver.rb
71
- - test/cases/offset_and_limit_test_sqlserver.rb
72
- - test/cases/pessimistic_locking_test_sqlserver.rb
73
- - test/cases/query_cache_test_sqlserver.rb
74
- - test/cases/schema_dumper_test_sqlserver.rb
75
- - test/cases/specific_schema_test_sqlserver.rb
76
- - test/cases/sqlserver_helper.rb
77
- - test/cases/table_name_test_sqlserver.rb
78
- - test/cases/transaction_test_sqlserver.rb
79
- - test/cases/unicode_test_sqlserver.rb
80
- - test/cases/validations_test_sqlserver.rb
81
- - test/connections/native_sqlserver/connection.rb
82
- - test/connections/native_sqlserver_odbc/connection.rb
83
- - test/migrations/transaction_table/1_table_will_never_be_created.rb
84
- - test/schema/sqlserver_specific_schema.rb
61
+ - lib/activerecord-sqlserver-adapter.rb
62
+ - lib/arel/engines/sql/compilers/sqlserver_compiler.rb
85
63
  has_rdoc: true
86
- homepage: http://github.com/rails-sqlserver
64
+ homepage: http://github.com/rails-sqlserver/activerecord-sqlserver-adapter
87
65
  licenses: []
88
66
 
89
67
  post_install_message:
90
68
  rdoc_options:
91
- - --line-numbers
92
- - --inline-source
93
69
  - --main
94
70
  - README.rdoc
95
71
  require_paths:
@@ -114,36 +90,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
90
  version: "0"
115
91
  requirements: []
116
92
 
117
- rubyforge_project:
118
- rubygems_version: 1.6.2
93
+ rubyforge_project: activerecord-sqlserver-adapter
94
+ rubygems_version: 1.3.7
119
95
  signing_key:
120
96
  specification_version: 3
121
- summary: SQL Server 2000, 2005 and 2008 Adapter For Rails.
122
- test_files:
123
- - test/cases/aaaa_create_tables_test_sqlserver.rb
124
- - test/cases/adapter_test_sqlserver.rb
125
- - test/cases/attribute_methods_test_sqlserver.rb
126
- - test/cases/basics_test_sqlserver.rb
127
- - test/cases/calculations_test_sqlserver.rb
128
- - test/cases/column_test_sqlserver.rb
129
- - test/cases/connection_test_sqlserver.rb
130
- - test/cases/eager_association_test_sqlserver.rb
131
- - test/cases/execute_procedure_test_sqlserver.rb
132
- - test/cases/inheritance_test_sqlserver.rb
133
- - test/cases/method_scoping_test_sqlserver.rb
134
- - test/cases/migration_test_sqlserver.rb
135
- - test/cases/named_scope_test_sqlserver.rb
136
- - test/cases/offset_and_limit_test_sqlserver.rb
137
- - test/cases/pessimistic_locking_test_sqlserver.rb
138
- - test/cases/query_cache_test_sqlserver.rb
139
- - test/cases/schema_dumper_test_sqlserver.rb
140
- - test/cases/specific_schema_test_sqlserver.rb
141
- - test/cases/sqlserver_helper.rb
142
- - test/cases/table_name_test_sqlserver.rb
143
- - test/cases/transaction_test_sqlserver.rb
144
- - test/cases/unicode_test_sqlserver.rb
145
- - test/cases/validations_test_sqlserver.rb
146
- - test/connections/native_sqlserver/connection.rb
147
- - test/connections/native_sqlserver_odbc/connection.rb
148
- - test/migrations/transaction_table/1_table_will_never_be_created.rb
149
- - test/schema/sqlserver_specific_schema.rb
97
+ summary: SQL Server 2005 and 2008 Adapter For ActiveRecord.
98
+ test_files: []
99
+
@@ -1,31 +0,0 @@
1
- == Creating the test database
2
-
3
- The default names for the test databases are "activerecord_unittest" and
4
- "activerecord_unittest2". If you want to use another database name then be sure
5
- to update the connection adapter setups you want to test with in
6
- test/connections/<your database>/connection.rb. Define a user named 'rails'
7
- in SQL Server with all privileges granted for the test databases. Use an empty
8
- password for said user.
9
-
10
- The connection files make certain assumptions. For instance, the ODBC connection
11
- assumes you have a DSN setup that matches the name of the default database names.
12
- Review the test/connections/native_sqlserver_#{mode} file you are testing for details.
13
-
14
-
15
- == Requirements
16
-
17
- Get the development dependencies.
18
-
19
- $ bundle install
20
-
21
- The tests of this adapter depend on the existence of rails checkout. Make sure
22
- to checkout remotes/origin/2-3-stable, I suggest using the git_remote_branch to
23
- create a personal tracking branch. Then make a local topic branch off of that like
24
- 2-3-stable_sqlserver and commit this patch https://gist.github.com/761508 or you
25
- will have around 90 some errors like this.
26
-
27
- "Conversion failed when converting the nvarchar value 'Godfather' to data
28
- type int.: INSERT INTO [items] ([name], [id]) VALUES (N'Godfather', 1)
29
-
30
-
31
-
data/Rakefile DELETED
@@ -1,60 +0,0 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
4
-
5
-
6
- def test_libs(mode='odbc')
7
- ['lib',
8
- 'test',
9
- "test/connections/native_sqlserver#{mode == 'adonet' ? '' : "_#{mode}"}",
10
- "#{ENV['RAILS_SOURCE']}/activerecord/test"]
11
- end
12
-
13
- def test_files
14
- Dir.glob("test/cases/**/*_test_sqlserver.rb").sort +
15
- (Dir.glob("#{ENV['RAILS_SOURCE']}/activerecord/test/cases/**/*_test.rb") -
16
- Dir.glob("#{ENV['RAILS_SOURCE']}/activerecord/test/cases/adapters/**/*_test.rb")).sort
17
- end
18
-
19
-
20
- task :test => ['test:dblib']
21
-
22
-
23
- namespace :test do
24
-
25
- ['dblib','odbc','adonet'].each do |mode|
26
-
27
- Rake::TestTask.new(mode) do |t|
28
- t.libs = test_libs(mode)
29
- t.test_files = test_files
30
- t.verbose = true
31
- end
32
-
33
- end
34
-
35
- end
36
-
37
-
38
- namespace :profile do
39
-
40
- ['dblib','odbc','adonet'].each do |mode|
41
- namespace mode.to_sym do
42
-
43
- Dir.glob("test/profile/*_profile_case.rb").sort.each do |test_file|
44
-
45
- profile_case = File.basename(test_file).sub('_profile_case.rb','')
46
-
47
- Rake::TestTask.new(profile_case) do |t|
48
- t.libs = test_libs(mode)
49
- t.test_files = [test_file]
50
- t.verbose = true
51
- end
52
-
53
- end
54
-
55
- end
56
- end
57
-
58
- end
59
-
60
-