dbd-sqlanywhere 0.1.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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