transactd 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/{BUILD_UNIX-JA → BUILD_UNIX-JA.md} +6 -6
  3. data/CMakeLists.txt +20 -15
  4. data/{README-JA → README-JA.md} +23 -23
  5. data/{README → README.md} +22 -24
  6. data/RELEASE_NOTE +120 -0
  7. data/RELEASE_NOTE-JA +110 -0
  8. data/bin/common/tdclc_32_2_4.dll +0 -0
  9. data/bin/common/tdclc_64_2_4.dll +0 -0
  10. data/build/common/get_ruby_path.cmake +1 -1
  11. data/build/swig/ruby/tdclrb_wrap.cpp +1319 -830
  12. data/build/swig/tdcl.i +22 -2
  13. data/build/tdclc/tdclc.cbproj +1 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -1
  17. data/build/tdclrb/CMakeLists.txt +6 -1
  18. data/build/tdclrb/bldgem/extconf.rb +5 -1
  19. data/build/tdclrb/tdclrb.rc +4 -4
  20. data/source/bzs/db/engine/mysql/database.cpp +44 -40
  21. data/source/bzs/db/engine/mysql/database.h +28 -8
  22. data/source/bzs/db/engine/mysql/dbManager.cpp +2 -0
  23. data/source/bzs/db/engine/mysql/dbManager.h +2 -7
  24. data/source/bzs/db/engine/mysql/mysqlInternal.h +79 -7
  25. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +5 -1
  26. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +32 -8
  27. data/source/bzs/db/protocol/tdap/client/activeTable.h +17 -4
  28. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  29. data/source/bzs/db/protocol/tdap/client/client.cpp +51 -6
  30. data/source/bzs/db/protocol/tdap/client/client.h +41 -11
  31. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +51 -15
  32. data/source/bzs/db/protocol/tdap/client/connMgr.h +6 -1
  33. data/source/bzs/db/protocol/tdap/client/database.cpp +26 -5
  34. data/source/bzs/db/protocol/tdap/client/database.h +3 -2
  35. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +38 -28
  36. data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
  37. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +2 -32
  38. data/source/bzs/db/protocol/tdap/client/field.cpp +0 -1
  39. data/source/bzs/db/protocol/tdap/client/filter.h +60 -33
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +2 -5
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +9 -0
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +1 -0
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +99 -48
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +5 -2
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +76 -26
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +6 -4
  47. data/source/bzs/db/protocol/tdap/client/request.h +28 -11
  48. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +19 -11
  49. data/source/bzs/db/protocol/tdap/client/table.cpp +157 -70
  50. data/source/bzs/db/protocol/tdap/client/table.h +20 -5
  51. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +57 -4
  52. data/source/bzs/db/protocol/tdap/client/trdormapi.h +55 -20
  53. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +65 -31
  54. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -0
  55. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +24 -36
  56. data/source/bzs/db/protocol/tdap/mysql/request.h +1 -1
  57. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +98 -18
  58. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +12 -7
  59. data/source/bzs/db/protocol/tdap/tdapRequest.h +3 -8
  60. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -9
  61. data/source/bzs/db/protocol/tdap/tdapSchema.h +31 -1
  62. data/source/bzs/db/protocol/tdap/tdapcapi.h +49 -6
  63. data/source/bzs/db/protocol/tdap/uri.h +41 -6
  64. data/source/bzs/db/transactd/appModule.cpp +0 -1
  65. data/source/bzs/db/transactd/appModule.h +0 -2
  66. data/source/bzs/db/transactd/connManager.cpp +202 -33
  67. data/source/bzs/db/transactd/connManager.h +11 -4
  68. data/source/bzs/db/transactd/connectionRecord.h +19 -5
  69. data/source/bzs/db/transactd/transactd.cpp +39 -8
  70. data/source/bzs/env/crosscompile.cpp +1 -1
  71. data/source/bzs/example/queryData.cpp +1 -1
  72. data/source/bzs/netsvc/client/iconnection.h +2 -0
  73. data/source/bzs/netsvc/client/tcpClient.cpp +48 -26
  74. data/source/bzs/netsvc/client/tcpClient.h +171 -106
  75. data/source/bzs/netsvc/server/IAppModule.h +0 -1
  76. data/source/bzs/netsvc/server/serverPipe.cpp +5 -1
  77. data/source/bzs/netsvc/server/serverPipe.h +2 -1
  78. data/source/bzs/test/tdclatl/test_query_atl.js +105 -0
  79. data/source/bzs/test/tdclphp/transactd_Test.php +129 -11
  80. data/source/bzs/test/tdclrb/transactd_spec.rb +74 -2
  81. data/source/bzs/test/transactdBench/scaling_bench.cpp +1 -1
  82. data/source/bzs/test/trdclengn/test_trdclengn.cpp +45 -20
  83. data/source/global/tdclatl/Bookmark.cpp +28 -0
  84. data/source/global/tdclatl/Bookmark.h +65 -0
  85. data/source/global/tdclatl/Database.cpp +2 -2
  86. data/source/global/tdclatl/Database.h +1 -3
  87. data/source/global/tdclatl/DbDef.cpp +6 -0
  88. data/source/global/tdclatl/DbDef.h +1 -0
  89. data/source/global/tdclatl/QueryBase.cpp +29 -0
  90. data/source/global/tdclatl/QueryBase.h +4 -0
  91. data/source/global/tdclatl/Record.cpp +14 -2
  92. data/source/global/tdclatl/Record.h +1 -1
  93. data/source/global/tdclatl/Table.cpp +80 -16
  94. data/source/global/tdclatl/Table.h +23 -8
  95. data/source/global/tdclatl/_IDatabaseEvents_CP.h +39 -0
  96. data/source/global/tdclatl/activeTable.cpp +2 -2
  97. data/source/global/tdclatl/activeTable.h +1 -1
  98. data/source/global/tdclatl/tdclatl.idl +64 -14
  99. metadata +12 -12
  100. data/bin/common/tdclc_32_2_3.dll +0 -0
  101. data/bin/common/tdclc_64_2_3.dll +0 -0
  102. data/build/tdclcpp/BUILDNUMBER.txt +0 -1
  103. data/build/tdclrb/BUILDNUMBER.txt +0 -1
  104. /data/{BUILD_WIN-JA → BUILD_WIN-JA.md} +0 -0
  105. /data/{README_ORMSRCGEN-JA → README_ORMSRCGEN-JA.md} +0 -0
  106. /data/{README_ORMSRCGEN → README_ORMSRCGEN.md} +0 -0
