sequel 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/Rakefile +1 -1
- data/lib/sequel/dataset.rb +11 -11
- data/lib/sequel/postgres.rb +23 -17
- data/lib/sequel/sqlite.rb +11 -0
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
*0.0.8*
|
2
|
+
|
3
|
+
* Fixed Dataset#reverse_order to provide chainability. This method can be called without arguments to invert the current order or with arguments to provide a descending order.
|
4
|
+
|
5
|
+
* Fixed literal representation of literals in SQLite adapter (thanks Christian Neukirchen!)
|
6
|
+
|
7
|
+
* Refactored insert code in Postgres adapter (in preparation for fetching the last insert id for pre-8.1 versions).
|
8
|
+
|
1
9
|
*0.0.7*
|
2
10
|
|
3
11
|
* Fixed bug in Model.schema, duh!
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
|
|
6
6
|
include FileUtils
|
7
7
|
|
8
8
|
NAME = "sequel"
|
9
|
-
VERS = "0.0.
|
9
|
+
VERS = "0.0.8"
|
10
10
|
CLEAN.include ['**/.*.sw?', 'pkg/*', '.config', 'doc/*', 'coverage/*']
|
11
11
|
RDOC_OPTS = ['--quiet', '--title', "Sequel: Concise ORM for Ruby",
|
12
12
|
"--opname", "index.html",
|
data/lib/sequel/dataset.rb
CHANGED
@@ -166,15 +166,17 @@ module Sequel
|
|
166
166
|
dup_merge(:order => order)
|
167
167
|
end
|
168
168
|
|
169
|
+
# Returns a copy of the dataset with the order reversed. If no order is
|
170
|
+
# given, the existing order is inverted.
|
171
|
+
def reverse_order(*order)
|
172
|
+
order(invert_order(order.empty? ? @opts[:order] : order))
|
173
|
+
end
|
174
|
+
|
169
175
|
DESC_ORDER_REGEXP = /(.*)\sDESC/.freeze
|
170
176
|
|
171
|
-
def
|
177
|
+
def invert_order(order)
|
172
178
|
order.map do |f|
|
173
|
-
|
174
|
-
$1
|
175
|
-
else
|
176
|
-
f.DESC
|
177
|
-
end
|
179
|
+
f.to_s =~ DESC_ORDER_REGEXP ? $1 : f.DESC
|
178
180
|
end
|
179
181
|
end
|
180
182
|
|
@@ -375,11 +377,10 @@ module Sequel
|
|
375
377
|
end
|
376
378
|
|
377
379
|
def last(num = 1)
|
378
|
-
raise
|
379
|
-
@opts[:order] || (opts && opts[:order])
|
380
|
+
raise 'No order specified' unless @opts[:order] || (opts && opts[:order])
|
380
381
|
|
381
382
|
l = {:limit => num}
|
382
|
-
opts = {:order =>
|
383
|
+
opts = {:order => invert_order(@opts[:order])}.
|
383
384
|
merge(opts ? opts.merge(l) : l)
|
384
385
|
|
385
386
|
if num == 1
|
@@ -390,8 +391,7 @@ module Sequel
|
|
390
391
|
end
|
391
392
|
|
392
393
|
def destroy
|
393
|
-
raise
|
394
|
-
@record_class
|
394
|
+
raise 'Dataset not associated with model' unless @record_class
|
395
395
|
|
396
396
|
@db.transaction {each {|r| r.destroy}}
|
397
397
|
end
|
data/lib/sequel/postgres.rb
CHANGED
@@ -146,6 +146,27 @@ module Sequel
|
|
146
146
|
def execute_and_forget(sql)
|
147
147
|
@pool.hold {|conn| conn.execute(sql).clear}
|
148
148
|
end
|
149
|
+
|
150
|
+
SELECT_LASTVAL = 'SELECT lastval()'.freeze
|
151
|
+
|
152
|
+
def execute_insert(sql)
|
153
|
+
@pool.hold do |conn|
|
154
|
+
conn.execute(sql).clear
|
155
|
+
query_single_value(SELECT_LASTVAL)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def query_single_value(sql)
|
160
|
+
@pool.hold do |conn|
|
161
|
+
result = conn.execute(sql)
|
162
|
+
begin
|
163
|
+
value = result.getvalue(0, 0)
|
164
|
+
ensure
|
165
|
+
result.clear
|
166
|
+
end
|
167
|
+
value
|
168
|
+
end
|
169
|
+
end
|
149
170
|
|
150
171
|
def synchronize(&block)
|
151
172
|
@pool.hold(&block)
|
@@ -246,14 +267,11 @@ module Sequel
|
|
246
267
|
end
|
247
268
|
|
248
269
|
def count(opts = nil)
|
249
|
-
query_single_value(count_sql(opts)).to_i
|
270
|
+
@db.query_single_value(count_sql(opts)).to_i
|
250
271
|
end
|
251
272
|
|
252
|
-
SELECT_LASTVAL = ';SELECT lastval()'.freeze
|
253
|
-
|
254
273
|
def insert(values = nil, opts = nil)
|
255
|
-
@db.
|
256
|
-
query_single_value(SELECT_LASTVAL).to_i
|
274
|
+
@db.execute_insert(insert_sql(values, opts))
|
257
275
|
end
|
258
276
|
|
259
277
|
def update(values, opts = nil)
|
@@ -320,18 +338,6 @@ module Sequel
|
|
320
338
|
end
|
321
339
|
end
|
322
340
|
|
323
|
-
def query_single_value(sql)
|
324
|
-
@db.synchronize do
|
325
|
-
result = @db.execute(sql)
|
326
|
-
begin
|
327
|
-
value = result.getvalue(0, 0)
|
328
|
-
ensure
|
329
|
-
result.clear
|
330
|
-
end
|
331
|
-
value
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
341
|
COMMA = ','.freeze
|
336
342
|
|
337
343
|
@@converters_mutex = Mutex.new
|
data/lib/sequel/sqlite.rb
CHANGED
@@ -57,6 +57,17 @@ module Sequel
|
|
57
57
|
end
|
58
58
|
|
59
59
|
class Dataset < Sequel::Dataset
|
60
|
+
def literal(v)
|
61
|
+
case v
|
62
|
+
when String: "'%s'" % v.gsub(/'/, "''")
|
63
|
+
when Time: literal(v.iso8601)
|
64
|
+
when Array: v.empty? ? NULL : v.join(COMMA_SEPARATOR)
|
65
|
+
when Integer, Float: v.to_s
|
66
|
+
else
|
67
|
+
raise "can't express #{v.inspect}:#{v.class} as a SQL literal"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
60
71
|
def each(opts = nil, &block)
|
61
72
|
@db.result_set(select_sql(opts), @record_class, &block)
|
62
73
|
self
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: sequel
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-03-
|
6
|
+
version: 0.0.8
|
7
|
+
date: 2007-03-24 00:00:00 +02:00
|
8
8
|
summary: Concise ORM for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|