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.
- checksums.yaml +4 -4
- data/{BUILD_UNIX-JA → BUILD_UNIX-JA.md} +6 -6
- data/CMakeLists.txt +20 -15
- data/{README-JA → README-JA.md} +23 -23
- data/{README → README.md} +22 -24
- data/RELEASE_NOTE +120 -0
- data/RELEASE_NOTE-JA +110 -0
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/build/common/get_ruby_path.cmake +1 -1
- data/build/swig/ruby/tdclrb_wrap.cpp +1319 -830
- data/build/swig/tdcl.i +22 -2
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -1
- data/build/tdclrb/CMakeLists.txt +6 -1
- data/build/tdclrb/bldgem/extconf.rb +5 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +44 -40
- data/source/bzs/db/engine/mysql/database.h +28 -8
- data/source/bzs/db/engine/mysql/dbManager.cpp +2 -0
- data/source/bzs/db/engine/mysql/dbManager.h +2 -7
- data/source/bzs/db/engine/mysql/mysqlInternal.h +79 -7
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +5 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +32 -8
- data/source/bzs/db/protocol/tdap/client/activeTable.h +17 -4
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +51 -6
- data/source/bzs/db/protocol/tdap/client/client.h +41 -11
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +51 -15
- data/source/bzs/db/protocol/tdap/client/connMgr.h +6 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +26 -5
- data/source/bzs/db/protocol/tdap/client/database.h +3 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +38 -28
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +2 -32
- data/source/bzs/db/protocol/tdap/client/field.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +60 -33
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +2 -5
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +9 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +1 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +99 -48
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +5 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +76 -26
- data/source/bzs/db/protocol/tdap/client/nsTable.h +6 -4
- data/source/bzs/db/protocol/tdap/client/request.h +28 -11
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +19 -11
- data/source/bzs/db/protocol/tdap/client/table.cpp +157 -70
- data/source/bzs/db/protocol/tdap/client/table.h +20 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +57 -4
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +55 -20
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +65 -31
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +24 -36
- data/source/bzs/db/protocol/tdap/mysql/request.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +98 -18
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +12 -7
- data/source/bzs/db/protocol/tdap/tdapRequest.h +3 -8
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.h +31 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +49 -6
- data/source/bzs/db/protocol/tdap/uri.h +41 -6
- data/source/bzs/db/transactd/appModule.cpp +0 -1
- data/source/bzs/db/transactd/appModule.h +0 -2
- data/source/bzs/db/transactd/connManager.cpp +202 -33
- data/source/bzs/db/transactd/connManager.h +11 -4
- data/source/bzs/db/transactd/connectionRecord.h +19 -5
- data/source/bzs/db/transactd/transactd.cpp +39 -8
- data/source/bzs/env/crosscompile.cpp +1 -1
- data/source/bzs/example/queryData.cpp +1 -1
- data/source/bzs/netsvc/client/iconnection.h +2 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +48 -26
- data/source/bzs/netsvc/client/tcpClient.h +171 -106
- data/source/bzs/netsvc/server/IAppModule.h +0 -1
- data/source/bzs/netsvc/server/serverPipe.cpp +5 -1
- data/source/bzs/netsvc/server/serverPipe.h +2 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +105 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +129 -11
- data/source/bzs/test/tdclrb/transactd_spec.rb +74 -2
- data/source/bzs/test/transactdBench/scaling_bench.cpp +1 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +45 -20
- data/source/global/tdclatl/Bookmark.cpp +28 -0
- data/source/global/tdclatl/Bookmark.h +65 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -3
- data/source/global/tdclatl/DbDef.cpp +6 -0
- data/source/global/tdclatl/DbDef.h +1 -0
- data/source/global/tdclatl/QueryBase.cpp +29 -0
- data/source/global/tdclatl/QueryBase.h +4 -0
- data/source/global/tdclatl/Record.cpp +14 -2
- data/source/global/tdclatl/Record.h +1 -1
- data/source/global/tdclatl/Table.cpp +80 -16
- data/source/global/tdclatl/Table.h +23 -8
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +39 -0
- data/source/global/tdclatl/activeTable.cpp +2 -2
- data/source/global/tdclatl/activeTable.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +64 -14
- metadata +12 -12
- data/bin/common/tdclc_32_2_3.dll +0 -0
- data/bin/common/tdclc_64_2_3.dll +0 -0
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- /data/{BUILD_WIN-JA → BUILD_WIN-JA.md} +0 -0
- /data/{README_ORMSRCGEN-JA → README_ORMSRCGEN-JA.md} +0 -0
- /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($
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 ==
|
|
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
|
-
|
|
1991
|
-
|
|
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 -
|
|
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 =
|
|
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
|
-
|
|
2241
|
-
|
|
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
|
+
}
|