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 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