transactd 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|