transactd 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }