sequel 0.1.9 → 0.1.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ === 0.1.9.1 (2007-07-22)
2
+
3
+ * Improved robustness of MySQL::Dataset#field_name.
4
+
5
+ * Added Sequel.single_threaded= convenience method.
6
+
1
7
  === 0.1.9 (2007-07-21)
2
8
 
3
9
  * Fixed #update_sql and #insert_sql to support field quoting by calling #field_name.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
6
6
  include FileUtils
7
7
 
8
8
  NAME = "sequel"
9
- VERS = "0.1.9"
9
+ VERS = "0.1.9.1"
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.rb CHANGED
@@ -25,6 +25,10 @@ module Sequel #:nodoc:
25
25
  end
26
26
 
27
27
  alias_method :open, :connect
28
+
29
+ def single_threaded=(value)
30
+ Database.single_threaded = value
31
+ end
28
32
  end
29
33
  end
30
34
 
data/lib/sequel/mysql.rb CHANGED
@@ -126,16 +126,24 @@ module Sequel
126
126
  end
127
127
 
128
128
  class Dataset < Sequel::Dataset
129
+ FIELD_EXPR_RE = /^([^\(]+\()?([^\.]+\.)?([^\s\)]+)(\))?(\s[Aa][Ss]\s(.+))?$/.freeze
130
+ FIELD_ORDER_RE = /^(.*) (DESC|ASC)$/.freeze
131
+ FIELD_NOT_QUOTABLE_RE = /^(`(.+)`)|\*$/.freeze
132
+
133
+ def quote_field(field)
134
+ field =~ FIELD_NOT_QUOTABLE_RE ? field : "`#{field}`"
135
+ end
136
+
129
137
  def field_name(field)
130
138
  f = field.is_a?(Symbol) ? field.to_field_name : field
131
- if f =~ /^(([^\(]*)\(\*\))|\*$/
132
- f
133
- elsif f =~ /^([^\(]*)\(([^\*\)]*)\)$/
134
- "#{$1}(`#{$2}`)"
135
- elsif f =~ /^(.*) (DESC|ASC)$/
136
- "`#{$1}` #{$2}"
139
+ case f
140
+ when FIELD_EXPR_RE:
141
+ $6 ? \
142
+ "#{$1}#{$2}#{quote_field($3)}#{$4} AS #{quote_field($6)}" : \
143
+ "#{$1}#{$2}#{quote_field($3)}#{$4}"
144
+ when FIELD_ORDER_RE: "#{quote_field($1)} #{$2}"
137
145
  else
138
- "`#{f}`"
146
+ quote_field(f)
139
147
  end
140
148
  end
141
149
 
@@ -78,9 +78,21 @@ context "A MySQL dataset" do
78
78
  @d.select(:value.MAX).sql.should == \
79
79
  'SELECT max(`value`) FROM items'
80
80
 
81
+ @d.select(:items__value.MAX).sql.should == \
82
+ 'SELECT max(items.`value`) FROM items'
83
+
81
84
  @d.order(:name.DESC).sql.should == \
82
85
  'SELECT * FROM items ORDER BY `name` DESC'
83
86
 
87
+ @d.select('items.name AS item_name').sql.should == \
88
+ 'SELECT items.`name` AS `item_name` FROM items'
89
+
90
+ @d.select('`name`').sql.should == \
91
+ 'SELECT `name` FROM items'
92
+
93
+ @d.select('max(items.`name`) as `max_name`').sql.should == \
94
+ 'SELECT max(items.`name`) AS `max_name` FROM items'
95
+
84
96
  @d.insert_sql(:value => 333).should == \
85
97
  'INSERT INTO items (`value`) VALUES (333)'
86
98
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: sequel
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.9
7
- date: 2007-07-21 00:00:00 +03:00
6
+ version: 0.1.9.1
7
+ date: 2007-07-22 00:00:00 +03:00
8
8
  summary: Concise ORM for Ruby.
9
9
  require_paths:
10
10
  - lib