@@ -519,6 +519,107 @@ function wirteRecord(atg)
519
519
  rec.Del();
520
520
  }
521
521
 
522
+ /*--------------------------------------------------------------------------------*/
523
+ function testBookmarks(atg)
524
+ {
525
+ var tb = atg.Table();
526
+ initQuery();
527
+ q.All();
528
+ q.BookmarkAlso(true);
529
+ tb.SetQuery(q, false);
530
+ var num = tb.RecordCount();
531
+ checkEqual(num, 100, "RecotdCount = 100 ");
532
+
533
+ checkEqual(tb.BookmarksCount, 100, "BookmarkCount = 100 ");
534
+
535
+ initQuery();
536
+
537
+ // Hold bookmark objects to reading.
538
+ var bm1 = tb.Bookmarks(0);
539
+ var bm2 = tb.Bookmarks(10);
540
+ var bm3 = tb.Bookmarks(20);
541
+ q.AddSeekBookmark(bm1);
542
+ q.AddSeekBookmark(bm2);
543
+ q.AddSeekBookmark(bm3);
544
+ var rs = atg.Read(q);
545
+
546
+ checkEqual(rs.Count, 3, "atg rs.Count = 3 ");
547
+ checkEqual(rs.Record(0).Field("code").Vlng, 1, "rs.Record(0).code = 1 ");
548
+ checkEqual(rs.Record(1).Field("code").Vlng, 11, "rs.Record(1).code = 11 ");
549
+ checkEqual(rs.Record(2).Field("code").Vlng, 21, "rs.Record(2).code = 21 ");
550
+
551
+ //Read by table
552
+ tb.SetQuery(q, false);
553
+ tb.Find();
554
+ checkEqual(tb.Stat, 0, "tb.Stat = 0 ");
555
+ checkEqual(tb.Vlng("code"), 1, "First.code = 1 ");
556
+ tb.FindNext();
557
+ checkEqual(tb.Stat, 0, "tb.Stat = 0 ");
558
+ checkEqual(tb.Vlng("code"), 11, "Second.code = 11 ");
559
+ tb.FindNext();
560
+ checkEqual(tb.Stat, 0, "tb.Stat = 0 ");
561
+ checkEqual(tb.Vlng("code"), 21, "Third.code = 21 ");
562
+ tb.FindNext();
563
+ checkEqual(tb.Stat, 9, "tb.Stat = 9 ");
564
+ }
565
+ /*--------------------------------------------------------------------------------*/
566
+
567
+ function testBookmarks2(db)
568
+ {
569
+ var min_id = 5;
570
+ var max_id = 15;
571
+ var FDI_ID = 0;
572
+
573
+ var tb = db.OpenTable("user");
574
+ checkEqual(db.Stat, 0, "");
575
+ tb.KeyNum = 0;
576
+ tb.ClearBuffer();
577
+
578
+ var qq = new ActiveXObject('transactd.query');
579
+ qq.Where('id', '>=', min_id).And('id', '<=', max_id).Reject(0xFFFF);
580
+ tb.setQuery(qq.BookmarkAlso(true));
581
+
582
+ var cnt = tb.RecordCount();
583
+ checkEqual(tb.Stat, 0, "");
584
+ checkEqual(cnt, 11, "count ");
585
+ var bmCnt = tb.BookmarksCount;
586
+ checkEqual(cnt, bmCnt, "");
587
+
588
+ tb.MoveBookmarks(bmCnt - 1);
589
+ checkEqual(tb.Stat, 0, "");
590
+ checkEqual(tb.Vlng(FDI_ID), max_id);
591
+ tb.MoveBookmarks(0);
592
+ checkEqual(tb.Stat, 0, "");
593
+ checkEqual(tb.Vlng(FDI_ID), min_id);
594
+
595
+ var qb = new ActiveXObject('transactd.query');
596
+ // Hold bookmark objects to reading.
597
+ var bm1 = tb.Bookmarks(0);
598
+ var bm2 = tb.Bookmarks(2);
599
+ var bm3 = tb.Bookmarks(4);
600
+ qb.AddSeekBookmark(bm1);
601
+ qb.AddSeekBookmark(bm2);
602
+ qb.AddSeekBookmark(bm3);bm1
603
+
604
+ var atu = createActiveTable(db, "user");
605
+ var rs = atu.Read(qb);
606
+ checkEqual(rs.Size, 3);
607
+
608
+ checkEqual(rs.Record(0).Field(FDI_ID).Vlng, 5);
609
+ checkEqual(rs.Record(1).Field(FDI_ID).Vlng, 7);
610
+ checkEqual(rs.Record(2).Field(FDI_ID).Vlng, 9);
611
+
612
+ //read by wriableRecord
613
+ var rec = atu.GetWritableRecord();
614
+ rec.Read(tb.Bookmarks(1));
615
+ checkEqual(rec.Field(FDI_ID).Vlng, 6);
616
+ rec.Read(tb.Bookmarks(3));
617
+ checkEqual(rec.Field(FDI_ID).Vlng, 8);
618
+ rec.Read(tb.Bookmarks(5));
619
+ checkEqual(rec.Field(FDI_ID).Vlng, 10);
620
+
621
+ tb.Close();
622
+ }
522
623
 
