sequel 0.0.7 → 0.0.8
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.
- 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
|