transactd 1.2.0-x64-mswin64-100 → 2.0.0-x64-mswin64-100

Sign up to get free protection for your applications and to get access to all the features.
@@ -36,12 +36,14 @@ HOSTNAME = getHost()
36
36
  DBNAME = 'test'
37
37
  DBNAME_VAR = 'testvar'
38
38
  DBNAME_SF = 'testString'
39
+ DBNAME_QT = 'querytest'
39
40
  TABLENAME = 'user'
40
41
  PROTOCOL = 'tdap://'
41
42
  BDFNAME = '?dbfile=test.bdf'
42
43
  URL = PROTOCOL + HOSTNAME + DBNAME + BDFNAME
43
44
  URL_VAR = PROTOCOL + HOSTNAME + DBNAME_VAR + BDFNAME
44
45
  URL_SF = PROTOCOL + HOSTNAME + DBNAME_SF + BDFNAME
46
+ URL_QT = PROTOCOL + HOSTNAME + DBNAME_QT + BDFNAME
45
47
  FDI_ID = 0
46
48
  FDI_NAME = 1
47
49
  FDI_GROUP = 2
@@ -50,8 +52,7 @@ FDI_NAMEW = 2
50
52
  BULKBUFSIZE = 65535 - 1000
51
53
  TEST_COUNT = 20000
52
54
  FIVE_PERCENT_OF_TEST_COUNT = TEST_COUNT / 20
53
-
54
- TYPE_SCHEMA_BDF = 0
55
+ ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT = TEST_COUNT / 4
55
56
 
56
57
  ISOLATION_READ_COMMITTED = true
57
58
  ISOLATION_REPEATABLE_READ = false
@@ -73,7 +74,7 @@ def testCreateDatabase(db)
73
74
  end
74
75
 
75
76
  def testOpenDatabase(db)