523
624
  /*--------------------------------------------------------------------------------*/
524
625
  function test(atu, atg, ate, db)
@@ -647,6 +748,10 @@ function test(atu, atg, ate, db)
647
748
 
648
749
  // test wirteRecord
649
750
  wirteRecord(atg);
751
+
752
+ //test ver 2.4 added changed method
753
+ testBookmarks(atg);
754
+ testBookmarks2(db);
650
755
 
651
756
  WScript.Echo(" -- End Test -- ");
652
757
 
@@ -216,6 +216,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
216
216
 
217
217
  $dbdef->updateTableDef($tableid);
218
218
  $this->assertEquals($dbdef->stat(), 0);
219
+ $this->assertEquals($dbdef->validateTableDef($tableid), 0);
219
220
  }
220
221
  private function openTable($db)
221
222
  {
@@ -521,6 +522,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
521
522
  $this->assertEquals($tb->stat(), 0);
522
523
  $this->assertTrue(abs(TEST_COUNT / 2 + 1 - $v) < FIVE_PERCENT_OF_TEST_COUNT);
523
524
  }
525
+
524
526
  public function testGetEqual()
525
527
  {
526
528
  $db = new Bz\database();
@@ -1291,7 +1293,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1291
1293
 
1292
1294
  // cleanup
1293
1295
  $tb2->del(); // last id = 29999
1294
- $this->assertEquals($tb->stat(), 0);
1296
+ $this->assertEquals($tb2->stat(), 0);
1295
1297
 
1296
1298
  // ------------------------------------------------------
1297
1299
  // Test use shared lock option
@@ -1798,7 +1800,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1798
1800
  $db = new Bz\database();
1799
1801
  $tb = $this->openTable($db);
1800
1802
  $this->assertNotEquals($tb, NULL);
1801
- $expected_count = 20003;
1803
+ $expected_count = 20002;
1802
1804
  if(! class_exists('Thread'))
1803
1805
  $expected_count = $expected_count + 1;
1804
1806
  // estimate count
@@ -1906,9 +1908,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
1906
1908
  $this->assertEquals($db->stat(), 1);
1907
1909
  }
1908
1910
 
