sequel 2.12.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/CHANGELOG +62 -0
  2. data/README.rdoc +3 -3
  3. data/Rakefile +7 -0
  4. data/doc/advanced_associations.rdoc +44 -0
  5. data/doc/release_notes/3.0.0.txt +221 -0
  6. data/lib/sequel/adapters/amalgalite.rb +208 -0
  7. data/lib/sequel/adapters/db2.rb +3 -0
  8. data/lib/sequel/adapters/dbi.rb +9 -0
  9. data/lib/sequel/adapters/do.rb +0 -4
  10. data/lib/sequel/adapters/firebird.rb +16 -18
  11. data/lib/sequel/adapters/informix.rb +5 -3
  12. data/lib/sequel/adapters/jdbc.rb +24 -20
  13. data/lib/sequel/adapters/jdbc/h2.rb +15 -4
  14. data/lib/sequel/adapters/mysql.rb +4 -8
  15. data/lib/sequel/adapters/odbc.rb +0 -4
  16. data/lib/sequel/adapters/oracle.rb +0 -4
  17. data/lib/sequel/adapters/shared/mssql.rb +16 -5
  18. data/lib/sequel/adapters/shared/mysql.rb +87 -86
  19. data/lib/sequel/adapters/shared/oracle.rb +92 -3
  20. data/lib/sequel/adapters/shared/postgres.rb +85 -29
  21. data/lib/sequel/adapters/shared/progress.rb +8 -3
  22. data/lib/sequel/adapters/shared/sqlite.rb +53 -23
  23. data/lib/sequel/adapters/sqlite.rb +4 -7
  24. data/lib/sequel/adapters/utils/unsupported.rb +3 -3
  25. data/lib/sequel/connection_pool.rb +18 -25
  26. data/lib/sequel/core.rb +2 -21
  27. data/lib/sequel/database.rb +60 -44
  28. data/lib/sequel/database/schema_generator.rb +26 -31
  29. data/lib/sequel/database/schema_methods.rb +8 -3
  30. data/lib/sequel/database/schema_sql.rb +114 -28
  31. data/lib/sequel/dataset.rb +14 -41
  32. data/lib/sequel/dataset/convenience.rb +31 -54
  33. data/lib/sequel/dataset/graph.rb +7 -13
  34. data/lib/sequel/dataset/sql.rb +43 -54
  35. data/lib/sequel/extensions/inflector.rb +0 -5
  36. data/lib/sequel/extensions/schema_dumper.rb +238 -0
  37. data/lib/sequel/metaprogramming.rb +0 -20
  38. data/lib/sequel/model.rb +1 -2
  39. data/lib/sequel/model/base.rb +18 -16
  40. data/lib/sequel/model/inflections.rb +6 -9
  41. data/lib/sequel/plugins/caching.rb +0 -6
  42. data/lib/sequel/plugins/hook_class_methods.rb +1 -1
  43. data/lib/sequel/sql.rb +2 -0
  44. data/lib/sequel/version.rb +2 -2
  45. data/spec/adapters/firebird_spec.rb +35 -8
  46. data/spec/adapters/mysql_spec.rb +173 -266
  47. data/spec/adapters/oracle_spec.rb +13 -0
  48. data/spec/adapters/postgres_spec.rb +127 -227
  49. data/spec/adapters/sqlite_spec.rb +13 -171
  50. data/spec/core/connection_pool_spec.rb +15 -4
  51. data/spec/core/core_sql_spec.rb +14 -170
  52. data/spec/core/database_spec.rb +50 -132
  53. data/spec/core/dataset_spec.rb +47 -930
  54. data/spec/core/expression_filters_spec.rb +12 -0
  55. data/spec/core/schema_generator_spec.rb +37 -45
  56. data/spec/core/schema_spec.rb +26 -16
  57. data/spec/core/spec_helper.rb +0 -25
  58. data/spec/extensions/inflector_spec.rb +0 -3
  59. data/spec/extensions/schema_dumper_spec.rb +292 -0
  60. data/spec/extensions/serialization_spec.rb +9 -0
  61. data/spec/extensions/single_table_inheritance_spec.rb +6 -1
  62. data/spec/extensions/spec_helper.rb +1 -3
  63. data/spec/extensions/validation_helpers_spec.rb +4 -4
  64. data/spec/integration/database_test.rb +18 -0
  65. data/spec/integration/dataset_test.rb +112 -1
  66. data/spec/integration/eager_loader_test.rb +70 -9
  67. data/spec/integration/prepared_statement_test.rb +2 -2
  68. data/spec/integration/schema_test.rb +76 -27
  69. data/spec/integration/spec_helper.rb +0 -14
  70. data/spec/integration/transaction_test.rb +27 -0
  71. data/spec/model/associations_spec.rb +0 -36
  72. data/spec/model/base_spec.rb +18 -123
  73. data/spec/model/hooks_spec.rb +2 -235
  74. data/spec/model/inflector_spec.rb +15 -115
  75. data/spec/model/model_spec.rb +0 -120
  76. data/spec/model/plugins_spec.rb +0 -70
  77. data/spec/model/record_spec.rb +35 -93
  78. data/spec/model/spec_helper.rb +0 -27
  79. data/spec/model/validations_spec.rb +0 -931
  80. metadata +9 -14
  81. data/lib/sequel/deprecated.rb +0 -593
  82. data/lib/sequel/deprecated_migration.rb +0 -91
  83. data/lib/sequel/model/deprecated.rb +0 -204
  84. data/lib/sequel/model/deprecated_hooks.rb +0 -103
  85. data/lib/sequel/model/deprecated_inflector.rb +0 -335
  86. data/lib/sequel/model/deprecated_validations.rb +0 -388
  87. data/spec/core/core_ext_spec.rb +0 -156
  88. data/spec/core/migration_spec.rb +0 -263
  89. data/spec/core/pretty_table_spec.rb +0 -58
  90. data/spec/model/caching_spec.rb +0 -217
  91. data/spec/model/schema_spec.rb +0 -92
