sequel 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/README +1 -6
- data/Rakefile +1 -1
- data/bin/sequel +1 -3
- data/lib/sequel.rb +18 -1
- data/lib/sequel/adapters/ado.rb +104 -0
- data/lib/sequel/adapters/db2.rb +160 -0
- data/lib/sequel/adapters/dbi.rb +130 -0
- data/lib/sequel/adapters/informix.rb +78 -0
- data/lib/sequel/adapters/mysql.rb +256 -0
- data/lib/sequel/adapters/odbc.rb +144 -0
- data/lib/sequel/adapters/oracle.rb +109 -0
- data/lib/sequel/adapters/postgres.rb +507 -0
- data/lib/sequel/adapters/sqlite.rb +186 -0
- data/lib/sequel/ado.rb +2 -104
- data/lib/{sequel-core → sequel}/array_keys.rb +0 -0
- data/lib/{sequel-core → sequel}/connection_pool.rb +0 -0
- data/lib/{sequel-core → sequel}/core_ext.rb +0 -0
- data/lib/{sequel-core → sequel}/core_sql.rb +0 -0
- data/lib/{sequel-core → sequel}/database.rb +10 -20
- data/lib/{sequel-core → sequel}/dataset.rb +0 -0
- data/lib/{sequel-core → sequel}/dataset/convenience.rb +0 -0
- data/lib/{sequel-core → sequel}/dataset/sequelizer.rb +0 -0
- data/lib/{sequel-core → sequel}/dataset/sql.rb +0 -0
- data/lib/sequel/db2.rb +2 -160
- data/lib/sequel/dbi.rb +2 -130
- data/lib/{sequel-core → sequel}/error.rb +0 -0
- data/lib/sequel/informix.rb +2 -78
- data/lib/{sequel-core → sequel}/migration.rb +0 -0
- data/lib/{sequel-core → sequel}/model.rb +0 -0
- data/lib/{sequel-core → sequel}/model/base.rb +0 -0
- data/lib/{sequel-core → sequel}/model/caching.rb +0 -0
- data/lib/{sequel-core → sequel}/model/hooks.rb +0 -0
- data/lib/{sequel-core → sequel}/model/record.rb +0 -0
- data/lib/{sequel-core → sequel}/model/relations.rb +0 -0
- data/lib/{sequel-core → sequel}/model/schema.rb +0 -0
- data/lib/sequel/mysql.rb +2 -256
- data/lib/sequel/odbc.rb +2 -144
- data/lib/sequel/oracle.rb +2 -109
- data/lib/sequel/postgres.rb +2 -507
- data/lib/{sequel-core → sequel}/pretty_table.rb +0 -0
- data/lib/{sequel-core → sequel}/schema.rb +0 -0
- data/lib/{sequel-core → sequel}/schema/schema_generator.rb +0 -0
- data/lib/{sequel-core → sequel}/schema/schema_sql.rb +0 -0
- data/lib/sequel/sqlite.rb +2 -186
- data/lib/{sequel-core → sequel}/worker.rb +0 -0
- data/spec/database_spec.rb +7 -9
- metadata +39 -29
@@ -0,0 +1,186 @@
|
|
1
|
+
if !Object.const_defined?('Sequel')
|
2
|
+
require File.join(File.dirname(__FILE__), '../../sequel')
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'sqlite3'
|
6
|
+
|
7
|
+
module Sequel
|
8
|
+
module SQLite
|
9
|
+
class Database < Sequel::Database
|
10
|
+
set_adapter_scheme :sqlite
|
11
|
+
|
12
|
+
def serial_primary_key_options
|
13
|
+
{:primary_key => true, :type => :integer, :auto_increment => true}
|
14
|
+
end
|
15
|
+
|
16
|
+
def connect
|
17
|
+
if @opts[:database].nil? || @opts[:database].empty?
|
18
|
+
@opts[:database] = ':memory:'
|
19
|
+
end
|
20
|
+
db = ::SQLite3::Database.new(@opts[:database])
|
21
|
+
db.type_translation = true
|
22
|
+
# fix for timestamp translation
|
23
|
+
db.translator.add_translator("timestamp") do |t, v|
|
24
|
+
v =~ /^\d+$/ ? Time.at(v.to_i) : Time.parse(v)
|
25
|
+
end
|
26
|
+
db
|
27
|
+
end
|
28
|
+
|
29
|
+
def disconnect
|
30
|
+
@pool.disconnect {|c| c.close}
|
31
|
+
end
|
32
|
+
|
33
|
+
def dataset(opts = nil)
|
34
|
+
SQLite::Dataset.new(self, opts)
|
35
|
+
end
|
36
|
+
|
37
|
+
TABLES_FILTER = "type = 'table' AND NOT name = 'sqlite_sequence'"
|
38
|
+
|
39
|
+
def tables
|
40
|
+
self[:sqlite_master].filter(TABLES_FILTER).map {|r| r[:name].to_sym}
|
41
|
+
end
|
42
|
+
|
43
|
+
def execute(sql)
|
44
|
+
@logger.info(sql) if @logger
|
45
|
+
@pool.hold {|conn| conn.execute_batch(sql); conn.changes}
|
46
|
+
end
|
47
|
+
|
48
|
+
def execute_insert(sql)
|
49
|
+
@logger.info(sql) if @logger
|
50
|
+
@pool.hold {|conn| conn.execute(sql); conn.last_insert_row_id}
|
51
|
+
end
|
52
|
+
|
53
|
+
def single_value(sql)
|
54
|
+
@logger.info(sql) if @logger
|
55
|
+
@pool.hold {|conn| conn.get_first_value(sql)}
|
56
|
+
end
|
57
|
+
|
58
|
+
def execute_select(sql, &block)
|
59
|
+
@logger.info(sql) if @logger
|
60
|
+
@pool.hold {|conn| conn.query(sql, &block)}
|
61
|
+
end
|
62
|
+
|
63
|
+
def pragma_get(name)
|
64
|
+
single_value("PRAGMA #{name}")
|
65
|
+
end
|
66
|
+
|
67
|
+
def pragma_set(name, value)
|
68
|
+
execute("PRAGMA #{name} = #{value}")
|
69
|
+
end
|
70
|
+
|
71
|
+
AUTO_VACUUM = {'0' => :none, '1' => :full, '2' => :incremental}.freeze
|
72
|
+
|
73
|
+
def auto_vacuum
|
74
|
+
AUTO_VACUUM[pragma_get(:auto_vacuum)]
|
75
|
+
end
|
76
|
+
|
77
|
+
def auto_vacuum=(value)
|
78
|
+
value = AUTO_VACUUM.index(value) || (raise SequelError, "Invalid value for auto_vacuum option. Please specify one of :none, :full, :incremental.")
|
79
|
+
pragma_set(:auto_vacuum, value)
|
80
|
+
end
|
81
|
+
|
82
|
+
SYNCHRONOUS = {'0' => :off, '1' => :normal, '2' => :full}.freeze
|
83
|
+
|
84
|
+
def synchronous
|
85
|
+
SYNCHRONOUS[pragma_get(:synchronous)]
|
86
|
+
end
|
87
|
+
|
88
|
+
def synchronous=(value)
|
89
|
+
value = SYNCHRONOUS.index(value) || (raise SequelError, "Invalid value for synchronous option. Please specify one of :off, :normal, :full.")
|
90
|
+
pragma_set(:synchronous, value)
|
91
|
+
end
|
92
|
+
|
93
|
+
TEMP_STORE = {'0' => :default, '1' => :file, '2' => :memory}.freeze
|
94
|
+
|
95
|
+
def temp_store
|
96
|
+
TEMP_STORE[pragma_get(:temp_store)]
|
97
|
+
end
|
98
|
+
|
99
|
+
def temp_store=(value)
|
100
|
+
value = TEMP_STORE.index(value) || (raise SequelError, "Invalid value for temp_store option. Please specify one of :default, :file, :memory.")
|
101
|
+
pragma_set(:temp_store, value)
|
102
|
+
end
|
103
|
+
|
104
|
+
def transaction(&block)
|
105
|
+
@pool.hold do |conn|
|
106
|
+
if conn.transaction_active?
|
107
|
+
return yield(conn)
|
108
|
+
end
|
109
|
+
begin
|
110
|
+
result = nil
|
111
|
+
conn.transaction {result = yield(conn)}
|
112
|
+
result
|
113
|
+
rescue => e
|
114
|
+
raise e unless SequelRollbackError === e
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Dataset < Sequel::Dataset
|
121
|
+
def literal(v)
|
122
|
+
case v
|
123
|
+
when Time: literal(v.iso8601)
|
124
|
+
else
|
125
|
+
super
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def insert_sql(*values)
|
130
|
+
if (values.size == 1) && values.first.is_a?(Sequel::Dataset)
|
131
|
+
"INSERT INTO #{@opts[:from]} #{values.first.sql};"
|
132
|
+
else
|
133
|
+
super(*values)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def fetch_rows(sql, &block)
|
138
|
+
@db.execute_select(sql) do |result|
|
139
|
+
@columns = result.columns.map {|c| c.to_sym}
|
140
|
+
column_count = @columns.size
|
141
|
+
result.each do |values|
|
142
|
+
row = {}
|
143
|
+
column_count.times {|i| row[@columns[i]] = values[i]}
|
144
|
+
block.call(row)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def array_tuples_fetch_rows(sql, &block)
|
150
|
+
@db.execute_select(sql) do |result|
|
151
|
+
@columns = result.columns.map {|c| c.to_sym}
|
152
|
+
result.each {|r| r.keys = @columns; block[r]}
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def insert(*values)
|
157
|
+
@db.execute_insert insert_sql(*values)
|
158
|
+
end
|
159
|
+
|
160
|
+
def update(values, opts = nil)
|
161
|
+
@db.execute update_sql(values, opts)
|
162
|
+
end
|
163
|
+
|
164
|
+
def delete(opts = nil)
|
165
|
+
# check if no filter is specified
|
166
|
+
unless (opts && opts[:where]) || @opts[:where]
|
167
|
+
@db.transaction do
|
168
|
+
unfiltered_count = count
|
169
|
+
@db.execute delete_sql(opts)
|
170
|
+
unfiltered_count
|
171
|
+
end
|
172
|
+
else
|
173
|
+
@db.execute delete_sql(opts)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
EXPLAIN = 'EXPLAIN %s'.freeze
|
178
|
+
|
179
|
+
def explain
|
180
|
+
res = []
|
181
|
+
@db.result_set(EXPLAIN % select_sql(opts), nil) {|r| res << r}
|
182
|
+
res
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
data/lib/sequel/ado.rb
CHANGED
@@ -1,104 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
end
|
4
|
-
|
5
|
-
require 'win32ole'
|
6
|
-
|
7
|
-
module Sequel
|
8
|
-
# The ADO adapter provides connectivity to ADO databases in Windows. ADO
|
9
|
-
# databases can be opened using a URL with the ado schema:
|
10
|
-
#
|
11
|
-
# DB = Sequel.open('ado://mydb')
|
12
|
-
#
|
13
|
-
# or using the Sequel.ado method:
|
14
|
-
#
|
15
|
-
# DB = Sequel.ado('mydb')
|
16
|
-
#
|
17
|
-
module ADO
|
18
|
-
class Database < Sequel::Database
|
19
|
-
set_adapter_scheme :ado
|
20
|
-
|
21
|
-
AUTO_INCREMENT = 'IDENTITY(1,1)'.freeze
|
22
|
-
|
23
|
-
def auto_increment_sql
|
24
|
-
AUTO_INCREMENT
|
25
|
-
end
|
26
|
-
|
27
|
-
def connect
|
28
|
-
dbname = @opts[:database]
|
29
|
-
handle = WIN32OLE.new('ADODB.Connection')
|
30
|
-
handle.Open(dbname)
|
31
|
-
handle
|
32
|
-
end
|
33
|
-
|
34
|
-
def disconnect
|
35
|
-
# how do we disconnect? couldn't find anything in the docs
|
36
|
-
end
|
37
|
-
|
38
|
-
def dataset(opts = nil)
|
39
|
-
ADO::Dataset.new(self, opts)
|
40
|
-
end
|
41
|
-
|
42
|
-
def execute(sql)
|
43
|
-
@logger.info(sql) if @logger
|
44
|
-
@pool.hold {|conn| conn.Execute(sql)}
|
45
|
-
end
|
46
|
-
|
47
|
-
alias_method :do, :execute
|
48
|
-
end
|
49
|
-
|
50
|
-
class Dataset < Sequel::Dataset
|
51
|
-
def literal(v)
|
52
|
-
case v
|
53
|
-
when Time: literal(v.iso8601)
|
54
|
-
else
|
55
|
-
super
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def fetch_rows(sql, &block)
|
60
|
-
@db.synchronize do
|
61
|
-
s = @db.execute sql
|
62
|
-
|
63
|
-
@columns = s.Fields.extend(Enumerable).map {|x| x.Name.to_sym}
|
64
|
-
|
65
|
-
s.moveFirst
|
66
|
-
s.getRows.transpose.each {|r| yield hash_row(r)}
|
67
|
-
end
|
68
|
-
self
|
69
|
-
end
|
70
|
-
|
71
|
-
def hash_row(row)
|
72
|
-
@columns.inject({}) do |m, c|
|
73
|
-
m[c] = row.shift
|
74
|
-
m
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def array_tuples_fetch_rows(sql, &block)
|
79
|
-
@db.synchronize do
|
80
|
-
s = @db.execute sql
|
81
|
-
|
82
|
-
@columns = s.Fields.extend(Enumerable).map {|x| x.Name.to_sym}
|
83
|
-
|
84
|
-
s.moveFirst
|
85
|
-
s.getRows.transpose.each {|r| r.keys = @columns; yield r}
|
86
|
-
end
|
87
|
-
self
|
88
|
-
end
|
89
|
-
|
90
|
-
def insert(*values)
|
91
|
-
@db.do insert_sql(*values)
|
92
|
-
end
|
93
|
-
|
94
|
-
def update(values, opts = nil)
|
95
|
-
@db.do update_sql(values, opts)
|
96
|
-
self
|
97
|
-
end
|
98
|
-
|
99
|
-
def delete(opts = nil)
|
100
|
-
@db.do delete_sql(opts)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
1
|
+
warn "Requiring 'sequel/ado' is deprecated. Please modify your code to only require 'sequel' instead."
|
2
|
+
require File.join(File.dirname(__FILE__), 'adapters/ado')
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -237,24 +237,6 @@ module Sequel
|
|
237
237
|
def self.set_adapter_scheme(scheme)
|
238
238
|
@scheme = scheme
|
239
239
|
@@adapters[scheme.to_sym] = self
|
240
|
-
|
241
|
-
# Define convenience method for this database class
|
242
|
-
db_class = self
|
243
|
-
Sequel.meta_def(scheme) do |*args|
|
244
|
-
begin
|
245
|
-
case args.size
|
246
|
-
when 1: # Sequel.dbi(db_name)
|
247
|
-
opts = {:database => args[0]}
|
248
|
-
when 0 # Sequel.dbi
|
249
|
-
opts = {}
|
250
|
-
else # Sequel.dbi(db_name, opts)
|
251
|
-
opts = args[1].merge(:database => args[0])
|
252
|
-
end
|
253
|
-
rescue
|
254
|
-
raise SequelError, "Invalid parameters specified"
|
255
|
-
end
|
256
|
-
db_class.new(opts)
|
257
|
-
end
|
258
240
|
end
|
259
241
|
|
260
242
|
# Returns the scheme for the Database class.
|
@@ -274,6 +256,15 @@ module Sequel
|
|
274
256
|
}
|
275
257
|
end
|
276
258
|
|
259
|
+
def self.adapter_class(scheme)
|
260
|
+
unless c = @@adapters[scheme.to_sym]
|
261
|
+
require File.join(File.dirname(__FILE__), "adapters/#{scheme}")
|
262
|
+
c = @@adapters[scheme.to_sym]
|
263
|
+
end
|
264
|
+
raise SequelError, "Invalid database scheme" unless c
|
265
|
+
c
|
266
|
+
end
|
267
|
+
|
277
268
|
# call-seq:
|
278
269
|
# Sequel::Database.connect(conn_string)
|
279
270
|
# Sequel.connect(conn_string)
|
@@ -287,8 +278,7 @@ module Sequel
|
|
287
278
|
uri = URI.parse(conn_string)
|
288
279
|
scheme = uri.scheme
|
289
280
|
scheme = :dbi if scheme =~ /^dbi-(.+)/
|
290
|
-
c =
|
291
|
-
raise SequelError, "Invalid database scheme" unless c
|
281
|
+
c = adapter_class(scheme)
|
292
282
|
c.new(c.uri_to_options(uri).merge(more_opts || {}))
|
293
283
|
end
|
294
284
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/sequel/db2.rb
CHANGED
@@ -1,160 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
end
|
4
|
-
|
5
|
-
require 'db2/db2cli'
|
6
|
-
|
7
|
-
module Sequel
|
8
|
-
module DB2
|
9
|
-
class Database < Sequel::Database
|
10
|
-
set_adapter_scheme :db2
|
11
|
-
include DB2CLI
|
12
|
-
|
13
|
-
# AUTO_INCREMENT = 'IDENTITY(1,1)'.freeze
|
14
|
-
#
|
15
|
-
# def auto_increment_sql
|
16
|
-
# AUTO_INCREMENT
|
17
|
-
# end
|
18
|
-
|
19
|
-
def check_error(rc, msg)
|
20
|
-
case rc
|
21
|
-
when SQL_SUCCESS, SQL_SUCCESS_WITH_INFO: nil
|
22
|
-
else
|
23
|
-
raise SequelError, msg
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
rc, @@env = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE)
|
28
|
-
check_error(rc, "Could not allocate DB2 environment")
|
29
|
-
|
30
|
-
def connect
|
31
|
-
rc, dbc = SQLAllocHandle(SQL_HANDLE_DBC, @@env)
|
32
|
-
check_error(rc, "Could not allocate database connection")
|
33
|
-
|
34
|
-
rc = SQLConnect(dbc, @opts[:database], @opts[:user], @opts[:password])
|
35
|
-
check_error(rc, "Could not connect to database")
|
36
|
-
|
37
|
-
dbc
|
38
|
-
end
|
39
|
-
|
40
|
-
def disconnect
|
41
|
-
@pool.disconnect do |conn|
|
42
|
-
rc = SQLDisconnect(conn)
|
43
|
-
check_error(rc, "Could not disconnect from database")
|
44
|
-
|
45
|
-
rc = SQLFreeHandle(SQL_HANDLE_DBC, conn)
|
46
|
-
check_error(rc, "Could not free Database handle")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_connection
|
51
|
-
@pool.hold {|conn|}
|
52
|
-
true
|
53
|
-
end
|
54
|
-
|
55
|
-
def dataset(opts = nil)
|
56
|
-
DB2::Dataset.new(self, opts)
|
57
|
-
end
|
58
|
-
|
59
|
-
def execute(sql, &block)
|
60
|
-
@logger.info(sql) if @logger
|
61
|
-
@pool.hold do |conn|
|
62
|
-
rc, sth = SQLAllocHandle(SQL_HANDLE_STMT, @handle)
|
63
|
-
check_error(rc, "Could not allocate statement")
|
64
|
-
|
65
|
-
begin
|
66
|
-
rc = SQLExecDirect(sth, sql)
|
67
|
-
check_error(rc, "Could not execute statement")
|
68
|
-
|
69
|
-
block[sth] if block
|
70
|
-
|
71
|
-
rc, rpc = SQLRowCount(sth)
|
72
|
-
check_error(rc, "Could not get RPC")
|
73
|
-
rpc
|
74
|
-
ensure
|
75
|
-
rc = SQLFreeHandle(SQL_HANDLE_STMT, sth)
|
76
|
-
check_error(rc, "Could not free statement")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
alias_method :do, :execute
|
81
|
-
end
|
82
|
-
|
83
|
-
class Dataset < Sequel::Dataset
|
84
|
-
def literal(v)
|
85
|
-
case v
|
86
|
-
when Time: literal(v.iso8601)
|
87
|
-
else
|
88
|
-
super
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def fetch_rows(sql, &block)
|
93
|
-
@db.synchronize do
|
94
|
-
@db.execute(sql) do |sth|
|
95
|
-
@column_info = get_column_info(sth)
|
96
|
-
@columns = @column_info.map {|c| c[:name]}
|
97
|
-
while (rc = SQLFetch(@handle)) != SQL_NO_DATA_FOUND
|
98
|
-
@db.check_error(rc, "Could not fetch row")
|
99
|
-
yield hash_row(sth)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
self
|
104
|
-
end
|
105
|
-
|
106
|
-
MAX_COL_SIZE = 256
|
107
|
-
|
108
|
-
def get_column_info(sth)
|
109
|
-
rc, column_count = SQLNumResultCols(sth)
|
110
|
-
@db.check_error(rc, "Could not get number of result columns")
|
111
|
-
|
112
|
-
(1..column_count).map do |i|
|
113
|
-
rc, name, buflen, datatype, size, digits, nullable = SQLDescribeCol(sth, i, MAX_COL_SIZE)
|
114
|
-
@b.check_error(rc, "Could not describe column")
|
115
|
-
|
116
|
-
{:name => name, :db2_type => datatype, :precision => size}
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def hash_row(sth)
|
121
|
-
row = {}
|
122
|
-
@column_info.each_with_index do |c, i|
|
123
|
-
rc, v = SQLGetData(sth, i+1, c[:db2_type], c[:precision])
|
124
|
-
@db.check_error(rc, "Could not get data")
|
125
|
-
|
126
|
-
@row[c[:name]] = convert_type(v)
|
127
|
-
end
|
128
|
-
row
|
129
|
-
end
|
130
|
-
|
131
|
-
def convert_type(v)
|
132
|
-
case v
|
133
|
-
when DB2CLI::Date
|
134
|
-
DBI::Date.new(v.year, v.month, v.day)
|
135
|
-
when DB2CLI::Time
|
136
|
-
DBI::Time.new(v.hour, v.minute, v.second)
|
137
|
-
when DB2CLI::Timestamp
|
138
|
-
DBI::Timestamp.new(v.year, v.month, v.day,
|
139
|
-
v.hour, v.minute, v.second, v.fraction)
|
140
|
-
when DB2CLI::Null
|
141
|
-
nil
|
142
|
-
else
|
143
|
-
v
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def insert(*values)
|
148
|
-
@db.do insert_sql(*values)
|
149
|
-
end
|
150
|
-
|
151
|
-
def update(values, opts = nil)
|
152
|
-
@db.do update_sql(values, opts)
|
153
|
-
end
|
154
|
-
|
155
|
-
def delete(opts = nil)
|
156
|
-
@db.do delete_sql(opts)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
1
|
+
warn "Requiring 'sequel/db2' is deprecated. Please modify your code to require 'sequel' instead."
|
2
|
+
require File.join(File.dirname(__FILE__), 'adapters/db2')
|