1909
- /* -----------------------------------------------------
1910
- transactd var tables
1911
- ----------------------------------------------------- */
1911
+ //-----------------------------------------------------
1912
+ // transactd var tables
1913
+ //-----------------------------------------------------
1912
1914
 
1913
1915
  private function isWindows()
1914
1916
  {
@@ -2429,9 +2431,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
2429
2431
  $this->assertEquals($db->stat(), 0);
2430
2432
  }
2431
2433
 
2432
- /* -----------------------------------------------------
2433
- transactd StringFilter
2434
- ----------------------------------------------------- */
2434
+ //-----------------------------------------------------
2435
+ // transactd StringFilter
2436
+ //-----------------------------------------------------
2435
2437
 
2436
2438
  private function createTableStringFilter($db, $id, $name, $type, $type2)
2437
2439
  {
@@ -2815,9 +2817,9 @@ class transactdTest extends PHPUnit_Framework_TestCase
2815
2817
  $this->assertEquals($q->toString(), "code = '&&abc'");
2816
2818
  }
2817
2819
 
2818
- /* -----------------------------------------------------
2819
- ActiveTable
2820
- ----------------------------------------------------- */
2820
+ //-----------------------------------------------------
2821
+ // ActiveTable
2822
+ //-----------------------------------------------------
2821
2823
 
2822
2824
  private function createQTuser($db)
2823
2825
  {
@@ -3652,4 +3654,120 @@ class transactdTest extends PHPUnit_Framework_TestCase
3652
3654
  $ret = $rec->read();
3653
3655
  $this->assertEquals($ret, false);
3654
3656
  }
3657
+
3658
+ public function testBookmark1()
3659
+ {
3660
+ $min_id = 5;
3661
+ $max_id = 15;
3662
+ $db = new Bz\database();
3663
+ $db->open(URL_QT);
3664
+ $this->assertEquals($db->stat(), 0);
3665
+ $tb = $db->openTable('user');
3666
+ $this->assertEquals($db->stat(), 0);
3667
+
3668
+ $tb->clearBuffer();
3669
+ $tb->setKeyNum(0);
3670
+ $tb->setFilter('id >= ' . $min_id . ' and id <= ' . $max_id, 0, 0);
3671
+ $cnt = $tb->recordCount();
3672
+ $this->assertEquals($tb->stat(), 0);
3673
+ $this->assertEquals($cnt, $tb->bookmarksCount());
3674
+ $tb->moveBookmarks($cnt - 1);
3675
+ $this->assertEquals($tb->stat(), 0);
3676
+ $this->assertEquals($tb->getFVint(FDI_ID), $max_id);
3677
+ $tb->moveBookmarks(0);
3678
+ $this->assertEquals($tb->stat(), 0);
3679
+ $this->assertEquals($tb->getFVint(FDI_ID), $min_id);
3680
+
3681
+ $q = new Bz\query();
3682
+ $q->where('id', '>=', $min_id)->and_('id', '<=', $max_id)->reject(0xFFFF);
3683
+ $tb->clearBuffer();
3684
+ $tb->setQuery($q->bookmarkAlso(true));
3685
+ $cnt = $tb->recordCount();
3686
+ $this->assertEquals($tb->stat(), 0);
3687
+ $this->assertEquals($cnt, $tb->bookmarksCount());
3688
+ $tb->moveBookmarks($cnt - 1);
3689
+ $this->assertEquals($tb->stat(), 0);
3690
+ $this->assertEquals($tb->getFVint(FDI_ID), $max_id);
3691
+ $tb->moveBookmarks(0);
3692
+ $this->assertEquals($tb->stat(), 0);
3693
+ $this->assertEquals($tb->getFVint(FDI_ID), $min_id);
3694
+
3695
+
3696
+ $atu = new Bz\ActiveTable($db, 'user');
3697
+ $qb = new Bz\query();
3698
+ $len = $atu->table()->bookmarkLen();
3699
+ // Hold bookmark objects to reading.
3700
+ $bm1 = $tb->bookmarks(0);
3701
+ $bm2 = $tb->bookmarks(2);
3702
+ $bm3 = $tb->bookmarks(4);
3703
+
3704
+ $qb->addSeekBookmark($bm1, $len);
3705
+ $qb->addSeekBookmark($bm2, $len);
3706
+ $qb->addSeekBookmark($bm3, $len);
3707
+ $this->assertEquals($qb->isSeekByBookmarks(), true);
3708
+ $rs = $atu->read($qb);
3709
+
3710
+ $this->assertEquals($cnt, $tb->bookmarksCount());
3711
+ $this->assertEquals(count($rs), 3);
3712
+ $this->assertEquals($rs[0][FDI_ID], 5);
3713
+ $this->assertEquals($rs[1][FDI_ID], 7);
3714
+ $this->assertEquals($rs[2][FDI_ID], 9);
3715
+
3716
+ //read by WritableRecord
3717
+ $rec = $atu->getWritableRecord();
3718
+ $rec->read($tb->bookmarks($cnt - 1));
3719
+ $this->assertEquals($rec[FDI_ID], $max_id);
3720
+ $rec->read($tb->bookmarks(0));
3721
+ $this->assertEquals($rec[FDI_ID], $min_id);
3722
+
3723
+ $db->close();
3724
+ }
3725
+ public function testBookmark2()
3726
+ {
3727
+ $db = new Bz\database();
3728
+ $db->open(URL_QT);
3729
+ $this->assertEquals($db->stat(), 0);
3730
+ $atu = new Bz\ActiveTable($db, 'user');
3731
+
3732
+ $tb = $atu->table();
3733
+ $q = new Bz\query();
3734
+ $tb->setQuery($q->all()->bookmarkAlso(true));
3735
+ $num = $tb->recordCount();
3736
+ $this->assertEquals($tb->stat(), 0);
3737
+ $this->assertEquals($num, $tb->bookmarksCount());
3738
+
3739
+ $q->reset();
3740
+ $len = $tb->bookmarkLen();
3741
+ $this->assertEquals($len, 4);
3742
+
3743
+ // Hold bookmark objects to reading.
3744
+ $bm1 = $tb->bookmarks(0);
3745
+ $bm2 = $tb->bookmarks(10);
3746
+ $bm3 = $tb->bookmarks(20);
3747
+
3748
+ $q->addSeekBookmark($bm1, $len);
3749
+ $q->addSeekBookmark($bm2, $len);
3750
+ $q->addSeekBookmark($bm3, $len);
3751
+ $rs = $atu->read($q);
3752
+ $this->assertEquals($rs->count(), 3);
3753
+
3754
+ $this->assertEquals($rs[0][FDI_ID], 1);
3755
+ $this->assertEquals($rs[1][FDI_ID], 11);
3756
+ $this->assertEquals($rs[2][FDI_ID], 21);
3757
+
3758
+ //Read by table
3759
+ $tb->setQuery($q, false);
3760
+ $tb->find();
3761
+ $this->assertEquals($tb->stat(), 0);
3762
+ $this->assertEquals($tb->getFVint(FDI_ID), 1);
3763
+ $tb->findNext();
3764
+ $this->assertEquals($tb->stat(), 0);
3765
+ $this->assertEquals($tb->getFVint(FDI_ID), 11);
3766
+ $tb->findNext();
3767
+ $this->assertEquals($tb->stat(), 0);
3768
+ $this->assertEquals($tb->getFVint(FDI_ID), 21);
3769
+ $tb->findNext();
3770
+ $this->assertEquals($tb->stat(), 9);
3771
+
3772
+ }
3655
3773
  }
