sequel 0.1.2 → 0.1.3
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 +6 -0
- data/README +2 -1
- data/Rakefile +1 -1
- data/lib/sequel/database.rb +5 -0
- data/lib/sequel/dbi.rb +80 -0
- data/lib/sequel/mysql.rb +4 -7
- data/lib/sequel/postgres.rb +51 -38
- data/lib/sequel/sqlite.rb +4 -7
- metadata +13 -12
data/CHANGELOG
CHANGED
data/README
CHANGED
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
|
|
6
6
|
include FileUtils
|
7
7
|
|
8
8
|
NAME = "sequel"
|
9
|
-
VERS = "0.1.
|
9
|
+
VERS = "0.1.3"
|
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/database.rb
CHANGED
@@ -20,6 +20,11 @@ module Sequel
|
|
20
20
|
@opts = opts
|
21
21
|
@pool = ConnectionPool.new(@opts[:max_connections] || 4, &block)
|
22
22
|
@logger = opts[:logger]
|
23
|
+
@pool.connection_proc = block || proc {connect}
|
24
|
+
end
|
25
|
+
|
26
|
+
def connect
|
27
|
+
true # we can't return nil or false, because then pool will block forever
|
23
28
|
end
|
24
29
|
|
25
30
|
def uri
|
data/lib/sequel/dbi.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
if !Object.const_defined?('Sequel')
|
2
|
+
require File.join(File.dirname(__FILE__), '../sequel')
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'dbi'
|
6
|
+
|
7
|
+
module Sequel
|
8
|
+
module DBI
|
9
|
+
|
10
|
+
class Database < Sequel::Database
|
11
|
+
set_adapter_scheme :dbi
|
12
|
+
|
13
|
+
def connect
|
14
|
+
dbname = @opts[:database] =~ /^DBI:/ ? \
|
15
|
+
@opts[:database] : @opts[:database] = 'DBI:' + @opts[:database]
|
16
|
+
::DBI.connect(dbname, @opts[:user], @opts[:password])
|
17
|
+
end
|
18
|
+
|
19
|
+
def dataset(opts = nil)
|
20
|
+
DBI::Dataset.new(self, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def execute(sql)
|
24
|
+
@logger.info(sql) if @logger
|
25
|
+
@pool.hold do |conn|
|
26
|
+
conn.execute(sql)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def do(sql)
|
31
|
+
@logger.info(sql) if @logger
|
32
|
+
@pool.hold do |conn|
|
33
|
+
conn.do(sql)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Dataset < Sequel::Dataset
|
39
|
+
def literal(v)
|
40
|
+
case v
|
41
|
+
when Time: literal(v.iso8601)
|
42
|
+
else
|
43
|
+
super
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def each(opts = nil, &block)
|
48
|
+
@db.synchronize do
|
49
|
+
s = @db.execute select_sql(opts)
|
50
|
+
begin
|
51
|
+
s.fetch {|r| yield hash_row(s, r)}
|
52
|
+
ensure
|
53
|
+
s.finish rescue nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
def hash_row(stmt, row)
|
60
|
+
stmt.column_names.inject({}) do |m, n|
|
61
|
+
m[n.to_sym] = row.shift
|
62
|
+
m
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def insert(*values)
|
67
|
+
@db.do insert_sql(*values)
|
68
|
+
end
|
69
|
+
|
70
|
+
def update(values, opts = nil)
|
71
|
+
@db.do update_sql(values, opts)
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
def delete(opts = nil)
|
76
|
+
@db.do delete_sql(opts)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/sequel/mysql.rb
CHANGED
@@ -2,7 +2,7 @@ if !Object.const_defined?('Sequel')
|
|
2
2
|
require File.join(File.dirname(__FILE__), '../sequel')
|
3
3
|
end
|
4
4
|
|
5
|
-
|
5
|
+
require 'mysql'
|
6
6
|
|
7
7
|
module Sequel
|
8
8
|
module MySQL
|
@@ -10,12 +10,9 @@ module Sequel
|
|
10
10
|
class Database < Sequel::Database
|
11
11
|
set_adapter_scheme :mysql
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
Mysql.real_connect(@opts[:host], @opts[:user], @opts[:password],
|
17
|
-
@opts[:database], @opts[:port])
|
18
|
-
end
|
13
|
+
def connect
|
14
|
+
Mysql.real_connect(@opts[:host], @opts[:user], @opts[:password],
|
15
|
+
@opts[:database], @opts[:port])
|
19
16
|
end
|
20
17
|
|
21
18
|
def dataset(opts = nil)
|
data/lib/sequel/postgres.rb
CHANGED
@@ -35,30 +35,8 @@ class PGconn
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
attr_accessor :transaction_in_progress
|
39
39
|
|
40
|
-
SQL_BEGIN = 'BEGIN'.freeze
|
41
|
-
SQL_COMMIT = 'COMMIT'.freeze
|
42
|
-
SQL_ROLLBACK = 'ROLLBACK'.freeze
|
43
|
-
|
44
|
-
def transaction
|
45
|
-
if @transaction_in_progress
|
46
|
-
return yield
|
47
|
-
end
|
48
|
-
async_exec(SQL_BEGIN)
|
49
|
-
begin
|
50
|
-
@transaction_in_progress = true
|
51
|
-
result = yield
|
52
|
-
async_exec(SQL_COMMIT)
|
53
|
-
result
|
54
|
-
rescue => e
|
55
|
-
async_exec(SQL_ROLLBACK)
|
56
|
-
raise e
|
57
|
-
ensure
|
58
|
-
@transaction_in_progress = nil
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
40
|
SELECT_CURRVAL = "SELECT currval('%s')".freeze
|
63
41
|
|
64
42
|
def last_insert_id(table)
|
@@ -140,21 +118,17 @@ module Sequel
|
|
140
118
|
class Database < Sequel::Database
|
141
119
|
set_adapter_scheme :postgres
|
142
120
|
|
143
|
-
def
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
@opts[:password]
|
153
|
-
)
|
154
|
-
end
|
121
|
+
def connect
|
122
|
+
PGconn.connect(
|
123
|
+
@opts[:host] || 'localhost',
|
124
|
+
@opts[:port] || 5432,
|
125
|
+
'', '',
|
126
|
+
@opts[:database],
|
127
|
+
@opts[:user],
|
128
|
+
@opts[:password]
|
129
|
+
)
|
155
130
|
end
|
156
131
|
|
157
|
-
|
158
132
|
def dataset(opts = nil)
|
159
133
|
Postgres::Dataset.new(self, opts)
|
160
134
|
end
|
@@ -177,11 +151,17 @@ module Sequel
|
|
177
151
|
def execute(sql)
|
178
152
|
@logger.info(sql) if @logger
|
179
153
|
@pool.hold {|conn| conn.execute(sql)}
|
154
|
+
rescue => e
|
155
|
+
@logger.error(e.message) if @logger
|
156
|
+
raise e
|
180
157
|
end
|
181
158
|
|
182
159
|
def execute_and_forget(sql)
|
183
160
|
@logger.info(sql) if @logger
|
184
161
|
@pool.hold {|conn| conn.execute(sql).clear}
|
162
|
+
rescue => e
|
163
|
+
@logger.error(e.message) if @logger
|
164
|
+
raise e
|
185
165
|
end
|
186
166
|
|
187
167
|
def execute_insert(sql, table)
|
@@ -190,15 +170,48 @@ module Sequel
|
|
190
170
|
conn.execute(sql).clear
|
191
171
|
conn.last_insert_id(table)
|
192
172
|
end
|
173
|
+
rescue => e
|
174
|
+
@logger.error(e.message) if @logger
|
175
|
+
raise e
|
193
176
|
end
|
194
177
|
|
195
178
|
def synchronize(&block)
|
196
179
|
@pool.hold(&block)
|
197
180
|
end
|
198
181
|
|
199
|
-
|
200
|
-
|
182
|
+
SQL_BEGIN = 'BEGIN'.freeze
|
183
|
+
SQL_COMMIT = 'COMMIT'.freeze
|
184
|
+
SQL_ROLLBACK = 'ROLLBACK'.freeze
|
185
|
+
|
186
|
+
def transaction
|
187
|
+
@pool.hold do |conn|
|
188
|
+
if conn.transaction_in_progress
|
189
|
+
yield conn
|
190
|
+
else
|
191
|
+
@logger.info(SQL_BEGIN) if @logger
|
192
|
+
conn.async_exec(SQL_BEGIN)
|
193
|
+
begin
|
194
|
+
conn.transaction_in_progress = true
|
195
|
+
result = yield
|
196
|
+
begin
|
197
|
+
@logger.info(SQL_COMMIT) if @logger
|
198
|
+
conn.async_exec(SQL_COMMIT)
|
199
|
+
rescue => e
|
200
|
+
@logger.error(e.message) if @logger
|
201
|
+
raise e
|
202
|
+
end
|
203
|
+
result
|
204
|
+
rescue => e
|
205
|
+
@logger.info(SQL_ROLLBACK) if @logger
|
206
|
+
conn.async_exec(SQL_ROLLBACK) rescue nil
|
207
|
+
raise e
|
208
|
+
ensure
|
209
|
+
conn.transaction_in_progress = nil
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
201
213
|
end
|
214
|
+
|
202
215
|
end
|
203
216
|
|
204
217
|
class Dataset < Sequel::Dataset
|
data/lib/sequel/sqlite.rb
CHANGED
@@ -10,13 +10,10 @@ module Sequel
|
|
10
10
|
class Database < Sequel::Database
|
11
11
|
set_adapter_scheme :sqlite
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
db.type_translation = true
|
18
|
-
db
|
19
|
-
end
|
13
|
+
def connect
|
14
|
+
db = SQLite3::Database.new(@opts[:database])
|
15
|
+
db.type_translation = true
|
16
|
+
db
|
20
17
|
end
|
21
18
|
|
22
19
|
def dataset(opts = nil)
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: sequel
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2007-05-
|
6
|
+
version: 0.1.3
|
7
|
+
date: 2007-05-20 00:00:00 +03:00
|
8
8
|
summary: Concise ORM for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -34,19 +34,20 @@ files:
|
|
34
34
|
- Rakefile
|
35
35
|
- bin/sequel
|
36
36
|
- lib/sequel
|
37
|
-
- lib/sequel.rb
|
38
|
-
- lib/sequel/
|
39
|
-
- lib/sequel/
|
37
|
+
- lib/sequel/pretty_table.rb
|
38
|
+
- lib/sequel/model.rb
|
39
|
+
- lib/sequel/schema.rb
|
40
|
+
- lib/sequel/sqlite.rb
|
40
41
|
- lib/sequel/database.rb
|
41
42
|
- lib/sequel/dataset.rb
|
42
|
-
- lib/sequel/error.rb
|
43
|
-
- lib/sequel/expressions.rb
|
44
|
-
- lib/sequel/model.rb
|
45
43
|
- lib/sequel/mysql.rb
|
46
44
|
- lib/sequel/postgres.rb
|
47
|
-
- lib/sequel/
|
48
|
-
- lib/sequel/
|
49
|
-
- lib/sequel/
|
45
|
+
- lib/sequel/connection_pool.rb
|
46
|
+
- lib/sequel/core_ext.rb
|
47
|
+
- lib/sequel/error.rb
|
48
|
+
- lib/sequel/expressions.rb
|
49
|
+
- lib/sequel/dbi.rb
|
50
|
+
- lib/sequel.rb
|
50
51
|
- CHANGELOG
|
51
52
|
test_files: []
|
52
53
|
|