jdbc-helper 0.7.7 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,737 @@
1
+ require 'helper'
2
+
3
+ class TestObjectWrapper_0_7 < Test::Unit::TestCase
4
+ include JDBCHelperTestHelper
5
+
6
+ def setup
7
+ @table_name = "tmp_jdbc_helper"
8
+ @procedure_name = "tmp_jdbc_helper_test_proc"
9
+ @blob = 'X' * 1024 # * 1024 # FIXME
10
+ end
11
+
12
+ def teardown
13
+ each_connection do |conn|
14
+ drop_table conn
15
+ conn.update "drop procedure #{@procedure_name}" rescue nil
16
+ end
17
+ end
18
+
19
+ def blob_data
20
+ case @type
21
+ when :postgres
22
+ @blob
23
+ else
24
+ java.io.ByteArrayInputStream.new( @blob.to_java_bytes )
25
+ end
26
+ end
27
+
28
+ def get_blob_data is
29
+ case is
30
+ when String
31
+ is
32
+ when java.io.InputStream
33
+ br = java.io.BufferedReader.new( java.io.InputStreamReader.new(is, "UTF-8") )
34
+ output = StringIO.new
35
+
36
+ while line = br.readLine
37
+ output << line
38
+ end
39
+
40
+ output.string
41
+ else
42
+ # Blob
43
+ is.getBytes(1, is.length()).to_a.pack('U*')
44
+ end
45
+ end
46
+
47
+ def create_table conn
48
+ drop_table conn
49
+ ddl = "
50
+ create table #{@table_name} (
51
+ id int primary key,
52
+ alpha int,
53
+ beta float,
54
+ gamma varchar(100),
55
+ delta #{
56
+ case @type
57
+ when :postgres
58
+ 'bytea'
59
+ when :mysql
60
+ 'longblob'
61
+ when :sqlserver
62
+ 'varbinary(max)'
63
+ else
64
+ 'blob'
65
+ end},
66
+ num_f decimal(15, 5),
67
+ num_fstr decimal(30, 10),
68
+ num_int decimal(9, 0),
69
+ num_long decimal(18, 0),
70
+ num_str decimal(30, 0)
71
+ #{", num_wtf number" if @type == :oracle}
72
+ )
73
+ "
74
+ ddl.gsub('decimal', 'number') if @type == :oracle
75
+ conn.update ddl
76
+ end
77
+
78
+ def drop_table conn
79
+ begin
80
+ conn.update "drop table #{@table_name}"
81
+ return true
82
+ rescue Exception
83
+ return false
84
+ end
85
+ end
86
+
87
+ def test_wrapper
88
+ each_connection do |conn|
89
+ # With symbol
90
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.table(:some_table)
91
+ assert_instance_of JDBCHelper::TableWrapper, conn.table(:some_table)
92
+ assert_instance_of JDBCHelper::TableWrapper, conn[:some_table]
93
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.function(:some_func)
94
+ assert_instance_of JDBCHelper::FunctionWrapper, conn.function(:some_func)
95
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.procedure(:some_proc)
96
+ assert_instance_of JDBCHelper::ProcedureWrapper, conn.procedure(:some_proc)
97
+ assert_equal 'some_table', conn.table(:some_table).name
98
+
99
+ # With string
100
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.table('table')
101
+ assert_instance_of JDBCHelper::TableWrapper, conn.table('db.table')
102
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.function('db.some_func')
103
+ assert_instance_of JDBCHelper::FunctionWrapper, conn.function('some_func')
104
+ assert_kind_of JDBCHelper::ObjectWrapper, conn.procedure('some_proc')
105
+ assert_instance_of JDBCHelper::ProcedureWrapper, conn.procedure('db.some_proc')
106
+ assert_equal 'db.table', conn.table('db.table').name
107
+
108
+ # Invalid object name
109
+ [ ' ', 'object;', 'object -- ', "obj'ect",
110
+ 'obj"ect', 'obj`ect', 'obje(t', 'ob)ect' ].each do |inv|
111
+ assert_raise(ArgumentError) { conn.table(inv) }
112
+ assert_raise(ArgumentError) { conn.function(inv) }
113
+ assert_raise(ArgumentError) { conn.table(inv.to_sym) }
114
+ assert_raise(ArgumentError) { conn.function(inv.to_sym) }
115
+ end
116
+
117
+ # Abstract class
118
+ assert_raise(NotImplementedError) { JDBCHelper::ObjectWrapper.new(conn, 'table') }
119
+ end
120
+ end
121
+
122
+
123
+ def insert_params
124
+ {
125
+ :alpha => 100,
126
+ :beta => JDBCHelper::SQL('0.1 + 0.2'),
127
+ :num_f => 1234567890.12345, # 16 digits
128
+ :num_fstr => BigDecimal.new("12345678901234567890.12345"),
129
+ :num_int => 123456789,
130
+ :num_long => 123456789012345678,
131
+ :num_str => 123456789012345678901234567890,
132
+ :num_wtf => 12345.6789
133
+ }
134
+ end
135
+
136
+ def insert table, cnt = 100, offset = 1
137
+ require 'java'
138
+
139
+ params = insert_params.dup
140
+ params.delete(:num_wtf) unless @type == :oracle
141
+
142
+ cnt.times do |pk|
143
+ icnt = table.
144
+ default(:gamma => 'hello world').
145
+ default(:alpha => 200).
146
+ insert(params.merge(
147
+ :id => pk + offset,
148
+ :delta => blob_data)
149
+ )
150
+ assert_equal 1, icnt unless table.batch?
151
+ end
152
+ end
153
+
154
+ def test_empty
155
+ each_connection do |conn|
156
+ create_table conn
157
+ table = conn.table(@table_name)
158
+
159
+ assert table.empty?
160
+ end
161
+ end
162
+
163
+ def test_function_wrapper
164
+ each_connection do |conn|
165
+ # SQL Server does not have mod function
166
+ assert_equal 2.to_i, conn.function(:mod).call(5, 3).to_i unless @type == :sqlserver
167
+ assert_equal 'yeah', get_blob_data( conn.function(:coalesce).call(nil, nil, 'yeah', 'no') )
168
+ end
169
+ end
170
+
171
+ def test_procedure_wrapper
172
+ each_connection do |conn, conn_info|
173
+ next unless [:mysql, :oracle].include?(@type) # TODO: postgres / sqlserver
174
+
175
+ {
176
+ :proc => @procedure_name,
177
+ :db_proc => [conn_info['database'], @procedure_name].join('.')
178
+ }.each do |mode, prname|
179
+ create_test_procedure_simple conn, prname
180
+
181
+ pr = conn.procedure(prname)
182
+ pr.call # should be ok without any arguments
183
+
184
+ # Complex case
185
+ create_test_procedure conn, prname
186
+ pr.refresh
187
+
188
+ result = pr.call 'hello', 10, [100, Fixnum], [Time.now, Time], nil, Float, String
189
+ assert_instance_of Hash, result
190
+ assert_equal 1000, result[3]
191
+ assert_equal 'hello', result[7]
192
+
193
+ result = pr.call(
194
+ :io1 => [100, Fixnum],
195
+ 'io2' => [Time.now, Time],
196
+ :i2 => 10,
197
+ :i1 => 'hello',
198
+ :o1 => Float, 'o2' => String)
199
+ assert_instance_of Hash, result
200
+ assert_equal 1000, result[:io1]
201
+ assert_equal 'hello', result['o2']
202
+
203
+ # Test default values
204
+ # - MySQL does not support default values
205
+ # - Oracle JDBC does not fully implement getProcedureColumns
206
+ # => Cannot get default values with standard interface => Pending
207
+ if @type != :mysql
208
+ pend("Not tested") do
209
+ result = pr.call(
210
+ :io1 => [100, Fixnum],
211
+ 'io2' => [Time.now, Time],
212
+ #:i2 => 10,
213
+ :i1 => 'hello',
214
+ :o1 => Float, 'o2' => String)
215
+ assert_instance_of Hash, result
216
+ assert_equal 100, result[:io1]
217
+ assert_equal 'hello', result['o2']
218
+
219
+ result = pr.call 'hello', [100, Fixnum], [Time.now, Time], nil, Float, String
220
+ assert_instance_of Hash, result
221
+ assert_equal 100, result[3]
222
+ assert_equal 'hello', result[7]
223
+ end
224
+ end
225
+ end#prname
226
+ end
227
+ end
228
+
229
+ def test_insert_count
230
+ each_connection do |conn|
231
+ create_table conn
232
+ table = conn.table(@table_name)
233
+
234
+ # Count
235
+ assert_equal 0, table.count
236
+ assert table.empty?
237
+
238
+ # Insert
239
+ insert table
240
+
241
+ # Empty?
242
+ assert_equal false, table.empty?
243
+ assert_equal true, table.empty?(:alpha => 999)
244
+ assert_equal true, table.where(:alpha => 999).empty?
245
+
246
+ # Count
247
+ assert_equal 100, table.count
248
+ assert_equal 100, table.count(:alpha => 100)
249
+ assert_equal 1, table.where(:alpha => 100).count(:id => 1) # scoped
250
+ assert_equal 0, table.where(:alpha => 200).count(:id => 1) # scoped
251
+ assert_equal 0, table.count(:beta => nil)
252
+
253
+ assert_equal 100, table.where(:alpha => 100).count
254
+ assert_equal 0, table.where(:beta => nil).count
255
+ assert_equal 40, table.where('id >= 11', 'id <= 50').count
256
+ assert_equal 40, table.where('id >= 11').count('id <= 50')
257
+ assert_equal 40, table.where('id >= 11').where('id <= 50').count
258
+ assert_equal 40, table.where('id >= 11').where('id <= 50').where('1 = 1').count
259
+ assert_equal 0, table.where(:alpha => 100).count(:beta => nil)
260
+
261
+ assert_equal true, table.empty?(:beta => nil)
262
+ assert_equal true, table.where(:beta => nil).empty?
263
+ end
264
+ end
265
+
266
+ def test_insert_ignore
267
+ each_connection do |conn|
268
+ next unless @type == :mysql
269
+
270
+ create_table conn
271
+ table = conn.table(@table_name)
272
+ params = {
273
+ :id => 1,
274
+ :alpha => 100,
275
+ :beta => JDBCHelper::SQL('0.1 + 0.2'),
276
+ :gamma => 'hello world' }
277
+
278
+ 100.times do
279
+ table.insert_ignore(params)
280
+ end
281
+
282
+ assert_equal 1, table.count
283
+ end
284
+ end
285
+
286
+ def test_replace
287
+ each_connection do |conn|
288
+ next unless @type == :mysql
289
+
290
+ create_table conn
291
+ table = conn.table(@table_name)
292
+ params = {
293
+ :id => 1,
294
+ :beta => JDBCHelper::SQL('0.1 + 0.2'),
295
+ :gamma => 'hello world' }
296
+
297
+ 100.times do |i|
298
+ table.replace(params.merge(:alpha => i))
299
+ end
300
+
301
+ assert_equal 1, table.count
302
+ assert_equal 99, table.select.first.alpha
303
+ end
304
+ end
305
+
306
+ def test_select
307
+ each_connection do |conn|
308
+ create_table conn
309
+ table = conn.table(@table_name)
310
+ insert table
311
+ assert_equal 100, table.count
312
+
313
+ def check_row row
314
+ assert_equal 100, row.alpha
315
+ assert_equal 'hello world', row.gamma
316
+ end
317
+
318
+ cnt = 0
319
+ table.select do |row|
320
+ cnt += 1
321
+ check_row row
322
+ end
323
+ assert_equal 100, cnt
324
+
325
+ # each
326
+ cnt = 0
327
+ table.each do |row|
328
+ cnt += 1
329
+ check_row row
330
+ end
331
+ assert_equal 100, cnt
332
+
333
+ # As Enumerable
334
+ cnt = 0
335
+ table.each_slice(10) do |rows|
336
+ cnt += rows.length
337
+ end
338
+ assert_equal 100, cnt
339
+
340
+ # Alias
341
+ cnt = 0
342
+ table.select('alpha OMega') do |row|
343
+ cnt += 1
344
+ assert_equal 100, row.omega
345
+ assert_equal ['omega'], row.labels.map(&:downcase)
346
+ end
347
+ assert_equal 100, cnt
348
+
349
+ # Lob, Decimals
350
+ params = insert_params
351
+ cols = [:delta, :num_f, :num_fstr, :num_int, :num_long, :num_str]
352
+ cols << :num_wtf if @type == :oracle
353
+ table.select(*cols) do |row|
354
+ blob = row.delta
355
+ # SQL Server seems to have a bug in getBinaryStream (FIXME)
356
+ # http://www.herongyang.com/JDBC/SQL-Server-BLOB-getBinaryStream.html
357
+ assert_equal @blob, get_blob_data(blob) unless @type == :sqlserver
358
+ assert_equal BigDecimal, row.num_f.class
359
+ assert_equal BigDecimal, row.num_fstr.class
360
+ assert_equal Fixnum, row.num_int.class
361
+ assert_equal Fixnum, row.num_long.class
362
+ assert_equal Bignum, row.num_str.class
363
+ assert_equal BigDecimal, row.num_wtf.class if @type == :oracle
364
+
365
+ assert_equal params[:num_int], row.num_int
366
+ assert_equal params[:num_long], row.num_long
367
+ assert_equal params[:num_str], row.num_str
368
+ assert_equal params[:num_fstr], row.num_fstr
369
+ assert_equal params[:num_f], row.num_f
370
+ assert_equal params[:num_wtf], row.num_wtf if @type == :oracle
371
+ end
372
+
373
+ cnt = 0
374
+ prev_id = 100
375
+ table.where(:id => 11..20).order('id desc') do |row|
376
+ cnt += 1
377
+ check_row row
378
+
379
+ assert row.id.to_i < prev_id
380
+ prev_id = row.id.to_i
381
+ end
382
+ assert_equal 10, cnt
383
+
384
+ assert_equal "select a, b, c cc from tmp_jdbc_helper " +
385
+ "where id between 11 and 20 order by id desc, name asc",
386
+ table.where(:id => 11..20).
387
+ select(:a, :b, 'c cc').
388
+ order('id desc', 'name asc').sql
389
+
390
+ assert_equal "select a, b, c cc from tmp_jdbc_helper " +
391
+ "where (id != 15) and id between 11 and 20 order by id desc, name asc",
392
+ table.where("id != 15", :id => 11..20).
393
+ select(:a, :b, 'c cc').
394
+ order('id desc', 'name asc').sql
395
+
396
+ assert_raise(ArgumentError) { table.order }
397
+ assert_raise(ArgumentError) { table.order.where }
398
+ assert_raise(ArgumentError) { table.where.order }
399
+ assert_raise(ArgumentError) { table.select.order }
400
+ end
401
+ end
402
+
403
+ def test_delete
404
+ each_connection do |conn|
405
+ create_table conn
406
+ table = conn.table(@table_name)
407
+ insert table
408
+
409
+ # Count
410
+ assert_equal 100, table.count
411
+
412
+ # Delete
413
+ assert_equal 10, table.delete(:id => (1...11))
414
+ assert_equal 10, table.delete(:id => (11..20))
415
+ assert_equal 1, table.delete(:id => 21)
416
+ assert_equal 4, table.delete(:id => [22, 23, 24, 25])
417
+ assert_equal 5, table.delete("id <= 30")
418
+ assert_equal 10, table.where("id <= 40").delete
419
+
420
+ # Could be dangerous (XXX)
421
+ assert_equal 60, table.delete
422
+
423
+ # Count
424
+ assert_equal 0, table.count
425
+ end
426
+ end
427
+
428
+ def test_update
429
+ each_connection do |conn|
430
+ create_table conn
431
+ table = conn.table(@table_name)
432
+ insert table
433
+
434
+ assert_equal 10, table.update(:beta => 0, :where => { :id => (1..10) })
435
+ assert_equal 2, table.where(:id => (55..56)).update(:beta => 0, :where => { :id => (51..60) })
436
+ assert_equal 10, table.where(:id => (11..20)).update(:beta => 1)
437
+
438
+ with_default = table.default(:beta => 0)
439
+ assert_equal 5, with_default.where(:id => (11..15)).update
440
+ assert_equal 5, with_default.where(:id => (16..20)).update
441
+ with_default = table.default(:beta => 1)
442
+ assert_equal 5, with_default.where(:id => (16..20)).update(:beta => 0) # override
443
+ assert_equal 22, table.count(:beta => 0)
444
+ assert_equal 100, table.update(:beta => 1)
445
+
446
+ # Blob-handling
447
+ # SQL Server seems to have a bug with binary streams (FIXME)
448
+ next if @type == :sqlserver
449
+
450
+ first_row = table.select(:delta).first
451
+ blob = first_row.delta
452
+
453
+ table.update(:delta => nil)
454
+ case @type
455
+ when :postgres
456
+ table.update(:delta => get_blob_data(blob))
457
+ else
458
+ table.update(:delta => blob)
459
+ end
460
+
461
+ table.select('delta') do |row|
462
+ blob = row.delta
463
+ assert_equal @blob, get_blob_data(blob)
464
+ end
465
+ end
466
+ end
467
+
468
+ def test_batch
469
+ each_connection do |conn|
470
+ # Initialize test table
471
+ create_table conn
472
+ table = conn.table(@table_name)
473
+ insert table
474
+
475
+ # Duplicated calls are idempotent
476
+ btable = table.batch
477
+ assert_equal btable, btable.batch
478
+
479
+ # Batch updates
480
+ table.batch.delete
481
+ assert_equal 100, table.count
482
+ conn.execute_batch
483
+ assert_equal 0, table.count
484
+
485
+ insert table.batch, 50
486
+ assert_equal 0, table.count
487
+ table.execute_batch :delete
488
+ assert_equal 0, table.count
489
+ table.execute_batch :update
490
+ assert_equal 0, table.count
491
+
492
+ table.batch.delete
493
+ table.execute_batch :update, :insert
494
+ assert_equal 50, table.count
495
+ table.clear_batch
496
+
497
+ insert table.batch, 50
498
+ assert_equal 50, table.count
499
+ table.clear_batch
500
+ assert_equal 50, table.count
501
+
502
+ table.batch.update(:alpha => JDBCHelper::SQL('alpha * 2'))
503
+ assert_equal 100, table.select(:alpha).to_a.first.alpha.to_i
504
+
505
+ # Independent update inbetween
506
+ table.delete(:id => 1..10)
507
+ assert_equal 40, table.count
508
+
509
+ # Finally with TableWrapper#execute_batch
510
+ insert table.batch, 60, 1000
511
+ assert_equal 40, table.count
512
+ table.execute_batch :delete, :update
513
+ assert_equal 40, table.count
514
+ table.execute_batch :insert
515
+ assert_equal 100, table.count
516
+
517
+ assert_equal 200, table.select(:alpha).to_a.first.alpha.to_i
518
+
519
+ # Order of execution
520
+ table.batch.update(:alpha => JDBCHelper::SQL('alpha * 4'))
521
+ insert table.batch, 50, 2000
522
+ table.batch.delete
523
+ ret = table.execute_batch :delete, :insert, :update
524
+ omit_if(conn.driver =~ /oracle/) do
525
+ # https://forums.oracle.com/forums/thread.jspa?threadID=532945
526
+ assert_equal 100, ret[:delete]
527
+ assert_equal 50, ret[:insert]
528
+ assert_equal 50, ret[:update]
529
+ end
530
+ assert_equal 50, table.count
531
+ assert_equal 400, table.select(:alpha).to_a.first.alpha.to_i
532
+ end
533
+ end
534
+
535
+ def test_truncate_table
536
+ each_connection do |conn|
537
+ create_table conn
538
+ table = conn.table(@table_name)
539
+ insert table
540
+
541
+ table.truncate!
542
+ assert table.empty?
543
+ end
544
+ end
545
+
546
+ def test_drop_table
547
+ each_connection do |conn|
548
+ create_table conn
549
+ table = conn.table(@table_name)
550
+ table.drop!
551
+ assert_equal false, drop_table(conn)
552
+
553
+ create_table conn
554
+ table = conn.table(@table_name)
555
+ table.drop_table! #alias
556
+ assert_equal false, drop_table(conn)
557
+ end
558
+ end
559
+
560
+ def test_sequence
561
+ each_connection do |conn|
562
+ # MySQL and SQL Server doesn't support sequences
563
+ next if [:mysql, :sqlserver].include?(@type)
564
+
565
+ seq = conn.sequence(@table_name + '_seq')
566
+ seq.reset!(100)
567
+ assert (prev = seq.nextval) >= 100
568
+ assert_equal prev, seq.currval
569
+ assert_equal 1, seq.nextval - prev
570
+
571
+ seq.reset! 1, 2
572
+ assert seq.nextval >= 1
573
+ assert seq.nextval <= 4
574
+ assert seq.nextval >= 5
575
+
576
+ seq.drop!
577
+ seq.create!(10)
578
+ assert seq.nextval >= 10
579
+ seq.drop!
580
+ end
581
+ end
582
+
583
+ # 0.5.1: Too many open cursors
584
+ def test_ora_10000
585
+ each_connection do |conn|
586
+ create_table conn
587
+ insert conn.table(@table_name)
588
+
589
+ # Batch-enabled object
590
+ conn.table(@table_name).batch
591
+
592
+ 10000.times do
593
+ # Should not fail
594
+ t = conn.table(@table_name)
595
+ t.count(:id => 1)
596
+
597
+ assert_equal false, t.batch?
598
+ t2 = t.batch
599
+ assert_equal false, t.batch?
600
+ assert_equal true, t2.batch?
601
+ end
602
+
603
+ # OK
604
+ assert true
605
+ end
606
+ end
607
+
608
+ # Test disabled prepared statements
609
+ def test_pstmt_disable
610
+ pend("TODO/TBD") do
611
+ assert false # FIXME
612
+
613
+ each_connection do |conn|
614
+ create_table conn
615
+ insert conn.table(@table_name)
616
+
617
+ # Batch-enabled object
618
+ conn.table(@table_name).batch
619
+
620
+ 10000.times do |i|
621
+ # Should not fail
622
+ t = conn.table(@table_name)
623
+ t.count("id = #{i}")
624
+ end
625
+
626
+ # OK
627
+ assert true
628
+ end
629
+ end
630
+ end
631
+
632
+ def test_prepared_statements
633
+ each_connection do |conn|
634
+ create_table conn
635
+
636
+ # No duplicate preparations
637
+ t = conn.table(@table_name)
638
+ t.count(:id => 1)
639
+ t.count('1 = 0')
640
+ bt = t.batch
641
+
642
+ assert_equal 2, t.prepared_statements[:count].length
643
+ assert_equal 2, bt.prepared_statements[:count].length
644
+
645
+ t.count(:id => 2)
646
+ t.count('2 = 0')
647
+ bt.count('3 = 0')
648
+ assert_equal 4, t.prepared_statements[:count].length
649
+ assert_equal 4, bt.prepared_statements[:count].length
650
+
651
+ t.count(:id => 3)
652
+ t.batch.count('4 = 0')
653
+ assert_equal 5, t.prepared_statements[:count].length
654
+ assert_equal 5, bt.prepared_statements[:count].length
655
+ assert_equal 5, t.batch.prepared_statements[:count].length
656
+ assert_equal 5, bt.batch.prepared_statements[:count].length
657
+
658
+ t.close
659
+ assert_equal 0, t.prepared_statements[:count].length
660
+ assert_equal 0, bt.prepared_statements[:count].length
661
+ assert_equal 0, t.batch.prepared_statements[:count].length
662
+ assert_equal 0, bt.batch.prepared_statements[:count].length
663
+
664
+ t.batch.batch.batch.count(:id => 1)
665
+ assert_equal 1, t.prepared_statements[:count].length
666
+ assert_equal 1, bt.prepared_statements[:count].length
667
+ assert_equal 1, bt.batch.prepared_statements[:count].length
668
+ assert_equal 1, t.batch.where('1 = 2').select(:a, :b).prepared_statements[:count].length
669
+
670
+ # Should be OK
671
+ bt.close
672
+ t.batch.close
673
+ end
674
+ end
675
+
676
+ def test_invalidated_prepared_statements
677
+ each_connection do |conn|
678
+ create_table conn
679
+
680
+ t = conn.table(@table_name)
681
+ insert t, 100
682
+ assert_equal 100, t.count
683
+
684
+ create_table conn
685
+ insert t, 100
686
+ # SHOULD NOT FAIL
687
+ assert_equal 100, t.count
688
+ end
689
+ end
690
+
691
+ def test_closed_prepared_statements
692
+ each_connection do |conn|
693
+ create_table conn
694
+
695
+ t = conn.table(@table_name)
696
+ insert t, 100
697
+ assert_equal 100, t.count
698
+
699
+ conn.prepared_statements.each { |ps| ps.close }
700
+
701
+ # SHOULD NOT FAIL (automatic repreparation)
702
+ assert_equal 100, t.count
703
+ end
704
+ end
705
+
706
+ def test_closed_prepared_statements_java
707
+ each_connection do |conn|
708
+ create_table conn
709
+
710
+ t = conn.table(@table_name)
711
+ insert t, 100
712
+ assert_equal 100, t.count
713
+
714
+ conn.prepared_statements.each { |ps| ps.java_obj.close }
715
+
716
+ # SHOULD NOT FAIL (automatic repreparation)
717
+ assert_equal 100, t.count
718
+ end
719
+ end
720
+
721
+ def test_fetch_size
722
+ each_connection do |conn|
723
+ create_table conn
724
+
725
+ fsz = 100
726
+ conn.fetch_size = fsz
727
+ cnt = cnt2 = 0
728
+ conn.table(@table_name).fetch_size(fsz) { |row| cnt += 1 }
729
+ conn.table(@table_name).fetch_size(fsz).each { |row| cnt2 += 1 }
730
+ assert_equal cnt, conn.table(@table_name).count
731
+ assert_equal cnt2, conn.table(@table_name).count
732
+
733
+ conn.table(@table_name).fetch_size("No").count
734
+ end
735
+ end
736
+ end
737
+