ydbi 0.5.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/ChangeLog +4 -0
- data/build/Rakefile.dbi.rb +4 -4
- data/lib/dbi/version.rb +1 -1
- data/test/dbi/tc_dbi.rb +1 -1
- metadata +9 -124
- data/.gitignore +0 -6
- data/Gemfile +0 -4
- data/Rakefile +0 -8
- data/TODO +0 -44
- data/bench/bench.rb +0 -79
- data/build/rake_task_lib.rb +0 -187
- data/doc/DBD_SPEC.rdoc +0 -88
- data/doc/DBI_SPEC.rdoc +0 -157
- data/doc/homepage/contact.html +0 -62
- data/doc/homepage/development.html +0 -124
- data/doc/homepage/index.html +0 -83
- data/doc/homepage/ruby-dbi.css +0 -91
- data/lib/dbd/Mysql.rb +0 -137
- data/lib/dbd/ODBC.rb +0 -89
- data/lib/dbd/Pg.rb +0 -188
- data/lib/dbd/SQLite.rb +0 -97
- data/lib/dbd/SQLite3.rb +0 -124
- data/lib/dbd/mysql/database.rb +0 -405
- data/lib/dbd/mysql/driver.rb +0 -125
- data/lib/dbd/mysql/statement.rb +0 -188
- data/lib/dbd/odbc/database.rb +0 -128
- data/lib/dbd/odbc/driver.rb +0 -38
- data/lib/dbd/odbc/statement.rb +0 -137
- data/lib/dbd/pg/database.rb +0 -516
- data/lib/dbd/pg/exec.rb +0 -47
- data/lib/dbd/pg/statement.rb +0 -160
- data/lib/dbd/pg/tuples.rb +0 -121
- data/lib/dbd/pg/type.rb +0 -209
- data/lib/dbd/sqlite/database.rb +0 -151
- data/lib/dbd/sqlite/statement.rb +0 -125
- data/lib/dbd/sqlite3/database.rb +0 -201
- data/lib/dbd/sqlite3/statement.rb +0 -78
- data/prototypes/types2.rb +0 -237
- data/setup.rb +0 -1585
- data/test/DBD_TESTS +0 -50
- data/test/TESTING +0 -16
- data/test/dbd/general/test_database.rb +0 -206
- data/test/dbd/general/test_statement.rb +0 -326
- data/test/dbd/general/test_types.rb +0 -296
- data/test/dbd/mysql/base.rb +0 -26
- data/test/dbd/mysql/down.sql +0 -19
- data/test/dbd/mysql/test_blob.rb +0 -18
- data/test/dbd/mysql/test_new_methods.rb +0 -7
- data/test/dbd/mysql/test_patches.rb +0 -111
- data/test/dbd/mysql/up.sql +0 -28
- data/test/dbd/odbc/base.rb +0 -30
- data/test/dbd/odbc/down.sql +0 -19
- data/test/dbd/odbc/test_new_methods.rb +0 -12
- data/test/dbd/odbc/test_ping.rb +0 -10
- data/test/dbd/odbc/test_statement.rb +0 -44
- data/test/dbd/odbc/test_transactions.rb +0 -58
- data/test/dbd/odbc/up.sql +0 -33
- data/test/dbd/postgresql/base.rb +0 -31
- data/test/dbd/postgresql/down.sql +0 -31
- data/test/dbd/postgresql/test_arrays.rb +0 -179
- data/test/dbd/postgresql/test_async.rb +0 -121
- data/test/dbd/postgresql/test_blob.rb +0 -36
- data/test/dbd/postgresql/test_bytea.rb +0 -87
- data/test/dbd/postgresql/test_ping.rb +0 -10
- data/test/dbd/postgresql/test_timestamp.rb +0 -77
- data/test/dbd/postgresql/test_transactions.rb +0 -58
- data/test/dbd/postgresql/testdbipg.rb +0 -307
- data/test/dbd/postgresql/up.sql +0 -60
- data/test/dbd/sqlite/base.rb +0 -32
- data/test/dbd/sqlite/test_database.rb +0 -30
- data/test/dbd/sqlite/test_driver.rb +0 -68
- data/test/dbd/sqlite/test_statement.rb +0 -112
- data/test/dbd/sqlite/up.sql +0 -25
- data/test/dbd/sqlite3/base.rb +0 -32
- data/test/dbd/sqlite3/test_database.rb +0 -77
- data/test/dbd/sqlite3/test_driver.rb +0 -67
- data/test/dbd/sqlite3/test_statement.rb +0 -88
- data/test/dbd/sqlite3/up.sql +0 -33
- data/test/ts_dbd.rb +0 -131
- data/ydbi.gemspec +0 -24
data/lib/dbd/mysql/database.rb
DELETED
@@ -1,405 +0,0 @@
|
|
1
|
-
module DBI::DBD::Mysql
|
2
|
-
#
|
3
|
-
# Models the DBI::BaseDatabase API to create DBI::DatabaseHandle objects.
|
4
|
-
#
|
5
|
-
class Database < DBI::BaseDatabase
|
6
|
-
include Util
|
7
|
-
|
8
|
-
#
|
9
|
-
# Hash to translate MySQL type names to DBI SQL type constants
|
10
|
-
#
|
11
|
-
# Only used in #mysql_type_info.
|
12
|
-
#
|
13
|
-
#--
|
14
|
-
# Eli Green:
|
15
|
-
# The hope is that we don't ever need to just assume the default values.
|
16
|
-
# However, in some cases (notably floats and doubles), I have seen
|
17
|
-
# "show fields from table" return absolutely zero information about size
|
18
|
-
# and precision. Sigh. I probably should have made a struct to store
|
19
|
-
# this info in ... but I didn't.
|
20
|
-
#++
|
21
|
-
MYSQL_to_XOPEN = {
|
22
|
-
"TINYINT" => [DBI::SQL_TINYINT, 1, nil],
|
23
|
-
"SMALLINT" => [DBI::SQL_SMALLINT, 6, nil],
|
24
|
-
"MEDIUMINT" => [DBI::SQL_SMALLINT, 6, nil],
|
25
|
-
"INT" => [DBI::SQL_INTEGER, 11, nil],
|
26
|
-
"INTEGER" => [DBI::SQL_INTEGER, 11, nil],
|
27
|
-
"BIGINT" => [DBI::SQL_BIGINT, 25, nil],
|
28
|
-
"INT24" => [DBI::SQL_BIGINT, 25, nil],
|
29
|
-
"REAL" => [DBI::SQL_REAL, 12, nil],
|
30
|
-
"FLOAT" => [DBI::SQL_FLOAT, 12, nil],
|
31
|
-
"DECIMAL" => [DBI::SQL_DECIMAL, 12, nil],
|
32
|
-
"NUMERIC" => [DBI::SQL_NUMERIC, 12, nil],
|
33
|
-
"DOUBLE" => [DBI::SQL_DOUBLE, 22, nil],
|
34
|
-
"CHAR" => [DBI::SQL_CHAR, 1, nil],
|
35
|
-
"VARCHAR" => [DBI::SQL_VARCHAR, 255, nil],
|
36
|
-
"DATE" => [DBI::SQL_DATE, 10, nil],
|
37
|
-
"TIME" => [DBI::SQL_TIME, 8, nil],
|
38
|
-
"TIMESTAMP" => [DBI::SQL_TIMESTAMP, 19, nil],
|
39
|
-
"DATETIME" => [DBI::SQL_TIMESTAMP, 19, nil],
|
40
|
-
"TINYBLOB" => [DBI::SQL_BINARY, 255, nil],
|
41
|
-
"BLOB" => [DBI::SQL_VARBINARY, 65535, nil],
|
42
|
-
"MEDIUMBLOB" => [DBI::SQL_VARBINARY, 16277215, nil],
|
43
|
-
"LONGBLOB" => [DBI::SQL_LONGVARBINARY, 2147483657, nil],
|
44
|
-
"TINYTEXT" => [DBI::SQL_VARCHAR, 255, nil],
|
45
|
-
"TEXT" => [DBI::SQL_LONGVARCHAR, 65535, nil],
|
46
|
-
"MEDIUMTEXT" => [DBI::SQL_LONGVARCHAR, 16277215, nil],
|
47
|
-
"LONGTEXT" => [DBI::SQL_LONGVARCHAR, 2147483657, nil],
|
48
|
-
"ENUM" => [DBI::SQL_CHAR, 255, nil],
|
49
|
-
"SET" => [DBI::SQL_CHAR, 255, nil],
|
50
|
-
"BIT" => [DBI::SQL_BIT, 8, nil],
|
51
|
-
nil => [DBI::SQL_OTHER, nil, nil]
|
52
|
-
}
|
53
|
-
|
54
|
-
|
55
|
-
#
|
56
|
-
# This maps type names to DBI Types.
|
57
|
-
#
|
58
|
-
TYPE_MAP = {}
|
59
|
-
|
60
|
-
::Mysql::Field.constants.grep(/^TYPE_/).each do |const|
|
61
|
-
mysql_type = MysqlField.const_get(const) # numeric type code
|
62
|
-
coercion_method = DBI::Type::Varchar # default coercion method
|
63
|
-
case const.to_s
|
64
|
-
when 'TYPE_TINY'
|
65
|
-
mysql_type_name = 'TINYINT'
|
66
|
-
coercion_method = DBI::Type::Integer
|
67
|
-
when 'TYPE_SHORT'
|
68
|
-
mysql_type_name = 'SMALLINT'
|
69
|
-
coercion_method = DBI::Type::Integer
|
70
|
-
when 'TYPE_INT24'
|
71
|
-
mysql_type_name = 'MEDIUMINT'
|
72
|
-
coercion_method = DBI::Type::Integer
|
73
|
-
when 'TYPE_LONG'
|
74
|
-
mysql_type_name = 'INT'
|
75
|
-
coercion_method = DBI::Type::Integer
|
76
|
-
when 'TYPE_LONGLONG'
|
77
|
-
mysql_type_name = 'BIGINT'
|
78
|
-
coercion_method = DBI::Type::Integer
|
79
|
-
when 'TYPE_FLOAT'
|
80
|
-
mysql_type_name = 'FLOAT'
|
81
|
-
coercion_method = DBI::Type::Float
|
82
|
-
when 'TYPE_DOUBLE'
|
83
|
-
mysql_type_name = 'DOUBLE'
|
84
|
-
coercion_method = DBI::Type::Float
|
85
|
-
when 'TYPE_VAR_STRING', 'TYPE_STRING'
|
86
|
-
mysql_type_name = 'VARCHAR' # questionable?
|
87
|
-
coercion_method = DBI::Type::Varchar
|
88
|
-
when 'TYPE_DATE'
|
89
|
-
mysql_type_name = 'DATE'
|
90
|
-
coercion_method = DBI::DBD::Mysql::Type::Date
|
91
|
-
when 'TYPE_TIME'
|
92
|
-
mysql_type_name = 'TIME'
|
93
|
-
coercion_method = DBI::Type::Timestamp
|
94
|
-
when 'TYPE_DATETIME', 'TYPE_TIMESTAMP'
|
95
|
-
mysql_type_name = 'DATETIME'
|
96
|
-
coercion_method = DBI::Type::Timestamp
|
97
|
-
when 'TYPE_CHAR'
|
98
|
-
mysql_type_name = 'TINYINT' # questionable?
|
99
|
-
when 'TYPE_TINY_BLOB'
|
100
|
-
mysql_type_name = 'TINYBLOB' # questionable?
|
101
|
-
when 'TYPE_MEDIUM_BLOB'
|
102
|
-
mysql_type_name = 'MEDIUMBLOB' # questionable?
|
103
|
-
when 'TYPE_LONG_BLOB'
|
104
|
-
mysql_type_name = 'LONGBLOB' # questionable?
|
105
|
-
when 'TYPE_GEOMETRY'
|
106
|
-
mysql_type_name = 'BLOB' # questionable?
|
107
|
-
when 'TYPE_YEAR',
|
108
|
-
'TYPE_DECIMAL', # questionable?
|
109
|
-
'TYPE_BLOB', # questionable?
|
110
|
-
'TYPE_ENUM',
|
111
|
-
'TYPE_SET',
|
112
|
-
'TYPE_BIT',
|
113
|
-
'TYPE_NULL'
|
114
|
-
mysql_type_name = const.to_s.sub(/^TYPE_/, '')
|
115
|
-
else
|
116
|
-
mysql_type_name = 'UNKNOWN'
|
117
|
-
end
|
118
|
-
TYPE_MAP[mysql_type] = [mysql_type_name, coercion_method]
|
119
|
-
end
|
120
|
-
TYPE_MAP[nil] = ['UNKNOWN', DBI::Type::Varchar]
|
121
|
-
TYPE_MAP[246] = ['NUMERIC', DBI::Type::Decimal]
|
122
|
-
|
123
|
-
#
|
124
|
-
# Constructor. Attributes supported:
|
125
|
-
#
|
126
|
-
# * AutoCommit: Commit after each executed statement. This will raise
|
127
|
-
# a DBI::NotSupportedError if the backend does not support
|
128
|
-
# transactions.
|
129
|
-
#
|
130
|
-
def initialize(handle, attr)
|
131
|
-
super
|
132
|
-
# check server version to determine transaction capability
|
133
|
-
ver_str = @handle.get_server_info
|
134
|
-
major, minor, teeny = ver_str.split(".")
|
135
|
-
teeny.sub!(/\D*$/, "") # strip any non-numeric suffix if present
|
136
|
-
server_version = major.to_i*10000 + minor.to_i*100 + teeny.to_i
|
137
|
-
# It's not until 3.23.17 that SET AUTOCOMMIT,
|
138
|
-
# BEGIN, COMMIT, and ROLLBACK all are available
|
139
|
-
@have_transactions = (server_version >= 32317)
|
140
|
-
# assume that the connection begins in AutoCommit mode
|
141
|
-
@attr['AutoCommit'] = true
|
142
|
-
@mutex = Mutex.new
|
143
|
-
end
|
144
|
-
|
145
|
-
def disconnect
|
146
|
-
self.rollback unless @attr['AutoCommit']
|
147
|
-
@handle.close
|
148
|
-
rescue MyError => err
|
149
|
-
error(err)
|
150
|
-
end
|
151
|
-
|
152
|
-
def database_name
|
153
|
-
sth = Statement.new(self, @handle, "select DATABASE()", @mutex)
|
154
|
-
sth.execute
|
155
|
-
res = sth.fetch
|
156
|
-
sth.finish
|
157
|
-
return res[0]
|
158
|
-
end
|
159
|
-
|
160
|
-
def ping
|
161
|
-
begin
|
162
|
-
@handle.ping
|
163
|
-
return true
|
164
|
-
rescue MyError
|
165
|
-
return false
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def tables
|
170
|
-
@handle.list_tables
|
171
|
-
rescue MyError => err
|
172
|
-
error(err)
|
173
|
-
end
|
174
|
-
|
175
|
-
#
|
176
|
-
# See DBI::BaseDatabase#columns.
|
177
|
-
#
|
178
|
-
# Extra attributes:
|
179
|
-
#
|
180
|
-
# * sql_type: XOPEN integer constant relating to type.
|
181
|
-
# * nullable: true if the column allows NULL as a value.
|
182
|
-
# * indexed: true if the column belongs to an index.
|
183
|
-
# * primary: true if the column is a part of a primary key.
|
184
|
-
# * unique: true if the values in this column are unique.
|
185
|
-
# * default: the default value if this column is not explicitly set.
|
186
|
-
#
|
187
|
-
def columns(table)
|
188
|
-
dbh = DBI::DatabaseHandle.new(self)
|
189
|
-
uniques = []
|
190
|
-
dbh.execute("SHOW INDEX FROM #{table}") do |sth|
|
191
|
-
sth.each do |row|
|
192
|
-
uniques << row[4] if row[1] == 0
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
ret = nil
|
197
|
-
dbh.execute("SHOW FIELDS FROM #{table}") do |sth|
|
198
|
-
ret = sth.collect do |row|
|
199
|
-
name, type, nullable, key, default, extra = row
|
200
|
-
#type = row[1]
|
201
|
-
#size = type[type.index('(')+1..type.index(')')-1]
|
202
|
-
#size = 0
|
203
|
-
#type = type[0..type.index('(')-1]
|
204
|
-
|
205
|
-
sqltype, type, size, decimal = mysql_type_info(row[1])
|
206
|
-
col = Hash.new
|
207
|
-
col['name'] = name
|
208
|
-
col['sql_type'] = sqltype
|
209
|
-
col['type_name'] = type
|
210
|
-
col['nullable'] = nullable == "YES"
|
211
|
-
col['indexed'] = key != ""
|
212
|
-
col['primary'] = key == "PRI"
|
213
|
-
col['unique'] = uniques.index(name) != nil
|
214
|
-
col['precision'] = size
|
215
|
-
col['scale'] = decimal
|
216
|
-
col['default'] = row[4]
|
217
|
-
|
218
|
-
case col['type_name']
|
219
|
-
when 'timestamp'
|
220
|
-
col['dbi_type'] = DBI::Type::Timestamp
|
221
|
-
end
|
222
|
-
|
223
|
-
col
|
224
|
-
end # collect
|
225
|
-
end # execute
|
226
|
-
|
227
|
-
ret
|
228
|
-
end
|
229
|
-
|
230
|
-
def do(stmt, *bindvars)
|
231
|
-
st = Statement.new(self, @handle, stmt, @mutex)
|
232
|
-
st.bind_params(*bindvars)
|
233
|
-
res = st.execute
|
234
|
-
st.finish
|
235
|
-
return res
|
236
|
-
rescue MyError => err
|
237
|
-
error(err)
|
238
|
-
end
|
239
|
-
|
240
|
-
|
241
|
-
def prepare(statement)
|
242
|
-
Statement.new(self, @handle, statement, @mutex)
|
243
|
-
end
|
244
|
-
|
245
|
-
#
|
246
|
-
# MySQL has several backends, some of which may not support commits.
|
247
|
-
# If the backend this database uses doesn't, calling this method will
|
248
|
-
# raise a DBI::NotSupportedError.
|
249
|
-
#
|
250
|
-
def commit
|
251
|
-
if @have_transactions
|
252
|
-
self.do("COMMIT")
|
253
|
-
else
|
254
|
-
raise NotSupportedError
|
255
|
-
end
|
256
|
-
rescue MyError => err
|
257
|
-
error(err)
|
258
|
-
end
|
259
|
-
|
260
|
-
#
|
261
|
-
# See #commit for information regarding transactionless database
|
262
|
-
# backends.
|
263
|
-
#
|
264
|
-
def rollback
|
265
|
-
if @have_transactions
|
266
|
-
self.do("ROLLBACK")
|
267
|
-
else
|
268
|
-
raise NotSupportedError
|
269
|
-
end
|
270
|
-
rescue MyError => err
|
271
|
-
error(err)
|
272
|
-
end
|
273
|
-
|
274
|
-
|
275
|
-
# def quote(value)
|
276
|
-
# case value
|
277
|
-
# when String
|
278
|
-
# "'#{@handle.quote(value)}'"
|
279
|
-
# when DBI::Binary
|
280
|
-
# "'#{@handle.quote(value.to_s)}'"
|
281
|
-
# when TrueClass
|
282
|
-
# "'1'"
|
283
|
-
# when FalseClass
|
284
|
-
# "'0'"
|
285
|
-
# else
|
286
|
-
# super
|
287
|
-
# end
|
288
|
-
# end
|
289
|
-
|
290
|
-
#
|
291
|
-
# See DBI::DBD::MySQL::Database.new for supported attributes and usage.
|
292
|
-
#
|
293
|
-
def []=(attr, value)
|
294
|
-
case attr
|
295
|
-
when 'AutoCommit'
|
296
|
-
if @have_transactions
|
297
|
-
self.do("SET AUTOCOMMIT=" + (value ? "1" : "0"))
|
298
|
-
else
|
299
|
-
raise NotSupportedError
|
300
|
-
end
|
301
|
-
else
|
302
|
-
raise NotSupportedError
|
303
|
-
end
|
304
|
-
|
305
|
-
@attr[attr] = value
|
306
|
-
end
|
307
|
-
|
308
|
-
private # -------------------------------------------------
|
309
|
-
|
310
|
-
#
|
311
|
-
# Given a type name, weans some basic information from that and returns
|
312
|
-
# it in a format similar to columns.
|
313
|
-
#
|
314
|
-
# Return is an array of +sqltype+, +type+, +size+, and +decimal+.
|
315
|
-
# +sqltype+ is the XOPEN type, and +type+ is the string with the
|
316
|
-
# parameters removed.
|
317
|
-
#
|
318
|
-
# +size+ and +decimal+ refer to +precision+ and +scale+ in most cases,
|
319
|
-
# but not always for all types. Please consult the documentation for
|
320
|
-
# your MySQL version.
|
321
|
-
#
|
322
|
-
#
|
323
|
-
def mysql_type_info(typedef)
|
324
|
-
sqltype, type, size, decimal = nil, nil, nil, nil
|
325
|
-
|
326
|
-
pos = typedef.index('(')
|
327
|
-
if not pos.nil?
|
328
|
-
type = typedef[0..pos-1]
|
329
|
-
size = typedef[pos+1..-2]
|
330
|
-
pos = size.index(',')
|
331
|
-
if not pos.nil?
|
332
|
-
size, decimal = size.split(',', 2)
|
333
|
-
decimal = decimal.to_i
|
334
|
-
end
|
335
|
-
size = size.to_i
|
336
|
-
else
|
337
|
-
type = typedef
|
338
|
-
end
|
339
|
-
|
340
|
-
type_info = MYSQL_to_XOPEN[type.upcase] || MYSQL_to_XOPEN[nil]
|
341
|
-
sqltype = type_info[0]
|
342
|
-
if size.nil? then size = type_info[1] end
|
343
|
-
if decimal.nil? then decimal = type_info[2] end
|
344
|
-
return sqltype, type, size, decimal
|
345
|
-
end
|
346
|
-
|
347
|
-
#--
|
348
|
-
# Driver-specific functions ------------------------------------------------
|
349
|
-
#++
|
350
|
-
|
351
|
-
public
|
352
|
-
|
353
|
-
def __createdb(db)
|
354
|
-
@handle.create_db(db)
|
355
|
-
end
|
356
|
-
|
357
|
-
def __dropdb(db)
|
358
|
-
@handle.drop_db(db)
|
359
|
-
end
|
360
|
-
|
361
|
-
def __shutdown
|
362
|
-
@handle.shutdown
|
363
|
-
end
|
364
|
-
|
365
|
-
def __reload
|
366
|
-
@handle.reload
|
367
|
-
end
|
368
|
-
|
369
|
-
def __insert_id
|
370
|
-
@handle.insert_id
|
371
|
-
end
|
372
|
-
|
373
|
-
def __thread_id
|
374
|
-
@handle.thread_id
|
375
|
-
end
|
376
|
-
|
377
|
-
def __info
|
378
|
-
@handle.info
|
379
|
-
end
|
380
|
-
|
381
|
-
def __host_info
|
382
|
-
@handle.host_info
|
383
|
-
end
|
384
|
-
|
385
|
-
def __proto_info
|
386
|
-
@handle.proto_info
|
387
|
-
end
|
388
|
-
|
389
|
-
def __server_info
|
390
|
-
@handle.server_info
|
391
|
-
end
|
392
|
-
|
393
|
-
def __client_info
|
394
|
-
@handle.client_info
|
395
|
-
end
|
396
|
-
|
397
|
-
def __client_version
|
398
|
-
@handle.client_version
|
399
|
-
end
|
400
|
-
|
401
|
-
def __stat
|
402
|
-
@handle.stat
|
403
|
-
end
|
404
|
-
end # class Database
|
405
|
-
end
|
data/lib/dbd/mysql/driver.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
module DBI::DBD::Mysql
|
2
|
-
#
|
3
|
-
# Models the DBI::BaseDriver API to create DBI::DriverHandle objects.
|
4
|
-
#
|
5
|
-
class Driver < DBI::BaseDriver
|
6
|
-
include Util
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
super("0.4.0")
|
10
|
-
end
|
11
|
-
|
12
|
-
def default_user
|
13
|
-
['', nil]
|
14
|
-
end
|
15
|
-
|
16
|
-
#
|
17
|
-
# Parameters in the dbname as follows:
|
18
|
-
#
|
19
|
-
# * host: host to connect to
|
20
|
-
# * port: port to connect to
|
21
|
-
# * socket: connect to a specific unix socket instead of a TCP socket.
|
22
|
-
# * flag: an OR'd collection of flags to pass to the lower-level
|
23
|
-
# connection attempt.
|
24
|
-
# * mysql_read_default_file: FIXME
|
25
|
-
# * mysql_read_default_group: FIXME
|
26
|
-
# * mysql_compression: FIXME
|
27
|
-
# * mysql_local_infile: FIXME
|
28
|
-
# * mysql_client_found_rows: FIXME boolean, modifies the 'flag'
|
29
|
-
# setting above.
|
30
|
-
def connect(dbname, user, auth, attr)
|
31
|
-
# connect to database server
|
32
|
-
hash = DBI::Utils.parse_params(dbname)
|
33
|
-
|
34
|
-
hash['host'] ||= 'localhost'
|
35
|
-
|
36
|
-
# these two connection parameters should be passed as numbers
|
37
|
-
hash['port'] = hash['port'].to_i unless hash['port'].nil?
|
38
|
-
hash['flag'] = hash['flag'].nil? ? 0 : hash['flag'] = hash['flag'].to_i
|
39
|
-
|
40
|
-
handle = ::Mysql.init
|
41
|
-
|
42
|
-
# Look for options in connect string to be handled
|
43
|
-
# through mysql_options() before connecting
|
44
|
-
!hash['mysql_read_default_file'].nil? and
|
45
|
-
handle.options(::Mysql::READ_DEFAULT_FILE,
|
46
|
-
hash['mysql_read_default_file'])
|
47
|
-
!hash['mysql_read_default_group'].nil? and
|
48
|
-
handle.options(::Mysql::READ_DEFAULT_GROUP,
|
49
|
-
hash['mysql_read_default_group'])
|
50
|
-
# The following options can be handled either using mysql_options()
|
51
|
-
# or in the flag argument to connect().
|
52
|
-
hash['mysql_compression'].to_i != 0 and
|
53
|
-
handle.options(::Mysql::OPT_COMPRESS, nil)
|
54
|
-
hash['mysql_local_infile'].to_i != 0 and
|
55
|
-
handle.options(::Mysql::OPT_LOCAL_INFILE, true)
|
56
|
-
|
57
|
-
# Look for options to be handled in the flags argument to connect()
|
58
|
-
if !hash['mysql_client_found_rows'].nil?
|
59
|
-
if hash['mysql_client_found_rows'].to_i != 0
|
60
|
-
hash['flag'] |= ::Mysql::CLIENT_FOUND_ROWS
|
61
|
-
else
|
62
|
-
hash['flag'] &= ~::Mysql::CLIENT_FOUND_ROWS
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
handle.connect(hash['host'], user, auth, hash['database'], hash['port'], hash['socket'], hash['flag'])
|
67
|
-
|
68
|
-
return Database.new(handle, attr)
|
69
|
-
rescue MyError => err
|
70
|
-
error(err)
|
71
|
-
end
|
72
|
-
|
73
|
-
def data_sources
|
74
|
-
handle = ::Mysql.new
|
75
|
-
res = handle.list_dbs.collect {|db| "dbi:Mysql:database=#{db}" }
|
76
|
-
handle.close
|
77
|
-
return res
|
78
|
-
rescue MyError => err
|
79
|
-
error(err)
|
80
|
-
end
|
81
|
-
|
82
|
-
#--
|
83
|
-
# Driver-specific functions ------------------------------------------------
|
84
|
-
#++
|
85
|
-
|
86
|
-
public
|
87
|
-
|
88
|
-
def __createdb(db, host, user, password, port=nil, sock=nil, flag=nil)
|
89
|
-
handle = ::Mysql.connect(host, user, password, nil, port, sock, flag)
|
90
|
-
begin
|
91
|
-
handle.create_db(db)
|
92
|
-
ensure
|
93
|
-
handle.close if handle
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def __dropdb(db, host, user, password, port=nil, sock=nil, flag=nil)
|
98
|
-
handle = ::Mysql.connect(host, user, password, nil, port, sock, flag)
|
99
|
-
begin
|
100
|
-
handle.drop_db(db)
|
101
|
-
ensure
|
102
|
-
handle.close if handle
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def __shutdown(host, user, password, port=nil, sock=nil, flag=nil)
|
107
|
-
handle = ::Mysql.connect(host, user, password, nil, port, sock, flag)
|
108
|
-
begin
|
109
|
-
handle.shutdown
|
110
|
-
ensure
|
111
|
-
handle.close if handle
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def __reload(host, user, password, port=nil, sock=nil, flag=nil)
|
116
|
-
handle = ::Mysql.connect(host, user, password, nil, port, sock, flag)
|
117
|
-
begin
|
118
|
-
handle.reload
|
119
|
-
ensure
|
120
|
-
handle.close if handle
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
end # class Driver
|
125
|
-
end
|