transactd 1.0.1
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 +7 -0
- data/BUILD_UNIX-JA +174 -0
- data/BUILD_WIN-JA +256 -0
- data/CMakeLists.txt +96 -0
- data/COPYING +339 -0
- data/README +406 -0
- data/README-JA +424 -0
- data/bin/common/tdclc_32_1_0.dll +0 -0
- data/bin/common/tdclc_64_1_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +73 -0
- data/build/common/copyifgreater.cmd +30 -0
- data/build/common/copyifgreater.js +290 -0
- data/build/common/get_boost_libs.cmake +106 -0
- data/build/common/get_ruby_path.cmake +115 -0
- data/build/common/options.cmake +127 -0
- data/build/common/smart_install.cmake +263 -0
- data/build/common/system.cmake +122 -0
- data/build/common/transactd.rc.in +52 -0
- data/build/common/transactd_cl_common.cmake +101 -0
- data/build/common/transactd_cl_output.cmake +93 -0
- data/build/common/transactd_common.cmake +237 -0
- data/build/common/transactd_required.cmake +28 -0
- data/build/swig/ruby/generate.cmake.in +35 -0
- data/build/swig/ruby/generate.cmd.in +19 -0
- data/build/swig/ruby/ruby.swg +101 -0
- data/build/swig/tdcl.i +188 -0
- data/build/tdclc/BUILDNUMBER.txt +1 -0
- data/build/tdclc/CMakeLists.txt +170 -0
- data/build/tdclc/tdclc_32.cbproj +181 -0
- data/build/tdclc/tdclc_64.cbproj +205 -0
- data/build/tdclcpp/BUILDNUMBER.txt +1 -0
- data/build/tdclcpp/CMakeLists.txt +142 -0
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +239 -0
- data/build/tdclcpp/tdclcpp_bcb_64.cbproj +304 -0
- data/build/tdclrb/BUILDNUMBER.txt +1 -0
- data/build/tdclrb/CMakeLists.txt +258 -0
- data/build/tdclrb/GEM_VERSION +3 -0
- data/build/tdclrb/bldgem/extconf.rb +123 -0
- data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
- data/build/tdclrb/gem/Makefile.win32-VS +65 -0
- data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
- data/build/tdclrb/gem/detect.rb +31 -0
- data/build/tdclrb/gem/helper.rb +113 -0
- data/build/tdclrb/gem/transactd.rb +22 -0
- data/build/tdclrb/gem_output.cmake +44 -0
- data/source/bzs/db/IBlobBuffer.h +51 -0
- data/source/bzs/db/blobBuffer.h +177 -0
- data/source/bzs/db/blobStructs.h +85 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +52 -0
- data/source/bzs/db/engine/mysql/bookmark.h +195 -0
- data/source/bzs/db/engine/mysql/database.cpp +1882 -0
- data/source/bzs/db/engine/mysql/database.h +465 -0
- data/source/bzs/db/engine/mysql/dbManager.cpp +303 -0
- data/source/bzs/db/engine/mysql/dbManager.h +143 -0
- data/source/bzs/db/engine/mysql/errorMessage.cpp +75 -0
- data/source/bzs/db/engine/mysql/errorMessage.h +43 -0
- data/source/bzs/db/engine/mysql/fieldAccess.h +158 -0
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +349 -0
- data/source/bzs/db/engine/mysql/mydebuglog.h +89 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +171 -0
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +169 -0
- data/source/bzs/db/engine/mysql/mysqlThd.h +35 -0
- data/source/bzs/db/engine/mysql/percentageKey.h +260 -0
- data/source/bzs/db/protocol/ICommandExecuter.h +49 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +689 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +228 -0
- data/source/bzs/db/protocol/tdap/btrDate.cpp +437 -0
- data/source/bzs/db/protocol/tdap/btrDate.h +227 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +127 -0
- data/source/bzs/db/protocol/tdap/client/client.cpp +106 -0
- data/source/bzs/db/protocol/tdap/client/client.h +292 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +144 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.h +82 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +863 -0
- data/source/bzs/db/protocol/tdap/client/database.h +118 -0
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +100 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +1640 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.h +135 -0
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +434 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +92 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +98 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +174 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +91 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +140 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +86 -0
- data/source/bzs/db/protocol/tdap/client/filter.cpp +527 -0
- data/source/bzs/db/protocol/tdap/client/filter.h +154 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +137 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +84 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +724 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +123 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +899 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.h +199 -0
- data/source/bzs/db/protocol/tdap/client/request.h +198 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +58 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.h +56 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +574 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +53 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +627 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +2613 -0
- data/source/bzs/db/protocol/tdap/client/table.h +221 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +1096 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +179 -0
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +40 -0
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +11 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +500 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +184 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +60 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +284 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +53 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +383 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +106 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +680 -0
- data/source/bzs/db/protocol/tdap/mysql/request.h +202 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1020 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +141 -0
- data/source/bzs/db/protocol/tdap/tdapRequest.h +190 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +295 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.h +558 -0
- data/source/bzs/db/protocol/tdap/tdapcapi.h +423 -0
- data/source/bzs/db/transactd/appBuilderImple.h +55 -0
- data/source/bzs/db/transactd/appModule.cpp +183 -0
- data/source/bzs/db/transactd/appModule.h +80 -0
- data/source/bzs/db/transactd/connManager.cpp +201 -0
- data/source/bzs/db/transactd/connManager.h +60 -0
- data/source/bzs/db/transactd/connectionRecord.h +69 -0
- data/source/bzs/db/transactd/transactd.cpp +325 -0
- data/source/bzs/env/compiler.h +135 -0
- data/source/bzs/env/crosscompile.cpp +130 -0
- data/source/bzs/env/crosscompile.h +150 -0
- data/source/bzs/env/fileopen.h +36 -0
- data/source/bzs/env/mbcswchrLinux.cpp +40 -0
- data/source/bzs/env/mbcswchrLinux.h +88 -0
- data/source/bzs/env/tstring.h +183 -0
- data/source/bzs/example/changeSchema.cpp +117 -0
- data/source/bzs/example/changeSchema_c.cpp +78 -0
- data/source/bzs/example/connection_pool_c.cpp +171 -0
- data/source/bzs/example/createDatabase.cpp +305 -0
- data/source/bzs/example/createDatabase_c.cpp +202 -0
- data/source/bzs/example/deleteRecords.cpp +87 -0
- data/source/bzs/example/deleteRecords_c.cpp +57 -0
- data/source/bzs/example/dropDatabase.cpp +59 -0
- data/source/bzs/example/dropDatabase_c.cpp +34 -0
- data/source/bzs/example/insertRecords.cpp +212 -0
- data/source/bzs/example/insertRecords_c.cpp +153 -0
- data/source/bzs/example/readRecords.cpp +141 -0
- data/source/bzs/example/readRecords_c.cpp +107 -0
- data/source/bzs/example/updateRecords.cpp +99 -0
- data/source/bzs/example/updateRecords_c.cpp +71 -0
- data/source/bzs/example/update_with_transaction.cpp +104 -0
- data/source/bzs/example/update_with_transaction_c.cpp +80 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +226 -0
- data/source/bzs/netsvc/client/tcpClient.h +489 -0
- data/source/bzs/netsvc/server/IAppModule.h +94 -0
- data/source/bzs/netsvc/server/iserver.h +65 -0
- data/source/bzs/netsvc/server/serverCpt.cpp +522 -0
- data/source/bzs/netsvc/server/serverCpt.h +88 -0
- data/source/bzs/netsvc/server/serverPipe.cpp +705 -0
- data/source/bzs/netsvc/server/serverPipe.h +96 -0
- data/source/bzs/netsvc/server/serverTpool.cpp +416 -0
- data/source/bzs/netsvc/server/serverTpool.h +84 -0
- data/source/bzs/rtl/benchmark.cpp +96 -0
- data/source/bzs/rtl/benchmark.h +65 -0
- data/source/bzs/rtl/datetime.cpp +375 -0
- data/source/bzs/rtl/datetime.h +53 -0
- data/source/bzs/rtl/debuglog.cpp +106 -0
- data/source/bzs/rtl/debuglog.h +97 -0
- data/source/bzs/rtl/exception.h +116 -0
- data/source/bzs/rtl/stl_uty.cpp +35 -0
- data/source/bzs/rtl/stl_uty.h +29 -0
- data/source/bzs/rtl/stringBuffers.cpp +101 -0
- data/source/bzs/rtl/stringBuffers.h +58 -0
- data/source/bzs/rtl/strtrim.cpp +135 -0
- data/source/bzs/rtl/strtrim.h +46 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +445 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
- data/source/bzs/test/tdclrb/prepare.rb +226 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +430 -0
- data/source/bzs/test/transactdBench/transactdBench2.cpp +342 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +2030 -0
- data/source/global/tdclatl/Database.cpp +503 -0
- data/source/global/tdclatl/Database.h +139 -0
- data/source/global/tdclatl/DbDef.cpp +242 -0
- data/source/global/tdclatl/DbDef.h +79 -0
- data/source/global/tdclatl/Field.cpp +92 -0
- data/source/global/tdclatl/Field.h +59 -0
- data/source/global/tdclatl/FieldDef.cpp +238 -0
- data/source/global/tdclatl/FieldDef.h +87 -0
- data/source/global/tdclatl/Flags.cpp +111 -0
- data/source/global/tdclatl/Flags.h +55 -0
- data/source/global/tdclatl/KeyDef.cpp +51 -0
- data/source/global/tdclatl/KeyDef.h +55 -0
- data/source/global/tdclatl/KeySegment.cpp +55 -0
- data/source/global/tdclatl/Table.cpp +600 -0
- data/source/global/tdclatl/Table.h +144 -0
- data/source/global/tdclatl/TableDef.cpp +291 -0
- data/source/global/tdclatl/TableDef.h +86 -0
- data/source/global/tdclatl/TdVersion.cpp +74 -0
- data/source/global/tdclatl/TdVersion.h +54 -0
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +113 -0
- data/source/global/tdclatl/dllmain.cpp +30 -0
- data/source/global/tdclatl/dllmain.h +27 -0
- data/source/global/tdclatl/keySegment.h +57 -0
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.cpp +2 -0
- data/source/global/tdclatl/stdafx.h +25 -0
- data/source/global/tdclatl/targetver.h +4 -0
- data/source/global/tdclatl/tdclatl.cpp +68 -0
- data/source/global/tdclatl/tdclatl.def +10 -0
- data/source/global/tdclatl/tdclatl.idl +1035 -0
- data/source/linux/charsetConvert.h +112 -0
- data/source/linux/linuxTypes.h +33 -0
- data/source/linux/tchar.h +428 -0
- data/transactd.gemspec +97 -0
- metadata +267 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 2013 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
|
+
|
|
20
|
+
#pragma hdrstop
|
|
21
|
+
|
|
22
|
+
#include <tchar.h>
|
|
23
|
+
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
|
24
|
+
#include <bzs/db/protocol/tdap/client/database.h>
|
|
25
|
+
#include <bzs/db/protocol/tdap/client/table.h>
|
|
26
|
+
#include <bzs/db/protocol/tdap/client/dbDef.h>
|
|
27
|
+
#include <time.h>
|
|
28
|
+
#include <bzs/rtl/benchmark.h>
|
|
29
|
+
#include <boost/bind.hpp>
|
|
30
|
+
#include <stdio.h>
|
|
31
|
+
|
|
32
|
+
#define _CRT_SECURE_NO_WARNINGS
|
|
33
|
+
|
|
34
|
+
static const int TYPE_DDF = 1;
|
|
35
|
+
static const int TYPE_BDF = 0;
|
|
36
|
+
static const bool AUTO_CREATE_TABLE = true;
|
|
37
|
+
static const _TCHAR* OWNER_NAME = _T("");
|
|
38
|
+
static const _TCHAR* DIR = _T("");
|
|
39
|
+
|
|
40
|
+
static const short fn_id = 0;
|
|
41
|
+
static const short fn_name = 1;
|
|
42
|
+
static const int trans_bias = PARALLEL_TRN + LOCK_SINGLE_NOWAIT;
|
|
43
|
+
|
|
44
|
+
static const int USE_NORMAL = 0;
|
|
45
|
+
static const int USE_TRANS = 1;
|
|
46
|
+
static const int USE_BALKINS = 2;
|
|
47
|
+
static const int USE_SNAPSHOT = 4;
|
|
48
|
+
|
|
49
|
+
using namespace bzs::rtl;
|
|
50
|
+
using namespace bzs::db::protocol::tdap;
|
|
51
|
+
|
|
52
|
+
/* -------------------------------------------------------------------------------- */
|
|
53
|
+
void showTableError(client::table* tb, const _TCHAR* description)
|
|
54
|
+
{
|
|
55
|
+
if (tb->stat() != 0)
|
|
56
|
+
_tprintf(_T("%s error %s:No.%d\r\n"), description, tb->tableDef()->fileName(), tb->stat());
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* -------------------------------------------------------------------------------- */
|
|
60
|
+
void showEnginError(client::database* db, const _TCHAR* tableName)
|
|
61
|
+
{
|
|
62
|
+
if (db->stat() != 0)
|
|
63
|
+
_tprintf(_T("%s error No.%d\r\n"), tableName, db->stat());
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/* -------------------------------------------------------------------------------- */
|
|
69
|
+
client::table* openTable(client::database* db, const _TCHAR* tableName, short mode)
|
|
70
|
+
{
|
|
71
|
+
client::table* tb = db->openTable(tableName, mode, AUTO_CREATE_TABLE);
|
|
72
|
+
if (tb == NULL)
|
|
73
|
+
showEnginError(db, tableName);
|
|
74
|
+
return tb;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* -------------------------------------------------------------------------------- */
|
|
78
|
+
bool createDataBase(client::database* db, const _TCHAR* uri)
|
|
79
|
+
{
|
|
80
|
+
db->create(uri);
|
|
81
|
+
return (db->stat() == 0);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* -------------------------------------------------------------------------------- */
|
|
85
|
+
bool write(client::table* tb, int start, int end)
|
|
86
|
+
{
|
|
87
|
+
tb->setKeyNum(0);
|
|
88
|
+
for (int i = start; i < end; i++)
|
|
89
|
+
{
|
|
90
|
+
tb->clearBuffer();
|
|
91
|
+
tb->setFV(fn_id, i);
|
|
92
|
+
tb->setFV(fn_name, i);
|
|
93
|
+
tb->insert();
|
|
94
|
+
if (tb->stat() != 0)
|
|
95
|
+
{
|
|
96
|
+
showTableError(tb, _T("write"));
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* -------------------------------------------------------------------------------- */
|
|
104
|
+
bool deleteAll(client::database* db, client::table* tb, int start, int end)
|
|
105
|
+
{
|
|
106
|
+
db->beginTrn(trans_bias);
|
|
107
|
+
tb->clearBuffer();
|
|
108
|
+
for (int i = start; i < end; i++)
|
|
109
|
+
{
|
|
110
|
+
tb->setFV(fn_id, i);
|
|
111
|
+
tb->seek();
|
|
112
|
+
if (tb->stat() == 0)
|
|
113
|
+
{
|
|
114
|
+
tb->del();
|
|
115
|
+
if (tb->stat() != 0)
|
|
116
|
+
{
|
|
117
|
+
showTableError(tb, _T("deleteAll"));
|
|
118
|
+
db->endTrn();
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
db->endTrn();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* -------------------------------------------------------------------------------- */
|
|
128
|
+
bool Inserts(client::database* db, client::table* tb, int start, int end, int mode, int unit)
|
|
129
|
+
{
|
|
130
|
+
bool ret = true;
|
|
131
|
+
int total = end - start;
|
|
132
|
+
int count = total / unit;
|
|
133
|
+
int st = start;
|
|
134
|
+
int en = st;
|
|
135
|
+
while (en != end)
|
|
136
|
+
{
|
|
137
|
+
en = st + unit;
|
|
138
|
+
if (mode == USE_TRANS)
|
|
139
|
+
db->beginTrn(trans_bias);
|
|
140
|
+
if (mode == USE_BALKINS)
|
|
141
|
+
tb->beginBulkInsert(BULKBUFSIZE);
|
|
142
|
+
ret = write(tb, st, en);
|
|
143
|
+
if (mode == USE_BALKINS)
|
|
144
|
+
tb->commitBulkInsert();
|
|
145
|
+
if (mode == USE_TRANS)
|
|
146
|
+
db->endTrn();
|
|
147
|
+
if (ret == false)
|
|
148
|
+
break;
|
|
149
|
+
st = en;
|
|
150
|
+
}
|
|
151
|
+
return ret;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* -------------------------------------------------------------------------------- */
|
|
156
|
+
bool Read(client::database* db, client::table* tb, int start, int end, int shapshot)
|
|
157
|
+
{
|
|
158
|
+
bool ret = true;
|
|
159
|
+
tb->clearBuffer();
|
|
160
|
+
if (shapshot == USE_SNAPSHOT)
|
|
161
|
+
db->beginSnapshot();
|
|
162
|
+
for (int i = start; i < end; i++)
|
|
163
|
+
{
|
|
164
|
+
tb->setFV(fn_id, i);
|
|
165
|
+
tb->seek();
|
|
166
|
+
if ((tb->stat() != 0) || (tb->getFVlng(fn_id) != i))
|
|
167
|
+
{
|
|
168
|
+
printf("GetEqual Error stat() = %d Value %d = %d\r\n", tb->stat(), i, tb->getFVlng(fn_id));
|
|
169
|
+
ret = false;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (shapshot == USE_SNAPSHOT)
|
|
174
|
+
db->endSnapshot();
|
|
175
|
+
|
|
176
|
+
return ret;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* -------------------------------------------------------------------------------- */
|
|
180
|
+
bool Reads(client::database* db, client::table* tb, int start, int end, int unit, int shapshot)
|
|
181
|
+
{
|
|
182
|
+
bool ret = true;
|
|
183
|
+
int total = end - start;
|
|
184
|
+
int count = total / unit;
|
|
185
|
+
int st = start;
|
|
186
|
+
int en = st;
|
|
187
|
+
if (shapshot == USE_SNAPSHOT)
|
|
188
|
+
db->beginSnapshot();
|
|
189
|
+
tb->setKeyNum(0);
|
|
190
|
+
tb->setFilter(_T("*"), 1, 20);
|
|
191
|
+
tb->clearBuffer();
|
|
192
|
+
tb->setFV(fn_id, st);
|
|
193
|
+
tb->find(client::table::findForword);
|
|
194
|
+
while (en != end)
|
|
195
|
+
{
|
|
196
|
+
en = st + unit;
|
|
197
|
+
for (int i = st; i < en; i++)
|
|
198
|
+
{
|
|
199
|
+
if (tb->getFVlng(fn_id) != i)
|
|
200
|
+
{
|
|
201
|
+
printf("findNext Error stat() = %d Value %d = %d\r\n", tb->stat(), i, tb->getFVlng(fn_id));
|
|
202
|
+
ret = false;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
tb->findNext();
|
|
206
|
+
}
|
|
207
|
+
if (ret == false)
|
|
208
|
+
break;
|
|
209
|
+
st = en;
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
if (shapshot == USE_SNAPSHOT)
|
|
213
|
+
db->endSnapshot();
|
|
214
|
+
return ret;
|
|
215
|
+
}
|
|
216
|
+
/* -------------------------------------------------------------------------------- */
|
|
217
|
+
bool Updates(client::database* db, client::table* tb, int start, int end, int tran, int unit)
|
|
218
|
+
{
|
|
219
|
+
bool ret = true;
|
|
220
|
+
_TCHAR buf[30];
|
|
221
|
+
tb->setKeyNum(0);
|
|
222
|
+
|
|
223
|
+
int total = end - start;
|
|
224
|
+
int count = total / unit;
|
|
225
|
+
int st = start;
|
|
226
|
+
int en = st;
|
|
227
|
+
while (en != end)
|
|
228
|
+
{
|
|
229
|
+
en = st + unit;
|
|
230
|
+
|
|
231
|
+
if (tran == USE_TRANS)
|
|
232
|
+
db->beginTrn(trans_bias);
|
|
233
|
+
for (int i = st; i < en; i++)
|
|
234
|
+
{
|
|
235
|
+
tb->setFV(fn_id, i);
|
|
236
|
+
_ltot_s(i + 1 + tran, buf, 30, 10);
|
|
237
|
+
tb->setFV(fn_name, buf);
|
|
238
|
+
tb->update(client::nstable::changeInKey);
|
|
239
|
+
if (tb->stat() != 0)
|
|
240
|
+
{
|
|
241
|
+
ret = false;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (tran == USE_TRANS)
|
|
246
|
+
db->endTrn();
|
|
247
|
+
if (ret == false)
|
|
248
|
+
break;
|
|
249
|
+
st = en;
|
|
250
|
+
}
|
|
251
|
+
return ret;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* -------------------------------------------------------------------------------- */
|
|
255
|
+
bool createTestDataBase(client::database* db, const _TCHAR* uri)
|
|
256
|
+
{
|
|
257
|
+
db->create(uri);
|
|
258
|
+
if (db->stat() != 0)
|
|
259
|
+
{
|
|
260
|
+
printf("createTestDataBase erorr:No.%d %s\r\n", db->stat(), uri);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
if (db->open(uri, TYPE_BDF, TD_OPEN_NORMAL, _T(""), _T("")))
|
|
264
|
+
{
|
|
265
|
+
|
|
266
|
+
client::dbdef* def = db->dbDef();
|
|
267
|
+
|
|
268
|
+
tabledef td;
|
|
269
|
+
memset(&td, 0, sizeof(td));
|
|
270
|
+
td.setTableName(_T("user"));
|
|
271
|
+
td.setFileName(_T("user.dat"));
|
|
272
|
+
td.id = 1;
|
|
273
|
+
td.primaryKeyNum = -1;
|
|
274
|
+
td.parentKeyNum = -1;
|
|
275
|
+
td.replicaKeyNum = -1;
|
|
276
|
+
td.pageSize = 2048;
|
|
277
|
+
def->insertTable(&td);
|
|
278
|
+
|
|
279
|
+
fielddef* fd = def->insertField(td.id, 0);
|
|
280
|
+
fd->setName(_T("id"));
|
|
281
|
+
fd->type = ft_integer;
|
|
282
|
+
fd->len = (ushort_td)4;
|
|
283
|
+
def->updateTableDef(1);
|
|
284
|
+
|
|
285
|
+
fd = def->insertField(td.id, 1);
|
|
286
|
+
fd->setName(_T("name"));
|
|
287
|
+
// fd->type = ft_zstring;
|
|
288
|
+
fd->type = ft_myvarchar;
|
|
289
|
+
fd->len = (ushort_td)100;
|
|
290
|
+
def->updateTableDef(td.id);
|
|
291
|
+
|
|
292
|
+
keydef* kd = def->insertKey(td.id, 0);
|
|
293
|
+
kd->segments[0].fieldNum = 0;
|
|
294
|
+
kd->segments[0].flags.bit8 = 1; // extend key type
|
|
295
|
+
kd->segments[0].flags.bit1 = 1; // changeable
|
|
296
|
+
kd->segmentCount = 1;
|
|
297
|
+
|
|
298
|
+
td.primaryKeyNum = 0;
|
|
299
|
+
def->updateTableDef(td.id);
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
else
|
|
303
|
+
printf("open daatabse erorr No:%d\r\n", db->stat());
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* -------------------------------------------------------------------------------- */
|
|
308
|
+
void printDateTime()
|
|
309
|
+
{
|
|
310
|
+
time_t timer;
|
|
311
|
+
#ifdef LINUX
|
|
312
|
+
time(&timer);
|
|
313
|
+
#else
|
|
314
|
+
timer = time(NULL);
|
|
315
|
+
#endif
|
|
316
|
+
#pragma warning( disable : 4996 )
|
|
317
|
+
printf("%s", ctime(&timer));
|
|
318
|
+
#pragma warning( default : 4996 )
|
|
319
|
+
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* -------------------------------------------------------------------------------- */
|
|
323
|
+
void printHeader(const _TCHAR* uri, int count)
|
|
324
|
+
{
|
|
325
|
+
printf("Start Bench mark Insert Items = %d\r\n", count);
|
|
326
|
+
printDateTime();
|
|
327
|
+
_tprintf(_T("%s\r\n"), uri);
|
|
328
|
+
printf("BOOST_VERSION = %s\r\n", BOOST_LIB_VERSION );
|
|
329
|
+
printf("----------------------------------------\r\n");
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* -------------------------------------------------------------------------------- */
|
|
333
|
+
void printTail()
|
|
334
|
+
{
|
|
335
|
+
printf("----------------------------------------\r\n");
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* -------------------------------------------------------------------------------- */
|
|
339
|
+
#pragma argsused
|
|
340
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
341
|
+
{
|
|
342
|
+
if (argc < 4)
|
|
343
|
+
{
|
|
344
|
+
printf("usage: transactdBench databaseUri processNumber functionNumber\n "
|
|
345
|
+
"\t --- Below is list of functionNumber ---\n"
|
|
346
|
+
"\t-1: all function\n"
|
|
347
|
+
"\t 0: Insert\n"
|
|
348
|
+
"\t 1: Insert in transaction. 20rec x 1000times\n"
|
|
349
|
+
"\t 2: Insert by bulkmode. 20rec x 1000times\n"
|
|
350
|
+
"\t 3: read each record\n"
|
|
351
|
+
"\t 4: read each record with snapshpot\n"
|
|
352
|
+
"\t 5: read range. 20rec x 1000times\n"
|
|
353
|
+
"\t 6: read range with snapshpot. 20rec x 1000times\n"
|
|
354
|
+
"\t 7: update\n"
|
|
355
|
+
"\t 8: update in transaction. 20rec x 1000times\n"
|
|
356
|
+
"exsample : transactdBench \"tdap://localhost/test?dbfile=test.bdf\" 0 -1\n");
|
|
357
|
+
return 0;
|
|
358
|
+
}
|
|
359
|
+
const _TCHAR* uri = argv[1]; // "tdap://localhost/test?dbfile=test.bdf";
|
|
360
|
+
int procID = _ttol(argv[2]); // 0
|
|
361
|
+
int count = 20000;
|
|
362
|
+
int start = procID * count + 1;
|
|
363
|
+
int end = start + count;
|
|
364
|
+
int exeType = _ttol(argv[3]);// -1
|
|
365
|
+
bool insertBeforeNoDelete = 0;
|
|
366
|
+
if (argc > 4)
|
|
367
|
+
insertBeforeNoDelete = (_ttol(argv[4])!=0);
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
client::database* db = client::database::create();
|
|
371
|
+
if (db->open(uri, TYPE_BDF, TD_OPEN_NORMAL, _T(""), _T("")) == false)
|
|
372
|
+
{
|
|
373
|
+
if (!createTestDataBase(db, uri))
|
|
374
|
+
{
|
|
375
|
+
client::database::destroy(db);
|
|
376
|
+
return 1;
|
|
377
|
+
}
|
|
378
|
+
printf("CreateDataBase success.\r\n");
|
|
379
|
+
}
|
|
380
|
+
printHeader(uri, count);
|
|
381
|
+
|
|
382
|
+
if (!db->open(uri, TYPE_BDF, TD_OPEN_NORMAL, _T(""), _T("")))
|
|
383
|
+
printf("open table erorr No:%d\r\n", db->stat());
|
|
384
|
+
else
|
|
385
|
+
{
|
|
386
|
+
client::table* tb = openTable(db, _T("user"), TD_OPEN_NORMAL);
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
if ((exeType == -1) || (exeType == 0))
|
|
390
|
+
{
|
|
391
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, end))
|
|
392
|
+
benchmark::report(boost::bind(Inserts, db, tb, start, end, USE_NORMAL, 1), ": Insert");
|
|
393
|
+
else
|
|
394
|
+
printf("deleteAll erorr No:%d\r\n", tb->stat());
|
|
395
|
+
}
|
|
396
|
+
if ((exeType == -1) || (exeType == 1))
|
|
397
|
+
{
|
|
398
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, end))
|
|
399
|
+
benchmark::report(boost::bind(Inserts, db, tb, start, end, USE_TRANS, 20)
|
|
400
|
+
, ": Insert in transaction. 20rec x 1000times.");
|
|
401
|
+
else
|
|
402
|
+
printf("deleteAll erorr No:%d\r\n", tb->stat());
|
|
403
|
+
}
|
|
404
|
+
if ((exeType == -1) || (exeType == 2))
|
|
405
|
+
{
|
|
406
|
+
if (insertBeforeNoDelete || deleteAll(db, tb, start, end))
|
|
407
|
+
benchmark::report(boost::bind(Inserts, db, tb, start, end, USE_BALKINS, 20)
|
|
408
|
+
, ": Insert by bulkmode. 20rec x 1000times.");
|
|
409
|
+
else
|
|
410
|
+
printf("deleteAll erorr No:%d\r\n", tb->stat());
|
|
411
|
+
}
|
|
412
|
+
if ((exeType == -1) || (exeType == 3))
|
|
413
|
+
benchmark::report(boost::bind( Read, db, tb, start, end, USE_NORMAL), ": read each record.");
|
|
414
|
+
if ((exeType == -1) || (exeType == 4))
|
|
415
|
+
benchmark::report(boost::bind( Read, db, tb, start, end, USE_SNAPSHOT), ": read each record with snapshpot.");
|
|
416
|
+
if ((exeType == -1) || (exeType == 5))
|
|
417
|
+
benchmark::report(boost::bind( Reads, db, tb, start, end, 20, USE_NORMAL), ": read range. 20rec x 1000times.");
|
|
418
|
+
if ((exeType == -1) || (exeType == 6))
|
|
419
|
+
benchmark::report(boost::bind( Reads, db, tb, start, end, 20, USE_SNAPSHOT), ": read range with snapshpot. 20rec x 1000times.");
|
|
420
|
+
if ((exeType == -1) || (exeType == 7))
|
|
421
|
+
benchmark::report(boost::bind( Updates, db, tb, start, end, USE_NORMAL, 1), ": update.");
|
|
422
|
+
if ((exeType == -1) || (exeType == 8))
|
|
423
|
+
benchmark::report(boost::bind( Updates, db, tb, start, end, USE_TRANS, 20), ": update in transaction. 20rec x 1000times.");
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
client::database::destroy(db);
|
|
427
|
+
printTail();
|
|
428
|
+
return 0;
|
|
429
|
+
|
|
430
|
+
}
|