sequel 2.12.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +62 -0
- data/README.rdoc +3 -3
- data/Rakefile +7 -0
- data/doc/advanced_associations.rdoc +44 -0
- data/doc/release_notes/3.0.0.txt +221 -0
- data/lib/sequel/adapters/amalgalite.rb +208 -0
- data/lib/sequel/adapters/db2.rb +3 -0
- data/lib/sequel/adapters/dbi.rb +9 -0
- data/lib/sequel/adapters/do.rb +0 -4
- data/lib/sequel/adapters/firebird.rb +16 -18
- data/lib/sequel/adapters/informix.rb +5 -3
- data/lib/sequel/adapters/jdbc.rb +24 -20
- data/lib/sequel/adapters/jdbc/h2.rb +15 -4
- data/lib/sequel/adapters/mysql.rb +4 -8
- data/lib/sequel/adapters/odbc.rb +0 -4
- data/lib/sequel/adapters/oracle.rb +0 -4
- data/lib/sequel/adapters/shared/mssql.rb +16 -5
- data/lib/sequel/adapters/shared/mysql.rb +87 -86
- data/lib/sequel/adapters/shared/oracle.rb +92 -3
- data/lib/sequel/adapters/shared/postgres.rb +85 -29
- data/lib/sequel/adapters/shared/progress.rb +8 -3
- data/lib/sequel/adapters/shared/sqlite.rb +53 -23
- data/lib/sequel/adapters/sqlite.rb +4 -7
- data/lib/sequel/adapters/utils/unsupported.rb +3 -3
- data/lib/sequel/connection_pool.rb +18 -25
- data/lib/sequel/core.rb +2 -21
- data/lib/sequel/database.rb +60 -44
- data/lib/sequel/database/schema_generator.rb +26 -31
- data/lib/sequel/database/schema_methods.rb +8 -3
- data/lib/sequel/database/schema_sql.rb +114 -28
- data/lib/sequel/dataset.rb +14 -41
- data/lib/sequel/dataset/convenience.rb +31 -54
- data/lib/sequel/dataset/graph.rb +7 -13
- data/lib/sequel/dataset/sql.rb +43 -54
- data/lib/sequel/extensions/inflector.rb +0 -5
- data/lib/sequel/extensions/schema_dumper.rb +238 -0
- data/lib/sequel/metaprogramming.rb +0 -20
- data/lib/sequel/model.rb +1 -2
- data/lib/sequel/model/base.rb +18 -16
- data/lib/sequel/model/inflections.rb +6 -9
- data/lib/sequel/plugins/caching.rb +0 -6
- data/lib/sequel/plugins/hook_class_methods.rb +1 -1
- data/lib/sequel/sql.rb +2 -0
- data/lib/sequel/version.rb +2 -2
- data/spec/adapters/firebird_spec.rb +35 -8
- data/spec/adapters/mysql_spec.rb +173 -266
- data/spec/adapters/oracle_spec.rb +13 -0
- data/spec/adapters/postgres_spec.rb +127 -227
- data/spec/adapters/sqlite_spec.rb +13 -171
- data/spec/core/connection_pool_spec.rb +15 -4
- data/spec/core/core_sql_spec.rb +14 -170
- data/spec/core/database_spec.rb +50 -132
- data/spec/core/dataset_spec.rb +47 -930
- data/spec/core/expression_filters_spec.rb +12 -0
- data/spec/core/schema_generator_spec.rb +37 -45
- data/spec/core/schema_spec.rb +26 -16
- data/spec/core/spec_helper.rb +0 -25
- data/spec/extensions/inflector_spec.rb +0 -3
- data/spec/extensions/schema_dumper_spec.rb +292 -0
- data/spec/extensions/serialization_spec.rb +9 -0
- data/spec/extensions/single_table_inheritance_spec.rb +6 -1
- data/spec/extensions/spec_helper.rb +1 -3
- data/spec/extensions/validation_helpers_spec.rb +4 -4
- data/spec/integration/database_test.rb +18 -0
- data/spec/integration/dataset_test.rb +112 -1
- data/spec/integration/eager_loader_test.rb +70 -9
- data/spec/integration/prepared_statement_test.rb +2 -2
- data/spec/integration/schema_test.rb +76 -27
- data/spec/integration/spec_helper.rb +0 -14
- data/spec/integration/transaction_test.rb +27 -0
- data/spec/model/associations_spec.rb +0 -36
- data/spec/model/base_spec.rb +18 -123
- data/spec/model/hooks_spec.rb +2 -235
- data/spec/model/inflector_spec.rb +15 -115
- data/spec/model/model_spec.rb +0 -120
- data/spec/model/plugins_spec.rb +0 -70
- data/spec/model/record_spec.rb +35 -93
- data/spec/model/spec_helper.rb +0 -27
- data/spec/model/validations_spec.rb +0 -931
- metadata +9 -14
- data/lib/sequel/deprecated.rb +0 -593
- data/lib/sequel/deprecated_migration.rb +0 -91
- data/lib/sequel/model/deprecated.rb +0 -204
- data/lib/sequel/model/deprecated_hooks.rb +0 -103
- data/lib/sequel/model/deprecated_inflector.rb +0 -335
- data/lib/sequel/model/deprecated_validations.rb +0 -388
- data/spec/core/core_ext_spec.rb +0 -156
- data/spec/core/migration_spec.rb +0 -263
- data/spec/core/pretty_table_spec.rb +0 -58
- data/spec/model/caching_spec.rb +0 -217
- data/spec/model/schema_spec.rb +0 -92
@@ -67,70 +67,6 @@ context "An SQLite database" do
|
|
67
67
|
proc {@db.temp_store = :invalid}.should raise_error(Sequel::Error)
|
68
68
|
end
|
69
69
|
|
70
|
-
specify "should be able to execute transactions" do
|
71
|
-
@db.transaction do
|
72
|
-
@db.create_table!(:t) {text :name}
|
73
|
-
end
|
74
|
-
|
75
|
-
@db.tables.should include(:t)
|
76
|
-
|
77
|
-
proc {@db.transaction do
|
78
|
-
@db.create_table!(:u) {text :name}
|
79
|
-
raise ArgumentError
|
80
|
-
end}.should raise_error(ArgumentError)
|
81
|
-
# no commit
|
82
|
-
@db.tables.should_not include(:u)
|
83
|
-
|
84
|
-
proc {@db.transaction do
|
85
|
-
@db.create_table!(:v) {text :name}
|
86
|
-
raise Sequel::Rollback
|
87
|
-
end}.should_not raise_error
|
88
|
-
# no commit
|
89
|
-
@db.tables.should_not include(:r)
|
90
|
-
end
|
91
|
-
|
92
|
-
specify "should support nested transactions" do
|
93
|
-
@db.transaction do
|
94
|
-
@db.transaction do
|
95
|
-
@db.create_table!(:t) {text :name}
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
@db.tables.should include(:t)
|
100
|
-
|
101
|
-
proc {@db.transaction do
|
102
|
-
@db.create_table!(:v) {text :name}
|
103
|
-
@db.transaction do
|
104
|
-
raise Sequel::Rollback # should roll back the top-level transaction
|
105
|
-
end
|
106
|
-
end}.should_not raise_error
|
107
|
-
# no commit
|
108
|
-
@db.tables.should_not include(:v)
|
109
|
-
end
|
110
|
-
|
111
|
-
specify "should handle returning inside of transaction by committing" do
|
112
|
-
@db.create_table!(:items2){text :name}
|
113
|
-
def @db.ret_commit
|
114
|
-
transaction do
|
115
|
-
self[:items2] << {:name => 'abc'}
|
116
|
-
return
|
117
|
-
self[:items2] << {:name => 'd'}
|
118
|
-
end
|
119
|
-
end
|
120
|
-
@db[:items2].count.should == 0
|
121
|
-
@db.ret_commit
|
122
|
-
@db[:items2].count.should == 1
|
123
|
-
@db.ret_commit
|
124
|
-
@db[:items2].count.should == 2
|
125
|
-
proc do
|
126
|
-
@db.transaction do
|
127
|
-
raise Interrupt, 'asdf'
|
128
|
-
end
|
129
|
-
end.should raise_error(Interrupt)
|
130
|
-
|
131
|
-
@db[:items2].count.should == 2
|
132
|
-
end
|
133
|
-
|
134
70
|
specify "should support timestamps and datetimes and respect datetime_class" do
|
135
71
|
@db.create_table!(:time){timestamp :t; datetime :d}
|
136
72
|
t1 = Time.at(1)
|
@@ -156,15 +92,6 @@ context "An SQLite database" do
|
|
156
92
|
]
|
157
93
|
end
|
158
94
|
|
159
|
-
specify "should catch invalid SQL errors and raise them as Error" do
|
160
|
-
proc {@db.execute 'blah blah'}.should raise_error(Sequel::Error)
|
161
|
-
proc {@db.execute_insert 'blah blah'}.should raise_error(Sequel::Error)
|
162
|
-
end
|
163
|
-
|
164
|
-
specify "should not swallow non-SQLite based exceptions" do
|
165
|
-
proc {@db.pool.hold{raise Interrupt, "test"}}.should raise_error(Interrupt)
|
166
|
-
end
|
167
|
-
|
168
95
|
specify "should correctly parse the schema" do
|
169
96
|
@db.create_table!(:time2) {timestamp :t}
|
170
97
|
@db.schema(:time2, :reload=>true).should == [[:t, {:type=>:datetime, :allow_null=>true, :default=>nil, :db_type=>"timestamp", :primary_key=>false}]]
|
@@ -173,61 +100,9 @@ end
|
|
173
100
|
|
174
101
|
context "An SQLite dataset" do
|
175
102
|
before do
|
176
|
-
SQLITE_DB.create_table! :items do
|
177
|
-
integer :id, :primary_key => true, :auto_increment => true
|
178
|
-
text :name
|
179
|
-
float :value
|
180
|
-
end
|
181
103
|
@d = SQLITE_DB[:items]
|
182
|
-
@d.delete # remove all records
|
183
|
-
end
|
184
|
-
|
185
|
-
specify "should return the correct records" do
|
186
|
-
@d.to_a.should == []
|
187
|
-
@d << {:name => 'abc', :value => 1.23}
|
188
|
-
@d << {:name => 'abc', :value => 4.56}
|
189
|
-
@d << {:name => 'def', :value => 7.89}
|
190
|
-
@d.select(:name, :value).to_a.sort_by {|h| h[:value]}.should == [
|
191
|
-
{:name => 'abc', :value => 1.23},
|
192
|
-
{:name => 'abc', :value => 4.56},
|
193
|
-
{:name => 'def', :value => 7.89}
|
194
|
-
]
|
195
|
-
end
|
196
|
-
|
197
|
-
specify "should return the correct record count" do
|
198
|
-
@d.count.should == 0
|
199
|
-
@d << {:name => 'abc', :value => 1.23}
|
200
|
-
@d << {:name => 'abc', :value => 4.56}
|
201
|
-
@d << {:name => 'def', :value => 7.89}
|
202
|
-
@d.count.should == 3
|
203
|
-
end
|
204
|
-
|
205
|
-
specify "should return the last inserted id when inserting records" do
|
206
|
-
id = @d << {:name => 'abc', :value => 1.23}
|
207
|
-
id.should == @d.first[:id]
|
208
104
|
end
|
209
105
|
|
210
|
-
specify "should update records correctly" do
|
211
|
-
@d << {:name => 'abc', :value => 1.23}
|
212
|
-
@d << {:name => 'abc', :value => 4.56}
|
213
|
-
@d << {:name => 'def', :value => 7.89}
|
214
|
-
@d.filter(:name => 'abc').update(:value => 5.3)
|
215
|
-
|
216
|
-
# the third record should stay the same
|
217
|
-
@d[:name => 'def'][:value].should == 7.89
|
218
|
-
@d.filter(:value => 5.3).count.should == 2
|
219
|
-
end
|
220
|
-
|
221
|
-
specify "should delete records correctly" do
|
222
|
-
@d << {:name => 'abc', :value => 1.23}
|
223
|
-
@d << {:name => 'abc', :value => 4.56}
|
224
|
-
@d << {:name => 'def', :value => 7.89}
|
225
|
-
@d.filter(:name => 'abc').delete
|
226
|
-
|
227
|
-
@d.count.should == 1
|
228
|
-
@d.first[:name].should == 'def'
|
229
|
-
end
|
230
|
-
|
231
106
|
specify "should handle string pattern matches correctly" do
|
232
107
|
@d.literal(:x.like('a')).should == "(x LIKE 'a')"
|
233
108
|
@d.literal(~:x.like('a')).should == "NOT (x LIKE 'a')"
|
@@ -283,43 +158,12 @@ context "An SQLite dataset AS clause" do
|
|
283
158
|
end
|
284
159
|
end
|
285
160
|
|
286
|
-
context "An SQLite dataset" do
|
287
|
-
before do
|
288
|
-
SQLITE_DB.create_table! :items do
|
289
|
-
integer :id, :primary_key => true, :auto_increment => true
|
290
|
-
text :name
|
291
|
-
float :value
|
292
|
-
end
|
293
|
-
@d = SQLITE_DB[:items]
|
294
|
-
@d.delete # remove all records
|
295
|
-
@d << {:name => 'abc', :value => 1.23}
|
296
|
-
@d << {:name => 'def', :value => 4.56}
|
297
|
-
@d << {:name => 'ghi', :value => 7.89}
|
298
|
-
end
|
299
|
-
|
300
|
-
specify "should correctly return avg" do
|
301
|
-
@d.avg(:value).to_s.should == ((1.23 + 4.56 + 7.89) / 3).to_s
|
302
|
-
end
|
303
|
-
|
304
|
-
specify "should correctly return sum" do
|
305
|
-
@d.sum(:value).to_s.should == (1.23 + 4.56 + 7.89).to_s
|
306
|
-
end
|
307
|
-
|
308
|
-
specify "should correctly return max" do
|
309
|
-
@d.max(:value).to_s.should == 7.89.to_s
|
310
|
-
end
|
311
|
-
|
312
|
-
specify "should correctly return min" do
|
313
|
-
@d.min(:value).to_s.should == 1.23.to_s
|
314
|
-
end
|
315
|
-
end
|
316
|
-
|
317
161
|
context "SQLite::Dataset#delete" do
|
318
162
|
before do
|
319
163
|
SQLITE_DB.create_table! :items do
|
320
|
-
|
321
|
-
|
322
|
-
|
164
|
+
primary_key :id
|
165
|
+
String :name
|
166
|
+
Float :value
|
323
167
|
end
|
324
168
|
@d = SQLITE_DB[:items]
|
325
169
|
@d.delete # remove all records
|
@@ -349,9 +193,9 @@ end
|
|
349
193
|
context "SQLite::Dataset#update" do
|
350
194
|
before do
|
351
195
|
SQLITE_DB.create_table! :items do
|
352
|
-
|
353
|
-
|
354
|
-
|
196
|
+
primary_key :id
|
197
|
+
String :name
|
198
|
+
Float :value
|
355
199
|
end
|
356
200
|
@d = SQLITE_DB[:items]
|
357
201
|
@d.delete # remove all records
|
@@ -372,24 +216,22 @@ end
|
|
372
216
|
context "SQLite dataset" do
|
373
217
|
before do
|
374
218
|
SQLITE_DB.create_table! :test do
|
375
|
-
|
376
|
-
|
377
|
-
|
219
|
+
primary_key :id
|
220
|
+
String :name
|
221
|
+
Float :value
|
378
222
|
end
|
379
223
|
SQLITE_DB.create_table! :items do
|
380
|
-
|
381
|
-
|
382
|
-
|
224
|
+
primary_key :id
|
225
|
+
String :name
|
226
|
+
Float :value
|
383
227
|
end
|
384
228
|
@d = SQLITE_DB[:items]
|
385
|
-
@d.delete # remove all records
|
386
229
|
@d << {:name => 'abc', :value => 1.23}
|
387
230
|
@d << {:name => 'def', :value => 4.56}
|
388
231
|
@d << {:name => 'ghi', :value => 7.89}
|
389
232
|
end
|
390
|
-
|
391
233
|
after do
|
392
|
-
SQLITE_DB.drop_table :
|
234
|
+
SQLITE_DB.drop_table(:test, :items)
|
393
235
|
end
|
394
236
|
|
395
237
|
specify "should be able to insert from a subquery" do
|
@@ -55,11 +55,22 @@ context "A connection pool handling connections" do
|
|
55
55
|
@cpool.hold {:block_return}.should == :block_return
|
56
56
|
end
|
57
57
|
|
58
|
+
if RUBY_VERSION < '1.9.0' and (!defined?(RUBY_ENGINE) or RUBY_ENGINE != 'jruby')
|
59
|
+
specify "#hold should remove dead threads from the pool if it reaches its max_size" do
|
60
|
+
Thread.new{@cpool.hold{Thread.current.exit!}}.join
|
61
|
+
@cpool.allocated.keys.map{|t| t.alive?}.should == [false]
|
62
|
+
|
63
|
+
Thread.new{@cpool.hold{Thread.current.exit!}}.join
|
64
|
+
@cpool.allocated.keys.map{|t| t.alive?}.should == [false, false]
|
65
|
+
|
66
|
+
Thread.new{@cpool.hold{}}.join
|
67
|
+
@cpool.allocated.should == {}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
58
71
|
specify "#make_new should not make more than max_size connections" do
|
59
|
-
@cpool.
|
60
|
-
@cpool.
|
61
|
-
@cpool.send(:make_new, :default).should == nil
|
62
|
-
@cpool.created_count.should == 2
|
72
|
+
50.times{Thread.new{@cpool.hold{sleep 0.01}}}
|
73
|
+
@cpool.created_count.should == @max_size
|
63
74
|
end
|
64
75
|
|
65
76
|
specify ":disconnection_proc option should set the disconnection proc to use" do
|
data/spec/core/core_sql_spec.rb
CHANGED
@@ -63,50 +63,6 @@ context "Array#sql_array" do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
context "Array#to_sql" do
|
67
|
-
deprec_specify "should concatenate multiple lines into a single string" do
|
68
|
-
"SELECT * \r\nFROM items\r\n WHERE a = 1".split.to_sql. \
|
69
|
-
should == 'SELECT * FROM items WHERE a = 1'
|
70
|
-
end
|
71
|
-
|
72
|
-
deprec_specify "should remove superfluous white space and line breaks" do
|
73
|
-
"\tSELECT * \n FROM items ".split.to_sql. \
|
74
|
-
should == 'SELECT * FROM items'
|
75
|
-
end
|
76
|
-
|
77
|
-
deprec_specify "should remove ANSI SQL comments" do
|
78
|
-
"SELECT * --comment\r\n FROM items\r\n --comment".split.to_sql. \
|
79
|
-
should == 'SELECT * FROM items'
|
80
|
-
end
|
81
|
-
|
82
|
-
deprec_specify "should remove C-style comments" do
|
83
|
-
"SELECT * \r\n /* comment comment\r\n comment\r\n FROM items */\r\n FROM items\r\n--comment".split.to_sql. \
|
84
|
-
should == 'SELECT * FROM items'
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context "String#to_sql" do
|
89
|
-
deprec_specify "should concatenate multiple lines into a single string" do
|
90
|
-
"SELECT * \r\nFROM items\r\nWHERE a = 1".to_sql. \
|
91
|
-
should == 'SELECT * FROM items WHERE a = 1'
|
92
|
-
end
|
93
|
-
|
94
|
-
deprec_specify "should remove superfluous white space and line breaks" do
|
95
|
-
"\tSELECT * \r\n FROM items ".to_sql. \
|
96
|
-
should == 'SELECT * FROM items'
|
97
|
-
end
|
98
|
-
|
99
|
-
deprec_specify "should remove ANSI SQL comments" do
|
100
|
-
"SELECT * --comment \r\n FROM items\r\n --comment".to_sql. \
|
101
|
-
should == 'SELECT * FROM items'
|
102
|
-
end
|
103
|
-
|
104
|
-
deprec_specify "should remove C-style comments" do
|
105
|
-
"SELECT * \r\n/* comment comment\r\ncomment\r\nFROM items */\r\nFROM items\r\n--comment".to_sql. \
|
106
|
-
should == 'SELECT * FROM items'
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
66
|
context "String#lit" do
|
111
67
|
specify "should return an LiteralString object" do
|
112
68
|
'xyz'.lit.should be_a_kind_of(Sequel::LiteralString)
|
@@ -118,13 +74,6 @@ context "String#lit" do
|
|
118
74
|
"UPDATE t SET stamp = NOW()"
|
119
75
|
end
|
120
76
|
|
121
|
-
deprec_specify "should be aliased as expr" do
|
122
|
-
'xyz'.expr.should be_a_kind_of(Sequel::LiteralString)
|
123
|
-
'xyz'.expr.to_s.should == 'xyz'
|
124
|
-
Sequel::Database.new[:t].update_sql(:stamp => "NOW()".expr).should == \
|
125
|
-
"UPDATE t SET stamp = NOW()"
|
126
|
-
end
|
127
|
-
|
128
77
|
specify "should return a PlaceholderLiteralString object if args are given" do
|
129
78
|
a = 'DISTINCT ?'.lit(:a)
|
130
79
|
a.should be_a_kind_of(Sequel::SQL::PlaceholderLiteralString)
|
@@ -146,18 +95,6 @@ context "String#to_sequel_blob" do
|
|
146
95
|
end
|
147
96
|
end
|
148
97
|
|
149
|
-
context "String#split_sql" do
|
150
|
-
deprec_specify "should split a string containing multiple statements" do
|
151
|
-
"DROP TABLE a; DROP TABLE c".split_sql.should == \
|
152
|
-
['DROP TABLE a', 'DROP TABLE c']
|
153
|
-
end
|
154
|
-
|
155
|
-
deprec_specify "should remove comments from the string" do
|
156
|
-
"DROP TABLE a;/* DROP TABLE b; DROP TABLE c;*/DROP TABLE d".split_sql.should == \
|
157
|
-
['DROP TABLE a', 'DROP TABLE d']
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
98
|
context "#desc" do
|
162
99
|
before do
|
163
100
|
@ds = Sequel::Dataset.new(nil)
|
@@ -300,6 +237,10 @@ context "Symbol" do
|
|
300
237
|
@ds.literal(:xyz.qualify(:abc)).should == '"ABC"."XYZ"'
|
301
238
|
end
|
302
239
|
|
240
|
+
specify "#qualify should work on QualifiedIdentifiers" do
|
241
|
+
@ds.literal(:xyz.qualify(:abc).qualify(:def)).should == '"DEF"."ABC"."XYZ"'
|
242
|
+
end
|
243
|
+
|
303
244
|
specify "should be able to qualify an identifier" do
|
304
245
|
@ds.literal(:xyz.identifier.qualify(:xyz__abc)).should == '"XYZ"."ABC"."XYZ"'
|
305
246
|
end
|
@@ -365,10 +306,12 @@ context "Symbol" do
|
|
365
306
|
:abc.cast(:integer).to_s(@ds).should == "CAST(abc AS integer)"
|
366
307
|
end
|
367
308
|
|
368
|
-
|
369
|
-
|
309
|
+
specify "should support sql array accesses via sql_subscript" do
|
310
|
+
@ds.literal(:abc.sql_subscript(1)).should == "abc[1]"
|
311
|
+
@ds.literal(:abc__def.sql_subscript(1)).should == "abc.def[1]"
|
312
|
+
@ds.literal(:abc.sql_subscript(1)|2).should == "abc[1, 2]"
|
370
313
|
end
|
371
|
-
|
314
|
+
|
372
315
|
specify "should support cast_numeric and cast_string" do
|
373
316
|
x = :abc.cast_numeric
|
374
317
|
x.should be_a_kind_of(Sequel::SQL::NumericExpression)
|
@@ -384,16 +327,16 @@ context "Symbol" do
|
|
384
327
|
|
385
328
|
x = :abc.cast_string(:varchar)
|
386
329
|
x.should be_a_kind_of(Sequel::SQL::StringExpression)
|
387
|
-
x.to_s(@ds).should == "CAST(abc AS varchar)"
|
330
|
+
x.to_s(@ds).should == "CAST(abc AS varchar(255))"
|
388
331
|
end
|
389
332
|
|
390
333
|
specify "should allow database independent types when casting" do
|
391
334
|
m = MockDatabase.new
|
392
335
|
m.instance_eval do
|
393
|
-
def
|
394
|
-
return :foo if
|
395
|
-
return :bar if
|
396
|
-
|
336
|
+
def cast_type_literal(type)
|
337
|
+
return :foo if type == Integer
|
338
|
+
return :bar if type == String
|
339
|
+
type
|
397
340
|
end
|
398
341
|
end
|
399
342
|
@ds2 = Sequel::Dataset.new(m)
|
@@ -406,110 +349,11 @@ context "Symbol" do
|
|
406
349
|
:abc.cast_numeric(String).to_s(@ds2).should == "CAST(abc AS bar)"
|
407
350
|
end
|
408
351
|
|
409
|
-
deprec_specify "should support subscript access using | operator" do
|
410
|
-
(:abc|1).to_s(@ds).should == 'abc[1]'
|
411
|
-
(:abc|[1]).to_s(@ds).should == 'abc[1]'
|
412
|
-
(:abc|[1, 2]).to_s(@ds).should == 'abc[1, 2]'
|
413
|
-
(:abc|1|2).to_s(@ds).should == 'abc[1, 2]'
|
414
|
-
end
|
415
|
-
|
416
352
|
specify "should support SQL EXTRACT function via #extract " do
|
417
353
|
:abc.extract(:year).to_s(@ds).should == "extract(year FROM abc)"
|
418
354
|
end
|
419
355
|
end
|
420
356
|
|
421
|
-
context "String#to_time" do
|
422
|
-
deprec_specify "should convert the string into a Time object" do
|
423
|
-
"2007-07-11".to_time.should == Time.parse("2007-07-11")
|
424
|
-
"06:30".to_time.should == Time.parse("06:30")
|
425
|
-
end
|
426
|
-
|
427
|
-
deprec_specify "should raise InvalidValue for an invalid time" do
|
428
|
-
proc {'0000-00-00'.to_time}.should raise_error(Sequel::InvalidValue)
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
context "String#to_date" do
|
433
|
-
after do
|
434
|
-
Sequel.convert_two_digit_years = true
|
435
|
-
end
|
436
|
-
|
437
|
-
deprec_specify "should convert the string into a Date object" do
|
438
|
-
"2007-07-11".to_date.should == Date.parse("2007-07-11")
|
439
|
-
end
|
440
|
-
|
441
|
-
deprec_specify "should convert 2 digit years by default" do
|
442
|
-
"July 11, 07".to_date.should == Date.parse("2007-07-11")
|
443
|
-
end
|
444
|
-
|
445
|
-
deprec_specify "should not convert 2 digit years if set not to" do
|
446
|
-
Sequel.convert_two_digit_years = false
|
447
|
-
"July 11, 07".to_date.should == Date.parse("0007-07-11")
|
448
|
-
end
|
449
|
-
|
450
|
-
deprec_specify "should raise InvalidValue for an invalid date" do
|
451
|
-
proc {'0000-00-00'.to_date}.should raise_error(Sequel::InvalidValue)
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
context "String#to_datetime" do
|
456
|
-
after do
|
457
|
-
Sequel.convert_two_digit_years = true
|
458
|
-
end
|
459
|
-
|
460
|
-
deprec_specify "should convert the string into a DateTime object" do
|
461
|
-
"2007-07-11 10:11:12a".to_datetime.should == DateTime.parse("2007-07-11 10:11:12a")
|
462
|
-
end
|
463
|
-
|
464
|
-
deprec_specify "should convert 2 digit years by default" do
|
465
|
-
"July 11, 07 10:11:12a".to_datetime.should == DateTime.parse("2007-07-11 10:11:12a")
|
466
|
-
end
|
467
|
-
|
468
|
-
deprec_specify "should not convert 2 digit years if set not to" do
|
469
|
-
Sequel.convert_two_digit_years = false
|
470
|
-
"July 11, 07 10:11:12a".to_datetime.should == DateTime.parse("0007-07-11 10:11:12a")
|
471
|
-
end
|
472
|
-
|
473
|
-
deprec_specify "should raise InvalidValue for an invalid date" do
|
474
|
-
proc {'0000-00-00'.to_datetime}.should raise_error(Sequel::InvalidValue)
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
context "String#to_sequel_time" do
|
479
|
-
after do
|
480
|
-
Sequel.datetime_class = Time
|
481
|
-
Sequel.convert_two_digit_years = true
|
482
|
-
end
|
483
|
-
|
484
|
-
deprec_specify "should convert the string into a Time object by default" do
|
485
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.should == Time
|
486
|
-
"2007-07-11 10:11:12a".to_sequel_time.should == Time.parse("2007-07-11 10:11:12a")
|
487
|
-
end
|
488
|
-
|
489
|
-
deprec_specify "should convert the string into a DateTime object if that is set" do
|
490
|
-
Sequel.datetime_class = DateTime
|
491
|
-
"2007-07-11 10:11:12a".to_sequel_time.class.should == DateTime
|
492
|
-
"2007-07-11 10:11:12a".to_sequel_time.should == DateTime.parse("2007-07-11 10:11:12a")
|
493
|
-
end
|
494
|
-
|
495
|
-
deprec_specify "should convert 2 digit years by default if using DateTime class" do
|
496
|
-
Sequel.datetime_class = DateTime
|
497
|
-
"July 11, 07 10:11:12a".to_sequel_time.should == DateTime.parse("2007-07-11 10:11:12a")
|
498
|
-
end
|
499
|
-
|
500
|
-
deprec_specify "should not convert 2 digit years if set not to when using DateTime class" do
|
501
|
-
Sequel.datetime_class = DateTime
|
502
|
-
Sequel.convert_two_digit_years = false
|
503
|
-
"July 11, 07 10:11:12a".to_sequel_time.should == DateTime.parse("0007-07-11 10:11:12a")
|
504
|
-
end
|
505
|
-
|
506
|
-
deprec_specify "should raise InvalidValue for an invalid time" do
|
507
|
-
proc {'0000-00-00'.to_sequel_time}.should raise_error(Sequel::InvalidValue)
|
508
|
-
Sequel.datetime_class = DateTime
|
509
|
-
proc {'0000-00-00'.to_sequel_time}.should raise_error(Sequel::InvalidValue)
|
510
|
-
end
|
511
|
-
end
|
512
|
-
|
513
357
|
context "Sequel::SQL::Function#==" do
|
514
358
|
specify "should be true for functions with the same name and arguments, false otherwise" do
|
515
359
|
a = :date.sql_function(:t)
|