76
- db.open(URL, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
77
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
77
78
  expect(db.stat()).to eq 0
78
79
  end
79
80
 
@@ -131,7 +132,25 @@ def testOpenTable(db)
131
132
  return tb
132
133
  end
133
134
 
134
- def testVersion(db)
135
+ def testClone()
136
+ db = Transactd::Database.new()
137
+ db.open(URL)
138
+ expect(db.stat()).to eq 0
139
+ expect(db.isOpened()).to eq true
140
+ db2 = db.clone
141
+ expect(db2.stat).to eq 0
142
+ expect(db2.isOpened()).to eq true
143
+ db2.close
144
+ expect(db2.stat).to eq 0
145
+ expect(db2.isOpened()).to eq false
146
+ db2 = nil
147
+ expect(db.stat).to eq 0
148
+ expect(db.isOpened()).to eq true
149
+ db.close
150
+ end
151
+
152
+ def testVersion()
153
+ db = Transactd::Database.new()
135
154
  db.connect(PROTOCOL + HOSTNAME)
136
155
  expect(db.stat()).to eq 0
137
156
  vv = Transactd::BtrVersions.new()
@@ -149,9 +168,11 @@ def testVersion(db)
149
168
  expect(engine_ver.majorVersion.to_s).to eq Transactd::TRANSACTD_VER_MAJOR.to_s
150
169
  expect(engine_ver.minorVersion.to_s).to eq Transactd::TRANSACTD_VER_MINOR.to_s
151
170
  expect(engine_ver.type.chr).to eq 'T'
171
+ db.close()
152
172
  end
153
173
 
154
- def testInsert(db)
174
+ def testInsert()
175
+ db = Transactd::Database.new()
155
176
  tb = testOpenTable(db)
156
177
  expect(tb).not_to be nil
157
178
  if tb.recordCount() == 0
@@ -176,9 +197,11 @@ def testInsert(db)
176
197
  db.endTrn()
177
198
  expect(tb.stat()).to eq 0
178
199
  tb.close()
200
+ db.close()
179
201
  end
180
202
 
181
- def testFind(db)
203
+ def testFind()
204
+ db = Transactd::Database.new()
182
205
  tb = testOpenTable(db)
183
206
  tb.setKeyNum(0)
184
207
  tb.clearBuffer()
@@ -212,9 +235,11 @@ def testFind(db)
212
235
  tb.find(Transactd::Table::FindForword)
213
236
  expect(tb.stat()).to eq Transactd::STATUS_EOF
214
237
  tb.close()
238
+ db.close()
215
239
  end
216
240
 
217
- def testFindNext(db)
241
+ def testFindNext()
242
+ db = Transactd::Database.new()
218
243
  tb = testOpenTable(db)
219
244
  tb.setKeyNum(0)
220
245
  tb.clearBuffer()
@@ -229,19 +254,21 @@ def testFindNext(db)
229
254
  expect(tb.getFVint(FDI_ID)).to eq i
230
255
  end
231
256
  tb.close()
257
+ db.close()
232
258
  end
233
259
 
234
- def testFindIn(db)
260
+ def testFindIn()
261
+ db = Transactd::Database.new()
235
262
  tb = testOpenTable(db)
236
263
  tb.setKeyNum(0)
237
264
  tb.clearBuffer()
238
- q = Transactd::QueryBase.new()
239
- q.addInValue('10', true)
240
- q.addInValue('300000')
241
- q.addInValue('50')
242
- q.addInValue('-1')
243
- q.addInValue('80')
244
- q.addInValue('5000')
265
+ q = Transactd::Query.new()
266
+ q.addSeekKeyValue('10', true)
267
+ q.addSeekKeyValue('300000')
268
+ q.addSeekKeyValue('50')
269
+ q.addSeekKeyValue('-1')
270
+ q.addSeekKeyValue('80')
271
+ q.addSeekKeyValue('5000')
245
272
 
246
273
  tb.setQuery(q)
247
274
  expect(tb.stat()).to eq 0
@@ -270,9 +297,9 @@ def testFindIn(db)
270
297
  expect(tb.stat()).to eq Transactd::STATUS_EOF
271
298
 
272
299
  # Many params
273
- q.addInValue('1', true)
300
+ q.addSeekKeyValue('1', true)
274
301
  2.upto(10000) do |i|
275
- q.addInValue(i.to_s)
302
+ q.addSeekKeyValue(i.to_s)
276
303
  end
277
304
  tb.setQuery(q)
278
305
  expect(tb.stat()).to eq 0
@@ -302,9 +329,11 @@ def testFindIn(db)
302
329
  expect(i).to eq 10000
303
330
 
304
331
  tb.close()
332
+ db.close()
305
333
  end
306
334
 
307
- def testGetPercentage(db)
335
+ def testGetPercentage()
336
+ db = Transactd::Database.new()
308
337
  tb = testOpenTable(db)
309
338
  tb.clearBuffer()
310
339
  vv = TEST_COUNT / 2 + 1
@@ -314,9 +343,11 @@ def testGetPercentage(db)
314
343
  per = tb.getPercentage()
315
344
  expect((5000 - per).abs).to be < 500 # 500 = 5%
316
345
  tb.close()
346
+ db.close()
317
347
  end
318
348
 
319
- def testMovePercentage(db)
349
+ def testMovePercentage()
350
+ db = Transactd::Database.new()
320
351
  tb = testOpenTable(db)
321
352
  tb.clearBuffer()
322
353
  tb.seekByPercentage(5000) # 50%
@@ -325,9 +356,11 @@ def testMovePercentage(db)
325
356
  expect(tb.stat()).to eq 0
326
357
  expect((TEST_COUNT / 2 + 1 - v).abs).to be < FIVE_PERCENT_OF_TEST_COUNT
327
358
  tb.close()
359
+ db.close()
328
360
  end
329
361
 
330
- def testGetEqual(db)
362
+ def testGetEqual()
363
+ db = Transactd::Database.new()
331
364
  tb = testOpenTable(db)
332
365
  db.beginSnapshot()
333
366
  vv = 1
@@ -339,9 +372,11 @@ def testGetEqual(db)
339
372
  end
340
373
  db.endSnapshot()
341
374
  tb.close()
375
+ db.close()
342
376
  end
343
377
 
344
- def testGetNext(db)
378
+ def testGetNext()
379
+ db = Transactd::Database.new()
345
380
  tb = testOpenTable(db)
346
381
  db.beginSnapshot()
347
382
  vv = 2
@@ -355,9 +390,11 @@ def testGetNext(db)
355
390
  end
356
391
  db.endSnapshot()
357
392
  tb.close()
393
+ db.close()
358
394
  end
359
395
 
360
- def testGetPrevious(db)
396
+ def testGetPrevious()
397
+ db = Transactd::Database.new()
361
398
  tb = testOpenTable(db)
362
399
  db.beginSnapshot()
363
400
  vv = TEST_COUNT + 1
@@ -373,9 +410,11 @@ def testGetPrevious(db)
373
410
  expect(tb.getFVstr(FDI_NAME)).to eq 'kosaka'
374
411
  db.endSnapshot()
375
412
  tb.close()
413
+ db.close()
376
414
  end
377
415
 
378
- def testGetGreater(db)
416
+ def testGetGreater()
417
+ db = Transactd::Database.new()
379
418
  tb = testOpenTable(db)
380
419
  vv = TEST_COUNT * 3 / 4
381
420
  tb.clearBuffer()
@@ -392,9 +431,11 @@ def testGetGreater(db)
392
431
  tb.seekPrev()
393
432
  expect(tb.getFVint(FDI_ID)).to eq vv
394
433
  tb.close()
434
+ db.close()
395
435
  end
396
436
 
397
- def testGetLessThan(db)
437
+ def testGetLessThan()
438
+ db = Transactd::Database.new()
398
439
  tb = testOpenTable(db)
399
440
  vv = TEST_COUNT * 3 / 4
400
441
  tb.clearBuffer()
@@ -411,25 +452,31 @@ def testGetLessThan(db)
411
452
  tb.seekPrev()
412
453
  expect(tb.getFVint(FDI_ID)).to eq vv - 2
413
454
  tb.close()
455
+ db.close()
414
456
  end
415
457
 
416
- def testGetFirst(db)
458
+ def testGetFirst()
459
+ db = Transactd::Database.new()
417
460
  tb = testOpenTable(db)
418
461
  tb.clearBuffer()
419
462
  tb.seekFirst()
420
463
  expect(tb.getFVstr(FDI_NAME)).to eq 'kosaka'
421
464
  tb.close()
465
+ db.close()
422
466
  end
423
467
 
424
- def testGetLast(db)
468
+ def testGetLast()
469
+ db = Transactd::Database.new()
425
470
  tb = testOpenTable(db)
426
471
  tb.clearBuffer()
427
472
  tb.seekLast()
428
473
  expect(tb.getFVint(FDI_ID)).to eq TEST_COUNT + 2
429
474
  tb.close()
475
+ db.close()
430
476
  end
431
477
 
432
- def testMovePosition(db)
478
+ def testMovePosition()
479
+ db = Transactd::Database.new()
433
480
  tb = testOpenTable(db)
434
481
  tb.clearBuffer()
435
482
  vv = TEST_COUNT * 3 / 4
@@ -450,9 +497,11 @@ def testMovePosition(db)
450
497
  tb.seekByBookmark(pos)
451
498
  expect(tb.getFVint(FDI_ID)).to eq pos_vv
452
499
  tb.close()
500
+ db.close()
453
501
  end
454
502
 
455
- def testUpdate(db)
503
+ def testUpdate()
504
+ db = Transactd::Database.new()
456
505
  tb = testOpenTable(db)
457
506
  db.beginTrn()
458
507
  # test of ncc
@@ -512,10 +561,12 @@ def testUpdate(db)
512
561
  tb.seek()
513
562
  expect(tb.getFVstr(FDI_NAME)).to eq 'ABC'
514
563
  tb.close()
564
+ db.close()
515
565
  end
516
566
 
517
- def testSnapShot(db)
518
- db2 = Transactd::Database::createObject()
567
+ def testSnapShot()
568
+ db = Transactd::Database.new()
569
+ db2 = Transactd::Database.new()
519
570
  db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
520
571
  expect(db2.stat()).to eq 0
521
572
  tb = testOpenTable(db)
@@ -551,13 +602,15 @@ def testSnapShot(db)
551
602
  expect(secondValue).to eq firstValue
552
603
  end
553
604
  # ----------------------------------------------------
554
- tb.close()
555
605
  tb2.close()
606
+ tb.close()
556
607
  db2.close()
608
+ db.close()
557
609
  end
558
610
 
559
- def testTransactionLock(db)
560
- db2 = Transactd::Database::createObject()
611
+ def testTransactionLock()
612
+ db = Transactd::Database.new()
613
+ db2 = Transactd::Database.new()
561
614
  db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
562
615
  expect(db2.stat()).to eq 0
563
616
  tb = testOpenTable(db)
@@ -634,13 +687,15 @@ def testTransactionLock(db)
634
687
  tb2.setKeyNum(0)
635
688
  tb2.seekFirst()
636
689
  expect(tb2.getFVstr(FDI_NAME)).to eq 'ABC'
637
- tb.close()
638
690
  tb2.close()
691
+ tb.close()
639
692
  db2.close()
693
+ db.close()
640
694
  end
641
695
 
642
- def testConflict(db)
643
- db2 = Transactd::Database::createObject()
696
+ def testConflict()
697
+ db = Transactd::Database.new()
698
+ db2 = Transactd::Database.new()
644
699
  db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
645
700
  expect(db2.stat()).to eq 0
646
701
  tb = testOpenTable(db)
@@ -680,12 +735,98 @@ def testConflict(db)
680
735
  tb.update()
681
736
  expect(tb.stat()).to eq Transactd::STATUS_CHANGE_CONFLICT
682
737
  # ----------------------------------------------------
738
+ tb2.close()
683
739
  tb.close()
740
+ db2.close()
741
+ db.close()
742
+ end
743
+
744
+ def testExclusive()
745
+ # db mode exclusive
746
+ db = Transactd::Database.new()
747
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_EXCLUSIVE)
748
+ expect(db.stat()).to eq 0
749
+ tb = db.openTable(TABLENAME)
750
+ expect(db.stat()).to eq 0
751
+
752
+ # Can not open database from other connections.
753
+ db2 = Transactd::Database.new()
754
+ db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
755
+ expect(db2.stat()).to eq 0
756
+ db2.open(URL, Transactd::TYPE_SCHEMA_BDF)
757
+ expect(db2.stat()).to eq Transactd::STATUS_CANNOT_LOCK_TABLE
758
+
759
+ tb2 = db.openTable(TABLENAME)
760
+ expect(db.stat()).to eq 0
761
+
762
+ tb.setKeyNum(0)
763
+ tb.seekFirst()
764
+ expect(tb.stat()).to eq 0
765
+
766
+ tb.setFV(FDI_NAME, 'ABC123')
767
+ tb.update()
768
+ expect(tb.stat()).to eq 0
769
+
770
+ tb2.setKeyNum(0)
771
+ tb2.seekFirst()
772
+ expect(tb2.stat()).to eq 0
773
+ tb2.setFV(FDI_NAME, 'ABC124')
774
+ tb2.update()
775
+ expect(tb2.stat()).to eq 0
776
+
684
777
  tb2.close()