@@ -175,6 +175,7 @@ def testCreateTable(db)
175
175
  kd.segmentCount = 1
176
176
  dbdef.updateTableDef(table_id)
177
177
  expect(dbdef.stat()).to eq 0
178
+ expect(dbdef.validateTableDef(td.id)).to eq 0
178
179
  end
179
180
 
180
181
  def testOpenTable(db)
@@ -1181,7 +1182,7 @@ def testTransactionLockReadCommited()
1181
1182
 
1182
1183
  # cleanup
1183
1184
  tb2.del() # last id = 29999
1184
- expect(tb.stat()).to eq 0
1185
+ expect(tb2.stat()).to eq 0
1185
1186
 
1186
1187
  # ----------------------------------------------------
1187
1188
  # Abort test
@@ -1741,7 +1742,7 @@ def testInsert2()
1741
1742
  end
1742
1743
 
1743
1744
  def testDelete()
1744
- expected_count = 20003
1745
+ expected_count = 20002
1745
1746
  db = Transactd::Database.new()
1746
1747
  tb = testOpenTable(db)
1747
1748
  # estimate count
@@ -3428,6 +3429,73 @@ def testWirtableRecord()
3428
3429
  db.close()
3429
3430
  end
3430
3431
 
3432
+ def testBookmark()
3433
+ min_id = 5
3434
+ max_id = 15
3435
+ db = Transactd::Database.new()
3436
+ db.open(URL_QT)
3437
+ expect(db.stat()).to eq 0
3438
+ tb = db.openTable('user')
3439
+ expect(db.stat()).to eq 0
3440
+ tb.setKeyNum(0)
3441
+
3442
+ tb.clearBuffer()
3443
+ tb.setFilter('id >= ' + min_id.to_s + ' and id <= ' + max_id.to_s, 0, 0)
3444
+ cnt = tb.recordCount()
3445
+ expect(tb.stat()).to eq 0
3446
+ bmCnt = tb.bookmarksCount()
3447
+ expect(cnt).to eq bmCnt
3448
+ tb.moveBookmarks(bmCnt - 1)
3449
+ expect(tb.stat()).to eq 0
3450
+ expect(tb.getFVint(FDI_ID)).to eq max_id
3451
+ tb.moveBookmarks(0)
3452
+ expect(tb.stat()).to eq 0
3453
+ expect(tb.getFVint(FDI_ID)).to eq min_id
3454
+
3455
+ q = Transactd::Query.new()
3456
+ q.where('id', '>=', min_id).and_('id', '<=', max_id).reject(0xFFFF)
3457
+
3458
+ tb.setQuery(q.bookmarkAlso(true))
3459
+ cnt = tb.recordCount()
3460
+ expect(tb.stat()).to eq 0
3461
+ bmCnt = tb.bookmarksCount()
3462
+ expect(cnt).to eq bmCnt
3463
+ tb.moveBookmarks(bmCnt - 1)
3464
+ expect(tb.stat()).to eq 0
3465
+ expect(tb.getFVint(FDI_ID)).to eq max_id
3466
+ tb.moveBookmarks(0)
3467
+ expect(tb.stat()).to eq 0
3468
+ expect(tb.getFVint(FDI_ID)).to eq min_id
3469
+
3470
+ qb = Transactd::Query.new()
3471
+ atu = Transactd::ActiveTable.new(db, 'user')
3472
+
3473
+ # Hold bookmark objects to reading.
3474
+ bm1 = tb.bookmarks(0)
3475
+ bm2 = tb.bookmarks(2)
3476
+ bm3 = tb.bookmarks(4)
3477
+
3478
+ qb.addSeekBookmark(bm1, tb.bookmarkLen(), false)
3479
+ qb.addSeekBookmark(bm2, tb.bookmarkLen(), false)
3480
+ qb.addSeekBookmark(bm3, tb.bookmarkLen(), false)
3481
+ rs = atu.read(qb)
3482
+
3483
+ expect(rs.size()).to eq 3
3484
+ expect(rs[0][FDI_ID]).to eq min_id
3485
+ expect(rs[1][FDI_ID]).to eq min_id + 2
3486
+ expect(rs[2][FDI_ID]).to eq min_id + 4
3487
+
3488
+ rec = atu.index(0).getWritableRecord()
3489
+ rec.read(tb.bookmarks(bmCnt - 1))
3490
+ expect(rec[FDI_ID]).to eq max_id
3491
+ rec.read(tb.bookmarks(0))
3492
+ expect(rec[FDI_ID]).to eq min_id
3493
+
3494
+ atu.release()
3495
+ tb.close()
3496
+ db.close()
3497
+ end
3498
+
3431
3499
  describe Transactd do
