dbd-mysql 0.4.2 → 0.4.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/lib/dbd/Mysql.rb +1 -23
- data/lib/dbd/mysql/database.rb +10 -2
- data/test/DBD_TESTS +2 -0
- data/test/dbd/general/test_database.rb +36 -9
- data/test/dbd/general/test_statement.rb +46 -0
- data/test/dbd/general/test_types.rb +2 -2
- data/test/dbd/mysql/test_new_methods.rb +7 -0
- data/test/ts_dbd.rb +14 -1
- metadata +66 -56
data/lib/dbd/Mysql.rb
CHANGED
@@ -49,7 +49,7 @@ module DBI
|
|
49
49
|
# Only things that extend DBI's results are documented.
|
50
50
|
#
|
51
51
|
module Mysql
|
52
|
-
VERSION = "0.4.
|
52
|
+
VERSION = "0.4.3"
|
53
53
|
DESCRIPTION = "MySQL DBI DBD, Leverages 'mysql' low-level driver"
|
54
54
|
|
55
55
|
MyError = ::MysqlError
|
@@ -109,28 +109,6 @@ module DBI::DBD::Mysql::Util
|
|
109
109
|
end # module Util
|
110
110
|
|
111
111
|
module DBI::DBD::Mysql::Type
|
112
|
-
#
|
113
|
-
# Custom handling for TIMESTAMP and DATETIME types in MySQL. See DBI::Type
|
114
|
-
# for more information.
|
115
|
-
#
|
116
|
-
class Timestamp < DBI::Type::Null
|
117
|
-
def self.parse(obj)
|
118
|
-
obj = super
|
119
|
-
return obj unless obj
|
120
|
-
|
121
|
-
case obj.class
|
122
|
-
when ::DateTime
|
123
|
-
return obj
|
124
|
-
when ::String
|
125
|
-
return ::DateTime.strptime(obj, "%Y-%m-%d %H:%M:%S")
|
126
|
-
else
|
127
|
-
return ::DateTime.parse(obj.to_s) if obj.respond_to? :to_s
|
128
|
-
return ::DateTime.parse(obj.to_str) if obj.respond_to? :to_str
|
129
|
-
return obj
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
112
|
#
|
135
113
|
# Custom handling for DATE types in MySQL. See DBI::Type for more
|
136
114
|
# information.
|
data/lib/dbd/mysql/database.rb
CHANGED
@@ -93,7 +93,7 @@ module DBI::DBD::Mysql
|
|
93
93
|
coercion_method = DBI::Type::Timestamp
|
94
94
|
when 'TYPE_DATETIME', 'TYPE_TIMESTAMP'
|
95
95
|
mysql_type_name = 'DATETIME'
|
96
|
-
coercion_method = DBI::
|
96
|
+
coercion_method = DBI::Type::Timestamp
|
97
97
|
when 'TYPE_CHAR'
|
98
98
|
mysql_type_name = 'TINYINT' # questionable?
|
99
99
|
when 'TYPE_TINY_BLOB'
|
@@ -149,6 +149,14 @@ module DBI::DBD::Mysql
|
|
149
149
|
error(err)
|
150
150
|
end
|
151
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
|
+
|
152
160
|
def ping
|
153
161
|
begin
|
154
162
|
@handle.ping
|
@@ -209,7 +217,7 @@ module DBI::DBD::Mysql
|
|
209
217
|
|
210
218
|
case col['type_name']
|
211
219
|
when 'timestamp'
|
212
|
-
col['dbi_type'] = DBI::
|
220
|
+
col['dbi_type'] = DBI::Type::Timestamp
|
213
221
|
end
|
214
222
|
|
215
223
|
col
|
data/test/DBD_TESTS
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
Using DBD tests
|
3
3
|
================================================================================
|
4
4
|
|
5
|
+
Before you do anything, read the TESTING file.
|
6
|
+
|
5
7
|
Create a YAML file named .ruby-dbi.test-config.yaml in your home directory.
|
6
8
|
|
7
9
|
This file is a hash of keys that determine what you want to test and how you
|
@@ -1,4 +1,28 @@
|
|
1
1
|
@class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
|
2
|
+
|
3
|
+
def test_last_statement
|
4
|
+
@sth = @dbh.prepare("select * from names")
|
5
|
+
@sth.finish
|
6
|
+
assert_equal "select * from names", @dbh.last_statement
|
7
|
+
|
8
|
+
@sth = @dbh.execute("select * from names")
|
9
|
+
@sth.finish
|
10
|
+
assert_equal "select * from names", @dbh.last_statement
|
11
|
+
|
12
|
+
@dbh.do("select * from names")
|
13
|
+
assert_equal "select * from names", @dbh.last_statement
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_empty_query
|
17
|
+
["", " ", "\t"].each do |str|
|
18
|
+
[:do, :prepare, :execute, :select_one, :select_all].each do |call|
|
19
|
+
assert_raises(DBI::InterfaceError) do
|
20
|
+
@dbh.send(call, str)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
2
26
|
def test_ping
|
3
27
|
assert @dbh.ping
|
4
28
|
# XXX if it isn't obvious, this should be tested better. Not sure what
|
@@ -30,7 +54,7 @@
|
|
30
54
|
end
|
31
55
|
|
32
56
|
assert_equal(
|
33
|
-
DBI::Type::Varchar.object_id,
|
57
|
+
DBI::Type::Varchar.object_id,
|
34
58
|
DBI::TypeUtil.type_name_to_module(cols[0]["type_name"]).object_id
|
35
59
|
)
|
36
60
|
|
@@ -40,8 +64,9 @@
|
|
40
64
|
assert(cols[1]["nullable"])
|
41
65
|
assert_equal(1, cols[2]["scale"])
|
42
66
|
assert_equal(2, cols[2]["precision"])
|
67
|
+
|
43
68
|
assert_equal(
|
44
|
-
DBI::Type::Integer.object_id,
|
69
|
+
DBI::Type::Integer.object_id,
|
45
70
|
DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
|
46
71
|
)
|
47
72
|
|
@@ -52,7 +77,7 @@
|
|
52
77
|
assert_equal(1, cols[2]["scale"])
|
53
78
|
assert_equal(2, cols[2]["precision"])
|
54
79
|
assert_equal(
|
55
|
-
DBI::Type::Decimal.object_id,
|
80
|
+
DBI::Type::Decimal.object_id,
|
56
81
|
DBI::TypeUtil.type_name_to_module(cols[2]["type_name"]).object_id
|
57
82
|
)
|
58
83
|
|
@@ -63,7 +88,7 @@
|
|
63
88
|
assert_equal(6, cols[3]["scale"])
|
64
89
|
assert_equal(30, cols[3]["precision"])
|
65
90
|
assert_equal(
|
66
|
-
DBI::Type::Decimal.object_id,
|
91
|
+
DBI::Type::Decimal.object_id,
|
67
92
|
DBI::TypeUtil.type_name_to_module(cols[3]["type_name"]).object_id
|
68
93
|
)
|
69
94
|
|
@@ -145,11 +170,13 @@
|
|
145
170
|
"views"
|
146
171
|
]
|
147
172
|
end
|
148
|
-
|
149
|
-
case dbtype
|
173
|
+
|
174
|
+
case dbtype
|
150
175
|
when "postgresql"
|
151
176
|
tables.reject! { |x| x =~ /^pg_/ }
|
152
|
-
assert_equal %w(array_test bit_test blob_test boolean_test bytea_test db_specific_types_test field_types_test names precision_test time_test timestamp_test view_names), tables
|
177
|
+
assert_equal %w(array_test bit_test blob_test boolean_test bytea_test db_specific_types_test enum_type_test field_types_test names precision_test time_test timestamp_test view_names), tables
|
178
|
+
when 'sqlite3'
|
179
|
+
assert_equal %w(bit_test blob_test boolean_test db_specific_types_test field_types_test names names_defined_with_spaces precision_test time_test timestamp_test view_names), tables
|
153
180
|
else
|
154
181
|
assert_equal %w(bit_test blob_test boolean_test db_specific_types_test field_types_test names precision_test time_test timestamp_test view_names), tables
|
155
182
|
end
|
@@ -164,13 +191,13 @@
|
|
164
191
|
assert !@dbh["AutoCommit"]
|
165
192
|
|
166
193
|
# test committing an outstanding transaction
|
167
|
-
|
194
|
+
|
168
195
|
@sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
|
169
196
|
@sth.execute("Billy", 22)
|
170
197
|
@sth.finish
|
171
198
|
|
172
199
|
assert @dbh["AutoCommit"] = true # should commit at this point
|
173
|
-
|
200
|
+
|
174
201
|
@sth = @dbh.prepare("select * from names where name = ?")
|
175
202
|
@sth.execute("Billy")
|
176
203
|
assert_equal [ "Billy", 22 ], @sth.fetch
|
@@ -1,4 +1,50 @@
|
|
1
1
|
@class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
|
2
|
+
|
3
|
+
def prep_status_statement
|
4
|
+
@sth.finish if (@sth and !@sth.finished?)
|
5
|
+
@sth = @dbh.prepare("select * from names order by age")
|
6
|
+
@sth.raise_error = true
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_status
|
10
|
+
names_rc = 3
|
11
|
+
|
12
|
+
[:fetch, :fetch_hash, :each, :fetch_all].each do |call|
|
13
|
+
assert_raise(DBI::InterfaceError, DBI::NotSupportedError) do
|
14
|
+
prep_status_statement
|
15
|
+
@sth.send(call)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# for these next three, it doesn't really matter what the args are, it should fail
|
20
|
+
assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
|
21
|
+
prep_status_statement
|
22
|
+
@sth.fetch_many(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
|
26
|
+
prep_status_statement
|
27
|
+
@sth.fetch_scroll(0, 0)
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
|
31
|
+
prep_status_statement
|
32
|
+
@sth.each { |x| }
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_raises(DBI::InterfaceError) do
|
36
|
+
prep_status_statement
|
37
|
+
@sth.execute
|
38
|
+
2.times { @sth.fetch_all }
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_raises(DBI::InterfaceError) do
|
42
|
+
prep_status_statement
|
43
|
+
@sth.execute
|
44
|
+
# XXX fetch_many won't know it can't fetch anything until the third time around.
|
45
|
+
3.times { @sth.fetch_many(names_rc) }
|
46
|
+
end
|
47
|
+
end
|
2
48
|
|
3
49
|
def test_execute
|
4
50
|
assert_nothing_raised do
|
@@ -90,9 +90,9 @@
|
|
90
90
|
@sth = @dbh.prepare("select name, age from names order by age")
|
91
91
|
|
92
92
|
# can't bind_coltype before execute
|
93
|
-
|
93
|
+
assert_raises(DBI::InterfaceError) { @sth.bind_coltype(1, DBI::Type::Float) }
|
94
94
|
# can't index < 1
|
95
|
-
|
95
|
+
assert_raises(DBI::InterfaceError) { @sth.bind_coltype(0, DBI::Type::Float) }
|
96
96
|
end
|
97
97
|
|
98
98
|
def test_noconv
|
data/test/ts_dbd.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'test-unit'
|
1
3
|
# figure out what tests to run
|
2
4
|
require 'yaml'
|
3
5
|
require 'test/unit/testsuite'
|
@@ -17,6 +19,16 @@ module Test::Unit::Assertions
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
22
|
+
class Class
|
23
|
+
def name=(klass_name)
|
24
|
+
@name = klass_name
|
25
|
+
end
|
26
|
+
|
27
|
+
def name
|
28
|
+
return @name || super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
module DBDConfig
|
21
33
|
@testbase = { }
|
22
34
|
@current_dbtype = nil
|
@@ -68,6 +80,7 @@ module DBDConfig
|
|
68
80
|
|
69
81
|
def self.set_testbase(klass_name, klass)
|
70
82
|
@testbase[klass_name] = klass
|
83
|
+
klass.name = klass_name.to_s
|
71
84
|
end
|
72
85
|
|
73
86
|
def self.suite
|
@@ -110,7 +123,7 @@ if __FILE__ == $0
|
|
110
123
|
Dir["dbd/#{dbtype}/test*.rb"].each { |file| require file }
|
111
124
|
# run the general tests
|
112
125
|
DBDConfig.current_dbtype = dbtype.to_sym
|
113
|
-
Dir["dbd/general/test*.rb"].each { |file| load file; DBDConfig.suite << @class }
|
126
|
+
Dir["dbd/general/test*.rb"].each { |file| load file; @class.name = file; DBDConfig.suite << @class }
|
114
127
|
end
|
115
128
|
elsif !config["dbtypes"]
|
116
129
|
warn "Please see test/DBD_TESTS for information on configuring DBD tests."
|
metadata
CHANGED
@@ -1,43 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: dbd-mysql
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2008-11-09 00:00:00 -08:00
|
8
|
-
summary: MySQL DBI DBD, Leverages 'mysql' low-level driver
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: ruby-dbi-users@rubyforge.org
|
12
|
-
homepage: http://www.rubyforge.org/projects/ruby-dbi
|
13
|
-
rubyforge_project: ruby-dbi
|
14
|
-
description: MySQL DBI DBD, Leverages 'mysql' low-level driver
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.0
|
24
|
-
version:
|
4
|
+
version: 0.4.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Erik Hollensbe
|
31
8
|
- Christopher Maujean
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2009-07-11 00:00:00 -04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: dbi
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.4.0
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: mysql
|
28
|
+
type: :runtime
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
version:
|
36
|
+
description: MySQL DBI DBD, Leverages 'mysql' low-level driver
|
37
|
+
email: ruby-dbi-users@rubyforge.org
|
38
|
+
executables: []
|
39
|
+
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files:
|
43
|
+
- README
|
44
|
+
- LICENSE
|
45
|
+
- ChangeLog
|
32
46
|
files:
|
33
|
-
- test/dbd/general/test_database.rb
|
34
47
|
- test/dbd/general/test_statement.rb
|
48
|
+
- test/dbd/general/test_database.rb
|
35
49
|
- test/dbd/general/test_types.rb
|
36
50
|
- test/dbd/mysql/base.rb
|
37
|
-
- test/dbd/mysql/down.sql
|
38
|
-
- test/dbd/mysql/test_blob.rb
|
39
51
|
- test/dbd/mysql/test_patches.rb
|
52
|
+
- test/dbd/mysql/down.sql
|
40
53
|
- test/dbd/mysql/up.sql
|
54
|
+
- test/dbd/mysql/test_new_methods.rb
|
55
|
+
- test/dbd/mysql/test_blob.rb
|
41
56
|
- lib/dbd/Mysql.rb
|
42
57
|
- lib/dbd/mysql/database.rb
|
43
58
|
- lib/dbd/mysql/driver.rb
|
@@ -46,36 +61,31 @@ files:
|
|
46
61
|
- README
|
47
62
|
- LICENSE
|
48
63
|
- ChangeLog
|
49
|
-
|
50
|
-
|
64
|
+
has_rdoc: true
|
65
|
+
homepage: http://www.rubyforge.org/projects/ruby-dbi
|
66
|
+
post_install_message:
|
51
67
|
rdoc_options: []
|
52
68
|
|
53
|
-
|
54
|
-
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.8.0
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
61
83
|
requirements: []
|
62
84
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: 0.4.0
|
72
|
-
version:
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: mysql
|
75
|
-
version_requirement:
|
76
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
77
|
-
requirements:
|
78
|
-
- - ">"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 0.0.0
|
81
|
-
version:
|
85
|
+
rubyforge_project: ruby-dbi
|
86
|
+
rubygems_version: 1.3.1
|
87
|
+
signing_key:
|
88
|
+
specification_version: 2
|
89
|
+
summary: MySQL DBI DBD, Leverages 'mysql' low-level driver
|
90
|
+
test_files:
|
91
|
+
- test/ts_dbd.rb
|