778
+ tb.close()
685
779
  db2.close()
780
+ db.close()
781
+
782
+ # table mode exclusive
783
+ db = Transactd::Database.new()
784
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_READONLY)
785
+ expect(db.stat()).to eq 0
786
+ tb = db.openTable(TABLENAME, Transactd::TD_OPEN_EXCLUSIVE)
787
+ expect(db.stat()).to eq 0
788
+
789
+ db2 = Transactd::Database.new()
790
+ db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
791
+ expect(db2.stat()).to eq 0
792
+ db2.open(URL, Transactd::TYPE_SCHEMA_BDF)
793
+ expect(db2.stat()).to eq 0
794
+
795
+ # Can not open table from other connections.
796
+ tb2 = db2.openTable(TABLENAME)
797
+ expect(db2.stat()).to eq Transactd::STATUS_CANNOT_LOCK_TABLE
798
+
799
+ # Can open table from the same connection.
800
+ tb3 = db.openTable(TABLENAME)
801
+ expect(db.stat()).to eq 0
802
+
803
+ tb3.close()
804
+ tb2.close() if tb2 != nil
805
+ tb.close()
806
+ db2.close()
807
+ db.close()
808
+
809
+ # reopen and update
810
+ db = Transactd::Database.new()
811
+ db.open(URL)
812
+ expect(db.stat()).to eq 0
813
+ tb = db.openTable(TABLENAME)
814
+ expect(db.stat()).to eq 0
815
+
816
+ tb.setKeyNum(0)
817
+ tb.seekFirst()
818
+ expect(tb.stat()).to eq 0
819
+
820
+ tb.setFV(FDI_NAME, 'ABC123')
821
+ tb.update()
822
+ expect(tb.stat()).to eq 0
823
+
824
+ tb.close()
825
+ db.close()
686
826
  end
687
827
 
688
- def testInsert2(db)
828
+ def testInsert2()
829
+ db = Transactd::Database.new()
689
830
  tb = testOpenTable(db)
690
831
  v = TEST_COUNT * 2
691
832
  db.beginTrn()
@@ -702,13 +843,15 @@ def testInsert2(db)
702
843
  expect(tb.getFVint(FDI_ID)).to eq 11
703
844
  db.endTrn()
704
845
  tb.close()
846
+ db.close()
705
847
  end
706
848
 
707
- def testDelete(db)
849
+ def testDelete()
850
+ db = Transactd::Database.new()
708
851
  tb = testOpenTable(db)
709
852
  # estimate count
710
853
  count = tb.recordCount(true)
711
- is_valid_count = ((count - TEST_COUNT - 3).abs < FIVE_PERCENT_OF_TEST_COUNT)
854
+ is_valid_count = ((count - TEST_COUNT).abs < ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT)
712
855
  expect(is_valid_count).to be true
713
856
  if !is_valid_count
714
857
  puts "true record count = #{(TEST_COUNT + 3).to_s} and estimate recordCount count = #{count.to_s}"
@@ -744,30 +887,36 @@ def testDelete(db)
744
887
  db.endTrn()
745
888
  expect(tb.recordCount(false)).to eq 0
746
889
  tb.close()
890
+ db.close()
747
891
  end
748
892
 
749
- def testSetOwner(db)
893
+ def testSetOwner()
894
+ db = Transactd::Database.new()
750
895
  tb = testOpenTable(db)
751
896
  tb.setOwnerName('ABCDEFG')
752
897
  expect(tb.stat()).to eq 0
753
898
  tb.clearOwnerName()
754
899
  expect(tb.stat()).to eq 0
755
900
  tb.close()
901
+ db.close()
756
902
  end
757
903
 
758
- def testDropIndex(db)
904
+ def testDropIndex()
905
+ db = Transactd::Database.new()
759
906
  tb = testOpenTable(db)
760
907
  tb.dropIndex(false)
761
908
  expect(tb.stat()).to eq 0
762
909
  tb.close()
910
+ db.close()
763
911
  end
764
912
 
765
- def testLogin(db)
913
+ def testLogin()
914
+ db = Transactd::Database.new()
766
915
  db.connect(PROTOCOL + HOSTNAME)
767
916
  expect(db.stat()).to eq 0
768
917
  if db.stat() == 0
769
918
  # second connection
770
- db2 = Transactd::Database::createObject()
919
+ db2 = Transactd::Database.new()
771
920
  db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
772
921
  expect(db.stat()).to eq 0
773
922
  db2.close()
@@ -802,6 +951,7 @@ def testLogin(db)
802
951
  expect(db.stat()).to eq (25000 + 1049)
803
952
  db.disconnect(PROTOCOL + HOSTNAME + DBNAME)
804
953
  expect(db.stat()).to eq 0
954
+ db.close()
805
955
  end
806
956
 
807
957
  def isUtf16leSupport(db)
@@ -896,7 +1046,8 @@ def testCreateVarTable(db, id, name, fieldType, charset)
896
1046
  tb.close() if tb != nil
897
1047
  end
898
1048
 
899
- def testCreateDatabaseVar(db)
1049
+ def testCreateDatabaseVar()
1050
+ db = Transactd::Database.new()
900
1051
  db.create(URL_VAR)
901
1052
  if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR
902
1053
  testDropDatabaseVar(db)
@@ -904,7 +1055,7 @@ def testCreateDatabaseVar(db)
904
1055
  end
905
1056
  expect(db.stat()).to eq 0
906
1057
  if (0 == db.stat())
