fb 0.5.4

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.
@@ -0,0 +1,235 @@
1
+ require 'test/unit'
2
+ require 'test/FbTestCases'
3
+ require 'fb'
4
+ include Fb
5
+
6
+ class CursorTestCases < Test::Unit::TestCase
7
+ include FbTestCases
8
+
9
+ def test_fetch_array
10
+ Database.create(@parms) do |connection|
11
+ connection.execute("select * from rdb$database") do |cursor|
12
+ assert_instance_of Cursor, cursor
13
+ row = cursor.fetch :array
14
+ assert_instance_of Array, row
15
+ assert_equal 4, row.size
16
+ end
17
+ connection.drop
18
+ end
19
+ end
20
+
21
+ def test_fetch_hash
22
+ Database.create(@parms) do |connection|
23
+ connection.execute("select * from rdb$database") do |cursor|
24
+ assert_instance_of Cursor, cursor
25
+ row = cursor.fetch :hash
26
+ assert_instance_of Hash, row
27
+ assert_equal 4, row.size
28
+ end
29
+ connection.drop
30
+ end
31
+ end
32
+
33
+ def test_fetch_all_array
34
+ Database.create(@parms) do |connection|
35
+ connection.execute("select * from rdb$database") do |cursor|
36
+ assert_instance_of Cursor, cursor
37
+ rows = cursor.fetchall :array
38
+ assert_instance_of Array, rows
39
+ assert_equal 1, rows.size
40
+ assert_instance_of Array, rows[0]
41
+ assert_equal 4, rows[0].size
42
+ end
43
+ connection.drop
44
+ end
45
+ end
46
+
47
+ def test_fetch_all_hash
48
+ Database.create(@parms) do |connection|
49
+ connection.execute("select * from rdb$database") do |cursor|
50
+ assert_instance_of Cursor, cursor
51
+ rows = cursor.fetchall :hash
52
+ assert_instance_of Array, rows
53
+ assert_equal 1, rows.size
54
+ assert_instance_of Hash, rows[0]
55
+ assert_equal 4, rows[0].size
56
+ end
57
+ connection.drop
58
+ end
59
+ end
60
+
61
+ def test_fields_array
62
+ Database.create(@parms) do |connection|
63
+ connection.execute("select * from rdb$database") do |cursor|
64
+ fields = cursor.fields
65
+ fields_ary = cursor.fields :array
66
+ assert_equal fields, fields_ary
67
+ assert_equal 4, fields.size
68
+ assert_equal "RDB$DESCRIPTION", fields[0].name;
69
+ assert_equal "RDB$RELATION_ID", fields[1].name;
70
+ assert_equal "RDB$SECURITY_CLASS", fields[2].name;
71
+ assert_equal "RDB$CHARACTER_SET_NAME", fields[3].name;
72
+ end
73
+ connection.drop
74
+ end
75
+ end
76
+
77
+ def test_fields_array_downcased
78
+ Database.create(@parms.merge(:downcase_names => true)) do |connection|
79
+ connection.execute("select * from rdb$database") do |cursor|
80
+ fields = cursor.fields
81
+ fields_ary = cursor.fields :array
82
+ assert_equal fields, fields_ary
83
+ assert_equal 4, fields.size
84
+ assert_equal "rdb$description", fields[0].name;
85
+ assert_equal "rdb$relation_id", fields[1].name;
86
+ assert_equal "rdb$security_class", fields[2].name;
87
+ assert_equal "rdb$character_set_name", fields[3].name;
88
+ end
89
+ connection.drop
90
+ end
91
+ end
92
+
93
+ def test_fields_hash
94
+ Database.create(@parms) do |connection|
95
+ connection.execute("select * from rdb$database") do |cursor|
96
+ fields = cursor.fields :hash
97
+ assert_equal 4, fields.size
98
+ assert_equal 520, fields["RDB$DESCRIPTION"].type_code
99
+ assert_equal 500, fields["RDB$RELATION_ID"].type_code
100
+ assert_equal 452, fields["RDB$SECURITY_CLASS"].type_code
101
+ assert_equal 452, fields["RDB$CHARACTER_SET_NAME"].type_code
102
+ end
103
+ connection.drop
104
+ end
105
+ end
106
+
107
+ def test_fields_hash_downcased
108
+ Database.create(@parms.merge(:downcase_names => true)) do |connection|
109
+ connection.execute("select * from rdb$database") do |cursor|
110
+ fields = cursor.fields :hash
111
+ assert_equal 4, fields.size
112
+ assert_equal 520, fields["rdb$description"].type_code
113
+ assert_equal 500, fields["rdb$relation_id"].type_code
114
+ assert_equal 452, fields["rdb$security_class"].type_code
115
+ assert_equal 452, fields["rdb$character_set_name"].type_code
116
+ end
117
+ connection.drop
118
+ end
119
+ end
120
+
121
+ def test_each_array
122
+ Database.create(@parms) do |connection|
123
+ connection.execute("select * from rdb$database") do |cursor|
124
+ count = 0
125
+ cursor.each :array do |row|
126
+ count += 1
127
+ assert_instance_of Array, row
128
+ assert_equal 4, row.size
129
+ end
130
+ assert_equal 1, count
131
+ end
132
+ connection.drop
133
+ end
134
+ end
135
+
136
+ def test_each_hash
137
+ Database.create(@parms) do |connection|
138
+ connection.execute("select * from rdb$database") do |cursor|
139
+ count = 0
140
+ cursor.each :hash do |row|
141
+ count += 1
142
+ assert_instance_of Hash, row
143
+ assert_equal 4, row.size
144
+ end
145
+ assert_equal 1, count
146
+ end
147
+ connection.drop
148
+ end
149
+ end
150
+
151
+ def test_fetch_after_nil
152
+ Database.create(@parms) do |connection|
153
+ connection.execute("create generator test_seq");
154
+ connection.execute("select gen_id(test_seq, 1) from rdb$database") do |cursor|
155
+ r1 = cursor.fetch
156
+ assert_not_nil r1
157
+ r2 = cursor.fetch
158
+ assert_nil r2
159
+ assert_raise Error do
160
+ r3 = cursor.fetch
161
+ end
162
+ end
163
+ connection.execute("select * from rdb$database") do |cursor|
164
+ r1 = cursor.fetch
165
+ assert_not_nil r1
166
+ r2 = cursor.fetch
167
+ assert_nil r2
168
+ assert_raise Error do
169
+ r3 = cursor.fetch
170
+ end
171
+ end
172
+ connection.drop
173
+ end
174
+ end
175
+
176
+ def test_fetch_hash_with_aliased_fields
177
+ sql = "SELECT RDB$DESCRIPTION DES, RDB$RELATION_ID REL, RDB$SECURITY_CLASS SEC, RDB$CHARACTER_SET_NAME FROM RDB$DATABASE"
178
+ Database.create(@parms) do |connection|
179
+ connection.execute(sql) do |cursor|
180
+ assert_instance_of Cursor, cursor
181
+ row = cursor.fetch :hash
182
+ assert_instance_of Hash, row
183
+ assert_equal 4, row.size
184
+ assert row.keys.include?("DES"), "No field DES"
185
+ assert row.keys.include?("REL"), "No field REL"
186
+ assert row.keys.include?("SEC"), "No field SEC"
187
+ assert row.keys.include?("RDB$CHARACTER_SET_NAME"), "No field RDB$CHARACTER_SET_NAME"
188
+ end
189
+ connection.drop
190
+ end
191
+ end
192
+
193
+ def test_simultaneous_cursors
194
+ sql_schema = <<-END
195
+ CREATE TABLE MASTER (ID INT, NAME1 VARCHAR(10));
196
+ CREATE TABLE DETAIL (ID INT, MASTER_ID INT, NAME2 VARCHAR(10));
197
+ END
198
+ sql_insert_master = "INSERT INTO MASTER (ID, NAME1) VALUES (?, ?)"
199
+ sql_insert_detail = "INSERT INTO DETAIL (ID, MASTER_ID, NAME2) VALUES (?, ?, ?)"
200
+ sql_select_master = "SELECT * FROM MASTER ORDER BY ID"
201
+ sql_select_detail = "SELECT * FROM DETAIL ORDER BY ID"
202
+ Database.create(@parms) do |connection|
203
+ connection.execute_script(sql_schema)
204
+ connection.transaction do
205
+ 3.times do |m|
206
+ connection.execute(sql_insert_master, m, "name_#{m}")
207
+ end
208
+ 9.times do |d|
209
+ connection.execute(sql_insert_detail, d, d / 3, "name_#{d / 3}_#{d}")
210
+ end
211
+ end
212
+ master = connection.execute(sql_select_master)
213
+ begin
214
+ detail = connection.execute(sql_select_detail)
215
+ begin
216
+ 3.times do |m|
217
+ mr = master.fetch
218
+ assert_equal m, mr[0]
219
+ assert_equal "name_#{m}", mr[1]
220
+ 3.times do |d|
221
+ dr = detail.fetch
222
+ assert_equal m * 3 + d, dr[0]
223
+ assert_equal m, dr[1]
224
+ assert_equal "name_#{m}_#{m * 3 + d}", dr[2]
225
+ end
226
+ end
227
+ ensure
228
+ detail.close
229
+ end
230
+ ensure
231
+ master.close
232
+ end
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,428 @@
1
+ require 'test/unit'
2
+ require 'test/FbTestCases'
3
+ require 'fb'
4
+ require 'date'
5
+
6
+ include Fb
7
+
8
+ class DataTypesTestCases < Test::Unit::TestCase
9
+ include FbTestCases
10
+
11
+ def gen_i(i)
12
+ i
13
+ end
14
+
15
+ def gen_si(i)
16
+ i
17
+ end
18
+
19
+ def gen_bi(i)
20
+ i * 1000000000
21
+ end
22
+
23
+ def gen_f(i)
24
+ i / 2
25
+ end
26
+
27
+ def gen_d(i)
28
+ i * 3333 / 2
29
+ end
30
+
31
+ def gen_c(i)
32
+ "%c" % (i + 64)
33
+ end
34
+
35
+ def gen_c10(i)
36
+ gen_c(i) * 5
37
+ end
38
+
39
+ def gen_vc(i)
40
+ gen_c(i)
41
+ end
42
+
43
+ def gen_vc10(i)
44
+ gen_c(i) * i
45
+ end
46
+
47
+ def gen_vc10000(i)
48
+ gen_c(i) * i * 1000
49
+ end
50
+
51
+ def gen_dt(i)
52
+ Date.civil(2000, i+1, i+1)
53
+ end
54
+
55
+ def gen_tm(i)
56
+ Time.utc(1990, 1, 1, 12, i, i)
57
+ end
58
+
59
+ def gen_ts(i)
60
+ Time.local(2006, 1, 1, i, i, i)
61
+ end
62
+
63
+ def gen_n92(i)
64
+ i * 100
65
+ end
66
+
67
+ def gen_d92(i)
68
+ i * 100
69
+ end
70
+
71
+ def test_insert_basic_types
72
+ sql_schema = <<-END
73
+ create table TEST (
74
+ I INTEGER,
75
+ SI SMALLINT,
76
+ BI BIGINT,
77
+ F FLOAT,
78
+ D DOUBLE PRECISION,
79
+ C CHAR,
80
+ C10 CHAR(10),
81
+ VC VARCHAR(1),
82
+ VC10 VARCHAR(10),
83
+ VC10000 VARCHAR(10000),
84
+ DT DATE,
85
+ TM TIME,
86
+ TS TIMESTAMP,
87
+ N92 NUMERIC(9,2),
88
+ D92 DECIMAL(9,2));
89
+ END
90
+ sql_insert = <<-END
91
+ insert into test
92
+ (I, SI, BI, F, D, C, C10, VC, VC10, VC10000, DT, TM, TS, N92, D92)
93
+ values
94
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
95
+ END
96
+ sql_select = "select * from TEST order by I"
97
+ Database.create(@parms) do |connection|
98
+ connection.execute(sql_schema);
99
+ connection.transaction do
100
+ 10.times do |i|
101
+ connection.execute(
102
+ sql_insert,
103
+ gen_i(i), gen_si(i), gen_bi(i),
104
+ gen_f(i), gen_d(i),
105
+ gen_c(i), gen_c10(i), gen_vc(i), gen_vc10(i), gen_vc10000(i),
106
+ gen_dt(i), gen_tm(i), gen_ts(i),
107
+ gen_n92(i), gen_d92(i))
108
+ end
109
+ end
110
+ connection.execute(sql_select) do |cursor|
111
+ i = 0
112
+ cursor.each :hash do |row|
113
+ assert_equal gen_i(i), row["I"], "INTEGER"
114
+ assert_equal gen_si(i), row["SI"], "SMALLINT"
115
+ assert_equal gen_bi(i), row["BI"], "BIGINT"
116
+ assert_equal gen_f(i), row["F"], "FLOAT"
117
+ assert_equal gen_d(i), row["D"], "DOUBLE PRECISION"
118
+ assert_equal gen_c(i), row["C"], "CHAR"
119
+ assert_equal gen_c10(i).ljust(10), row["C10"], "CHAR(10)"
120
+ assert_equal gen_vc(i), row["VC"], "VARCHAR(1)"
121
+ assert_equal gen_vc10(i), row["VC10"], "VARCHAR(10)"
122
+ assert_equal gen_vc10000(i), row["VC10000"], "VARCHAR(10000)"
123
+ assert_equal gen_dt(i), row["DT"], "DATE"
124
+ #assert_equal gen_tm(i).strftime("%H%M%S"), row["TM"].utc.strftime("%H%M%S"), "TIME"
125
+ assert_equal gen_ts(i), row["TS"], "TIMESTAMP"
126
+ assert_equal gen_n92(i), row["N92"], "NUMERIC"
127
+ assert_equal gen_d92(i), row["D92"], "DECIMAL"
128
+ i += 1
129
+ end
130
+ end
131
+ connection.drop
132
+ end
133
+ end
134
+
135
+ def test_insert_blobs_text
136
+ sql_schema = "create table test (id int, name varchar(20), memo blob sub_type text)"
137
+ sql_insert = "insert into test (id, name, memo) values (?, ?, ?)"
138
+ sql_select = "select * from test order by id"
139
+ Database.create(@parms) do |connection|
140
+ connection.execute(sql_schema);
141
+ memo = IO.read("fb.c")
142
+ assert memo.size > 50000
143
+ connection.transaction do
144
+ 10.times do |i|
145
+ connection.execute(sql_insert, i, i.to_s, memo);
146
+ end
147
+ end
148
+ connection.execute(sql_select) do |cursor|
149
+ i = 0
150
+ cursor.each :hash do |row|
151
+ assert_equal i, row["ID"]
152
+ assert_equal i.to_s, row["NAME"]
153
+ assert_equal memo, row["MEMO"]
154
+ i += 1
155
+ end
156
+ end
157
+ connection.drop
158
+ end
159
+ end
160
+
161
+ def test_insert_blobs_binary
162
+ sql_schema = "create table test (id int, name varchar(20), attachment blob segment size 1000)"
163
+ sql_insert = "insert into test (id, name, attachment) values (?, ?, ?)"
164
+ sql_select = "select * from test order by id"
165
+ #filename = "data.dat"
166
+ filename = "fb.c"
167
+ Database.create(@parms) do |connection|
168
+ connection.execute(sql_schema);
169
+ attachment = File.open(filename,"rb") do |f|
170
+ f.read * 3
171
+ end
172
+ assert((attachment.size > 150000), "Not expected size")
173
+ connection.transaction do
174
+ 3.times do |i|
175
+ connection.execute(sql_insert, i, i.to_s, attachment);
176
+ end
177
+ end
178
+ connection.execute(sql_select) do |cursor|
179
+ i = 0
180
+ cursor.each :array do |row|
181
+ assert_equal i, row[0], "ID's do not match"
182
+ assert_equal i.to_s, row[1], "NAME's do not match"
183
+ assert_equal attachment.size, row[2].size, "ATTACHMENT sizes do not match"
184
+ i += 1
185
+ end
186
+ end
187
+ connection.drop
188
+ end
189
+ end
190
+
191
+ def test_insert_incorrect_types
192
+ cols = %w{ I SI BI F D C C10 VC VC10 VC10000 DT TM TS }
193
+ types = %w{ INTEGER SMALLINT BIGINT FLOAT DOUBLE\ PRECISION CHAR CHAR(10) VARCHAR(1) VARCHAR(10) VARCHAR(10000) DATE TIME TIMESTAMP }
194
+ sql_schema = "";
195
+ assert_equal cols.size, types.size
196
+ cols.size.times do |i|
197
+ sql_schema << "CREATE TABLE TEST_#{cols[i]} (VAL #{types[i]});\n"
198
+ end
199
+ Database.create(@parms) do |connection|
200
+ connection.execute_script(sql_schema)
201
+ cols.size.times do |i|
202
+ sql_insert = "INSERT INTO TEST_#{cols[i]} (VAL) VALUES (?);"
203
+ if cols[i] == 'I'
204
+ assert_raise TypeError do
205
+ connection.execute(sql_insert, {:five => "five"})
206
+ end
207
+ assert_raise TypeError do
208
+ connection.execute(sql_insert, Time.now)
209
+ end
210
+ assert_raise RangeError do
211
+ connection.execute(sql_insert, 5000000000)
212
+ end
213
+ elsif cols[i] == 'SI'
214
+ assert_raise TypeError do
215
+ connection.execute(sql_insert, {:five => "five"})
216
+ end
217
+ assert_raise TypeError do
218
+ connection.execute(sql_insert, Time.now)
219
+ end
220
+ assert_raise RangeError do
221
+ connection.execute(sql_insert, 100000)
222
+ end
223
+ elsif cols[i] == 'BI'
224
+ assert_raise TypeError do
225
+ connection.execute(sql_insert, {:five => "five"})
226
+ end
227
+ assert_raise TypeError do
228
+ connection.execute(sql_insert, Time.now)
229
+ end
230
+ assert_raise RangeError do
231
+ connection.execute(sql_insert, 184467440737095516160) # 2^64 * 10
232
+ end
233
+ elsif cols[i] == 'F'
234
+ assert_raise TypeError do
235
+ connection.execute(sql_insert, {:five => "five"})
236
+ end
237
+ assert_raise RangeError do
238
+ connection.execute(sql_insert, 10 ** 39)
239
+ end
240
+ elsif cols[i] == 'D'
241
+ assert_raise TypeError do
242
+ connection.execute(sql_insert, {:five => "five"})
243
+ end
244
+ elsif cols[i] == 'VC'
245
+ assert_raise RangeError do
246
+ connection.execute(sql_insert, "too long")
247
+ end
248
+ assert_raise RangeError do
249
+ connection.execute(sql_insert, 1.0/3.0)
250
+ end
251
+ elsif cols[i] == 'VC10'
252
+ assert_raise RangeError do
253
+ connection.execute(sql_insert, 1.0/3.0)
254
+ end
255
+ elsif cols[i].include?('VC10000')
256
+ assert_raise RangeError do
257
+ connection.execute(sql_insert, "X" * 10001)
258
+ end
259
+ elsif cols[i] == 'C'
260
+ assert_raise RangeError do
261
+ connection.execute(sql_insert, "too long")
262
+ end
263
+ elsif cols[i] == 'C10'
264
+ assert_raise RangeError do
265
+ connection.execute(sql_insert, Time.now)
266
+ end
267
+ elsif cols[i] == 'DT'
268
+ assert_raise ArgumentError do
269
+ connection.execute(sql_insert, Date)
270
+ end
271
+ assert_raise ArgumentError do
272
+ connection.execute(sql_insert, 2006)
273
+ end
274
+ elsif cols[i] == 'TM'
275
+ assert_raise TypeError do
276
+ connection.execute(sql_insert, {:date => "2006/1/1"})
277
+ end
278
+ assert_raise TypeError do
279
+ connection.execute(sql_insert, 10000)
280
+ end
281
+ elsif cols[i] == 'TS'
282
+ assert_raise TypeError do
283
+ connection.execute(sql_insert, 5.5)
284
+ end
285
+ assert_raise TypeError do
286
+ connection.execute(sql_insert, 10000)
287
+ end
288
+ elsif cols[i] == 'N92'
289
+ assert_raise TypeError do
290
+ connection.execute(sql_insert, {:five => "five"})
291
+ end
292
+ assert_raise TypeError do
293
+ connection.execute(sql_insert, Time.now)
294
+ end
295
+ assert_raise RangeError do
296
+ connection.execute(sql_insert, 5000000000)
297
+ end
298
+ elsif cols[i] == 'D92'
299
+ assert_raise TypeError do
300
+ connection.execute(sql_insert, {:five => "five"})
301
+ end
302
+ assert_raise TypeError do
303
+ connection.execute(sql_insert, Time.now)
304
+ end
305
+ assert_raise RangeError do
306
+ connection.execute(sql_insert, 5000000000)
307
+ end
308
+ end
309
+ end
310
+ connection.drop
311
+ end
312
+ end
313
+
314
+ def test_insert_correct_types
315
+ cols = %w{ I SI BI F D C C10 VC VC10 VC10000 DT TM TS N92 D92 }
316
+ types = %w{ INTEGER SMALLINT BIGINT FLOAT DOUBLE\ PRECISION CHAR CHAR(10) VARCHAR(1) VARCHAR(10) VARCHAR(10000) DATE TIME TIMESTAMP NUMERIC(9,2) DECIMAL(9,2) }
317
+ sql_schema = "";
318
+ assert_equal cols.size, types.size
319
+ cols.size.times do |i|
320
+ sql_schema << "CREATE TABLE TEST_#{cols[i]} (VAL #{types[i]});\n"
321
+ end
322
+ Database.create(@parms) do |connection|
323
+ connection.execute_script(sql_schema)
324
+ cols.size.times do |i|
325
+ sql_insert = "INSERT INTO TEST_#{cols[i]} (VAL) VALUES (?);"
326
+ sql_select = "SELECT * FROM TEST_#{cols[i]};"
327
+ if cols[i] == 'I'
328
+ connection.execute(sql_insert, 500_000)
329
+ connection.execute(sql_insert, "500_000")
330
+ vals = connection.query(sql_select)
331
+ assert_equal 500_000, vals[0][0]
332
+ assert_equal 500_000, vals[1][0]
333
+ elsif cols[i] == 'SI'
334
+ connection.execute(sql_insert, 32_123)
335
+ connection.execute(sql_insert, "32_123")
336
+ vals = connection.query(sql_select)
337
+ assert_equal 32_123, vals[0][0]
338
+ assert_equal 32_123, vals[1][0]
339
+ elsif cols[i] == 'BI'
340
+ connection.execute(sql_insert, 5_000_000_000)
341
+ connection.execute(sql_insert, "5_000_000_000")
342
+ vals = connection.query(sql_select)
343
+ assert_equal 5_000_000_000, vals[0][0]
344
+ assert_equal 5_000_000_000, vals[1][0]
345
+ elsif cols[i] == 'F'
346
+ connection.execute(sql_insert, 5.75)
347
+ connection.execute(sql_insert, "5.75")
348
+ vals = connection.query(sql_select)
349
+ assert_equal 5.75, vals[0][0]
350
+ assert_equal 5.75, vals[1][0]
351
+ elsif cols[i] == 'D'
352
+ connection.execute(sql_insert, 12345.12345)
353
+ connection.execute(sql_insert, "12345.12345")
354
+ vals = connection.query(sql_select)
355
+ assert_equal 12345.12345, vals[0][0]
356
+ assert_equal 12345.12345, vals[1][0]
357
+ elsif cols[i] == 'VC'
358
+ connection.execute(sql_insert, "5")
359
+ connection.execute(sql_insert, 5)
360
+ vals = connection.query(sql_select)
361
+ assert_equal "5", vals[0][0]
362
+ assert_equal "5", vals[1][0]
363
+ elsif cols[i] == 'VC10'
364
+ connection.execute(sql_insert, "1234567890")
365
+ connection.execute(sql_insert, 1234567890)
366
+ vals = connection.query(sql_select)
367
+ assert_equal "1234567890", vals[0][0]
368
+ assert_equal "1234567890", vals[1][0]
369
+ elsif cols[i].include?('VC10000')
370
+ connection.execute(sql_insert, "1" * 100)
371
+ connection.execute(sql_insert, ("1" * 100).to_i)
372
+ vals = connection.query(sql_select)
373
+ assert_equal "1" * 100, vals[0][0]
374
+ assert_equal "1" * 100, vals[1][0]
375
+ elsif cols[i] == 'C'
376
+ connection.execute(sql_insert, "5")
377
+ connection.execute(sql_insert, 5)
378
+ vals = connection.query(sql_select)
379
+ assert_equal "5", vals[0][0]
380
+ assert_equal "5", vals[1][0]
381
+ elsif cols[i] == 'C10'
382
+ connection.execute(sql_insert, "1234567890")
383
+ connection.execute(sql_insert, 1234567890)
384
+ vals = connection.query(sql_select)
385
+ assert_equal "1234567890", vals[0][0]
386
+ assert_equal "1234567890", vals[1][0]
387
+ elsif cols[i] == 'DT'
388
+ connection.execute(sql_insert, Date.civil(2000,2,2))
389
+ connection.execute(sql_insert, "2000/2/2")
390
+ connection.execute(sql_insert, "2000-2-2")
391
+ vals = connection.query(sql_select)
392
+ assert_equal Date.civil(2000,2,2), vals[0][0]
393
+ assert_equal Date.civil(2000,2,2), vals[1][0]
394
+ elsif cols[i] == 'TM'
395
+ connection.execute(sql_insert, Time.utc(2000,1,1,2,22,22))
396
+ connection.execute(sql_insert, "2000/1/1 2:22:22")
397
+ connection.execute(sql_insert, "2000-1-1 2:22:22")
398
+ vals = connection.query(sql_select)
399
+ assert_equal Time.utc(2000,1,1,2,22,22), vals[0][0]
400
+ assert_equal Time.utc(2000,1,1,2,22,22), vals[1][0]
401
+ elsif cols[i] == 'TS'
402
+ connection.execute(sql_insert, Time.local(2006,6,6,3,33,33))
403
+ connection.execute(sql_insert, "2006/6/6 3:33:33")
404
+ connection.execute(sql_insert, "2006-6-6 3:33:33")
405
+ vals = connection.query(sql_select)
406
+ assert_equal Time.local(2006,6,6,3,33,33), vals[0][0]
407
+ assert_equal Time.local(2006,6,6,3,33,33), vals[1][0]
408
+ assert_equal Time.local(2006,6,6,3,33,33), vals[2][0]
409
+ elsif cols[i] == 'N92'
410
+ connection.execute(sql_insert, 12345.12)
411
+ connection.execute(sql_insert, "12345.12")
412
+ vals = connection.query(sql_select)
413
+ # puts vals.inspect
414
+ assert_equal 12345.12, vals[0][0], "NUMERIC (decimal)"
415
+ assert_equal 12345.12, vals[1][0], "NUMERIC (string)"
416
+ elsif cols[i] == 'D92'
417
+ connection.execute(sql_insert, 12345.12)
418
+ connection.execute(sql_insert, "12345.12")
419
+ vals = connection.query(sql_select)
420
+ # puts vals.inspect
421
+ assert_equal 12345.12, vals[0][0], "DECIMAL (decimal)"
422
+ assert_equal 12345.12, vals[1][0], "DECIMAL (string)"
423
+ end
424
+ end
425
+ connection.drop
426
+ end
427
+ end
428
+ end