3432
3500
  it 'create database' do
3433
3501
  db = Transactd::Database.new()
@@ -3567,6 +3635,10 @@ describe Transactd do
3567
3635
  it 'write with writableRecord' do
3568
3636
  testWirtableRecord()
3569
3637
  end
3638
+ it 'bookmark' do
3639
+ testBookmark()
3640
+ end
3641
+
3570
3642
  end
3571
3643
 
3572
3644
  describe Transactd, 'var tables' do
@@ -123,7 +123,7 @@ void makeMysqlParam(bzs::test::worker::mysql::connectParam& param,
123
123
  param.port = 0;
124
124
  }
125
125
 
126
- #define BENCH_TIMER_SECONDS 2.0f
126
+ #define BENCH_TIMER_SECONDS 5.0f
127
127
  double executeWorkers(const commandLineParam& cmd, const connectParams param,
128
128
  const bzs::test::worker::mysql::connectParam& paramMysql,
129
129
  int wn)
@@ -18,8 +18,16 @@
18
18
  ================================================================= */
19
19
  //#define BOOST_TEST_MODULE
20
20
 
21
-
21
+ #if defined(__BCPLUSPLUS__)
22
+ #pragma warn -8012
23
+ #pragma warn -8022
24
+ #endif
22
25
  #include <boost/test/included/unit_test.hpp>
26
+ #if defined(__BCPLUSPLUS__)
27
+ #pragma warn .8012
28
+ #pragma warn .8022
29
+ #endif
30
+
23
31
  #include <bzs/db/protocol/tdap/client/database.h>
24
32
  #include <bzs/db/protocol/tdap/client/table.h>
25
33
  #include <bzs/db/protocol/tdap/client/dbDef.h>
@@ -452,9 +460,13 @@ void testInsert(database* db)
452
460
  tb->insert();
