sequel 0.1.9.8 → 0.1.9.9
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/ado.rb +74 -0
- data/lib/sequel/core_ext.rb +38 -14
- data/lib/sequel/dataset/dataset_convenience.rb +4 -4
- data/lib/sequel/dbi.rb +1 -1
- data/spec/adapters/sqlite_spec.rb +26 -0
- data/spec/dataset_spec.rb +5 -5
- metadata +3 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.1.9.9 (2007-08-18)
|
2
|
+
|
3
|
+
* New ADO adapter by cdcarter (#31).
|
4
|
+
|
5
|
+
* Added automatic column aliasing to #avg, #sum, #min and #max (#30).
|
6
|
+
|
7
|
+
* Fixed broken Sequel::DBI::Dataset#fetch_rows (#29 thanks cdcarter.)
|
8
|
+
|
1
9
|
=== 0.1.9.8 (2007-08-15)
|
2
10
|
|
3
11
|
* Fixed DBI adapter.
|
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.9"
|
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/ado.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
if !Object.const_defined?('Sequel')
|
2
|
+
require File.join(File.dirname(__FILE__), '../sequel')
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'win32ole'
|
6
|
+
|
7
|
+
module Sequel
|
8
|
+
module ADO
|
9
|
+
class Database < Sequel::Database
|
10
|
+
set_adapter_scheme :ado
|
11
|
+
|
12
|
+
def connect
|
13
|
+
dbname = @opts[:database]
|
14
|
+
handle = WIN32OLE.new('ADODB.Connection')
|
15
|
+
handle.Open(dbname)
|
16
|
+
handle
|
17
|
+
end
|
18
|
+
|
19
|
+
def dataset(opts = nil)
|
20
|
+
ADO::Dataset.new(self, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def execute(sql)
|
24
|
+
@logger.info(sql) if @logger
|
25
|
+
@pool.hold {|conn| conn.Execute(sql)}
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :do, :execute
|
29
|
+
end
|
30
|
+
|
31
|
+
class Dataset < Sequel::Dataset
|
32
|
+
def literal(v)
|
33
|
+
case v
|
34
|
+
when Time: literal(v.iso8601)
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def fetch_rows(sql, &block)
|
41
|
+
@db.synchronize do
|
42
|
+
s = @db.execute sql
|
43
|
+
|
44
|
+
num_cols = s.Fields.Count
|
45
|
+
@columns = Array.new(num_cols)
|
46
|
+
0.upto(num_cols-1) {|x| @columns[x] = s.Fields(x).Name.to_sym}
|
47
|
+
|
48
|
+
s.getRows.transpose.each {|r| yield hash_row(r) }
|
49
|
+
end
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
def hash_row(row)
|
54
|
+
@columns.inject({}) do |m, c|
|
55
|
+
m[c] = row.shift
|
56
|
+
m
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def insert(*values)
|
61
|
+
@db.do insert_sql(*values)
|
62
|
+
end
|
63
|
+
|
64
|
+
def update(values, opts = nil)
|
65
|
+
@db.do update_sql(values, opts)
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
def delete(opts = nil)
|
70
|
+
@db.do delete_sql(opts)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/sequel/core_ext.rb
CHANGED
@@ -43,10 +43,13 @@ class String
|
|
43
43
|
def to_time
|
44
44
|
Time.parse(self)
|
45
45
|
end
|
46
|
+
|
47
|
+
def to_field_name
|
48
|
+
self
|
49
|
+
end
|
46
50
|
end
|
47
51
|
|
48
|
-
|
49
|
-
class Symbol
|
52
|
+
module FieldCompositionMethods
|
50
53
|
def DESC
|
51
54
|
"#{to_field_name} DESC"
|
52
55
|
end
|
@@ -55,12 +58,40 @@ class Symbol
|
|
55
58
|
"#{to_field_name} AS #{target}"
|
56
59
|
end
|
57
60
|
|
61
|
+
def ALL
|
62
|
+
"#{to_s}.*"
|
63
|
+
end
|
64
|
+
|
65
|
+
FIELD_TITLE_RE1 = /^(.*)\sAS\s(.+)$/.freeze
|
66
|
+
FIELD_TITLE_RE2 = /^([^\.]+)\.([^\.]+)$/.freeze
|
67
|
+
|
68
|
+
def field_title
|
69
|
+
s = to_field_name
|
70
|
+
case s
|
71
|
+
when FIELD_TITLE_RE1, FIELD_TITLE_RE2: $2
|
72
|
+
else
|
73
|
+
s
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def MIN; "min(#{to_field_name})"; end
|
78
|
+
def MAX; "max(#{to_field_name})"; end
|
79
|
+
def SUM; "sum(#{to_field_name})"; end
|
80
|
+
def AVG; "avg(#{to_field_name})"; end
|
81
|
+
end
|
82
|
+
|
83
|
+
class String
|
84
|
+
include FieldCompositionMethods
|
85
|
+
end
|
86
|
+
|
87
|
+
# Symbol extensions
|
88
|
+
class Symbol
|
89
|
+
include FieldCompositionMethods
|
90
|
+
|
91
|
+
|
58
92
|
FIELD_REF_RE1 = /^([a-z_]+)__([a-z_]+)___([a-z_]+)/.freeze
|
59
93
|
FIELD_REF_RE2 = /^([a-z_]+)___([a-z_]+)$/.freeze
|
60
94
|
FIELD_REF_RE3 = /^([a-z_]+)__([a-z_]+)$/.freeze
|
61
|
-
DOUBLE_UNDERSCORE = '__'.freeze
|
62
|
-
PERIOD = '.'.freeze
|
63
|
-
|
64
95
|
def to_field_name
|
65
96
|
s = to_s
|
66
97
|
case s
|
@@ -71,13 +102,6 @@ class Symbol
|
|
71
102
|
s
|
72
103
|
end
|
73
104
|
end
|
74
|
-
|
75
|
-
def ALL
|
76
|
-
"#{to_s}.*"
|
77
|
-
end
|
78
|
-
|
79
|
-
def MIN; "min(#{to_field_name})"; end
|
80
|
-
def MAX; "max(#{to_field_name})"; end
|
81
|
-
def SUM; "sum(#{to_field_name})"; end
|
82
|
-
def AVG; "avg(#{to_field_name})"; end
|
83
105
|
end
|
106
|
+
|
107
|
+
|
@@ -131,22 +131,22 @@ module Sequel
|
|
131
131
|
|
132
132
|
# Returns the minimum value for the given field.
|
133
133
|
def min(field)
|
134
|
-
single_value(:select => [field.MIN])
|
134
|
+
single_value(:select => [field.MIN.AS(:v)])
|
135
135
|
end
|
136
136
|
|
137
137
|
# Returns the maximum value for the given field.
|
138
138
|
def max(field)
|
139
|
-
single_value(:select => [field.MAX])
|
139
|
+
single_value(:select => [field.MAX.AS(:v)])
|
140
140
|
end
|
141
141
|
|
142
142
|
# Returns the sum for the given field.
|
143
143
|
def sum(field)
|
144
|
-
single_value(:select => [field.SUM])
|
144
|
+
single_value(:select => [field.SUM.AS(:v)])
|
145
145
|
end
|
146
146
|
|
147
147
|
# Returns the average value for the given field.
|
148
148
|
def avg(field)
|
149
|
-
single_value(:select => [field.AVG])
|
149
|
+
single_value(:select => [field.AVG.AS(:v)])
|
150
150
|
end
|
151
151
|
|
152
152
|
# Pretty prints the records in the dataset as plain-text table.
|
data/lib/sequel/dbi.rb
CHANGED
@@ -113,4 +113,30 @@ context "An SQLite dataset" do
|
|
113
113
|
@d.count.should == 1
|
114
114
|
@d.first[:name].should == 'def'
|
115
115
|
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "An SQLITE dataset" do
|
119
|
+
setup do
|
120
|
+
@d = SQLITE_DB[:items]
|
121
|
+
@d.delete # remove all records
|
122
|
+
@d << {:name => 'abc', :value => 1.23}
|
123
|
+
@d << {:name => 'def', :value => 4.56}
|
124
|
+
@d << {:name => 'ghi', :value => 7.89}
|
125
|
+
end
|
126
|
+
|
127
|
+
specify "should correctly return avg" do
|
128
|
+
@d.avg(:value).should == ((1.23 + 4.56 + 7.89) / 3).to_s
|
129
|
+
end
|
130
|
+
|
131
|
+
specify "should correctly return sum" do
|
132
|
+
@d.sum(:value).should == (1.23 + 4.56 + 7.89).to_s
|
133
|
+
end
|
134
|
+
|
135
|
+
specify "should correctly return max" do
|
136
|
+
@d.max(:value).should == 7.89.to_s
|
137
|
+
end
|
138
|
+
|
139
|
+
specify "should correctly return min" do
|
140
|
+
@d.min(:value).should == 1.23.to_s
|
141
|
+
end
|
116
142
|
end
|
data/spec/dataset_spec.rb
CHANGED
@@ -894,23 +894,23 @@ context "Dataset aggregate methods" do
|
|
894
894
|
end
|
895
895
|
|
896
896
|
specify "should include min" do
|
897
|
-
@d.min(:a).should == 'SELECT min(a) FROM test'
|
897
|
+
@d.min(:a).should == 'SELECT min(a) AS v FROM test'
|
898
898
|
end
|
899
899
|
|
900
900
|
specify "should include max" do
|
901
|
-
@d.max(:b).should == 'SELECT max(b) FROM test'
|
901
|
+
@d.max(:b).should == 'SELECT max(b) AS v FROM test'
|
902
902
|
end
|
903
903
|
|
904
904
|
specify "should include sum" do
|
905
|
-
@d.sum(:c).should == 'SELECT sum(c) FROM test'
|
905
|
+
@d.sum(:c).should == 'SELECT sum(c) AS v FROM test'
|
906
906
|
end
|
907
907
|
|
908
908
|
specify "should include avg" do
|
909
|
-
@d.avg(:d).should == 'SELECT avg(d) FROM test'
|
909
|
+
@d.avg(:d).should == 'SELECT avg(d) AS v FROM test'
|
910
910
|
end
|
911
911
|
|
912
912
|
specify "should accept qualified fields" do
|
913
|
-
@d.avg(:test__bc).should == 'SELECT avg(test.bc) FROM test'
|
913
|
+
@d.avg(:test__bc).should == 'SELECT avg(test.bc) AS v FROM test'
|
914
914
|
end
|
915
915
|
end
|
916
916
|
|
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-08-
|
6
|
+
version: 0.1.9.9
|
7
|
+
date: 2007-08-18 00:00:00 +03:00
|
8
8
|
summary: Lightweight ORM library for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- spec/adapters/sqlite_spec.rb
|
47
47
|
- lib/sequel
|
48
48
|
- lib/sequel.rb
|
49
|
+
- lib/sequel/ado.rb
|
49
50
|
- lib/sequel/connection_pool.rb
|
50
51
|
- lib/sequel/core_ext.rb
|
51
52
|
- lib/sequel/database.rb
|