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 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.7"
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",
@@ -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 reverse_order(order)
177
+ def invert_order(order)
172
178
  order.map do |f|
173
- if f.to_s =~ DESC_ORDER_REGEXP
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 RuntimeError, 'No order specified' unless
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 => reverse_order(@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 RuntimeError, 'Dataset not associated with model' unless
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
@@ -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.execute_and_forget(insert_sql(values, opts))
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
7
- date: 2007-03-22 00:00:00 +02:00
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