dbd-sqlanywhere 0.1.2 → 1.0.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.
@@ -1,249 +0,0 @@
1
- @class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
2
-
3
- def test_execute
4
- assert_nothing_raised do
5
- @dbh.execute("select * from names order by age") do |sth|
6
- assert_equal([["Joe", 19], ["Bob", 21], ["Jim", 30]], sth.fetch_all)
7
- end
8
- end
9
- end
10
-
11
- def test_quoting # FIXME breaks sqlite-ruby to a segfault - research
12
- @sth = nil
13
-
14
- assert_nothing_raised do
15
- if dbtype == "postgresql"
16
- @sth = @dbh.prepare('select E\'\\\\\'')
17
- else
18
- @sth = @dbh.prepare('select \'\\\\\'')
19
- end
20
- @sth.execute
21
- row = @sth.fetch
22
- assert_equal ['\\'], row
23
- @sth.finish
24
- end
25
- end
26
-
27
- def test_duplicate_columns
28
- assert_nothing_raised do
29
- @sth = @dbh.prepare("select name, name from names where name = ?")
30
- @sth.execute("Bob")
31
- assert_equal [["Bob", "Bob"]], @sth.fetch_all
32
- @sth.finish
33
- end
34
- end
35
-
36
- def test_columninfo
37
- @sth = nil
38
-
39
- assert_nothing_raised do
40
- @sth = @dbh.prepare("select * from precision_test")
41
- @sth.execute
42
-
43
- cols = @sth.column_info
44
-
45
- assert(cols)
46
- assert_kind_of(Array, cols)
47
- assert_equal(2, cols.length)
48
-
49
- # the first column should always be "text_field" and have the following
50
- # properties:
51
- assert_equal("text_field", cols[0]["name"])
52
- assert_equal(20, cols[0]["precision"])
53
- # scale can be either nil or 0 for character types.
54
- case cols[0]["scale"]
55
- when nil
56
- assert_equal(nil, cols[0]["scale"])
57
- when 0
58
- assert_equal(0, cols[0]["scale"])
59
- else
60
- flunk "scale can be either 0 or nil for character types"
61
- end
62
-
63
- assert_equal(
64
- DBI::Type::Varchar,
65
- DBI::TypeUtil.type_name_to_module(cols[0]["type_name"])
66
- )
67
-
68
- # the second column should always be "integer_field" and have the following
69
- # properties:
70
- assert_equal("integer_field", cols[1]["name"])
71
- assert_equal(1, cols[1]["scale"])
72
- assert_equal(2, cols[1]["precision"])
73
- assert_equal(
74
- DBI::Type::Decimal,
75
- DBI::TypeUtil.type_name_to_module(cols[1]["type_name"])
76
- )
77
-
78
- cols.each { |col| assert_kind_of(DBI::ColumnInfo, col) }
79
- @sth.finish
80
- end
81
- end
82
-
83
- def test_duplicate_columns
84
- assert_nothing_raised do
85
- @sth = @dbh.prepare("select name, name from names where name = ?")
86
- @sth.execute("Bob")
87
- assert_equal [["Bob", "Bob"]], @sth.fetch_all
88
- @sth.finish
89
- end
90
- end
91
-
92
- def test_rows
93
- @sth = nil
94
-
95
- assert_nothing_raised do
96
- @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
97
- @sth.execute("Bill", 22);
98
- end
99
-
100
- assert 1, @sth.rows
101
-
102
- @sth.finish
103
- @sth = nil
104
-
105
- assert_nothing_raised do
106
- @sth = @dbh.prepare("delete from names where name = ?")
107
- @sth.execute("Bill");
108
- end
109
-
110
- assert 1, @sth.rows
111
-
112
- @sth.finish
113
-
114
- assert_nothing_raised do
115
- @sth = @dbh.prepare("select * from names")
116
- @sth.execute
117
- end
118
-
119
- assert_equal 0, @sth.rows
120
- assert @sth.fetchable?
121
- assert @sth.any?
122
- assert @sth.rows.zero?
123
- @sth.finish
124
- end
125
-
126
- def test_prepare_execute
127
- assert_nothing_raised do
128
- @sth = @dbh.prepare("select * from names")
129
- @sth.execute
130
- @sth.finish
131
- end
132
-
133
- assert_nothing_raised do
134
- @sth = @dbh.prepare("select * from names where name = ?")
135
- @sth.execute("Bob")
136
- @sth.finish
137
- end
138
-
139
- assert_nothing_raised do
140
- @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
141
- @sth.execute("Bill", 22);
142
- @sth.finish
143
- end
144
- end
145
-
146
- def test_prepare_execute_with_transactions
147
- @dbh["AutoCommit"] = false
148
- config = DBDConfig.get_config['sqlite3']
149
-
150
- # rollback 1 (the right way)
151
- @sth = nil
152
- @sth2 = nil
153
-
154
- assert_nothing_raised do
155
- @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
156
- @sth.execute("Billy", 23)
157
- @sth2 = @dbh.prepare("select * from names where name = ?")
158
- @sth2.execute("Billy")
159
- end
160
- assert_equal ["Billy", 23 ], @sth2.fetch
161
- @sth2.finish
162
- @sth.finish
163
- assert_nothing_raised { @dbh.rollback }
164
-
165
- @sth = @dbh.prepare("select * from names where name = ?")
166
- @sth.execute("Billy")
167
- assert_nil @sth.fetch
168
- @sth.finish
169
-
170
- # rollback 2 (without closing statements first)
171
-
172
- @sth = nil
173
- @sth2 = nil
174
-
175
- assert_nothing_raised do
176
- @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
177
- @sth.execute("Billy", 23)
178
- @sth2 = @dbh.prepare("select * from names where name = ?")
179
- @sth2.execute("Billy")
180
- end
181
-
182
- assert_equal ["Billy", 23], @sth2.fetch
183
-
184
- # FIXME some throw here, some don't. we should probably normalize this
185
- @dbh.rollback rescue true
186
-
187
- @sth2.finish
188
- @sth.finish
189
- assert_nothing_raised { @dbh.rollback }
190
-
191
- @sth = @dbh.prepare("select * from names where name = ?")
192
- @sth.execute("Billy")
193
- assert_nil @sth.fetch
194
- @sth.finish
195
-
196
- # commit
197
-
198
- @sth = nil
199
- @sth2 = nil
200
-
201
- assert_nothing_raised do
202
- @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
203
- @sth.execute("Billy", 23)
204
- @sth2 = @dbh.prepare("select * from names where name = ?")
205
- @sth2.execute("Billy")
206
- end
207
- assert_equal ["Billy", 23 ], @sth2.fetch
208
- @sth2.finish
209
- @sth.finish
210
- assert_nothing_raised { @dbh.commit }
211
-
212
- @sth = @dbh.prepare("select * from names where name = ?")
213
- @sth.execute("Billy")
214
- assert_equal ["Billy", 23 ], @sth.fetch
215
- @sth.finish
216
- end
217
-
218
- def test_fetch
219
- @sth = nil
220
- assert_nothing_raised do
221
- @sth = @dbh.prepare("select * from names order by age")
222
- @sth.execute
223
- end
224
-
225
- # this tests that we're getting the rows in the right order,
226
- # and that the types are being converted.
227
- assert_equal ["Joe", 19], @sth.fetch
228
- assert_equal ["Bob", 21], @sth.fetch
229
- assert_equal ["Jim", 30], @sth.fetch
230
- assert_nil @sth.fetch
231
-
232
- @sth.finish
233
- end
234
-
235
- def test_transaction_block
236
- @dbh["AutoCommit"] = false
237
- # this transaction should not fail because it called return early
238
- @dbh.transaction do |dbh|
239
- dbh.do('INSERT INTO names (name, age) VALUES (?, ?)', "Cooter", 69)
240
- return 42
241
- end
242
- @sth = @dbh.prepare("select * from names where name = ?")
243
- @sth.execute("Cooter")
244
- row = @sth.fetch
245
- assert row
246
- assert_equal ["Cooter", 69], row
247
- @sth.finish
248
- end
249
- end
@@ -1,253 +0,0 @@
1
- @class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
2
- def skip_bit
3
- # FIXME this test fails because DBI's type system blows goats.
4
- @sth = nil
5
-
6
- assert_nothing_raised do
7
- @sth = @dbh.prepare("insert into bit_test (mybit) values (?)")
8
- @sth.bind_param(1, 0, DBI::SQL_TINYINT)
9
- @sth.execute
10
- # if dbtype == "postgresql"
11
- # @sth.execute("0")
12
- # else
13
- # @sth.execute(0)
14
- # end
15
- @sth.finish
16
- end
17
-
18
- assert_nothing_raised do
19
- @sth = @dbh.prepare("select * from bit_test")
20
- @sth.execute
21
- row = @sth.fetch
22
- @sth.finish
23
-
24
- assert_equal [0], row
25
- end
26
- end
27
-
28
- # FIXME
29
- # Ideally, this test should be split across the DBI tests and DBD, but for
30
- # now testing against the DBDs really doesn't cost us anything other than
31
- # debugging time if something breaks.
32
- def test_bind_coltype
33
- # ensure type conv didn't get turned off somewhere.
34
- assert(DBI.convert_types)
35
- assert(@dbh.convert_types)
36
-
37
- assert_nothing_raised do
38
- @sth = @dbh.prepare("select name, age from names order by age")
39
- assert(@sth.convert_types) # again
40
- @sth.execute
41
- @sth.bind_coltype(2, DBI::Type::Varchar)
42
- assert_equal(
43
- [
44
- ["Joe", "19"],
45
- ["Bob", "21"],
46
- ["Jim", "30"],
47
- ], @sth.fetch_all
48
- )
49
- @sth.finish
50
- end
51
-
52
- # just to be sure..
53
- assert_nothing_raised do
54
- @sth = @dbh.prepare("select name, age from names order by age")
55
- @sth.execute
56
- @sth.bind_coltype(2, DBI::Type::Float)
57
- @sth.fetch_all.collect { |x| assert_kind_of(Float, x[1]) }
58
- @sth.finish
59
- end
60
-
61
- # now, let's check some failure cases
62
- @sth = @dbh.prepare("select name, age from names order by age")
63
-
64
- # can't bind_coltype before execute
65
- assert_raise(DBI::InterfaceError) { @sth.bind_coltype(1, DBI::Type::Float) }
66
- # can't index < 1
67
- assert_raise(DBI::InterfaceError) { @sth.bind_coltype(0, DBI::Type::Float) }
68
- end
69
-
70
- def test_noconv
71
- # XXX this test will fail the whole test suite miserably if it fails at any point.
72
- assert(DBI.convert_types)
73
-
74
- DBI.convert_types = false
75
- @sth.finish rescue nil
76
- @dbh.disconnect
77
- set_base_dbh
78
-
79
- assert(!@dbh.convert_types)
80
-
81
- assert_nothing_raised do
82
- @sth = @dbh.prepare("select * from names order by age")
83
- assert(!@sth.convert_types)
84
- @sth.execute
85
- assert_equal(
86
- [
87
- ["Joe", "19"],
88
- ["Bob", "21"],
89
- ["Jim", "30"],
90
- ], @sth.fetch_all
91
- )
92
- @sth.finish
93
- end
94
-
95
- DBI.convert_types = true
96
- @sth.finish rescue nil
97
- @dbh.disconnect
98
- set_base_dbh
99
-
100
- assert(DBI.convert_types)
101
- assert(@dbh.convert_types)
102
-
103
- assert_nothing_raised do
104
- @sth = @dbh.prepare("select * from names order by age")
105
- assert(@sth.convert_types)
106
- @sth.execute
107
- assert_equal(
108
- [
109
- ["Joe", 19],
110
- ["Bob", 21],
111
- ["Jim", 30],
112
- ], @sth.fetch_all
113
- )
114
- @sth.finish
115
- end
116
-
117
- @dbh.convert_types = false
118
-
119
- assert_nothing_raised do
120
- @sth = @dbh.prepare("select * from names order by age")
121
- assert(!@sth.convert_types)
122
- @sth.execute
123
- assert_equal(
124
- [
125
- ["Joe", "19"],
126
- ["Bob", "21"],
127
- ["Jim", "30"],
128
- ], @sth.fetch_all
129
- )
130
- @sth.finish
131
- end
132
-
133
- @dbh.convert_types = true
134
-
135
- assert_nothing_raised do
136
- @sth = @dbh.prepare("select * from names order by age")
137
- assert(@sth.convert_types)
138
- @sth.convert_types = false
139
- @sth.execute
140
- assert_equal(
141
- [
142
- ["Joe", "19"],
143
- ["Bob", "21"],
144
- ["Jim", "30"],
145
- ], @sth.fetch_all
146
- )
147
- @sth.finish
148
- end
149
- rescue Exception => e
150
- DBI.convert_types = true
151
- @sth.finish
152
- @dbh.disconnect
153
- set_base_dbh
154
- raise e
155
- end
156
-
157
- def test_null
158
- assert_nothing_raised do
159
- @sth = @dbh.prepare('insert into names (name, age) values (?, ?)')
160
- @sth.execute("'NULL'", 201)
161
- @sth.execute(nil, 202)
162
- @sth.execute("NULL", 203)
163
- @sth.finish
164
- end
165
-
166
- assert_nothing_raised do
167
- @sth = @dbh.prepare('select * from names where age > 200 order by age')
168
- @sth.execute
169
- assert_equal(["'NULL'", 201], @sth.fetch)
170
- assert_equal([nil, 202], @sth.fetch)
171
- assert_equal(["NULL", 203], @sth.fetch)
172
- @sth.finish
173
- end
174
- end
175
-
176
- def test_time
177
- @sth = nil
178
- t = nil
179
- assert_nothing_raised do
180
- @sth = @dbh.prepare("insert into time_test (mytime) values (?)")
181
- t = Time.now
182
- @sth.execute(t)
183
- @sth.finish
184
- end
185
-
186
- assert_nothing_raised do
187
- @sth = @dbh.prepare("select * from time_test")
188
- @sth.execute
189
- row = @sth.fetch
190
- assert_kind_of DateTime, row[0]
191
- assert_equal t.hour, row[0].hour
192
- assert_equal t.min, row[0].min
193
- assert_equal t.sec, row[0].sec
194
- @sth.finish
195
- end
196
- end
197
-
198
- def test_timestamp
199
- @sth = nil
200
- # We omit fractional second testing here -- timestamp precision
201
- # is a very slippery, dependent on driver and driver version.
202
- t = DBI::Timestamp.new(2008, 3, 8, 10, 39, 1)
203
- assert_nothing_raised do
204
- @sth = @dbh.prepare("insert into timestamp_test (mytimestamp) values (?)")
205
- @sth.execute(t)
206
- @sth.finish
207
- end
208
-
209
- assert_nothing_raised do
210
- @sth = @dbh.prepare("select * from timestamp_test")
211
- @sth.execute
212
- row = @sth.fetch
213
- assert_kind_of DateTime, row[0]
214
- assert_equal t.year, row[0].year
215
- assert_equal t.month, row[0].month
216
- assert_equal t.day, row[0].day
217
- assert_equal t.hour, row[0].hour
218
- assert_equal t.min, row[0].min
219
- assert_equal t.sec, row[0].sec
220
- # omit fractional tests
221
- @sth.finish
222
- end
223
- end
224
-
225
- def test_boolean_return
226
- @sth = nil
227
-
228
- unless dbtype == "odbc" # ODBC has no boolean type
229
- assert_nothing_raised do
230
- @sth = @dbh.prepare("insert into boolean_test (num, mybool) values (?, ?)")
231
- @sth.execute(1, true)
232
- @sth.execute(2, false)
233
- @sth.finish
234
- end
235
-
236
- assert_nothing_raised do
237
- @sth = @dbh.prepare("select * from boolean_test order by num")
238
- @sth.execute
239
-
240
- pairs = @sth.fetch_all
241
-
242
- assert_equal(
243
- [
244
- [1, true],
245
- [2, false],
246
- ], pairs
247
- )
248
-
249
- @sth.finish
250
- end
251
- end
252
- end
253
- end