907
- db.open(URL_VAR, 0, 0)
1058
+ db.open(URL_VAR, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
908
1059
  expect(db.stat()).to eq 0
909
1060
  end
910
1061
  if (0 == db.stat())
@@ -916,9 +1067,10 @@ def testCreateDatabaseVar(db)
916
1067
  testCreateVarTable(db, 4, 'user4', Transactd::Ft_mywvarbinary, Transactd::CHARSET_CP932)
917
1068
  testCreateVarTable(db, 5, 'user5', Transactd::Ft_myvarchar, Transactd::CHARSET_UTF8B4)
918
1069
  db.close()
919
- db.open(PROTOCOL + HOSTNAME + DBNAME_VAR + '?dbfile=transactd_schemaname', 0, 0)
1070
+ db.open(PROTOCOL + HOSTNAME + DBNAME_VAR + '?dbfile=transactd_schemaname')
920
1071
  expect(db.stat()).to eq 0
921
1072
  end
1073
+ db.close()
922
1074
  end
923
1075
 
924
1076
  def testDropDatabaseVar(db)
@@ -1067,7 +1219,8 @@ def testSetGetVar(tb, unicodeField, varCharField)
1067
1219
  expect(tb.getFVAstr(FDI_GROUP)).to eq '68'
1068
1220
  end
1069
1221
 
1070
- def testVarField(db)
1222
+ def testVarField()
1223
+ db = Transactd::Database.new()
1071
1224
  db.open(URL_VAR)
1072
1225
  expect(db.stat()).to eq 0
1073
1226
  tb = db.openTable('user1')
@@ -1097,6 +1250,7 @@ def testVarField(db)
1097
1250
  # utf8 varchar
1098
1251
  testSetGetVar(tb, true, true)
1099
1252
  tb.close()
1253
+ db.close()
1100
1254
  end
1101
1255
 
1102
1256
  def doVarInsert(db, name, codePage, str, startid, endid, bulk)
@@ -1114,11 +1268,12 @@ def doVarInsert(db, name, codePage, str, startid, endid, bulk)
1114
1268
  tb.close()
1115
1269
  end
1116
1270
 
1117
- def testVarInsert(db)
1271
+ def testVarInsert()
1118
1272
  startid = 1
1119
1273
  bulk = false
1120
1274
  str = '漢字文字のテスト' # too long kanji
1121
1275
  str2 = '123'
1276
+ db = Transactd::Database.new()
1122
1277
  db.open(URL_VAR)
1123
1278
  expect(db.stat()).to eq 0
1124
1279
  if (0 == db.stat())
@@ -1143,6 +1298,7 @@ def testVarInsert(db)
1143
1298
  doVarInsert(db, 'user4', Transactd::CP_ACP, '', startid, endid, bulk)
1144
1299
  doVarInsert(db, 'user5', Transactd::CP_UTF8, '', startid, endid, bulk)
1145
1300
  end
1301
+ db.close()
1146
1302
  end
1147
1303
 
1148
1304
  def doVarRead(db, name, codePage, str, num, key)
@@ -1167,11 +1323,12 @@ def doVarRead(db, name, codePage, str, num, key)
1167
1323
  tb.close()
1168
1324
  end
1169
1325
 
1170
- def testVarRead(db)
1326
+ def testVarRead()
1171
1327
  str = '漢字文'
1172
1328
  str3 = '漢字文字のテ'
1173
1329
  str2 ='123'
1174
1330
  str4 ='1232'
1331
+ db = Transactd::Database.new()
1175
1332
  db.open(URL_VAR)
1176
1333
  expect(db.stat()).to eq 0
1177
1334
  if (0 == db.stat())
@@ -1198,6 +1355,7 @@ def testVarRead(db)
1198
1355
  doVarRead(db, 'user4', Transactd::CP_ACP, '120', 120, key)
1199
1356
  doVarRead(db, 'user5', Transactd::CP_UTF8, '120', 120, key)
1200
1357
  end
1358
+ db.close()
1201
1359
  end
1202
1360
 
1203
1361
  def doVarFilter(db, name, codePage, str, num, key)
@@ -1245,7 +1403,8 @@ def doVarFilter(db, name, codePage, str, num, key)
1245
1403
  tb.close()
1246
1404
  end
1247
1405
 
1248
- def testFilterVar(db)
1406
+ def testFilterVar()
1407
+ db = Transactd::Database.new()
1249
1408
  db.open(URL_VAR)
1250
1409
  expect(db.stat()).to eq 0
1251
1410
  if (0 == db.stat())
@@ -1277,9 +1436,9 @@ def testFilterVar(db)
1277
1436
  doVarFilter(db, 'user4', Transactd::CP_ACP, '120', 120, key)
1278
1437
  doVarFilter(db, 'user5', Transactd::CP_UTF8, '120', 120, key)
1279
1438
  end
1439
+ db.close()
1280
1440
  end
1281
1441
 
1282
-
1283
1442
  def testCreateTableStringFilter(db, id, name, type, type2)
1284
1443
  # create table
1285
1444
  dbdef = db.dbDef()
@@ -1514,14 +1673,15 @@ def doTestStringFilter(db, id, name, type, type2)
1514
1673
  tb.close()
1515
1674
  end
1516
1675
 
1517
- def testStringFilter(db)
1676
+ def testStringFilter()
1677
+ db = Transactd::Database.new()
1518
1678
  db.create(URL_SF)
1519
1679
  if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR
1520
1680
  testDropDatabaseStringFilter(db)
1521
1681
  db.create(URL_SF)
1522
1682
  end
1523
1683
  expect(db.stat()).to eq 0
1524
- db.open(URL_SF, 0, 0)
1684
+ db.open(URL_SF, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1525
1685
  expect(db.stat()).to eq 0
1526
1686
  doTestStringFilter( db, 1, 'zstring', Transactd::Ft_zstring, Transactd::Ft_wzstring)
1527
1687
  if (isUtf16leSupport(db))
@@ -1530,41 +1690,43 @@ def testStringFilter(db)
1530
1690
  doTestStringFilter( db, 2, 'myvarchar', Transactd::Ft_myvarchar, Transactd::Ft_myvarchar)
1531
1691
  end
1532
1692
  doTestStringFilter( db, 3, 'mytext', Transactd::Ft_mytext, Transactd::Ft_myblob)
1693
+ db.close()
1533
1694
  end
1534
1695
 
1535
1696
  def testDropDatabaseStringFilter(db)
1536
- db.open(URL_SF, 0, 0)
1697
+ db.open(URL_SF)
1537
1698
  expect(db.stat()).to eq 0
1538
1699
  db.drop()
1539
1700
  expect(db.stat()).to eq 0
1540
1701
  end
1541
1702
 
1542
1703
  def testQuery()
1543
- q = Transactd::QueryBase.new()
1704
+ q = Transactd::Query.new()
1544
1705
  q.queryString("id = 0 and name = 'Abc efg'")
1545
1706
  expect(q.toString()).to eq "id = '0' and name = 'Abc efg'"
1546
1707
 
1547
1708
  q.queryString('')
1548
- q.where('id', '=', '0').andWhere('name', '=', 'Abc efg')
1709
+ q.where('id', '=', '0').and_('name', '=', 'Abc efg')
1549
1710
  expect(q.toString()).to eq "id = '0' and name = 'Abc efg'"
1550
1711
 
1551
1712
  q.queryString("select id,name id = 0 AND name = 'Abc&' efg'")
1552
1713
  expect(q.toString()).to eq "select id,name id = '0' AND name = 'Abc&' efg'"
1553
1714
 
1554
1715
  q.queryString('')
1555
- q.select('id', 'name').where('id', '=', '0').andWhere('name', '=', "Abc' efg")
1716
+ q.select('id', 'name').where('id', '=', '0').and_('name', '=', "Abc' efg")
1556
1717
  expect(q.toString()).to eq "select id,name id = '0' and name = 'Abc&' efg'"
1557
1718
 
1558
1719
  q.queryString("select id,name id = 0 AND name = 'Abc&& efg'")
1559
1720
  expect(q.toString()).to eq "select id,name id = '0' AND name = 'Abc&& efg'"
1560
1721
 
1561
1722
  q.queryString('')
1562
- q.select('id', 'name').where('id', '=', '0').andWhere('name', '=', 'Abc& efg')
1723
+ q.select('id', 'name').where('id', '=', '0').and_('name', '=', 'Abc& efg')
1563
1724
  expect(q.toString()).to eq "select id,name id = '0' and name = 'Abc&& efg'"
1564
1725
 
1565
1726
  q.queryString('*')
1566
1727
  expect(q.toString()).to eq '*'
1567
1728
 
1729
+ q.queryString('')
1568
1730
  q.all()
1569
1731
  expect(q.toString()).to eq '*'
1570
1732
 
@@ -1586,7 +1748,7 @@ def testQuery()
1586
1748
  expect(q.toString()).to eq "select id,name,fc id = '2' and name = '3'"
1587
1749
 
1588
1750
  q.queryString('')
1589
- q.select('id', 'name', 'fc').where('id', '=', '2').andWhere('name', '=', '3')
1751
+ q.select('id', 'name', 'fc').where('id', '=', '2').and_('name', '=', '3')
1590
1752
  expect(q.toString()).to eq "select id,name,fc id = '2' and name = '3'"
1591
1753
 
1592
1754
  # IN include
@@ -1594,7 +1756,7 @@ def testQuery()
1594
1756
  expect(q.toString()).to eq "select id,name,fc in '1','2','3'"
1595
1757
 
1596
1758
  q.queryString('')
1597
- q.select('id', 'name', 'fc').In('1', '2', '3')
1759
+ q.select('id', 'name', 'fc').in('1', '2', '3')
1598
1760
  expect(q.toString()).to eq "select id,name,fc in '1','2','3'"
1599
1761
 
1600
1762
  q.queryString("IN '1','2','3'")
@@ -1604,7 +1766,7 @@ def testQuery()
1604
1766
  expect(q.toString()).to eq "in '1','2','3'"
1605
1767
 
1606
1768
  q.queryString('')
1607
- q.In('1', '2', '3')
1769
+ q.in('1', '2', '3')
1608
1770
  expect(q.toString()).to eq "in '1','2','3'"
1609
1771
 
1610
1772
  # special field name
@@ -1621,171 +1783,601 @@ def testQuery()
1621
1783
  q.queryString('')
1622
1784
  q.where('in', '<>', '1')
1623
1785
  expect(q.toString()).to eq "in <> '1'"
1786
+
1787
+ # test auto_escape
1788
+ q.queryString("code = ab'c", true)
1789
+ expect(q.toString()).to eq "code = 'ab&'c'"
1790
+
1791
+ q.queryString("code = ab&c", true)
1792
+ expect(q.toString()).to eq "code = 'ab&&c'"
1793
+
1794
+ q.queryString("code = abc&", true)
1795
+ expect(q.toString()).to eq "code = 'abc&&'"
1796
+ q.queryString("code = abc&&", true)
1797
+ expect(q.toString()).to eq "code = 'abc&&&&'"
1798
+
1799
+ q.queryString("code = 'abc&'", true)
1800
+ expect(q.toString()).to eq "code = 'abc&&'"
1801
+ q.queryString("code = 'abc&&'", true)
1802
+ expect(q.toString()).to eq "code = 'abc&&&&'"
1803
+
1804
+ q.queryString("code = 'ab'c'", true)
1805
+ expect(q.toString()).to eq "code = 'ab&'c'"
1806
+
1807
+ q.queryString("code = 'abc''", true)
1808
+ expect(q.toString()).to eq "code = 'abc&''"
1809
+
1810
+ q.queryString("code = abc'", true)
1811
+ expect(q.toString()).to eq "code = 'abc&''"
1812
+
1813
+ # Invalid single quote (') on the end of statement
1814
+ q.queryString("code = 'abc", true)
1815
+ expect(q.toString()).to eq "code = 'abc'"
1816
+
1817
+ q.queryString("code = &abc", true)
1818
+ expect(q.toString()).to eq "code = '&&abc'"
1624
1819
  end
1625
1820
 
1821
+ def createQTuser(db)
1822
+ dbdef = db.dbDef()
1823
+ td = Transactd::Tabledef.new()
1824
+ td.setTableName('user')
1825
+ td.setFileName('user.dat')
1826
+ id = 1
1827
+ td.id = id
1828
+ td.pageSize = 2048
1829
+ td.schemaCodePage = Transactd::CP_UTF8
1830
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1831
+ dbdef.insertTable(td)
1832
+ expect(dbdef.stat()).to eq 0
1833
+ # id field
1834
+ fd = dbdef.insertField(id, 0)
1835
+ fd.setName('id')
1836
+ fd.type = Transactd::Ft_autoinc
1837
+ fd.len = 4
1838
+ # 名前 field
1839
+ fd = dbdef.insertField(id, 1)
1840
+ fd.setName('名前')
1841
+ fd.type = Transactd::Ft_myvarchar
1842
+ fd.setLenByCharnum(20)
1843
+ # group field
1844
+ fd = dbdef.insertField(id, 2)
1845
+ fd.setName('group')
1846
+ fd.type = Transactd::Ft_integer
1847
+ fd.len = 4
1848
+ # tel field
1849
+ fd = dbdef.insertField(id, 3)
1850
+ fd.setName('tel')
1851
+ fd.type = Transactd::Ft_myvarchar
1852
+ fd.setLenByCharnum(20)
1853
+ # key 0 (primary) id
1854
+ kd = dbdef.insertKey(id, 0)
1855
+ kd.segment(0).fieldNum = 0
1856
+ kd.segment(0).flags.bit8 = 1 # extended key type
1857
+ kd.segment(0).flags.bit1 = 1 # changeable
1858
+ kd.segmentCount = 1
1859
+ td = dbdef.tableDefs(id)
1860
+ td.primaryKeyNum = 0
1861
+ # key 1 group
1862
+ kd = dbdef.insertKey(id, 1)
1863
+ kd.segment(0).fieldNum = 2
1864
+ kd.segment(0).flags.bit8 = 1 # extended key type
1865
+ kd.segment(0).flags.bit1 = 1 # changeable
1866
+ kd.segment(0).flags.bit0 = 1 # duplicatable
1867
+ kd.segmentCount = 1
1868
+ # update
1869
+ dbdef.updateTableDef(id)
1870
+ expect(dbdef.stat()).to eq 0
1871
+ # open test
1872
+ tb = db.openTable(id)
1873
+ expect(db.stat()).to eq 0
1874
+ tb.close() if tb != nil
1875
+ return true
1876
+ end
1626
1877
 
1627
- describe Transactd do
1628
- before :each do
1629
- @db = Transactd::Database.createObject()
1878
+ def createQTgroups(db)
1879
+ dbdef = db.dbDef()
1880
+ td = Transactd::Tabledef.new()
1881
+ td.setTableName('groups')
1882
+ td.setFileName('groups.dat')
1883
+ id = 2
1884
+ td.id = id
1885
+ td.pageSize = 2048
1886
+ td.schemaCodePage = Transactd::CP_UTF8
1887
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1888
+ dbdef.insertTable(td)
1889
+ expect(dbdef.stat()).to eq 0
1890
+ # code field
1891
+ fd = dbdef.insertField(id, 0)
1892
+ fd.setName('code')
1893
+ fd.type = Transactd::Ft_integer
1894
+ fd.len = 4
1895
+ # name field
1896
+ fd = dbdef.insertField(id, 1)
1897
+ fd.setName('name')
1898
+ fd.type = Transactd::Ft_myvarbinary
1899
+ fd.len = 33
1900
+ # key 0 (primary) code
1901
+ kd = dbdef.insertKey(id, 0)
1902
+ kd.segment(0).fieldNum = 0
1903
+ kd.segment(0).flags.bit8 = 1 # extended key type
1904
+ kd.segment(0).flags.bit1 = 1 # changeable
1905
+ kd.segmentCount = 1
1906
+ td = dbdef.tableDefs(id)
1907
+ td.primaryKeyNum = 0
1908
+ # update
1909
+ dbdef.updateTableDef(id)
1910
+ expect(dbdef.stat()).to eq 0
1911
+ # open test
1912
+ tb = db.openTable(id)
1913
+ expect(db.stat()).to eq 0
1914
+ tb.close() if tb != nil
1915
+ return true
1916
+ end
1917
+
1918
+ def createQTextention(db)
1919
+ dbdef = db.dbDef()
1920
+ td = Transactd::Tabledef.new()
1921
+ td.setTableName('extention')
1922
+ td.setFileName('extention.dat')
1923
+ id = 3
1924
+ td.id = id
1925
+ td.pageSize = 2048
1926
+ td.schemaCodePage = Transactd::CP_UTF8
1927
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1928
+ dbdef.insertTable(td)
1929
+ expect(dbdef.stat()).to eq 0
1930
+ # id field
1931
+ fd = dbdef.insertField(id, 0)
1932
+ fd.setName('id')
1933
+ fd.type = Transactd::Ft_integer
1934
+ fd.len = 4
1935
+ # comment field
1936
+ fd = dbdef.insertField(id, 1)
1937
+ fd.setName('comment')
1938
+ fd.type = Transactd::Ft_myvarchar
1939
+ fd.setLenByCharnum(60)
1940
+ # key 0 (primary) id
1941
+ kd = dbdef.insertKey(id, 0)
1942
+ kd.segment(0).fieldNum = 0
1943
+ kd.segment(0).flags.bit8 = 1 # extended key type
1944
+ kd.segment(0).flags.bit1 = 1 # changeable
1945
+ kd.segmentCount = 1
1946
+ td = dbdef.tableDefs(id)
1947
+ td.primaryKeyNum = 0
1948
+ # update
1949
+ dbdef.updateTableDef(id)
1950
+ expect(dbdef.stat()).to eq 0
1951
+ # open test
1952
+ tb = db.openTable(id)
1953
+ expect(db.stat()).to eq 0
1954
+ tb.close() if tb != nil
1955
+ return true
1956
+ end
1957
+
1958
+ def insertQT(db, maxId)
1959
+ db.beginTrn()
1960
+ # insert user data
1961
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL)
1962
+ expect(db.stat()).to eq 0
1963
+ tb.clearBuffer()
1964
+ for i in 1..maxId
1965
+ tb.setFV(0, i)
1966
+ tb.setFV(1, "#{i} user")
1967
+ tb.setFV('group', ((i - 1) % 5) + 1)
1968
+ tb.insert()
1969
+ expect(tb.stat()).to eq 0
1630
1970
  end
1631
- after :each do
1632
- @db.close()
1633
- @db = nil
1971
+ tb.close()
1972
+ # insert groups data
1973
+ tb = db.openTable('groups', Transactd::TD_OPEN_NORMAL)
1974
+ expect(db.stat()).to eq 0
1975
+ tb.clearBuffer()
1976
+ for i in 1..100
1977
+ tb.setFV(0, i)
1978
+ tb.setFV(1, "#{i} group")
1979
+ tb.insert()
1980
+ expect(tb.stat()).to eq 0
1981
+ end
1982
+ tb.close()
1983
+ # insert extention data
1984
+ tb = db.openTable('extention', Transactd::TD_OPEN_NORMAL)
1985
+ expect(db.stat()).to eq 0
1986
+ tb.clearBuffer()
1987
+ for i in 1..maxId
1988
+ tb.setFV(0, i)
1989
+ tb.setFV(1, "#{i} comment")
1990
+ tb.insert()
1991
+ expect(tb.stat()).to eq 0
1634
1992
  end
1993
+ tb.close()
1994
+ db.endTrn()
1995
+ end
1996
+
1997
+ def testCreateQueryTest()
1998
+ # check database existence
1999
+ db = Transactd::Database.new()
2000
+ db.open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
2001
+ if (db.stat() === 0)
2002
+ db.close()
2003
+ return
2004
+ end
2005
+ puts "\nDatabase " + DBNAME_QT + " not found\n"
2006
+ db.create(URL_QT)
2007
+ expect(db.stat()).to eq 0
2008
+ db.open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
2009
+ expect(db.stat()).to eq 0
2010
+ # create tables
2011
+ createQTuser(db)
2012
+ createQTgroups(db)
2013
+ createQTextention(db)
2014
+ # insert data
2015
+ insertQT(db, 20000)
2016
+ db.close()
2017
+ end
2018
+
2019
+ def testNewDelete()
2020
+ db = Transactd::Database.new()
2021
+ db.open(URL_QT)
2022
+ for i in 0..499
2023
+ q = Transactd::Query.new()
2024
+ rq = Transactd::RecordsetQuery.new()
2025
+ gq = Transactd::GroupQuery.new()
2026
+ f = Transactd::FieldNames.new()
2027
+ f.addValue('abc')
2028
+ atu = Transactd::ActiveTable.new(db, 'user')
2029
+ atu.index(0)
2030
+ atg = Transactd::ActiveTable.new(db, 'groups')
2031
+ atg.index(0)
2032
+ fns = Transactd::FieldNames.new()
2033
+ fns.keyField('a')
2034
+ s = Transactd::Sum.new(fns)
2035
+ c = Transactd::Count.new('a')
2036
+ a = Transactd::Avg.new(fns)
2037
+ mi = Transactd::Min.new(fns)
2038
+ ma = Transactd::Max.new(fns)
2039
+ rs = Transactd::Recordset.new()
2040
+ # have to explicitly release
2041
+ atu.release()
2042
+ atg.release()
2043
+ end
2044
+ db.close()
2045
+ end
2046
+
2047
+ def testJoin()
2048
+ db = Transactd::Database.new()
2049
+ db.open(URL_QT)
2050
+ expect(db.stat()).to eq 0
2051
+ atu = Transactd::ActiveTable.new(db, 'user')
2052
+ atg = Transactd::ActiveTable.new(db, 'groups')
2053
+ ate = Transactd::ActiveTable.new(db, 'extention')
2054
+ q = Transactd::Query.new()
2055
+
2056
+ atu.alias('名前', 'name')
2057
+ q.select('id', 'name', 'group').where('id', '<=', '15000')
2058
+ rs = atu.index(0).keyValue('1').read(q)
2059
+ expect(rs.size()).to eq 15000
2060
+
2061
+ # Join extention::comment
2062
+ q.reset()
2063
+ ate.index(0).join(rs,
2064
+ q.select('comment').optimize(Transactd::QueryBase::JoinHasOneOrHasMany), 'id')
2065
+ expect(rs.size()).to eq 15000
2066
+
2067
+ # reverse and get first (so it means 'get last')
2068
+ last = rs.reverse().first()
2069
+ expect(last['id']).to eq 15000
2070
+ expect(last['comment']).to eq '15000 comment'
2071
+
2072
+ # Join group::name
2073
+ q.reset()
2074
+ atg.alias('name', 'group_name')
2075
+ atg.index(0).join(rs, q.select('group_name'), 'group')
2076
+ expect(rs.size()).to eq 15000
2077
+
2078
+ # get last (the rs is reversed, so it means 'get first')
2079
+ first = rs.last()
2080
+ expect(first['id']).to eq 1
2081
+ expect(first['comment']).to eq '1 comment'
2082
+ expect(first['group_name']).to eq '1 group'
2083
+
2084
+ # row in rs[15000 - 9]
2085
+ rec = rs[15000 - 9]
2086
+ expect(rec['group_name']).to eq '4 group'
2087
+
2088
+ # orderby
2089
+ rs.orderBy('group_name')
2090
+ for i in 0..(15000 / 5 - 1)
2091
+ expect(rs[i]['group_name']).to eq '1 group'
2092
+ end
2093
+ expect(rs[15000 / 5]['group_name']).to eq '2 group'
2094
+ expect(rs[(15000 / 5) * 2]['group_name']).to eq '3 group'
2095
+ expect(rs[(15000 / 5) * 3]['group_name']).to eq '4 group'
2096
+ expect(rs[(15000 / 5) * 4]['group_name']).to eq '5 group'
2097
+
2098
+ # union
2099
+ q.reset()
2100
+ q.select('id', 'name', 'group').where('id', '<=', '16000')
2101
+ rs2 = atu.index(0).keyValue('15001').read(q)
2102
+ expect(rs2.size()).to eq 1000
2103
+ q.reset()
2104
+ ate.index(0).join(rs2,
2105
+ q.select('comment').optimize(Transactd::QueryBase::JoinHasOneOrHasMany), 'id')
2106
+ expect(rs2.size()).to eq 1000
2107
+ q.reset()
2108
+ atg.index(0).join(rs2, q.select('group_name'), 'group')
2109
+ expect(rs2.size()).to eq 1000
2110
+ rs.unionRecordset(rs2)
2111
+ expect(rs.size()).to eq 16000
2112
+ # row in rs[15000]
2113
+ expect(rs[15000]['id']).to eq 15001
2114
+ # last
2115
+ expect(rs.last()['id']).to eq 16000
2116
+
2117
+ # group by
2118
+ gq = Transactd::GroupQuery.new()
2119
+ gq.keyField('group', 'id')
2120
+ count1 = Transactd::Count.new('count')
2121
+ gq.addFunction(count1)
2122
+
2123
+ count2 = Transactd::Count.new('group1_count')
2124
+ count2.when('group', '=', '1')
2125
+ gq.addFunction(count2)
2126
+
2127
+ rs.groupBy(gq)
2128
+ expect(rs.size()).to eq 16000
2129
+ expect(rs[0]['group1_count']).to eq 1
2130
+
2131
+ # clone
2132
+ rsv = rs.clone
2133
+ gq.reset()
2134
+ count3 = Transactd::Count.new('count')
2135
+ gq.addFunction(count3).keyField('group')
2136
+ rs.groupBy(gq)
2137
+ expect(rs.size()).to eq 5
2138
+ expect(rsv.size()).to eq 16000
2139
+
2140
+ # having
2141
+ rq = Transactd::RecordsetQuery.new()
2142
+ rq.when('group1_count', '=', '1').or_('group1_count', '=', '2')
2143
+ rsv.matchBy(rq)
2144
+ expect(rsv.size()).to eq 3200
2145
+ expect(rsv).not_to be nil
2146
+ rsv = nil
2147
+ expect(rsv).to be nil
2148
+
2149
+ # top
2150
+ rs3 = Transactd::Recordset.new()
2151
+ rs.top(rs3, 10)
2152
+ expect(rs3.size()).to eq 5
2153
+ rs.top(rs3, 3)
2154
+ expect(rs3.size()).to eq 3
2155
+ expect(rs.size()).to eq 5
2156
+
2157
+ # query new / delete
2158
+ q1 = Transactd::RecordsetQuery.new()
2159
+ q1.when('group1_count', '=', '1').or_('group1_count', '=', '2')
2160
+ q1 = nil
2161
+
2162
+ q2 = Transactd::Query.new()
2163
+ q2.where('group1_count', '=', '1').or_('group1_count', '=', '2')
2164
+ q2 = nil
2165
+
2166
+ q3 = Transactd::GroupQuery.new()
2167
+ q3.keyField('group', 'id')
2168
+ q3 = nil
2169
+
2170
+ atu.release()
2171
+ atg.release()
2172
+ ate.release()
2173
+ db.close()
2174
+ end
2175
+
2176
+ def testWirtableRecord()
2177
+ db = Transactd::Database.new()
2178
+ db.open(URL_QT)
2179
+ expect(db.stat()).to eq 0
2180
+ atu = Transactd::ActiveTable.new(db, 'user')
2181
+
2182
+ rec = atu.index(0).getWritableRecord()
2183
+ rec['id'] = 120000
2184
+ rec['名前'] = 'aiba'
2185
+ rec.save()
2186
+
2187
+ rec.clear()
2188
+ expect(rec['id']).not_to eq 120000
2189
+ expect(rec['名前']).not_to eq 'aiba'
2190
+ rec['id'] = 120000
2191
+ rec.read()
2192
+ expect(rec['id']).to eq 120000
2193
+ expect(rec['名前']).to eq 'aiba'
2194
+
2195
+ rec.clear()
2196
+ rec['id'] = 120001
2197
+ rec['名前'] = 'oono'
2198
+ rec.insert() unless rec.read()
2199
+
2200
+ rec.clear()
2201
+ rec['id'] = 120001
2202
+ rec.read()
2203
+ expect(rec['id']).to eq 120001
2204
+ expect(rec['名前']).to eq 'oono'
2205
+
2206
+ # update only changed filed
2207
+ rec.clear()
2208
+ rec['id'] = 120001
2209
+ rec['名前'] = 'matsumoto'
2210
+ rec.update()
2211
+
2212
+ rec.clear()
2213
+ rec['id'] = 120001
2214
+ rec.read()
2215
+ expect(rec['id']).to eq 120001
2216
+ expect(rec['名前']).to eq 'matsumoto'
2217
+
2218
+ rec.del()
2219
+ rec['id'] = 120000
2220
+ rec.del()
2221
+
2222
+ rec.clear()
2223
+ rec['id'] = 120001
2224
+ ret = rec.read()
2225
+ expect(ret).to eq false
2226
+
2227
+ rec.clear()
2228
+ rec['id'] = 120000
2229
+ ret = rec.read()
2230
+ expect(ret).to eq false
2231
+
2232
+ atu.release()
2233
+ db.close()
2234
+ end
2235
+
2236
+ describe Transactd do
1635
2237
  it 'create database' do
1636
- testCreateDatabase(@db)
2238
+ db = Transactd::Database.new()
2239
+ testCreateDatabase(db)
2240
+ db.close()
1637
2241
  end
1638
2242
  it 'create table' do
1639
- testCreateDatabase(@db)
1640
- testCreateTable(@db)
2243
+ db = Transactd::Database.new()
2244
+ testCreateDatabase(db)
2245
+ testCreateTable(db)
2246
+ db.close()
1641
2247
  end
1642
2248
  it 'open table' do
1643
- testOpenTable(@db)
2249
+ db = Transactd::Database.new()
2250
+ testOpenTable(db)
2251
+ db.close()
2252
+ end
2253
+ it 'clone db object' do
2254
+ testClone()
1644
2255
  end
1645
2256
  it 'version' do
1646
- testVersion(@db)
2257
+ testVersion()
1647
2258
  end
1648
2259
  it 'insert' do
1649
- testInsert(@db)
2260
+ testInsert()
1650
2261
  end
1651
2262
  it 'find' do
1652
- testFind(@db)
2263
+ testFind()
1653
2264
  end
1654
2265
  it 'findNext' do
1655
- testFindNext(@db)
2266
+ testFindNext()
1656
2267
  end
1657
2268
  it 'findIn' do
1658
- testFindIn(@db)
2269
+ testFindIn()
1659
2270
  end
1660
2271
  it 'get percentage' do
1661
- testGetPercentage(@db)
2272
+ testGetPercentage()
1662
2273
  end
1663
2274
  it 'move percentage' do
1664
- testMovePercentage(@db)
2275
+ testMovePercentage()
1665
2276
  end
1666
2277
  it 'get equal' do
1667
- testGetEqual(@db)
2278
+ testGetEqual()
1668
2279
  end
1669
2280
  it 'get next' do
1670
- testGetNext(@db)
2281
+ testGetNext()
1671
2282
  end
1672
2283
  it 'get previous' do
1673
- testGetPrevious(@db)
2284
+ testGetPrevious()
1674
2285
  end
1675
2286
  it 'get greater' do
1676
- testGetGreater(@db)
2287
+ testGetGreater()
1677
2288
  end
1678
2289
  it 'get less than' do
1679
- testGetLessThan(@db)
2290
+ testGetLessThan()
1680
2291
  end
1681
2292
  it 'get first' do
1682
- testGetFirst(@db)
2293
+ testGetFirst()
1683
2294
  end
1684
2295
  it 'get last' do
1685
- testGetLast(@db)
2296
+ testGetLast()
1686
2297
  end
1687
2298
  it 'move position' do
1688
- testMovePosition(@db)
2299
+ testMovePosition()
1689
2300
  end
1690
2301
  it 'update' do
1691
- testUpdate(@db)
2302
+ testUpdate()
1692
2303
  end
1693
2304
  it 'snapshot' do
1694
- testSnapShot(@db)
2305
+ testSnapShot()
1695
2306
  end
1696
2307
  it 'send conflict error' do
1697
- testConflict(@db)
2308
+ testConflict()
1698
2309
  end
1699
2310
  it 'transaction' do
1700
- testTransactionLock(@db)
2311
+ testTransactionLock()
2312
+ end
2313
+ it 'exclusive' do
2314
+ testExclusive()
1701
2315
  end
1702
2316
  it 'insert2' do
1703
- testInsert2(@db)
2317
+ testInsert2()
1704
2318
  end
1705
2319
  it 'delete' do
1706
- testDelete(@db)
2320
+ testDelete()
1707
2321
  end
1708
2322
  it 'set owner' do
1709
- testSetOwner(@db)
2323
+ testSetOwner()
1710
2324
  end
1711
2325
  it 'drop index' do
1712
- testDropIndex(@db)
2326
+ testDropIndex()
1713
2327
  end
1714
2328
  it 'drop database' do
1715
- testDropDatabase(@db)
2329
+ db = Transactd::Database.new()
2330
+ testDropDatabase(db)
2331
+ db.close()
1716
2332
  end
1717
2333
  it 'login' do
1718
- testLogin(@db)
2334
+ testLogin()
1719
2335
  end
1720
2336
  it 'query' do
1721
2337
  testQuery()
1722
2338
  end
2339
+ it 'create querytest db' do
2340
+ testCreateQueryTest()
2341
+ end
2342
+ it 'new and delete objects' do
2343
+ testNewDelete()
2344
+ end
2345
+ it 'activetable and join' do
2346
+ testJoin()
2347
+ end
2348
+ it 'write with writableRecord' do
2349
+ testWirtableRecord()
2350
+ end
1723
2351
  end
1724
2352
 
1725
2353
  describe Transactd, 'var tables' do
1726
- before :each do
1727
- @db = Transactd::Database.createObject()
1728
- end
1729
- after :each do
1730
- @db.close()
1731
- @db = nil
1732
- end
1733
2354
  it 'create var database' do
1734
- testCreateDatabaseVar(@db)
2355
+ testCreateDatabaseVar()
1735
2356
  end
1736
2357
  it 'set kanji char to field' do
1737
- testVarField(@db)
2358
+ testVarField()
1738
2359
  end
1739
2360
  it 'insert kanji char to field' do
1740
- testVarInsert(@db)
2361
+ testVarInsert()
1741
2362
  end
1742
2363
  it 'read kanji char from field' do
1743
- testVarRead(@db)
2364
+ testVarRead()
1744
2365
  end
1745
2366
  it 'filter' do
1746
- testFilterVar(@db)
2367
+ testFilterVar()
1747
2368
  end
1748
2369
  it 'drop var database' do
1749
- testDropDatabaseVar(@db)
2370
+ db = Transactd::Database.new()
2371
+ testDropDatabaseVar(db)
1750
2372
  end
1751
2373
  end
1752
2374
 
1753
2375
  describe Transactd, 'StringFilter' do
1754
- before :each do
1755
- @db = Transactd::Database.createObject()
1756
- end
1757
- after :each do
1758
- @db.close()
1759
- @db = nil
1760
- end
1761
2376
  it 'string filter' do
1762
- testStringFilter(@db)
2377
+ testStringFilter()
1763
2378
  end
1764
2379
  it 'drop database' do
1765
- testDropDatabaseStringFilter(@db)
1766
- end
1767
- end
1768
-
1769
- describe Transactd, 'convert' do
1770
- if !IS_WINDOWS
1771
- it 'convert char' do
1772
- dummy = ''
1773
- u8 = '123'
1774
- mbcArray = '123'.encode('Shift_JIS').bytes.to_a # bites Shift-JIS '漢字'
1775
- ret = Transactd::u8tombc(u8, -1, dummy, 256)
1776
- mbc = ret[1].force_encoding('Shift_JIS')
1777
- expect(mbc.bytes.to_a).to eq mbcArray
1778
-
1779
- u8 = '漢字'
1780
- mbcArray = '漢字'.encode('Shift_JIS').bytes.to_a # bites Shift-JIS '漢字'
1781
- ret = Transactd::u8tombc(u8, -1, dummy, 256)
1782
- mbc = ret[1].force_encoding('Shift_JIS')
1783
- expect(mbc.bytes.to_a).to eq mbcArray
1784
-
1785
- u8Array = '漢字'.encode('UTF-8').bytes.to_a # bites UTF-8 '漢字'
1786
- ret = Transactd::mbctou8(mbc, -1, dummy , 256)
1787
- u8 = ret[1].force_encoding('UTF-8')
1788
- expect(u8.bytes.to_a).to eq u8Array
1789
- end
2380
+ db = Transactd::Database.new()
2381
+ testDropDatabaseStringFilter(db)
1790
2382
  end
1791
2383
  end