ibm_db 2.5.6-x86-mingw32 → 2.5.7-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/README +1 -1
- data/ext/Makefile.nt32 +3 -3
- data/ext/Makefile.nt32.191 +212 -0
- data/ext/ibm_db.c +30 -5
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +300 -108
- data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1 -1
- data/lib/mswin32/rb18x/ibm_db.so +0 -0
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- data/test/cases/adapter_test.rb +25 -22
- data/test/cases/associations/belongs_to_associations_test.rb +245 -43
- data/test/cases/associations/cascaded_eager_loading_test.rb +28 -26
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +60 -156
- data/test/cases/associations/join_model_test.rb +96 -146
- data/test/cases/attribute_methods_test.rb +98 -33
- data/test/cases/base_test.rb +525 -103
- data/test/cases/calculations_test.rb +92 -8
- data/test/cases/migration_test.rb +533 -207
- data/test/cases/persistence_test.rb +636 -0
- data/test/cases/query_cache_test.rb +242 -0
- data/test/cases/relations_test.rb +1019 -0
- data/test/cases/schema_dumper_test.rb +37 -17
- data/test/cases/transaction_callbacks_test.rb +300 -0
- data/test/cases/validations/uniqueness_validation_test.rb +38 -22
- data/test/cases/xml_serialization_test.rb +276 -0
- data/test/config.yml +154 -0
- data/test/connections/native_ibm_db/connection.rb +2 -0
- data/test/models/warehouse_thing.rb +4 -4
- data/test/schema/i5/ibm_db_specific_schema.rb +3 -1
- data/test/schema/ids/ibm_db_specific_schema.rb +3 -1
- data/test/schema/luw/ibm_db_specific_schema.rb +2 -0
- data/test/schema/schema.rb +174 -89
- data/test/schema/zOS/ibm_db_specific_schema.rb +3 -1
- metadata +10 -7
- data/test/cases/associations/eager_test.rb +0 -862
- data/test/cases/associations/has_many_through_associations_test.rb +0 -461
- data/test/cases/finder_test.rb +0 -1088
- data/test/cases/fixtures_test.rb +0 -684
@@ -15,18 +15,18 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
15
15
|
|
16
16
|
def test_eager_association_loading_with_cascaded_two_levels
|
17
17
|
authors = Author.find(:all, :include=>{:posts=>:comments}, :order=>"authors.id")
|
18
|
-
assert_equal
|
18
|
+
assert_equal 3, authors.size
|
19
19
|
assert_equal 5, authors[0].posts.size
|
20
|
-
assert_equal
|
21
|
-
assert_equal
|
20
|
+
assert_equal 3, authors[1].posts.size
|
21
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_eager_association_loading_with_cascaded_two_levels_and_one_level
|
25
25
|
authors = Author.find(:all, :include=>[{:posts=>:comments}, :categorizations], :order=>"authors.id")
|
26
|
-
assert_equal
|
26
|
+
assert_equal 3, authors.size
|
27
27
|
assert_equal 5, authors[0].posts.size
|
28
|
-
assert_equal
|
29
|
-
assert_equal
|
28
|
+
assert_equal 3, authors[1].posts.size
|
29
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
30
30
|
assert_equal 1, authors[0].categorizations.size
|
31
31
|
assert_equal 2, authors[1].categorizations.size
|
32
32
|
end
|
@@ -37,7 +37,7 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
37
37
|
end
|
38
38
|
authors = Author.joins(:posts).eager_load(:comments).where(:posts => {:taggings_count => 1}).all
|
39
39
|
assert_equal 1, assert_no_queries { authors.size }
|
40
|
-
assert_equal
|
40
|
+
assert_equal 10, assert_no_queries { authors[0].comments.size }
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_eager_association_loading_grafts_stashed_associations_to_correct_parent
|
@@ -51,24 +51,26 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
51
51
|
categories = Category.joins(:categorizations).includes([{:posts=>:comments}, :authors])
|
52
52
|
|
53
53
|
assert_nothing_raised do
|
54
|
-
assert_equal
|
55
|
-
assert_equal
|
54
|
+
assert_equal 4, categories.count
|
55
|
+
assert_equal 4, categories.all.count
|
56
|
+
assert_equal 3, categories.count(:distinct => true)
|
57
|
+
assert_equal 3, categories.all.uniq.size # Must uniq since instantiating with inner joins will get dupes
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
59
61
|
def test_cascaded_eager_association_loading_with_duplicated_includes
|
60
62
|
categories = Category.includes(:categorizations).includes(:categorizations => :author).where("categorizations.id is not null")
|
61
63
|
assert_nothing_raised do
|
62
|
-
assert_equal
|
63
|
-
assert_equal
|
64
|
+
assert_equal 3, categories.count
|
65
|
+
assert_equal 3, categories.all.size
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
67
69
|
def test_cascaded_eager_association_loading_with_twice_includes_edge_cases
|
68
70
|
categories = Category.includes(:categorizations => :author).includes(:categorizations => :post).where("posts.id is not null")
|
69
71
|
assert_nothing_raised do
|
70
|
-
assert_equal
|
71
|
-
assert_equal
|
72
|
+
assert_equal 3, categories.count
|
73
|
+
assert_equal 3, categories.all.size
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
@@ -81,15 +83,15 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
81
83
|
|
82
84
|
def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
|
83
85
|
authors = Author.find(:all, :include=>{:posts=>[:comments, :categorizations]}, :order=>"authors.id")
|
84
|
-
assert_equal
|
86
|
+
assert_equal 3, authors.size
|
85
87
|
assert_equal 5, authors[0].posts.size
|
86
|
-
assert_equal
|
87
|
-
assert_equal
|
88
|
+
assert_equal 3, authors[1].posts.size
|
89
|
+
assert_equal 10, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
88
90
|
end
|
89
91
|
|
90
92
|
def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
|
91
93
|
authors = Author.find(:all, :include=>{:posts=>[:comments, :author]}, :order=>"authors.id")
|
92
|
-
assert_equal
|
94
|
+
assert_equal 3, authors.size
|
93
95
|
assert_equal 5, authors[0].posts.size
|
94
96
|
assert_equal authors(:david).name, authors[0].name
|
95
97
|
assert_equal [authors(:david).name], authors[0].posts.collect{|post| post.author.name}.uniq
|
@@ -139,14 +141,14 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
139
141
|
|
140
142
|
unless current_adapter?(:IBM_DBAdapter)
|
141
143
|
def test_eager_association_loading_with_multiple_stis_and_order
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
144
|
+
author = Author.find(:first, :include => { :posts => [ :special_comments , :very_special_comment ] }, :order => ['authors.name', 'comments.body', 'very_special_comments_posts.body'], :conditions => 'posts.id = 4')
|
145
|
+
assert_equal authors(:david), author
|
146
|
+
assert_no_queries do
|
147
|
+
author.posts.first.special_comments
|
148
|
+
author.posts.first.very_special_comment
|
149
|
+
end
|
148
150
|
end
|
149
|
-
end
|
151
|
+
end
|
150
152
|
|
151
153
|
def test_eager_association_loading_of_stis_with_multiple_references
|
152
154
|
authors = Author.find(:all, :include => { :posts => { :special_comments => { :post => [ :special_comments, :very_special_comment ] } } }, :order => 'comments.body, very_special_comments_posts.body', :conditions => 'posts.id = 4')
|
@@ -159,9 +161,9 @@ class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
|
159
161
|
|
160
162
|
def test_eager_association_loading_where_first_level_returns_nil
|
161
163
|
authors = Author.find(:all, :include => {:post_about_thinking => :comments}, :order => 'authors.id DESC')
|
162
|
-
assert_equal [authors(:mary), authors(:david)], authors
|
164
|
+
assert_equal [authors(:bob), authors(:mary), authors(:david)], authors
|
163
165
|
assert_no_queries do
|
164
|
-
authors[
|
166
|
+
authors[2].post_about_thinking.comments.first
|
165
167
|
end
|
166
168
|
end
|
167
169
|
end
|
@@ -72,22 +72,7 @@ class DeveloperWithCounterSQL < ActiveRecord::Base
|
|
72
72
|
:join_table => "developers_projects",
|
73
73
|
:association_foreign_key => "project_id",
|
74
74
|
:foreign_key => "developer_id",
|
75
|
-
:counter_sql =>
|
76
|
-
end
|
77
|
-
|
78
|
-
if current_adapter?(:IBM_DBAdapter)
|
79
|
-
class Novel < ActiveRecord::Base
|
80
|
-
has_and_belongs_to_many :writers
|
81
|
-
end
|
82
|
-
|
83
|
-
class Writer < ActiveRecord::Base
|
84
|
-
has_and_belongs_to_many :novels
|
85
|
-
end
|
86
|
-
|
87
|
-
class NovelsWriter < ActiveRecord::Base
|
88
|
-
belongs_to :writers
|
89
|
-
belongs_to :novels
|
90
|
-
end
|
75
|
+
:counter_sql => proc { "SELECT COUNT(*) AS count_all FROM projects INNER JOIN developers_projects ON projects.id = developers_projects.project_id WHERE developers_projects.developer_id =#{id}" }
|
91
76
|
end
|
92
77
|
|
93
78
|
class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
@@ -115,37 +100,12 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
115
100
|
assert_equal 'c1', record[0]
|
116
101
|
assert_equal 't1', record[1]
|
117
102
|
end
|
118
|
-
|
119
|
-
def
|
103
|
+
|
104
|
+
def test_proper_usage_of_primary_keys_and_join_table
|
120
105
|
setup_data_for_habtm_case
|
121
106
|
|
122
|
-
|
123
|
-
|
124
|
-
record = con.select_rows(sql).last
|
125
|
-
assert_not_nil record[2]
|
126
|
-
assert_not_nil record[3]
|
127
|
-
if current_adapter?(:Mysql2Adapter, :OracleAdapter)
|
128
|
-
assert_match %r{\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}}, record[2].to_s(:db)
|
129
|
-
assert_match %r{\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}}, record[3].to_s(:db)
|
130
|
-
else
|
131
|
-
assert_match %r{\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}}, record[2]
|
132
|
-
assert_match %r{\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}}, record[3]
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_should_record_timestamp_for_join_table_only_if_timestamp_should_be_recorded
|
137
|
-
begin
|
138
|
-
Treaty.record_timestamps = false
|
139
|
-
setup_data_for_habtm_case
|
140
|
-
|
141
|
-
con = ActiveRecord::Base.connection
|
142
|
-
sql = 'select * from countries_treaties'
|
143
|
-
record = con.select_rows(sql).last
|
144
|
-
assert_nil record[2]
|
145
|
-
assert_nil record[3]
|
146
|
-
ensure
|
147
|
-
Treaty.record_timestamps = true
|
148
|
-
end
|
107
|
+
country = Country.first
|
108
|
+
assert_equal 1, country.treaties.count
|
149
109
|
end
|
150
110
|
|
151
111
|
def test_has_and_belongs_to_many
|
@@ -233,34 +193,6 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
233
193
|
assert_equal 2, aredridel.projects(true).size
|
234
194
|
end
|
235
195
|
|
236
|
-
def test_adding_uses_default_values_on_join_table
|
237
|
-
ac = projects(:action_controller)
|
238
|
-
assert !developers(:jamis).projects.include?(ac)
|
239
|
-
developers(:jamis).projects << ac
|
240
|
-
|
241
|
-
assert developers(:jamis, :reload).projects.include?(ac)
|
242
|
-
project = developers(:jamis).projects.detect { |p| p == ac }
|
243
|
-
assert_equal 1, project.access_level.to_i
|
244
|
-
end
|
245
|
-
|
246
|
-
def test_habtm_attribute_access_and_respond_to
|
247
|
-
project = developers(:jamis).projects[0]
|
248
|
-
assert project.has_attribute?("name")
|
249
|
-
assert project.has_attribute?("joined_on")
|
250
|
-
assert project.has_attribute?("access_level")
|
251
|
-
assert project.respond_to?("name")
|
252
|
-
assert project.respond_to?("name=")
|
253
|
-
assert project.respond_to?("name?")
|
254
|
-
assert project.respond_to?("joined_on")
|
255
|
-
# given that the 'join attribute' won't be persisted, I don't
|
256
|
-
# think we should define the mutators
|
257
|
-
#assert project.respond_to?("joined_on=")
|
258
|
-
assert project.respond_to?("joined_on?")
|
259
|
-
assert project.respond_to?("access_level")
|
260
|
-
#assert project.respond_to?("access_level=")
|
261
|
-
assert project.respond_to?("access_level?")
|
262
|
-
end
|
263
|
-
|
264
196
|
def test_habtm_adding_before_save
|
265
197
|
no_of_devels = Developer.count
|
266
198
|
no_of_projects = Project.count
|
@@ -310,9 +242,24 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
310
242
|
assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
|
311
243
|
end
|
312
244
|
|
245
|
+
def test_new_aliased_to_build
|
246
|
+
devel = Developer.find(1)
|
247
|
+
proj = assert_no_queries { devel.projects.new("name" => "Projekt") }
|
248
|
+
assert !devel.projects.loaded?
|
249
|
+
|
250
|
+
assert_equal devel.projects.last, proj
|
251
|
+
assert devel.projects.loaded?
|
252
|
+
|
253
|
+
assert !proj.persisted?
|
254
|
+
devel.save
|
255
|
+
assert proj.persisted?
|
256
|
+
assert_equal devel.projects.last, proj
|
257
|
+
assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
|
258
|
+
end
|
259
|
+
|
313
260
|
def test_build_by_new_record
|
314
261
|
devel = Developer.new(:name => "Marcel", :salary => 75000)
|
315
|
-
|
262
|
+
devel.projects.build(:name => "Make bed")
|
316
263
|
proj2 = devel.projects.build(:name => "Lie in it")
|
317
264
|
assert_equal devel.projects.last, proj2
|
318
265
|
assert !proj2.persisted?
|
@@ -335,42 +282,9 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
335
282
|
assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
|
336
283
|
end
|
337
284
|
|
338
|
-
if current_adapter?(:IBM_DBAdapter)
|
339
|
-
def test_lob_handling
|
340
|
-
assert_nothing_raised do
|
341
|
-
Novel.connection.create_table 'novels' do |t|
|
342
|
-
t.text :story
|
343
|
-
t.string :title
|
344
|
-
end
|
345
|
-
Writer.connection.create_table 'writers' do |t|
|
346
|
-
t.string :name
|
347
|
-
end
|
348
|
-
NovelsWriter.connection.create_table 'novels_writers' do |t|
|
349
|
-
t.belongs_to :novels
|
350
|
-
t.belongs_to :writers
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
w = Writer.new :name => 'Praveen'
|
355
|
-
w.save!
|
356
|
-
|
357
|
-
novel_story = "This is a short and sweet story"
|
358
|
-
|
359
|
-
novel = Novel.new :story => novel_story,:title => "Cool isn't it"
|
360
|
-
novel.writers << w
|
361
|
-
novel.save!
|
362
|
-
|
363
|
-
assert_equal novel_story,Novel.find(novel.id).story
|
364
|
-
ensure
|
365
|
-
Novel.connection.drop_table 'novels' rescue nil
|
366
|
-
Writer.connection.drop_table 'writers' rescue nil
|
367
|
-
NovelsWriter.connection.drop_table 'novels_writers' rescue nil
|
368
|
-
end
|
369
|
-
end
|
370
|
-
|
371
285
|
def test_create_by_new_record
|
372
286
|
devel = Developer.new(:name => "Marcel", :salary => 75000)
|
373
|
-
|
287
|
+
devel.projects.build(:name => "Make bed")
|
374
288
|
proj2 = devel.projects.build(:name => "Lie in it")
|
375
289
|
assert_equal devel.projects.last, proj2
|
376
290
|
assert !proj2.persisted?
|
@@ -473,38 +387,41 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
473
387
|
def test_removing_associations_on_destroy
|
474
388
|
david = DeveloperWithBeforeDestroyRaise.find(1)
|
475
389
|
assert !david.projects.empty?
|
476
|
-
|
390
|
+
david.destroy
|
477
391
|
assert david.projects.empty?
|
478
392
|
assert DeveloperWithBeforeDestroyRaise.connection.select_all("SELECT * FROM developers_projects WHERE developer_id = 1").empty?
|
479
393
|
end
|
480
394
|
|
481
|
-
def test_additional_columns_from_join_table
|
482
|
-
assert_date_from_db Date.new(2004, 10, 10), Developer.find(1).projects.first.joined_on.to_date
|
483
|
-
end
|
484
|
-
|
485
395
|
def test_destroying
|
486
396
|
david = Developer.find(1)
|
487
|
-
|
397
|
+
project = Project.find(1)
|
488
398
|
david.projects.reload
|
489
399
|
assert_equal 2, david.projects.size
|
490
|
-
assert_equal 3,
|
400
|
+
assert_equal 3, project.developers.size
|
491
401
|
|
492
|
-
|
493
|
-
david.projects.destroy(
|
402
|
+
assert_no_difference "Project.count" do
|
403
|
+
david.projects.destroy(project)
|
494
404
|
end
|
495
405
|
|
406
|
+
join_records = Developer.connection.select_all("SELECT * FROM developers_projects WHERE developer_id = #{david.id} AND project_id = #{project.id}")
|
407
|
+
assert join_records.empty?
|
408
|
+
|
496
409
|
assert_equal 1, david.reload.projects.size
|
497
410
|
assert_equal 1, david.projects(true).size
|
498
411
|
end
|
499
412
|
|
500
|
-
def
|
413
|
+
def test_destroying_many
|
501
414
|
david = Developer.find(1)
|
502
415
|
david.projects.reload
|
416
|
+
projects = Project.all
|
503
417
|
|
504
|
-
|
505
|
-
david.projects.destroy(
|
418
|
+
assert_no_difference "Project.count" do
|
419
|
+
david.projects.destroy(*projects)
|
506
420
|
end
|
507
421
|
|
422
|
+
join_records = Developer.connection.select_all("SELECT * FROM developers_projects WHERE developer_id = #{david.id}")
|
423
|
+
assert join_records.empty?
|
424
|
+
|
508
425
|
assert_equal 0, david.reload.projects.size
|
509
426
|
assert_equal 0, david.projects(true).size
|
510
427
|
end
|
@@ -513,7 +430,14 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
513
430
|
david = Developer.find(1)
|
514
431
|
david.projects.reload
|
515
432
|
assert !david.projects.empty?
|
516
|
-
|
433
|
+
|
434
|
+
assert_no_difference "Project.count" do
|
435
|
+
david.projects.destroy_all
|
436
|
+
end
|
437
|
+
|
438
|
+
join_records = Developer.connection.select_all("SELECT * FROM developers_projects WHERE developer_id = #{david.id}")
|
439
|
+
assert join_records.empty?
|
440
|
+
|
517
441
|
assert david.projects.empty?
|
518
442
|
assert david.projects(true).empty?
|
519
443
|
end
|
@@ -607,8 +531,6 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
607
531
|
|
608
532
|
def test_dynamic_find_should_respect_association_order
|
609
533
|
# Developers are ordered 'name DESC, id DESC'
|
610
|
-
low_id_jamis = developers(:jamis)
|
611
|
-
middle_id_jamis = developers(:poor_jamis)
|
612
534
|
high_id_jamis = projects(:active_record).developers.create(:name => 'Jamis')
|
613
535
|
|
614
536
|
assert_equal high_id_jamis, projects(:active_record).developers.find(:first, :conditions => "name = 'Jamis'")
|
@@ -704,7 +626,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
704
626
|
project = SpecialProject.create("name" => "Special Project")
|
705
627
|
assert developer.save
|
706
628
|
developer.projects << project
|
707
|
-
developer.
|
629
|
+
developer.update_column("name", "Bruza")
|
708
630
|
assert_equal 1, Developer.connection.select_value(<<-end_sql).to_i
|
709
631
|
SELECT count(*) FROM developers_projects
|
710
632
|
WHERE project_id = #{project.id}
|
@@ -725,25 +647,6 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
725
647
|
assert_respond_to categories(:technology).select_testing_posts.find(:first), :correctness_marker
|
726
648
|
end
|
727
649
|
|
728
|
-
def test_updating_attributes_on_rich_associations
|
729
|
-
david = projects(:action_controller).developers.first
|
730
|
-
david.name = "DHH"
|
731
|
-
assert_raise(ActiveRecord::ReadOnlyRecord) { david.save! }
|
732
|
-
end
|
733
|
-
|
734
|
-
def test_updating_attributes_on_rich_associations_with_limited_find_from_reflection
|
735
|
-
david = projects(:action_controller).selected_developers.first
|
736
|
-
david.name = "DHH"
|
737
|
-
assert_nothing_raised { david.save! }
|
738
|
-
end
|
739
|
-
|
740
|
-
|
741
|
-
def test_updating_attributes_on_rich_associations_with_limited_find
|
742
|
-
david = projects(:action_controller).developers.find(:all, :select => "developers.*").first
|
743
|
-
david.name = "DHH"
|
744
|
-
assert david.save!
|
745
|
-
end
|
746
|
-
|
747
650
|
def test_join_table_alias
|
748
651
|
assert_equal 3, Developer.find(:all, :include => {:projects => :developers}, :conditions => 'developers_projects_join.joined_on IS NOT NULL').size
|
749
652
|
end
|
@@ -761,12 +664,12 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
761
664
|
def test_find_grouped
|
762
665
|
all_posts_from_category1 = Post.find(:all, :conditions => "category_id = 1", :joins => :categories)
|
763
666
|
grouped_posts_of_category1 = Post.find(:all, :conditions => "category_id = 1", :group => "author_id", :select => 'count(posts.id) as posts_count', :joins => :categories)
|
764
|
-
assert_equal
|
765
|
-
assert_equal
|
667
|
+
assert_equal 5, all_posts_from_category1.size
|
668
|
+
assert_equal 2, grouped_posts_of_category1.size
|
766
669
|
end
|
767
670
|
|
768
671
|
def test_find_scoped_grouped
|
769
|
-
assert_equal
|
672
|
+
assert_equal 5, categories(:general).posts_grouped_by_title.size
|
770
673
|
assert_equal 1, categories(:technology).posts_grouped_by_title.size
|
771
674
|
end
|
772
675
|
|
@@ -846,12 +749,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
846
749
|
}
|
847
750
|
end
|
848
751
|
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
assert Category.find(1).posts_with_authors_sorted_by_author_id.find_by_title('Welcome to the weblog')
|
854
|
-
end
|
752
|
+
def test_dynamic_find_should_respect_association_include
|
753
|
+
# SQL error in sort clause if :include is not included
|
754
|
+
# due to Unknown column 'authors.id'
|
755
|
+
assert Category.find(1).posts_with_authors_sorted_by_author_id.find_by_title('Welcome to the weblog')
|
855
756
|
end
|
856
757
|
|
857
758
|
def test_counting_on_habtm_association_and_not_array
|
@@ -874,7 +775,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
874
775
|
assert_equal 1, developer.projects.count
|
875
776
|
end
|
876
777
|
|
877
|
-
unless current_adapter?(:PostgreSQLAdapter)
|
778
|
+
unless current_adapter?(:PostgreSQLAdapter, :IBM_DBAdapter)
|
878
779
|
def test_count_with_finder_sql
|
879
780
|
assert_equal 3, projects(:active_record).developers_with_finder_sql.count
|
880
781
|
assert_equal 3, projects(:active_record).developers_with_multiline_finder_sql.count
|
@@ -892,10 +793,13 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|
892
793
|
david = Developer.find(1)
|
893
794
|
# clear cache possibly created by other tests
|
894
795
|
david.projects.reset_column_information
|
895
|
-
|
896
|
-
#
|
796
|
+
|
797
|
+
# One query for columns, one for primary key
|
798
|
+
assert_queries(2) { david.projects.columns; david.projects.columns }
|
799
|
+
|
800
|
+
## and again to verify that reset_column_information clears the cache correctly
|
897
801
|
david.projects.reset_column_information
|
898
|
-
assert_queries(
|
802
|
+
assert_queries(2) { david.projects.columns; david.projects.columns }
|
899
803
|
end
|
900
804
|
|
901
805
|
def test_attributes_are_being_set_when_initialized_from_habm_association_with_where_clause
|