dbd-odbc 0.2.4 → 0.2.5
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/ODBC.rb +1 -1
- data/lib/dbd/odbc/database.rb +7 -0
- data/lib/dbd/odbc/statement.rb +8 -2
- data/test/DBD_TESTS +2 -0
- data/test/dbd/general/test_database.rb +61 -12
- data/test/dbd/general/test_statement.rb +84 -7
- data/test/dbd/general/test_types.rb +30 -2
- data/test/dbd/odbc/base.rb +0 -1
- data/test/dbd/odbc/test_new_methods.rb +12 -0
- data/test/dbd/odbc/test_ping.rb +2 -2
- data/test/dbd/odbc/test_statement.rb +28 -26
- data/test/dbd/odbc/up.sql +1 -1
- data/test/ts_dbd.rb +14 -1
- metadata +56 -47
data/lib/dbd/ODBC.rb
CHANGED
data/lib/dbd/odbc/database.rb
CHANGED
@@ -9,6 +9,10 @@ class DBI::DBD::ODBC::Database < DBI::BaseDatabase
|
|
9
9
|
raise DBI::DatabaseError.new(err.message)
|
10
10
|
end
|
11
11
|
|
12
|
+
def database_name
|
13
|
+
@handle.get_info('SQL_DATABASE_NAME')
|
14
|
+
end
|
15
|
+
|
12
16
|
def ping
|
13
17
|
@handle.connected?
|
14
18
|
end
|
@@ -87,6 +91,7 @@ class DBI::DBD::ODBC::Database < DBI::BaseDatabase
|
|
87
91
|
#
|
88
92
|
# * AutoCommit: force a commit after each statement execution.
|
89
93
|
# * odbc_ignorecase: Be case-insensitive in operations.
|
94
|
+
# * odbc_timeout: Return after a certain time regardless of whether the operation returned anything.
|
90
95
|
#
|
91
96
|
def []=(attr, value)
|
92
97
|
case attr
|
@@ -94,6 +99,8 @@ class DBI::DBD::ODBC::Database < DBI::BaseDatabase
|
|
94
99
|
@handle.autocommit(value)
|
95
100
|
when 'odbc_ignorecase'
|
96
101
|
@handle.ignorecase(value)
|
102
|
+
when 'odbc_timeout'
|
103
|
+
@handle.timeout(value)
|
97
104
|
else
|
98
105
|
if attr =~ /^odbc_/ or attr != /_/
|
99
106
|
raise DBI::NotSupportedError, "Option '#{attr}' not supported"
|
data/lib/dbd/odbc/statement.rb
CHANGED
@@ -124,8 +124,14 @@ class DBI::DBD::ODBC::Statement < DBI::BaseStatement
|
|
124
124
|
def convert_row(row)
|
125
125
|
return nil if row.nil?
|
126
126
|
row.collect do |col|
|
127
|
-
|
128
|
-
|
127
|
+
case col
|
128
|
+
when nil
|
129
|
+
nil
|
130
|
+
when ODBC::TimeStamp
|
131
|
+
DBI::Type::Timestamp.create col.year, col.month, col.day, col.hour, col.minute, col.second
|
132
|
+
else
|
133
|
+
col.to_s
|
134
|
+
end
|
129
135
|
end
|
130
136
|
end
|
131
137
|
end
|
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
|
@@ -11,7 +35,7 @@
|
|
11
35
|
|
12
36
|
assert(cols)
|
13
37
|
assert_kind_of(Array, cols)
|
14
|
-
assert_equal(
|
38
|
+
assert_equal(4, cols.length)
|
15
39
|
|
16
40
|
# the first column should always be "text_field" and have the following
|
17
41
|
# properties:
|
@@ -30,19 +54,42 @@
|
|
30
54
|
end
|
31
55
|
|
32
56
|
assert_equal(
|
33
|
-
DBI::Type::Varchar,
|
34
|
-
DBI::TypeUtil.type_name_to_module(cols[0]["type_name"])
|
57
|
+
DBI::Type::Varchar.object_id,
|
58
|
+
DBI::TypeUtil.type_name_to_module(cols[0]["type_name"]).object_id
|
35
59
|
)
|
36
60
|
|
37
61
|
# the second column should always be "integer_field" and have the following
|
38
62
|
# properties:
|
39
63
|
assert_equal("integer_field", cols[1]["name"])
|
40
64
|
assert(cols[1]["nullable"])
|
41
|
-
assert_equal(1, cols[
|
42
|
-
assert_equal(2, cols[
|
65
|
+
assert_equal(1, cols[2]["scale"])
|
66
|
+
assert_equal(2, cols[2]["precision"])
|
67
|
+
|
43
68
|
assert_equal(
|
44
|
-
DBI::Type::
|
45
|
-
DBI::TypeUtil.type_name_to_module(cols[1]["type_name"])
|
69
|
+
DBI::Type::Integer.object_id,
|
70
|
+
DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
|
71
|
+
)
|
72
|
+
|
73
|
+
# the second column should always be "integer_field" and have the following
|
74
|
+
# properties:
|
75
|
+
assert_equal("decimal_field", cols[2]["name"])
|
76
|
+
assert(cols[2]["nullable"])
|
77
|
+
assert_equal(1, cols[2]["scale"])
|
78
|
+
assert_equal(2, cols[2]["precision"])
|
79
|
+
assert_equal(
|
80
|
+
DBI::Type::Decimal.object_id,
|
81
|
+
DBI::TypeUtil.type_name_to_module(cols[2]["type_name"]).object_id
|
82
|
+
)
|
83
|
+
|
84
|
+
# the second column should always be "numeric_field" and have the following
|
85
|
+
# properties:
|
86
|
+
assert_equal("numeric_field", cols[3]["name"])
|
87
|
+
assert(cols[3]["nullable"])
|
88
|
+
assert_equal(6, cols[3]["scale"])
|
89
|
+
assert_equal(30, cols[3]["precision"])
|
90
|
+
assert_equal(
|
91
|
+
DBI::Type::Decimal.object_id,
|
92
|
+
DBI::TypeUtil.type_name_to_module(cols[3]["type_name"]).object_id
|
46
93
|
)
|
47
94
|
|
48
95
|
# finally, we ensure that every column in the array is a ColumnInfo
|
@@ -123,11 +170,13 @@
|
|
123
170
|
"views"
|
124
171
|
]
|
125
172
|
end
|
126
|
-
|
127
|
-
case dbtype
|
173
|
+
|
174
|
+
case dbtype
|
128
175
|
when "postgresql"
|
129
176
|
tables.reject! { |x| x =~ /^pg_/ }
|
130
|
-
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
|
131
180
|
else
|
132
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
|
133
182
|
end
|
@@ -142,13 +191,13 @@
|
|
142
191
|
assert !@dbh["AutoCommit"]
|
143
192
|
|
144
193
|
# test committing an outstanding transaction
|
145
|
-
|
194
|
+
|
146
195
|
@sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
|
147
196
|
@sth.execute("Billy", 22)
|
148
197
|
@sth.finish
|
149
198
|
|
150
199
|
assert @dbh["AutoCommit"] = true # should commit at this point
|
151
|
-
|
200
|
+
|
152
201
|
@sth = @dbh.prepare("select * from names where name = ?")
|
153
202
|
@sth.execute("Billy")
|
154
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
|
@@ -44,7 +90,7 @@
|
|
44
90
|
|
45
91
|
assert(cols)
|
46
92
|
assert_kind_of(Array, cols)
|
47
|
-
assert_equal(
|
93
|
+
assert_equal(4, cols.length)
|
48
94
|
|
49
95
|
# the first column should always be "text_field" and have the following
|
50
96
|
# properties:
|
@@ -61,18 +107,49 @@
|
|
61
107
|
end
|
62
108
|
|
63
109
|
assert_equal(
|
64
|
-
DBI::Type::Varchar,
|
65
|
-
DBI::TypeUtil.type_name_to_module(cols[0]["type_name"])
|
110
|
+
DBI::Type::Varchar.object_id,
|
111
|
+
DBI::TypeUtil.type_name_to_module(cols[0]["type_name"]).object_id
|
66
112
|
)
|
67
113
|
|
68
114
|
# the second column should always be "integer_field" and have the following
|
69
115
|
# properties:
|
70
116
|
assert_equal("integer_field", cols[1]["name"])
|
71
|
-
|
72
|
-
|
117
|
+
# if these aren't set on the field, they should not exist
|
118
|
+
# FIXME mysql does not follow this rule, neither does ODBC
|
119
|
+
if dbtype == "mysql"
|
120
|
+
assert_equal(0, cols[1]["scale"])
|
121
|
+
assert_equal(11, cols[1]["precision"])
|
122
|
+
elsif dbtype == "odbc"
|
123
|
+
assert_equal(0, cols[1]["scale"])
|
124
|
+
assert_equal(10, cols[1]["precision"])
|
125
|
+
else
|
126
|
+
assert(!cols[1]["scale"])
|
127
|
+
assert(!cols[1]["precision"])
|
128
|
+
end
|
129
|
+
|
130
|
+
assert_equal(
|
131
|
+
DBI::Type::Integer.object_id,
|
132
|
+
DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
|
133
|
+
)
|
134
|
+
|
135
|
+
# the second column should always be "integer_field" and have the following
|
136
|
+
# properties:
|
137
|
+
assert_equal("decimal_field", cols[2]["name"])
|
138
|
+
assert_equal(1, cols[2]["scale"])
|
139
|
+
assert_equal(2, cols[2]["precision"])
|
140
|
+
assert_equal(
|
141
|
+
DBI::Type::Decimal.object_id,
|
142
|
+
DBI::TypeUtil.type_name_to_module(cols[2]["type_name"]).object_id
|
143
|
+
)
|
144
|
+
|
145
|
+
# the second column should always be "numeric_field" and have the following
|
146
|
+
# properties:
|
147
|
+
assert_equal("numeric_field", cols[3]["name"])
|
148
|
+
assert_equal(6, cols[3]["scale"])
|
149
|
+
assert_equal(30, cols[3]["precision"])
|
73
150
|
assert_equal(
|
74
|
-
DBI::Type::Decimal,
|
75
|
-
DBI::TypeUtil.type_name_to_module(cols[
|
151
|
+
DBI::Type::Decimal.object_id,
|
152
|
+
DBI::TypeUtil.type_name_to_module(cols[3]["type_name"]).object_id
|
76
153
|
)
|
77
154
|
|
78
155
|
cols.each { |col| assert_kind_of(DBI::ColumnInfo, col) }
|
@@ -25,6 +25,34 @@
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def test_numeric_types
|
29
|
+
assert(@dbh.convert_types)
|
30
|
+
|
31
|
+
@sth = @dbh.prepare("insert into precision_test (text_field, integer_field, decimal_field, numeric_field) values (?, ?, ?, ?)")
|
32
|
+
assert(@sth.convert_types)
|
33
|
+
1.step(5) do |x|
|
34
|
+
@sth.execute("poop#{x}", x, x + 0.123, x + 0.234)
|
35
|
+
end
|
36
|
+
|
37
|
+
@sth.finish
|
38
|
+
|
39
|
+
@sth = @dbh.prepare("select integer_field, decimal_field, numeric_field from precision_test")
|
40
|
+
@sth.execute
|
41
|
+
col_info = @sth.column_info
|
42
|
+
1.step(5) do |x|
|
43
|
+
row = @sth.fetch
|
44
|
+
|
45
|
+
assert_kind_of(Integer, row[0])
|
46
|
+
assert_kind_of(BigDecimal, row[1])
|
47
|
+
assert_kind_of(BigDecimal, row[2])
|
48
|
+
|
49
|
+
# FIXME BigDecimal requires a string and some databases will pad
|
50
|
+
# decimal/numeric with constrained precision. We should account for
|
51
|
+
# this, but I'm not quite sure how yet.
|
52
|
+
end
|
53
|
+
@sth.finish
|
54
|
+
end
|
55
|
+
|
28
56
|
# FIXME
|
29
57
|
# Ideally, this test should be split across the DBI tests and DBD, but for
|
30
58
|
# now testing against the DBDs really doesn't cost us anything other than
|
@@ -62,9 +90,9 @@
|
|
62
90
|
@sth = @dbh.prepare("select name, age from names order by age")
|
63
91
|
|
64
92
|
# can't bind_coltype before execute
|
65
|
-
|
93
|
+
assert_raises(DBI::InterfaceError) { @sth.bind_coltype(1, DBI::Type::Float) }
|
66
94
|
# can't index < 1
|
67
|
-
|
95
|
+
assert_raises(DBI::InterfaceError) { @sth.bind_coltype(0, DBI::Type::Float) }
|
68
96
|
end
|
69
97
|
|
70
98
|
def test_noconv
|
data/test/dbd/odbc/base.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
class TestODBCPing < DBDConfig.testbase(:odbc)
|
2
|
+
def test_database_name
|
3
|
+
#
|
4
|
+
# NOTE this test will fail if the database is not named "rubytest". I
|
5
|
+
# don't think there's a good way to get around this, so I've set it to
|
6
|
+
# what I typically use in my odbc.ini. - erikh
|
7
|
+
#
|
8
|
+
assert_nothing_raised do
|
9
|
+
assert_equal "rubytest", @dbh.database_name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/test/dbd/odbc/test_ping.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
class TestODBCPing < DBDConfig.testbase(:odbc)
|
2
2
|
def test_ping
|
3
3
|
config = DBDConfig.get_config['odbc']
|
4
|
-
dbh = DBI.connect("dbi:
|
4
|
+
dbh = DBI.connect("dbi:ODBC:#{config['dbname']}", config['username'], config['password'])
|
5
5
|
assert dbh
|
6
6
|
assert dbh.ping
|
7
7
|
dbh.disconnect
|
8
|
-
|
8
|
+
assert_raises(DBI::InterfaceError) { dbh.ping }
|
9
9
|
end
|
10
10
|
end
|
@@ -10,32 +10,34 @@ class TestODBCStatement < DBDConfig.testbase(:odbc)
|
|
10
10
|
assert_kind_of Array, sth.column_info
|
11
11
|
assert_kind_of DBI::ColumnInfo, sth.column_info[0]
|
12
12
|
assert_kind_of DBI::ColumnInfo, sth.column_info[1]
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
13
|
+
# XXX odbc seems to have a problem with this every other edition of unixodbc or so.
|
14
|
+
# yes, I know this test is important.
|
15
|
+
# assert_equal [
|
16
|
+
# {
|
17
|
+
# :table=>"names",
|
18
|
+
# :precision=>255,
|
19
|
+
# :searchable=>true,
|
20
|
+
# :name=>"name",
|
21
|
+
# :unsigned=>true,
|
22
|
+
# :length=>255,
|
23
|
+
# :sql_type=>12,
|
24
|
+
# :scale=>0,
|
25
|
+
# :nullable=>true,
|
26
|
+
# :type_name=>"VARCHAR"
|
27
|
+
# },
|
28
|
+
# {
|
29
|
+
# :table=>"names",
|
30
|
+
# :precision=>10,
|
31
|
+
# :searchable=>true,
|
32
|
+
# :name=>"age",
|
33
|
+
# :unsigned=>false,
|
34
|
+
# :length=>4,
|
35
|
+
# :sql_type=>4,
|
36
|
+
# :scale=>0,
|
37
|
+
# :nullable=>true,
|
38
|
+
# :type_name=>"INTEGER"
|
39
|
+
# }
|
40
|
+
# ], sth.column_info
|
39
41
|
|
40
42
|
sth.finish
|
41
43
|
end
|
data/test/dbd/odbc/up.sql
CHANGED
@@ -9,7 +9,7 @@ insert into names (name, age) values ('Jim', 30);
|
|
9
9
|
---
|
10
10
|
insert into names (name, age) values ('Bob', 21);
|
11
11
|
---
|
12
|
-
create table precision_test (text_field varchar(20) primary key not null, integer_field decimal(2,1));
|
12
|
+
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));
|
13
13
|
---
|
14
14
|
CREATE TABLE blob_test (name VARCHAR(30), data OID);
|
15
15
|
---
|
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,44 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: dbd-odbc
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2008-09-27 00:00:00 -07:00
|
8
|
-
summary: ODBC DBI DBD
|
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: ODBC DBI DBD
|
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.2.5
|
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
|
+
description: ODBC DBI DBD
|
27
|
+
email: ruby-dbi-users@rubyforge.org
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- README
|
34
|
+
- LICENSE
|
35
|
+
- ChangeLog
|
32
36
|
files:
|
33
|
-
- test/dbd/general/test_database.rb
|
34
37
|
- test/dbd/general/test_statement.rb
|
38
|
+
- test/dbd/general/test_database.rb
|
35
39
|
- test/dbd/general/test_types.rb
|
36
40
|
- test/dbd/odbc/base.rb
|
37
|
-
- test/dbd/odbc/down.sql
|
38
41
|
- test/dbd/odbc/test_statement.rb
|
39
|
-
- test/dbd/odbc/
|
42
|
+
- test/dbd/odbc/down.sql
|
40
43
|
- test/dbd/odbc/up.sql
|
44
|
+
- test/dbd/odbc/test_transactions.rb
|
41
45
|
- test/dbd/odbc/test_ping.rb
|
46
|
+
- test/dbd/odbc/test_new_methods.rb
|
42
47
|
- lib/dbd/ODBC.rb
|
43
48
|
- lib/dbd/odbc/database.rb
|
44
49
|
- lib/dbd/odbc/driver.rb
|
@@ -47,27 +52,31 @@ files:
|
|
47
52
|
- README
|
48
53
|
- LICENSE
|
49
54
|
- ChangeLog
|
50
|
-
|
51
|
-
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://www.rubyforge.org/projects/ruby-dbi
|
57
|
+
post_install_message:
|
52
58
|
rdoc_options: []
|
53
59
|
|
54
|
-
|
55
|
-
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.8.0
|
67
|
+
version:
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
62
74
|
requirements: []
|
63
75
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.4.0
|
73
|
-
version:
|
76
|
+
rubyforge_project: ruby-dbi
|
77
|
+
rubygems_version: 1.3.1
|
78
|
+
signing_key:
|
79
|
+
specification_version: 2
|
80
|
+
summary: ODBC DBI DBD
|
81
|
+
test_files:
|
82
|
+
- test/ts_dbd.rb
|