@@ -1,263 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- context "Migration classes" do
4
- before do
5
- deprec{Sequel::Migration.descendants.clear}
6
- end
7
-
8
- deprec_specify "should be registred in Migration.descendants" do
9
- @class = Class.new(Sequel::Migration)
10
-
11
- Sequel::Migration.descendants.should == [@class]
12
- end
13
-
14
- deprec_specify "should be registered in the right order" do
15
- @c1 = Class.new(Sequel::Migration)
16
- @c2 = Class.new(Sequel::Migration)
17
- @c3 = Class.new(Sequel::Migration)
18
-
19
- Sequel::Migration.descendants.should == [@c1, @c2, @c3]
20
- end
21
- end
22
-
23
- context "Migration#apply" do
24
- before do
25
- @c = Class.new do
26
- define_method(:one) {|x| [1111, x]}
27
- define_method(:two) {|x| [2222, x]}
28
- end
29
- @db = @c.new
30
-
31
- deprec do
32
- @migration = Class.new(Sequel::Migration) do
33
- define_method(:up) {one(3333)}
34
- define_method(:down) {two(4444)}
35
- end
36
- end
37
- end
38
-
39
- deprec_specify "should raise for an invalid direction" do
40
- proc {@migration.apply(@db, :hahaha)}.should raise_error(ArgumentError)
41
- end
42
-
43
- deprec_specify "should apply the up direction correctly" do
44
- @migration.apply(@db, :up).should == [1111, 3333]
45
- end
46
-
47
- deprec_specify "should apply the down direction correctly" do
48
- @migration.apply(@db, :down).should == [2222, 4444]
49
- end
50
- end
51
-
52
- class DummyMigrationDataset
53
- attr_reader :from
54
-
55
- def initialize(x); @from = x; end
56
-
57
- @@version = nil
58
-
59
- def version; @@version; end
60
- def version=(x); @@version = x; end
61
- def first; @@version ? {:version => @@version} : nil; end
62
- def update(h); @@version = h[:version]; end
63
- def <<(h); @@version = h[:version]; end
64
- end
65
-
66
- class DummyMigrationDB
67
- attr_reader :creates, :drops, :table_created
68
-
69
- def initialize
70
- @creates = []
71
- @drops = []
72
- end
73
-
74
- def create(x); @creates << x; end
75
- def drop(x); @drops << x; end
76
-
77
- def [](x); DummyMigrationDataset.new(x); end
78
-
79
- def create_table(x); raise if @table_created == x; @table_created = x; end
80
- def table_exists?(x); @table_created == x; end
81
-
82
- def transaction; yield; end
83
- end
84
-
85
- MIGRATION_001 = %[
86
- class CreateSessions < Sequel::Migration
87
- def up
88
- create(1111)
89
- end
90
-
91
- def down
92
- drop(1111)
93
- end
94
- end
95
- ]
96
-
97
- MIGRATION_002 = %[
98
- class CreateNodes < Sequel::Migration
99
- def up
100
- create(2222)
101
- end
102
-
103
- def down
104
- drop(2222)
105
- end
106
- end
107
- ]
108
-
109
- MIGRATION_003 = %[
110
- class CreateUsers < Sequel::Migration
111
- def up
112
- create(3333)
113
- end
114
-
115
- def down
116
- drop(3333)
117
- end
118
- end
119
- ]
120
-
121
- MIGRATION_005 = %[
122
- class CreateAttributes < Sequel::Migration
123
- def up
124
- create(5555)
125
- end
126
-
127
- def down
128
- drop(5555)
129
- end
130
- end
131
- ]
132
-
133
- context "Sequel::Migrator" do
134
- before do
135
- @db = DummyMigrationDB.new
136
-
137
- File.open('001_create_sessions.rb', 'w') {|f| f << MIGRATION_001}
138
- File.open('002_create_nodes.rb', 'w') {|f| f << MIGRATION_002}
139
- File.open('003_create_users.rb', 'w') {|f| f << MIGRATION_003}
140
- File.open('005_create_attributes.rb', 'w') {|f| f << MIGRATION_005}
141
-
142
- @db[:schema_info].version = nil
143
- end
144
-
145
- after do
146
- Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
147
- Object.send(:remove_const, "CreateNodes") if Object.const_defined?("CreateNodes")
148
- Object.send(:remove_const, "CreateUsers") if Object.const_defined?("CreateUsers")
149
- Object.send(:remove_const, "CreateAttributes") if Object.const_defined?("CreateAttributes")
150
-
151
- File.delete('001_create_sessions.rb')
152
- File.delete('002_create_nodes.rb')
153
- File.delete('003_create_users.rb')
154
- File.delete('005_create_attributes.rb')
155
- end
156
-
157
- deprec_specify "should return the list of files for a specified version range" do
158
- Sequel::Migrator.migration_files('.', 1..1).should == \
159
- ['./001_create_sessions.rb']
160
-
161
- Sequel::Migrator.migration_files('.', 1..3).should == \
162
- ['./001_create_sessions.rb', './002_create_nodes.rb', './003_create_users.rb']
163
-
164
- Sequel::Migrator.migration_files('.', 3..5).should == \
165
- ['./003_create_users.rb', './005_create_attributes.rb']
166
-
167
- Sequel::Migrator.migration_files('.', 7..8).should == []
168
- end
169
-
170
- deprec_specify "should return the latest version available" do
171
- Sequel::Migrator.latest_migration_version('.').should == 5
172
- end
173
-
174
- deprec_specify "should load the migration classes for the specified range" do
175
- Sequel::Migrator.migration_classes('.', 3, 0, :up).should == \
176
- [CreateSessions, CreateNodes, CreateUsers]
177
- end
178
-
179
- deprec_specify "should load the migration classes for the specified range" do
180
- Sequel::Migrator.migration_classes('.', 0, 5, :down).should == \
181
- [CreateAttributes, CreateUsers, CreateNodes, CreateSessions]
182
- end
183
-
184
- deprec_specify "should start from current + 1 for the up direction" do
185
- Sequel::Migrator.migration_classes('.', 3, 1, :up).should == \
186
- [CreateNodes, CreateUsers]
187
- end
188
-
189
- deprec_specify "should end on current + 1 for the down direction" do
190
- Sequel::Migrator.migration_classes('.', 2, 5, :down).should == \
191
- [CreateAttributes, CreateUsers]
192
- end
193
-
194
- deprec_specify "should automatically create the schema_info table" do
195
- @db.table_exists?(:schema_info).should be_false
196
- Sequel::Migrator.schema_info_dataset(@db)
197
- @db.table_exists?(:schema_info).should be_true
198
-
199
- # should not raise if table already exists
200
- proc {Sequel::Migrator.schema_info_dataset(@db)}.should_not raise_error
201
- end
202
-
203
- deprec_specify "should return a dataset for the schema_info table" do
204
- d = Sequel::Migrator.schema_info_dataset(@db)
205
- d.from.should == :schema_info
206
- end
207
-
208
- deprec_specify "should get the migration version stored in the database" do
209
- # default is 0
210
- Sequel::Migrator.get_current_migration_version(@db).should == 0
211
-
212
- Sequel::Migrator.schema_info_dataset(@db) << {:version => 4321}
213
-
214
- Sequel::Migrator.get_current_migration_version(@db).should == 4321
215
- end
216
-
217
- deprec_specify "should set the migration version stored in the database" do
218
- Sequel::Migrator.get_current_migration_version(@db).should == 0
219
- Sequel::Migrator.set_current_migration_version(@db, 6666)
220
- Sequel::Migrator.get_current_migration_version(@db).should == 6666
221
- end
222
-
223
- deprec_specify "should apply migrations correctly in the up direction" do
224
- Sequel::Migrator.apply(@db, '.', 3, 2)
225
- @db.creates.should == [3333]
226
-
227
- Sequel::Migrator.get_current_migration_version(@db).should == 3
228
-
229
- Sequel::Migrator.apply(@db, '.', 5)
230
- @db.creates.should == [3333, 5555]
231
-
232
- Sequel::Migrator.get_current_migration_version(@db).should == 5
233
- end
234
-
235
- deprec_specify "should apply migrations correctly in the down direction" do
236
- Sequel::Migrator.apply(@db, '.', 1, 5)
237
- @db.drops.should == [5555, 3333, 2222]
238
-
239
- Sequel::Migrator.get_current_migration_version(@db).should == 1
240
- end
241
-
242
- deprec_specify "should apply migrations up to the latest version if no target is given" do
243
- Sequel::Migrator.apply(@db, '.')
244
- @db.creates.should == [1111, 2222, 3333, 5555]
245
-
246
- Sequel::Migrator.get_current_migration_version(@db).should == 5
247
- end
248
-
249
- deprec_specify "should apply migrations down to 0 version correctly" do
250
- Sequel::Migrator.apply(@db, '.', 0, 5)
251
- @db.drops.should == [5555, 3333, 2222, 1111]
252
-
253
- Sequel::Migrator.get_current_migration_version(@db).should == 0
254
- end
255
-
256
- deprec_specify "should return the target version" do
257
- Sequel::Migrator.apply(@db, '.', 3, 2).should == 3
258
-
259
- Sequel::Migrator.apply(@db, '.', 0).should == 0
260
-
261
- Sequel::Migrator.apply(@db, '.').should == 5
262
- end
263
- end
@@ -1,58 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- require 'stringio'
4
-
5
- context "PrettyTable" do
6
- before do
7
- @data1 = [
8
- {:x => 3, :y => 4}
9
- ]
10
-
11
- @data2 = [
12
- {:a => 23, :b => 45},
13
- {:a => 45, :b => 2377}
14
- ]
15
-
16
- @data3 = [
17
- {:aaa => 1},
18
- {:bb => 2},
19
- {:c => 3}
20
- ]
21
-
22
- @output = StringIO.new
23
- @orig_stdout = $stdout
24
- $stdout = @output
25
- end
26
-
27
- after do
28
- $stdout = @orig_stdout
29
- end
30
-
31
- specify "should infer the columns if not given" do
32
- Sequel::PrettyTable.print(@data1)
33
- @output.rewind
34
- @output.read.should =~ \
35
- /\n(\|x\|y\|)|(\|y\|x\|)\n/
36
- end
37
-
38
- specify "should calculate the maximum width of each column correctly" do
39
- Sequel::PrettyTable.print(@data2, [:a, :b])
40
- @output.rewind
41
- @output.read.should == \
42
- "+--+----+\n|a |b |\n+--+----+\n|23| 45|\n|45|2377|\n+--+----+\n"
43
- end
44
-
45
- specify "should also take header width into account" do
46
- Sequel::PrettyTable.print(@data3, [:aaa, :bb, :c])
47
- @output.rewind
48
- @output.read.should == \
49
- "+---+--+-+\n|aaa|bb|c|\n+---+--+-+\n| 1| | |\n| | 2| |\n| | |3|\n+---+--+-+\n"
50
- end
51
-
52
- specify "should print only the specified columns" do
53
- Sequel::PrettyTable.print(@data2, [:a])
54
- @output.rewind
55
- @output.read.should == \
56
- "+--+\n|a |\n+--+\n|23|\n|45|\n+--+\n"
57
- end
58
- end
@@ -1,217 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
2
-
3
- describe Sequel::Model, "caching" do
4
- before do
5
- MODEL_DB.reset
6
-
7
- @cache_class = Class.new(Hash) do
8
- attr_accessor :ttl
9
- def set(k, v, ttl); self[k] = v; @ttl = ttl; end
10
- def get(k); self[k]; end
11
- end
12
- cache = @cache_class.new
13
- @cache = cache
14
-
15
- @c = Class.new(Sequel::Model(:items))
16
- deprec do
17
- @c.class_eval do
18
- set_cache cache
19
- def self.name; 'Item' end
20
-
21
- columns :name, :id
22
- end
23
- end
24
-
25
- $cache_dataset_row = {:name => 'sharon', :id => 1}
26
- @dataset = @c.dataset
27
- $sqls = []
28
- @dataset.extend(Module.new {
29
- def fetch_rows(sql)
30
- $sqls << sql
31
- yield $cache_dataset_row
32
- end
33
-
34
- def update(values)
35
- $sqls << update_sql(values)
36
- $cache_dataset_row.merge!(values)
37
- end
38
-
39
- def delete
40
- $sqls << delete_sql
41
- end
42
- })
43
- @c2 = Class.new(@c) do
44
- def self.name; 'SubItem' end
45
- end
46
- end
47
-
48
- it "should set the model's cache store" do
49
- @c.cache_store.should be(@cache)
50
- @c2.cache_store.should be(@cache)
51
- end
52
-
53
- it "should have a default ttl of 3600" do
54
- @c.cache_ttl.should == 3600
55
- @c2.cache_ttl.should == 3600
56
- end
57
-
58
- it "should take a ttl option" do
59
- @c.set_cache @cache, :ttl => 1234
60
- @c.cache_ttl.should == 1234
61
- Class.new(@c).cache_ttl.should == 1234
62
- end
63
-
64
- it "should offer a set_cache_ttl method for setting the ttl" do
65
- @c.cache_ttl.should == 3600
66
- @c.set_cache_ttl 1234
67
- @c.cache_ttl.should == 1234
68
- Class.new(@c).cache_ttl.should == 1234
69
- end
70
-
71
- it "should generate a cache key appropriate to the class" do
72
- m = @c.new
73
- m.values[:id] = 1
74
- m.cache_key.should == "#{m.class}:1"
75
- m = @c2.new
76
- m.values[:id] = 1
77
- m.cache_key.should == "#{m.class}:1"
78
-
79
- # custom primary key
80
- @c.set_primary_key :ttt
81
- m = @c.new
82
- m.values[:ttt] = 333
83
- m.cache_key.should == "#{m.class}:333"
84
- c = Class.new(@c)
85
- m = c.new
86
- m.values[:ttt] = 333
87
- m.cache_key.should == "#{m.class}:333"
88
-
89
- # composite primary key
90
- @c.set_primary_key [:a, :b, :c]
91
- m = @c.new
92
- m.values[:a] = 123
93
- m.values[:c] = 456
94
- m.values[:b] = 789
95
- m.cache_key.should == "#{m.class}:123,789,456"
96
- c = Class.new(@c)
97
- m = c.new
98
- m.values[:a] = 123
99
- m.values[:c] = 456
100
- m.values[:b] = 789
101
- m.cache_key.should == "#{m.class}:123,789,456"
102
- end
103
-
104
- it "should raise error if attempting to generate cache_key and primary key value is null" do
105
- m = @c.new
106
- proc {m.cache_key}.should raise_error(Sequel::Error)
107
- m.values[:id] = 1
108
- proc {m.cache_key}.should_not raise_error(Sequel::Error)
109
-
110
- m = @c2.new
111
- proc {m.cache_key}.should raise_error(Sequel::Error)
112
- m.values[:id] = 1
113
- proc {m.cache_key}.should_not raise_error(Sequel::Error)
114
- end
115
-
116
- it "should not raise error if trying to save a new record" do
117
- proc {@c.new(:name=>'blah').save}.should_not raise_error
118
- proc {@c.create(:name=>'blah')}.should_not raise_error
119
- proc {@c2.new(:name=>'blah').save}.should_not raise_error
120
- proc {@c2.create(:name=>'blah')}.should_not raise_error
121
- end
122
-
123
- it "should set the cache when reading from the database" do
124
- $sqls.should == []
125
- @cache.should be_empty
126
-
127
- m = @c[1]
128
- $sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
129
- m.values.should == $cache_dataset_row
130
- @cache[m.cache_key].should == m
131
- m2 = @c[1]
132
- $sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
133
- m2.should == m
134
- m2.values.should == $cache_dataset_row
135
-
136
- $sqls.clear
137
- m = @c2[1]
138
- $sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
139
- m.values.should == $cache_dataset_row
140
- @cache[m.cache_key].should == m
141
- m2 = @c2[1]
142
- $sqls.should == ['SELECT * FROM items WHERE (id = 1) LIMIT 1']
143
- m2.should == m
144
- m2.values.should == $cache_dataset_row
145
- end
146
-
147
- it "should delete the cache when writing to the database" do
148
- m = @c[1]
149
- @cache[m.cache_key].should == m
150
- m.name = 'hey'
151
- m.save
152
- @cache.has_key?(m.cache_key).should be_false
153
- $sqls.last.should == "UPDATE items SET name = 'hey', id = 1 WHERE (id = 1)"
154
-
155
- m = @c2[1]
156
- @cache[m.cache_key].should == m
157
- m.name = 'hey'
158
- m.save
159
- @cache.has_key?(m.cache_key).should be_false
160
- $sqls.last.should == "UPDATE items SET name = 'hey', id = 1 WHERE (id = 1)"
161
- end
162
-
163
- deprec_specify "should delete the cache when using update_values" do
164
- m = @c[1]
165
- @cache[m.cache_key].should == m
166
- m.update_values(:name => 'tutu')
167
- @cache.has_key?(m.cache_key).should be_false
168
- $sqls.last.should == "UPDATE items SET name = 'tutu' WHERE (id = 1)"
169
-
170
- m = @c2[1]
171
- @cache[m.cache_key].should == m
172
- m.update_values(:name => 'tutu')
173
- @cache.has_key?(m.cache_key).should be_false
174
- $sqls.last.should == "UPDATE items SET name = 'tutu' WHERE (id = 1)"
175
- end
176
-
177
- it "should delete the cache when deleting the record" do
178
- m = @c[1]
179
- @cache[m.cache_key].should == m
180
- m.delete
181
- @cache.has_key?(m.cache_key).should be_false
182
- $sqls.last.should == "DELETE FROM items WHERE (id = 1)"
183
-
184
- m = @c2[1]
185
- @cache[m.cache_key].should == m
186
- m.delete
187
- @cache.has_key?(m.cache_key).should be_false
188
- $sqls.last.should == "DELETE FROM items WHERE (id = 1)"
189
- end
190
-
191
- it "should support #[] as a shortcut to #find with hash" do
192
- m = @c[:id => 3]
193
- @cache[m.cache_key].should be_nil
194
- $sqls.last.should == "SELECT * FROM items WHERE (id = 3) LIMIT 1"
195
- m = @c[1]
196
- @cache[m.cache_key].should == m
197
- $sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
198
- "SELECT * FROM items WHERE (id = 1) LIMIT 1"]
199
- @c[:id => 4]
200
- $sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
201
- "SELECT * FROM items WHERE (id = 1) LIMIT 1", \
202
- "SELECT * FROM items WHERE (id = 4) LIMIT 1"]
203
-
204
- $sqls.clear
205
- m = @c2[:id => 3]
206
- @cache[m.cache_key].should be_nil
207
- $sqls.last.should == "SELECT * FROM items WHERE (id = 3) LIMIT 1"
208
- m = @c2[1]
209
- @cache[m.cache_key].should == m
210
- $sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
211
- "SELECT * FROM items WHERE (id = 1) LIMIT 1"]
212
- @c2[:id => 4]
213
- $sqls.should == ["SELECT * FROM items WHERE (id = 3) LIMIT 1", \
214
- "SELECT * FROM items WHERE (id = 1) LIMIT 1", \
215
- "SELECT * FROM items WHERE (id = 4) LIMIT 1"]
216
- end
217
- end