ydbi 0.5.0
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 +7 -0
- data/.gitignore +6 -0
- data/ChangeLog +3699 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/Rakefile +8 -0
- data/TODO +44 -0
- data/bench/bench.rb +79 -0
- data/bin/dbi +518 -0
- data/bin/test_broken_dbi +37 -0
- data/build/Rakefile.dbi.rb +60 -0
- data/build/rake_task_lib.rb +187 -0
- data/doc/DBD_SPEC.rdoc +88 -0
- data/doc/DBI_SPEC.rdoc +157 -0
- data/doc/homepage/contact.html +62 -0
- data/doc/homepage/development.html +124 -0
- data/doc/homepage/index.html +83 -0
- data/doc/homepage/ruby-dbi.css +91 -0
- data/examples/test1.pl +39 -0
- data/examples/test1.rb +20 -0
- data/examples/xmltest.rb +8 -0
- data/lib/dbd/Mysql.rb +137 -0
- data/lib/dbd/ODBC.rb +89 -0
- data/lib/dbd/Pg.rb +188 -0
- data/lib/dbd/SQLite.rb +97 -0
- data/lib/dbd/SQLite3.rb +124 -0
- data/lib/dbd/mysql/database.rb +405 -0
- data/lib/dbd/mysql/driver.rb +125 -0
- data/lib/dbd/mysql/statement.rb +188 -0
- data/lib/dbd/odbc/database.rb +128 -0
- data/lib/dbd/odbc/driver.rb +38 -0
- data/lib/dbd/odbc/statement.rb +137 -0
- data/lib/dbd/pg/database.rb +516 -0
- data/lib/dbd/pg/exec.rb +47 -0
- data/lib/dbd/pg/statement.rb +160 -0
- data/lib/dbd/pg/tuples.rb +121 -0
- data/lib/dbd/pg/type.rb +209 -0
- data/lib/dbd/sqlite/database.rb +151 -0
- data/lib/dbd/sqlite/statement.rb +125 -0
- data/lib/dbd/sqlite3/database.rb +201 -0
- data/lib/dbd/sqlite3/statement.rb +78 -0
- data/lib/dbi.rb +336 -0
- data/lib/dbi/base_classes.rb +12 -0
- data/lib/dbi/base_classes/database.rb +135 -0
- data/lib/dbi/base_classes/driver.rb +47 -0
- data/lib/dbi/base_classes/statement.rb +171 -0
- data/lib/dbi/binary.rb +25 -0
- data/lib/dbi/columninfo.rb +107 -0
- data/lib/dbi/exceptions.rb +65 -0
- data/lib/dbi/handles.rb +49 -0
- data/lib/dbi/handles/database.rb +241 -0
- data/lib/dbi/handles/driver.rb +60 -0
- data/lib/dbi/handles/statement.rb +408 -0
- data/lib/dbi/row.rb +269 -0
- data/lib/dbi/sql.rb +22 -0
- data/lib/dbi/sql/preparedstatement.rb +115 -0
- data/lib/dbi/sql_type_constants.rb +75 -0
- data/lib/dbi/trace.rb +91 -0
- data/lib/dbi/types.rb +218 -0
- data/lib/dbi/typeutil.rb +109 -0
- data/lib/dbi/utils.rb +60 -0
- data/lib/dbi/utils/date.rb +59 -0
- data/lib/dbi/utils/tableformatter.rb +112 -0
- data/lib/dbi/utils/time.rb +52 -0
- data/lib/dbi/utils/timestamp.rb +96 -0
- data/lib/dbi/utils/xmlformatter.rb +73 -0
- data/lib/dbi/version.rb +3 -0
- data/prototypes/types2.rb +237 -0
- data/readme.md +274 -0
- data/setup.rb +1585 -0
- data/test/DBD_TESTS +50 -0
- data/test/TESTING +16 -0
- data/test/dbd/general/test_database.rb +206 -0
- data/test/dbd/general/test_statement.rb +326 -0
- data/test/dbd/general/test_types.rb +296 -0
- data/test/dbd/mysql/base.rb +26 -0
- data/test/dbd/mysql/down.sql +19 -0
- data/test/dbd/mysql/test_blob.rb +18 -0
- data/test/dbd/mysql/test_new_methods.rb +7 -0
- data/test/dbd/mysql/test_patches.rb +111 -0
- data/test/dbd/mysql/up.sql +28 -0
- data/test/dbd/odbc/base.rb +30 -0
- data/test/dbd/odbc/down.sql +19 -0
- data/test/dbd/odbc/test_new_methods.rb +12 -0
- data/test/dbd/odbc/test_ping.rb +10 -0
- data/test/dbd/odbc/test_statement.rb +44 -0
- data/test/dbd/odbc/test_transactions.rb +58 -0
- data/test/dbd/odbc/up.sql +33 -0
- data/test/dbd/postgresql/base.rb +31 -0
- data/test/dbd/postgresql/down.sql +31 -0
- data/test/dbd/postgresql/test_arrays.rb +179 -0
- data/test/dbd/postgresql/test_async.rb +121 -0
- data/test/dbd/postgresql/test_blob.rb +36 -0
- data/test/dbd/postgresql/test_bytea.rb +87 -0
- data/test/dbd/postgresql/test_ping.rb +10 -0
- data/test/dbd/postgresql/test_timestamp.rb +77 -0
- data/test/dbd/postgresql/test_transactions.rb +58 -0
- data/test/dbd/postgresql/testdbipg.rb +307 -0
- data/test/dbd/postgresql/up.sql +60 -0
- data/test/dbd/sqlite/base.rb +32 -0
- data/test/dbd/sqlite/test_database.rb +30 -0
- data/test/dbd/sqlite/test_driver.rb +68 -0
- data/test/dbd/sqlite/test_statement.rb +112 -0
- data/test/dbd/sqlite/up.sql +25 -0
- data/test/dbd/sqlite3/base.rb +32 -0
- data/test/dbd/sqlite3/test_database.rb +77 -0
- data/test/dbd/sqlite3/test_driver.rb +67 -0
- data/test/dbd/sqlite3/test_statement.rb +88 -0
- data/test/dbd/sqlite3/up.sql +33 -0
- data/test/dbi/tc_columninfo.rb +94 -0
- data/test/dbi/tc_date.rb +88 -0
- data/test/dbi/tc_dbi.rb +184 -0
- data/test/dbi/tc_row.rb +256 -0
- data/test/dbi/tc_sqlbind.rb +168 -0
- data/test/dbi/tc_statementhandle.rb +29 -0
- data/test/dbi/tc_time.rb +77 -0
- data/test/dbi/tc_timestamp.rb +142 -0
- data/test/dbi/tc_types.rb +268 -0
- data/test/ts_dbd.rb +131 -0
- data/test/ts_dbi.rb +16 -0
- data/ydbi.gemspec +24 -0
- metadata +224 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
class TestStatement < DBDConfig.testbase(:sqlite3)
|
|
2
|
+
def test_constructor
|
|
3
|
+
sth = DBI::DBD::SQLite3::Statement.new("select * from names", @dbh.instance_variable_get("@handle").instance_variable_get("@db"))
|
|
4
|
+
|
|
5
|
+
assert_kind_of DBI::DBD::SQLite3::Statement, sth
|
|
6
|
+
assert sth.instance_variable_get("@db")
|
|
7
|
+
assert_kind_of ::SQLite3::Database, sth.instance_variable_get("@db")
|
|
8
|
+
assert_equal(@dbh.instance_variable_get("@handle").instance_variable_get("@db"), sth.instance_variable_get("@db"))
|
|
9
|
+
assert_kind_of ::SQLite3::Statement, sth.instance_variable_get("@stmt")
|
|
10
|
+
assert_nil(@sth.instance_variable_get("@result"))
|
|
11
|
+
|
|
12
|
+
sth.finish
|
|
13
|
+
|
|
14
|
+
sth = @dbh.prepare("select * from names")
|
|
15
|
+
|
|
16
|
+
assert_kind_of DBI::StatementHandle, sth
|
|
17
|
+
sth.finish
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_bind_param
|
|
21
|
+
sth = DBI::DBD::SQLite3::Statement.new("select * from names", @dbh.instance_variable_get("@handle").instance_variable_get("@db"))
|
|
22
|
+
|
|
23
|
+
assert_raises(DBI::InterfaceError) do
|
|
24
|
+
sth.bind_param(:foo, "monkeys")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
sth.finish
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_column_info
|
|
31
|
+
@sth = nil
|
|
32
|
+
|
|
33
|
+
assert_nothing_raised do
|
|
34
|
+
@sth = @dbh.prepare("select * from names")
|
|
35
|
+
@sth.execute
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
assert_kind_of Array, @sth.column_info
|
|
39
|
+
assert_kind_of DBI::ColumnInfo, @sth.column_info[0]
|
|
40
|
+
assert_kind_of DBI::ColumnInfo, @sth.column_info[1]
|
|
41
|
+
assert_equal [
|
|
42
|
+
{
|
|
43
|
+
:name => "name",
|
|
44
|
+
:sql_type => 12,
|
|
45
|
+
:precision => 255,
|
|
46
|
+
:type_name => "varchar"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
:name => "age",
|
|
50
|
+
:sql_type => 4,
|
|
51
|
+
:type_name => "integer"
|
|
52
|
+
}
|
|
53
|
+
], @sth.column_info
|
|
54
|
+
|
|
55
|
+
@sth.finish
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_specific_types
|
|
59
|
+
assert_nothing_raised do
|
|
60
|
+
@sth = @dbh.prepare("insert into db_specific_types_test (dbl) values (?)")
|
|
61
|
+
@sth.execute(11111111.111111)
|
|
62
|
+
@sth.execute(22)
|
|
63
|
+
@sth.finish
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
assert_nothing_raised do
|
|
67
|
+
@sth = @dbh.prepare("select * from db_specific_types_test")
|
|
68
|
+
@sth.execute
|
|
69
|
+
assert_equal([11111111.111111], @sth.fetch)
|
|
70
|
+
assert_equal([22], @sth.fetch)
|
|
71
|
+
@sth.finish
|
|
72
|
+
|
|
73
|
+
assert_equal([[11111111.111111], [22]], @dbh.select_all("select * from db_specific_types_test"))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
assert_nothing_raised do
|
|
77
|
+
@sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
|
|
78
|
+
@sth.execute(:joseph, 20)
|
|
79
|
+
@sth.finish
|
|
80
|
+
|
|
81
|
+
@sth = @dbh.prepare("select name, age from names where name=?")
|
|
82
|
+
@sth.execute("joseph")
|
|
83
|
+
rows = @sth.fetch_all
|
|
84
|
+
@sth.finish
|
|
85
|
+
assert_equal(rows, [["joseph", 20]])
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
create table names (name varchar(255), age integer);
|
|
2
|
+
---
|
|
3
|
+
insert into names (name, age) values ("Bob", 21);
|
|
4
|
+
---
|
|
5
|
+
insert into names (name, age) values ("Joe", 19);
|
|
6
|
+
---
|
|
7
|
+
insert into names (name, age) values ("Jim", 30);
|
|
8
|
+
---
|
|
9
|
+
create table precision_test (text_field varchar(20) primary key not null, integer_field integer, decimal_field decimal(2,1), numeric_field numeric(30,6));
|
|
10
|
+
---
|
|
11
|
+
create view view_names as select * from names;
|
|
12
|
+
---
|
|
13
|
+
create table blob_test (name varchar(255));
|
|
14
|
+
---
|
|
15
|
+
create table boolean_test (num integer, mybool boolean);
|
|
16
|
+
---
|
|
17
|
+
create table time_test (mytime time);
|
|
18
|
+
---
|
|
19
|
+
create table timestamp_test (mytimestamp timestamp);
|
|
20
|
+
---
|
|
21
|
+
create table bit_test (mybit bit);
|
|
22
|
+
---
|
|
23
|
+
create table field_types_test (foo integer not null primary key default 1);
|
|
24
|
+
---
|
|
25
|
+
create table db_specific_types_test (dbl double);
|
|
26
|
+
---
|
|
27
|
+
create table names_defined_with_spaces ( name varchar( 255 ), age integer );
|
|
28
|
+
---
|
|
29
|
+
insert into names_defined_with_spaces (name, age) values ("Bob", 21);
|
|
30
|
+
---
|
|
31
|
+
insert into names_defined_with_spaces (name, age) values ("Joe", 19);
|
|
32
|
+
---
|
|
33
|
+
insert into names_defined_with_spaces (name, age) values ("Jim", 30);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
############################################################
|
|
2
|
+
# tc_columninfo.rb
|
|
3
|
+
#
|
|
4
|
+
# Test case for the DBI::ColumnInfo class.
|
|
5
|
+
############################################################
|
|
6
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
|
7
|
+
$LOAD_PATH.unshift(File.dirname(Dir.pwd))
|
|
8
|
+
$LOAD_PATH.unshift("../../lib")
|
|
9
|
+
$LOAD_PATH.unshift("../../lib/dbi")
|
|
10
|
+
$LOAD_PATH.unshift("lib")
|
|
11
|
+
|
|
12
|
+
require "dbi/columninfo"
|
|
13
|
+
require "test/unit"
|
|
14
|
+
|
|
15
|
+
class TC_DBI_ColumnInfo < Test::Unit::TestCase
|
|
16
|
+
def setup
|
|
17
|
+
@colinfo = DBI::ColumnInfo.new(
|
|
18
|
+
"name" => "test",
|
|
19
|
+
"sql_type" => "numeric",
|
|
20
|
+
"type_name" => "test_type_name",
|
|
21
|
+
"precision" => 2,
|
|
22
|
+
"scale" => 2,
|
|
23
|
+
"default" => 100.00,
|
|
24
|
+
"nullable" => false,
|
|
25
|
+
"indexed" => true,
|
|
26
|
+
"primary" => true,
|
|
27
|
+
"unique" => false
|
|
28
|
+
)
|
|
29
|
+
@keys = %w/name sql_type type_name precision scale default nullable
|
|
30
|
+
indexed primary unique
|
|
31
|
+
/
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_constructor
|
|
35
|
+
assert_nothing_raised{ DBI::ColumnInfo.new }
|
|
36
|
+
|
|
37
|
+
assert_nothing_raised do
|
|
38
|
+
DBI::ColumnInfo.new({"foo" => "bar", "baz" => "quux"})
|
|
39
|
+
DBI::ColumnInfo.new({:foo => "bar", :baz => "quux"})
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
assert_raises(ArgumentError) do
|
|
43
|
+
DBI::ColumnInfo.new({"foo" => "bar", :foo => "quux"})
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_accessors
|
|
48
|
+
assert_nothing_raised do
|
|
49
|
+
@keys.each do |x|
|
|
50
|
+
assert_equal(@colinfo[x], @colinfo[x.to_sym])
|
|
51
|
+
assert_equal(@colinfo.send(x.to_sym), @colinfo[x.to_sym])
|
|
52
|
+
@colinfo[x] = "poop"
|
|
53
|
+
assert_equal("poop", @colinfo[x])
|
|
54
|
+
assert_equal("poop", @colinfo[x.to_sym])
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_precision_basic
|
|
60
|
+
assert_respond_to(@colinfo, :size)
|
|
61
|
+
assert_respond_to(@colinfo, :size=)
|
|
62
|
+
assert_respond_to(@colinfo, :length)
|
|
63
|
+
assert_respond_to(@colinfo, :length=)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_scale_basic
|
|
67
|
+
assert_respond_to(@colinfo, :decimal_digits)
|
|
68
|
+
assert_respond_to(@colinfo, :decimal_digits=)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_default_value_basic
|
|
72
|
+
assert_respond_to(@colinfo, :default_value)
|
|
73
|
+
assert_respond_to(@colinfo, :default_value=)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_unique_basic
|
|
77
|
+
assert_respond_to(@colinfo, :is_unique)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_keys
|
|
81
|
+
assert_respond_to(@colinfo, :keys)
|
|
82
|
+
assert_equal(@keys.sort, @colinfo.keys.collect { |x| x.to_s }.sort)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_respond_to_hash_methods
|
|
86
|
+
assert_respond_to(@colinfo, :each)
|
|
87
|
+
assert_respond_to(@colinfo, :empty?)
|
|
88
|
+
assert_respond_to(@colinfo, :has_key?)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def teardown
|
|
92
|
+
@colinfo = nil
|
|
93
|
+
end
|
|
94
|
+
end
|
data/test/dbi/tc_date.rb
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# tc_date.rb
|
|
3
|
+
#
|
|
4
|
+
# Test case for the DBI::Date class (currently) located in the utils.rb file.
|
|
5
|
+
##############################################################################
|
|
6
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
|
7
|
+
$LOAD_PATH.unshift(File.dirname(Dir.pwd))
|
|
8
|
+
$LOAD_PATH.unshift("../../lib")
|
|
9
|
+
$LOAD_PATH.unshift("../../lib/dbi")
|
|
10
|
+
$LOAD_PATH.unshift("lib")
|
|
11
|
+
|
|
12
|
+
require 'date'
|
|
13
|
+
require 'dbi'
|
|
14
|
+
require 'test/unit'
|
|
15
|
+
|
|
16
|
+
Deprecate.set_action(proc { })
|
|
17
|
+
|
|
18
|
+
class TC_DBI_Date < Test::Unit::TestCase
|
|
19
|
+
def setup
|
|
20
|
+
@date = Date.new
|
|
21
|
+
@time = Time.now
|
|
22
|
+
@dbi_date = DBI::Date.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_constructor
|
|
26
|
+
assert_nothing_raised{ DBI::Date.new(2006) }
|
|
27
|
+
assert_nothing_raised{ DBI::Date.new(2006, 1) }
|
|
28
|
+
assert_nothing_raised{ DBI::Date.new(2006, 1, 20) }
|
|
29
|
+
assert_nothing_raised{ DBI::Date.new(Date.new) }
|
|
30
|
+
assert_nothing_raised{ DBI::Date.new(Time.now) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_year
|
|
34
|
+
assert_respond_to(@dbi_date, :year)
|
|
35
|
+
assert_respond_to(@dbi_date, :year=)
|
|
36
|
+
assert_equal(0, @dbi_date.year)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_month
|
|
40
|
+
assert_respond_to(@dbi_date, :month)
|
|
41
|
+
assert_respond_to(@dbi_date, :month=)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# An alias for :month, :month=
|
|
45
|
+
def test_mon
|
|
46
|
+
assert_respond_to(@dbi_date, :mon)
|
|
47
|
+
assert_respond_to(@dbi_date, :mon=)
|
|
48
|
+
assert_equal(0, @dbi_date.mon)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_day
|
|
52
|
+
assert_respond_to(@dbi_date, :day)
|
|
53
|
+
assert_respond_to(@dbi_date, :day=)
|
|
54
|
+
assert_equal(0, @dbi_date.day)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# An alias for :day, :day=
|
|
58
|
+
def test_mday
|
|
59
|
+
assert_respond_to(@dbi_date, :mday)
|
|
60
|
+
assert_respond_to(@dbi_date, :mday=)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_to_time
|
|
64
|
+
assert_respond_to(@dbi_date, :to_time)
|
|
65
|
+
assert_equal(@time, DBI::Date.new(@time).to_time)
|
|
66
|
+
assert_equal(@time.object_id, DBI::Date.new(@time).to_time.object_id)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_to_date
|
|
70
|
+
assert_respond_to(@dbi_date, :to_date)
|
|
71
|
+
assert_equal(@date, DBI::Date.new(@date).to_date)
|
|
72
|
+
assert_equal(@date.object_id, DBI::Date.new(@date).to_date.object_id)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# We test .to_s because it has an explicit implementation
|
|
76
|
+
def test_to_s
|
|
77
|
+
assert_respond_to(@dbi_date, :to_s)
|
|
78
|
+
assert_nothing_raised{ @dbi_date.to_s }
|
|
79
|
+
assert_kind_of(String, @dbi_date.to_s)
|
|
80
|
+
assert_equal("0000-00-00", @dbi_date.to_s)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def teardown
|
|
84
|
+
@date = nil
|
|
85
|
+
@time = nil
|
|
86
|
+
@dbi_date = nil
|
|
87
|
+
end
|
|
88
|
+
end
|
data/test/dbi/tc_dbi.rb
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
######################################################################
|
|
2
|
+
# tc_dbi.rb
|
|
3
|
+
#
|
|
4
|
+
# Test case for the DBI module (dbi.rb).
|
|
5
|
+
######################################################################
|
|
6
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
|
7
|
+
$LOAD_PATH.unshift(File.dirname(Dir.pwd))
|
|
8
|
+
$LOAD_PATH.unshift("../../lib")
|
|
9
|
+
$LOAD_PATH.unshift("../../lib/dbi")
|
|
10
|
+
$LOAD_PATH.unshift("lib")
|
|
11
|
+
|
|
12
|
+
require 'dbi'
|
|
13
|
+
require 'test/unit'
|
|
14
|
+
|
|
15
|
+
class TC_DBI < Test::Unit::TestCase
|
|
16
|
+
def setup
|
|
17
|
+
@db_error = DBI::DatabaseError.new("test", 1, "montana")
|
|
18
|
+
@db_binary = DBI::Binary.new("test")
|
|
19
|
+
@url_basic = 'dbi:foo:bar'
|
|
20
|
+
@url_inter = 'dbi:foo:bar:host'
|
|
21
|
+
@url_advan = 'dbi:foo:database=db;host=xx;port=99'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_dbi_version
|
|
25
|
+
assert_equal("0.5.0", DBI::VERSION)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_dbd_module
|
|
29
|
+
assert_equal("0.3", DBI::DBD::API_VERSION)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_fetch_scroll_constants
|
|
33
|
+
assert_equal(1, DBI::SQL_FETCH_NEXT)
|
|
34
|
+
assert_equal(2, DBI::SQL_FETCH_PRIOR)
|
|
35
|
+
assert_equal(3, DBI::SQL_FETCH_FIRST)
|
|
36
|
+
assert_equal(4, DBI::SQL_FETCH_LAST)
|
|
37
|
+
assert_equal(5, DBI::SQL_FETCH_ABSOLUTE)
|
|
38
|
+
assert_equal(6, DBI::SQL_FETCH_RELATIVE)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_sql_type_constants
|
|
42
|
+
assert_equal(1, DBI::SQL_CHAR)
|
|
43
|
+
assert_equal(2, DBI::SQL_NUMERIC)
|
|
44
|
+
assert_equal(3, DBI::SQL_DECIMAL)
|
|
45
|
+
assert_equal(4, DBI::SQL_INTEGER)
|
|
46
|
+
assert_equal(5, DBI::SQL_SMALLINT)
|
|
47
|
+
assert_equal(6, DBI::SQL_FLOAT)
|
|
48
|
+
assert_equal(7, DBI::SQL_REAL)
|
|
49
|
+
assert_equal(8, DBI::SQL_DOUBLE)
|
|
50
|
+
assert_equal(9, DBI::SQL_DATE)
|
|
51
|
+
assert_equal(10, DBI::SQL_TIME)
|
|
52
|
+
assert_equal(11, DBI::SQL_TIMESTAMP)
|
|
53
|
+
assert_equal(12, DBI::SQL_VARCHAR)
|
|
54
|
+
assert_equal(100, DBI::SQL_OTHER)
|
|
55
|
+
assert_equal(-1, DBI::SQL_LONGVARCHAR)
|
|
56
|
+
assert_equal(-2, DBI::SQL_BINARY)
|
|
57
|
+
assert_equal(-3, DBI::SQL_VARBINARY)
|
|
58
|
+
assert_equal(-4, DBI::SQL_LONGVARBINARY)
|
|
59
|
+
assert_equal(-5, DBI::SQL_BIGINT)
|
|
60
|
+
assert_equal(-6, DBI::SQL_TINYINT)
|
|
61
|
+
assert_equal(-7, DBI::SQL_BIT)
|
|
62
|
+
assert_equal(-10, DBI::SQL_BLOB)
|
|
63
|
+
assert_equal(-11, DBI::SQL_CLOB)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_sql_type_names
|
|
67
|
+
assert_equal('BIT', DBI::SQL_TYPE_NAMES[DBI::SQL_BIT])
|
|
68
|
+
assert_equal('TINYINT', DBI::SQL_TYPE_NAMES[DBI::SQL_TINYINT])
|
|
69
|
+
assert_equal('SMALLINT', DBI::SQL_TYPE_NAMES[DBI::SQL_SMALLINT])
|
|
70
|
+
assert_equal('INTEGER', DBI::SQL_TYPE_NAMES[DBI::SQL_INTEGER])
|
|
71
|
+
assert_equal('BIGINT', DBI::SQL_TYPE_NAMES[DBI::SQL_BIGINT])
|
|
72
|
+
assert_equal('FLOAT', DBI::SQL_TYPE_NAMES[DBI::SQL_FLOAT])
|
|
73
|
+
assert_equal('REAL', DBI::SQL_TYPE_NAMES[DBI::SQL_REAL])
|
|
74
|
+
assert_equal('DOUBLE', DBI::SQL_TYPE_NAMES[DBI::SQL_DOUBLE])
|
|
75
|
+
assert_equal('NUMERIC', DBI::SQL_TYPE_NAMES[DBI::SQL_NUMERIC])
|
|
76
|
+
assert_equal('DECIMAL', DBI::SQL_TYPE_NAMES[DBI::SQL_DECIMAL])
|
|
77
|
+
assert_equal('CHAR', DBI::SQL_TYPE_NAMES[DBI::SQL_CHAR])
|
|
78
|
+
assert_equal('VARCHAR', DBI::SQL_TYPE_NAMES[DBI::SQL_VARCHAR])
|
|
79
|
+
assert_equal('LONG VARCHAR', DBI::SQL_TYPE_NAMES[DBI::SQL_LONGVARCHAR])
|
|
80
|
+
assert_equal('DATE', DBI::SQL_TYPE_NAMES[DBI::SQL_DATE])
|
|
81
|
+
assert_equal('TIME', DBI::SQL_TYPE_NAMES[DBI::SQL_TIME])
|
|
82
|
+
assert_equal('TIMESTAMP', DBI::SQL_TYPE_NAMES[DBI::SQL_TIMESTAMP])
|
|
83
|
+
assert_equal('BINARY', DBI::SQL_TYPE_NAMES[DBI::SQL_BINARY])
|
|
84
|
+
assert_equal('VARBINARY', DBI::SQL_TYPE_NAMES[DBI::SQL_VARBINARY])
|
|
85
|
+
assert_equal('LONG VARBINARY',
|
|
86
|
+
DBI::SQL_TYPE_NAMES[DBI::SQL_LONGVARBINARY])
|
|
87
|
+
assert_equal('BLOB', DBI::SQL_TYPE_NAMES[DBI::SQL_BLOB])
|
|
88
|
+
assert_equal('CLOB', DBI::SQL_TYPE_NAMES[DBI::SQL_CLOB])
|
|
89
|
+
assert_equal(nil, DBI::SQL_TYPE_NAMES[DBI::SQL_OTHER])
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_dbi_exception_classes
|
|
93
|
+
assert(DBI::Error)
|
|
94
|
+
assert(DBI::Warning)
|
|
95
|
+
assert(DBI::InterfaceError)
|
|
96
|
+
assert(DBI::NotImplementedError)
|
|
97
|
+
assert(DBI::DatabaseError)
|
|
98
|
+
assert(DBI::DataError)
|
|
99
|
+
assert(DBI::OperationalError)
|
|
100
|
+
assert(DBI::IntegrityError)
|
|
101
|
+
assert(DBI::InternalError)
|
|
102
|
+
assert(DBI::ProgrammingError)
|
|
103
|
+
assert(DBI::NotSupportedError)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# This error class gets extra testing since it defines some custom
|
|
107
|
+
# accessors.
|
|
108
|
+
def test_dbi_database_error
|
|
109
|
+
assert_respond_to(@db_error, :errstr)
|
|
110
|
+
assert_respond_to(@db_error, :err)
|
|
111
|
+
assert_respond_to(@db_error, :state)
|
|
112
|
+
assert_equal("test", @db_error.errstr)
|
|
113
|
+
assert_equal(1, @db_error.err)
|
|
114
|
+
assert_equal("montana", @db_error.state)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_binary_datatype
|
|
118
|
+
assert_respond_to(@db_binary, :data)
|
|
119
|
+
assert_respond_to(@db_binary, :to_s)
|
|
120
|
+
assert_equal("test", @db_binary.data)
|
|
121
|
+
assert_equal("test", @db_binary.to_s)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_misc_constants
|
|
125
|
+
assert_equal(2, DBI::DEFAULT_TRACE_MODE)
|
|
126
|
+
assert_equal(STDERR, DBI::DEFAULT_TRACE_OUTPUT)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_last_connection
|
|
130
|
+
assert_respond_to(DBI, :last_connection)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_convert_types
|
|
134
|
+
assert_respond_to(DBI, :convert_types)
|
|
135
|
+
assert_respond_to(DBI, :convert_types=)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def test_connect
|
|
139
|
+
assert_respond_to(DBI, :connect)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_available_drivers
|
|
143
|
+
assert_respond_to(DBI, :available_drivers)
|
|
144
|
+
assert_equal(
|
|
145
|
+
[
|
|
146
|
+
"dbi:Mysql:",
|
|
147
|
+
"dbi:ODBC:",
|
|
148
|
+
"dbi:Pg:",
|
|
149
|
+
"dbi:SQLite3:",
|
|
150
|
+
"dbi:SQLite:"
|
|
151
|
+
], DBI.available_drivers.sort)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# PRIVATE METHODS
|
|
155
|
+
def test_parse_url
|
|
156
|
+
assert_nothing_raised{ DBI.send(:parse_url, "dbi:foo:bar") }
|
|
157
|
+
assert_equal(["foo","bar"], DBI.send(:parse_url, @url_basic))
|
|
158
|
+
assert_equal(["foo","bar:host"], DBI.send(:parse_url, @url_inter))
|
|
159
|
+
assert_equal(["foo","database=db;host=xx;port=99"],
|
|
160
|
+
DBI.send(:parse_url, @url_advan)
|
|
161
|
+
)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_parse_url_expected_errors
|
|
165
|
+
assert_raises(DBI::InterfaceError){ DBI.send(:parse_url, 'dbi') }
|
|
166
|
+
assert_raises(DBI::InterfaceError){ DBI.send(:parse_url, 'dbi::foo') }
|
|
167
|
+
|
|
168
|
+
# XXX we're looking for a specific exception message here
|
|
169
|
+
assert_nothing_raised do
|
|
170
|
+
begin
|
|
171
|
+
DBI.send(:parse_url, 'dbi:blah')
|
|
172
|
+
rescue DBI::InterfaceError => e
|
|
173
|
+
assert true
|
|
174
|
+
assert_kind_of DBI::InterfaceError, e
|
|
175
|
+
assert_equal "Invalid Data Source Name", e.message
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def teardown
|
|
181
|
+
@db_error = nil
|
|
182
|
+
@db_binary = nil
|
|
183
|
+
end
|
|
184
|
+
end
|