453
461
  }
454
462
  tb->commitBulkInsert();
463
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "Insert2");
455
464
  db->endTrn();
456
465
 
457
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "Insert2");
466
+ uint_td v = tb->recordCount(false);
467
+ BOOST_CHECK_MESSAGE(20002 == v,
468
+ "RecordCount count = " << v);
469
+
458
470
  tb->release();
459
471
  }
460
472
 
@@ -1662,7 +1674,7 @@ void testTransactionLockReadCommited(database* db)
1662
1674
 
1663
1675
  //insert test row
1664
1676
  tb2->setFV(fdi_id, 29999);
1665
- tb2->insert();
1677
+ tb2->insert(false);
1666
1678
  BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->insert stat = " << tb2->stat());
1667
1679
 
1668
1680
  tb->seekLast();
@@ -1675,7 +1687,7 @@ void testTransactionLockReadCommited(database* db)
1675
1687
 
1676
1688
  //cleanup
1677
1689
  tb2->del(); // last id = 29999
1678
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->del");
1690
+ BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb->del");
1679
1691
 
1680
1692
  /* -------------------------------------------------*/
1681
1693
  /* TAbort test */
@@ -1907,7 +1919,9 @@ bool isMySQL5_7(database* db)
1907
1919
  (7 == vv.versions[1].minorVersion));
1908
1920
 
1909
1921
  }
1910
-
1922
+ #if defined(__BCPLUSPLUS__)
1923
+ #pragma warn -8004
1924
+ #endif
1911
1925
  void testExclusive()
1912
1926
  {
1913
1927
 
@@ -1983,12 +1997,17 @@ void testExclusive()
1983
1997
  /* -------------------------------------------------*/
1984
1998
  tb = openTable(db, TD_OPEN_NORMAL);
1985
1999
  db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF);
2000
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "db2 open stat = " << db2->stat());
1986
2001
 
1987
2002
  table* tb2 = db->openTable(_T("group"), TD_OPEN_EXCLUSIVE);
1988
2003
  //Check tb2 Exclusive
1989
2004
  table* tb3 = db2->openTable(_T("group"), TD_OPEN_NORMAL);
1990
- BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
1991
- , "Write Exclusive open");
2005
+ if (tb3) //For don't use tb3;
2006
+ BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
2007
+ , "Write Exclusive open" << db2->stat());
2008
+ else
2009
+ BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
2010
+ , "Write Exclusive open" << db2->stat());
1992
2011
  //if (tb2->recordCount(false) == 0)
1993
2012
  {
1994
2013
  for (int i = 1 ; i < 5 ; ++i)
@@ -2037,7 +2056,9 @@ void testExclusive()
2037
2056
  tb2 = db->openTable(_T("group"), TD_OPEN_EXCLUSIVE);
2038
2057
  BOOST_CHECK_MESSAGE(0 == db->stat(), "open group stat = " << db->stat()) ;
2039
2058
  //Check tb2 Exclusive
2059
+
2040
2060
  tb3 = db2->openTable(_T("group"), TD_OPEN_NORMAL);
2061
+
2041
2062
  BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
2042
2063
  , "Write Exclusive open");
2043
2064
  db->beginTrn();
@@ -2068,8 +2089,9 @@ void testExclusive()
2068
2089
  database::destroy(db);
2069
2090
  database::destroy(db2);
2070
2091
  }
2071
-
2072
-
2092
+ #if defined(__BCPLUSPLUS__)
2093
+ #pragma warn .8004
2094
+ #endif
2073
2095
  /* Multi database */
2074
2096
  void testMultiDatabase(database* db)
2075
2097
  {
@@ -2121,11 +2143,12 @@ void testMissingUpdate(database* db)
2121
2143
  db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
2122
2144
  BOOST_CHECK_MESSAGE(0 == db2->stat(), "connect");
2123
2145
  db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF);
2124
- BOOST_CHECK_MESSAGE(0 == db2->stat(), "db2->open");
2146
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "db2->open stat = " << db2->stat());
2125
2147
  table* tb2 = db2->openTable(_T("user"));
2126
2148
  {
2149
+
2127
2150
  boost::scoped_ptr<worker> w(new worker(tb2));
2128
-
2151
+ #ifdef TEST_SEEK_RETRY
2129
2152
  // Inserting target, The InnoDB is good!
2130
2153
  tb->setFV(fdi_id, 300000);
2131
2154
  tb2->setFV(fdi_id, 300000);
@@ -2172,6 +2195,7 @@ void testMissingUpdate(database* db)
2172
2195
 
2173
2196
  tb2->unlock();
2174
2197
  }
2198
+ #endif
2175
2199
 
2176
2200
  // Deleting target, The InnoDB is good!
2177
2201
  tb->setFV(fdi_id, 300000);
@@ -2225,20 +2249,21 @@ void testDelete(database* db)
2225
2249
 
2226
2250
  // estimate number
2227
2251
  int count = tb->recordCount(true);
2228
- bool c = (abs(count - 20003) < 5000);
2252
+ bool c = (abs(count - 20002) < 5000);
2229
2253
  BOOST_CHECK_MESSAGE(c == true, "RecordCount1");
2230
2254
  if (!c)
2231
2255
  {
2232
2256
  char tmp[256];
2233
2257
  sprintf_s(
2234
2258
  tmp, 256,
2235
- "true record count = 20003 as estimate recordCount count = %d ",
2259
+ "true record count = 20002 as estimate recordCount count = %d ",
2236
2260
  count);
2237
2261
  BOOST_CHECK_MESSAGE(false, tmp);
2238
2262
  }
2239
2263
  // true number
2240
- BOOST_CHECK_MESSAGE((uint_td)20003 == tb->recordCount(false),
2241
- "RecordCount2");
2264
+ uint_td v = tb->recordCount(false);
2265
+ BOOST_CHECK_MESSAGE(20002 == v,
2266
+ "RecordCount2 count = " << v);
2242
2267
  int vv = 15001;
2243
2268
  tb->clearBuffer();
2244
2269
  tb->setFV(fdi_id, vv);
@@ -2472,7 +2497,7 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
2472
2497
  td.charsetIndex = charset;
2473
2498
 
2474
2499
  def->insertTable(&td);
2475
- BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable");
2500
+ BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable stat = " << def->stat());
2476
2501
 
2477
2502
  fielddef* fd = def->insertField(id, 0);
2478
2503
  fd->setName(_T("id"));
@@ -3206,7 +3231,7 @@ void doInsertStringFileter(table* tb)
3206
3231
  tb->setFV(_T("name"), _T("あいうえおかきくこ"));
3207
3232
  tb->setFV(_T("namew"), _T("あいうえおかきくこ"));
3208
3233
  tb->insert();
3209
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 1");
3234
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 1 stst = " << tb->stat());
3210
3235
 
3211
3236
  tb->clearBuffer();
3212
3237
  id = 2;
@@ -4537,7 +4562,7 @@ void testServerPrepareJoin(database* db)
4537
4562
  BOOST_CHECK_MESSAGE(rs.size() == 100, "hasManyJoin rs.size()== 100");
4538
4563
  q.all().optimize(queryBase::joinHasOneOrHasMany);
4539
4564
  atu.index(1).join(rs, q, _T("code"));
4540
- BOOST_CHECK_MESSAGE(rs.size() == 20000, "hasManyJoin rs.size()== 20000");
4565
+ BOOST_CHECK_MESSAGE(rs.size() == 20000, "hasManyJoin rs.size()== 20000 size = " << rs.size());
4541
4566
 
4542
4567
  //hasManyJoin outer
4543
4568
  rs.clear();
@@ -4546,7 +4571,7 @@ void testServerPrepareJoin(database* db)
4546
4571
  BOOST_CHECK_MESSAGE(rs.size() == 100, "hasManyJoin rs.size()== 100");
4547
4572
  q.all().optimize(queryBase::joinHasOneOrHasMany);
4548
4573
  atu.index(1).outerJoin(rs, q, _T("code"));
4549
- BOOST_CHECK_MESSAGE(rs.size() == 20095, "hasManyJoin rs.size()== 20095");
4574
+ BOOST_CHECK_MESSAGE(rs.size() == 20095, "hasManyJoin rs.size()== 20095 size = " << rs.size());
4550
4575
 
4551
4576
 
4552
4577
  // restore record
@@ -5539,7 +5564,7 @@ BOOST_FIXTURE_TEST_CASE(new_delete, fixtureQuery)
5539
5564
  BOOST_FIXTURE_TEST_CASE(join, fixtureQuery)
5540
5565
  {
5541
5566
  testJoin(db());
5542
- testRecordsetClone(db());
5567
+ //testRecordsetClone(db());
5543
5568
  testPrepareJoin(db());
5544
5569
  testServerPrepareJoin(db());
5545
5570
  testWirtableRecord(db());
@@ -0,0 +1,28 @@
1
+ /*=================================================================
2
+ Copyright (C) 2015 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include "stdafx.h"
20
+ #include "Bookmark.h"
21
+
22
+
23
+
24
+ STDMETHODIMP CBookmark::get_IsEmpty(VARIANT_BOOL* retVal)
25
+ {
26
+ *retVal = m_bm.isEmpty();
27
+ return S_OK;
28
+ }