transactd 1.2.0 → 2.0.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 +46 -67
- data/BUILD_WIN-JA +106 -63
- data/CMakeLists.txt +40 -15
- data/README +219 -75
- data/README-JA +207 -76
- data/README_ORMSRCGEN +118 -0
- data/README_ORMSRCGEN-JA +115 -0
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +18 -14
- data/build/common/create_symlink.cmake.in +25 -0
- data/build/common/get_boost_libs.cmake +23 -23
- data/build/common/options.cmake +0 -66
- data/build/common/smart_install.cmake +3 -3
- data/build/common/transactd.rc.in +15 -5
- data/build/common/transactd_cl_common.cmake +37 -18
- data/build/common/transactd_cl_output.cmake +55 -13
- data/build/common/transactd_common.cmake +108 -31
- data/build/swig/php/generate.cmake.in +15 -17
- data/build/swig/php/generate.cmd.in +15 -9
- data/build/swig/php/php.swg +124 -82
- data/build/swig/php/transactd.no_yield.php +4494 -0
- data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
- data/build/swig/php/transactd.no_yield.php.patch +685 -0
- data/build/swig/php/transactd.yield.php +4461 -0
- data/build/swig/php/transactd.yield.php.git.patch +652 -0
- data/build/swig/php/transactd.yield.php.patch +652 -0
- data/build/swig/referencecounter.h +79 -0
- data/build/swig/ruby/ruby.swg +226 -76
- data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
- data/build/swig/ruby/without_gvl.swg +87 -0
- data/build/swig/tdcl.i +659 -170
- data/build/swig/validatablepointer.h +91 -0
- data/build/tdclc/CMakeLists.txt +49 -34
- data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +84 -20
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
- data/build/tdclrb/CMakeLists.txt +84 -66
- data/build/tdclrb/bldgem/extconf.rb +28 -3
- data/build/tdclrb/gem/helper.rb +11 -1
- data/build/tdclrb/gem_output.cmake +20 -16
- data/index_ja.html +15 -0
- data/source/bzs/db/IBlobBuffer.h +15 -17
- data/source/bzs/db/blobBuffer.h +186 -140
- data/source/bzs/db/blobStructs.h +37 -37
- data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
- data/source/bzs/db/engine/mysql/bookmark.h +150 -147
- data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
- data/source/bzs/db/engine/mysql/database.h +608 -370
- data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
- data/source/bzs/db/engine/mysql/dbManager.h +115 -104
- data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
- data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
- data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
- data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
- data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
- data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
- data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
- data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
- data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
- data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
- data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
- data/source/bzs/db/protocol/tdap/client/client.h +361 -320
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
- data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
- data/source/bzs/db/protocol/tdap/client/database.h +141 -118
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
- data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
- data/source/bzs/db/protocol/tdap/client/export.h +35 -0
- data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
- data/source/bzs/db/protocol/tdap/client/field.h +393 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
- data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
- data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
- data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
- data/source/bzs/db/protocol/tdap/client/request.h +227 -170
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
- data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
- data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
- data/source/bzs/db/protocol/tdap/client/table.h +413 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
- data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
- data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
- data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
- data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
- data/source/bzs/db/transactd/appBuilderImple.h +21 -20
- data/source/bzs/db/transactd/appModule.cpp +350 -98
- data/source/bzs/db/transactd/appModule.h +31 -37
- data/source/bzs/db/transactd/connManager.cpp +138 -135
- data/source/bzs/db/transactd/connManager.h +28 -21
- data/source/bzs/db/transactd/connectionRecord.h +39 -39
- data/source/bzs/db/transactd/transactd.cpp +217 -203
- data/source/bzs/env/boost_bcb_link.h +131 -0
- data/source/bzs/env/compiler.h +136 -79
- data/source/bzs/env/crosscompile.cpp +57 -57
- data/source/bzs/env/crosscompile.h +130 -115
- data/source/bzs/env/fileopen.h +7 -8
- data/source/bzs/env/mbcswchrLinux.cpp +4 -9
- data/source/bzs/env/mbcswchrLinux.h +37 -34
- data/source/bzs/env/tcharMinGW.h +59 -0
- data/source/bzs/env/tstring.h +90 -95
- data/source/bzs/example/changeSchema.cpp +22 -23
- data/source/bzs/example/changeSchema_c.cpp +22 -24
- data/source/bzs/example/connection_pool_c.cpp +49 -104
- data/source/bzs/example/createDatabase.cpp +40 -47
- data/source/bzs/example/createDatabase_c.cpp +38 -43
- data/source/bzs/example/deleteRecords.cpp +10 -15
- data/source/bzs/example/deleteRecords_c.cpp +10 -14
- data/source/bzs/example/dropDatabase.cpp +3 -9
- data/source/bzs/example/dropDatabase_c.cpp +5 -6
- data/source/bzs/example/insertRecords.cpp +37 -29
- data/source/bzs/example/insertRecords_c.cpp +19 -25
- data/source/bzs/example/ormap_c.cpp +621 -0
- data/source/bzs/example/queryData.cpp +371 -0
- data/source/bzs/example/queryData.h +16 -0
- data/source/bzs/example/query_c.cpp +109 -0
- data/source/bzs/example/readRecords.cpp +27 -27
- data/source/bzs/example/readRecords_c.cpp +25 -23
- data/source/bzs/example/updateRecords.cpp +16 -21
- data/source/bzs/example/updateRecords_c.cpp +8 -12
- data/source/bzs/example/update_with_transaction.cpp +21 -24
- data/source/bzs/example/update_with_transaction_c.cpp +12 -15
- data/source/bzs/example/useORMRecord.cpp +177 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
- data/source/bzs/netsvc/client/tcpClient.h +541 -489
- data/source/bzs/netsvc/server/IAppModule.h +119 -32
- data/source/bzs/netsvc/server/iserver.h +21 -23
- data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
- data/source/bzs/netsvc/server/serverCpt.h +41 -43
- data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
- data/source/bzs/netsvc/server/serverPipe.h +44 -45
- data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
- data/source/bzs/netsvc/server/serverTpool.h +38 -43
- data/source/bzs/rtl/benchmark.cpp +91 -31
- data/source/bzs/rtl/benchmark.h +76 -22
- data/source/bzs/rtl/datetime.cpp +231 -233
- data/source/bzs/rtl/datetime.h +16 -16
- data/source/bzs/rtl/debuglog.cpp +48 -51
- data/source/bzs/rtl/debuglog.h +55 -44
- data/source/bzs/rtl/exception.h +55 -48
- data/source/bzs/rtl/stl_uty.cpp +27 -28
- data/source/bzs/rtl/stl_uty.h +28 -29
- data/source/bzs/rtl/stringBuffers.cpp +8 -6
- data/source/bzs/rtl/stringBuffers.h +16 -9
- data/source/bzs/rtl/strtrim.cpp +90 -91
- data/source/bzs/rtl/strtrim.h +14 -16
- data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
- data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
- data/source/bzs/test/tdclphp/bench.php +357 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
- data/source/bzs/test/tdclrb/prepare.rb +15 -12
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
- data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
- data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
- data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
- data/source/bzs/test/transactdBench/workerBase.h +88 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
- data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
- data/source/global/ormsrcgen/confParam.h +80 -0
- data/source/global/ormsrcgen/fieldName.cpp +77 -0
- data/source/global/ormsrcgen/fieldName.h +43 -0
- data/source/global/ormsrcgen/main.cpp +196 -0
- data/source/global/ormsrcgen/srcgen.cpp +763 -0
- data/source/global/ormsrcgen/srcgen.h +72 -0
- data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
- data/source/global/ormsrcgen/template/template.cnf +38 -0
- data/source/global/querystmts/querystmts.cpp +237 -0
- data/source/global/tdclatl/ConnectParams.cpp +77 -0
- data/source/global/tdclatl/ConnectParams.h +70 -0
- data/source/global/tdclatl/Database.cpp +132 -128
- data/source/global/tdclatl/Database.h +60 -49
- data/source/global/tdclatl/DbDef.cpp +68 -64
- data/source/global/tdclatl/DbDef.h +36 -36
- data/source/global/tdclatl/Field.cpp +12 -17
- data/source/global/tdclatl/Field.h +15 -12
- data/source/global/tdclatl/FieldDef.cpp +75 -36
- data/source/global/tdclatl/FieldDef.h +38 -19
- data/source/global/tdclatl/FieldDefs.cpp +74 -0
- data/source/global/tdclatl/FieldDefs.h +56 -0
- data/source/global/tdclatl/FieldNames.cpp +99 -0
- data/source/global/tdclatl/FieldNames.h +66 -0
- data/source/global/tdclatl/Flags.cpp +75 -37
- data/source/global/tdclatl/Flags.h +13 -12
- data/source/global/tdclatl/GroupQuery.cpp +119 -0
- data/source/global/tdclatl/GroupQuery.h +65 -0
- data/source/global/tdclatl/KeyDef.cpp +15 -14
- data/source/global/tdclatl/KeyDef.h +20 -17
- data/source/global/tdclatl/KeySegment.cpp +13 -12
- data/source/global/tdclatl/PooledDbManager.cpp +223 -0
- data/source/global/tdclatl/PooledDbManager.h +76 -0
- data/source/global/tdclatl/QueryBase.cpp +206 -127
- data/source/global/tdclatl/QueryBase.h +55 -59
- data/source/global/tdclatl/Record.cpp +214 -0
- data/source/global/tdclatl/Record.h +96 -0
- data/source/global/tdclatl/Recordset.cpp +278 -0
- data/source/global/tdclatl/Recordset.h +83 -0
- data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
- data/source/global/tdclatl/RecordsetQuery.h +126 -0
- data/source/global/tdclatl/Table.cpp +57 -60
- data/source/global/tdclatl/Table.h +32 -29
- data/source/global/tdclatl/TableDef.cpp +63 -62
- data/source/global/tdclatl/TableDef.h +20 -22
- data/source/global/tdclatl/TdVersion.cpp +3 -3
- data/source/global/tdclatl/TdVersion.h +15 -11
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
- data/source/global/tdclatl/activeTable.cpp +355 -0
- data/source/global/tdclatl/activeTable.h +79 -0
- data/source/global/tdclatl/dllmain.cpp +4 -3
- data/source/global/tdclatl/dllmain.h +7 -6
- data/source/global/tdclatl/keySegment.h +22 -18
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.h +6 -4
- data/source/global/tdclatl/targetver.h +0 -1
- data/source/global/tdclatl/tdclatl.cpp +10 -5
- data/source/global/tdclatl/tdclatl.idl +530 -14
- data/source/linux/charsetConvert.h +78 -79
- data/source/linux/linuxTypes.h +9 -12
- data/source/linux/tchar.h +168 -166
- data/transactd.gemspec +24 -16
- metadata +98 -12
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/tdclc/tdclc_32.cbproj +0 -173
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
- data/build/tdclrb/GEM_VERSION +0 -3
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
- data/source/bzs/example/useORM.cpp +0 -585
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
#ifndef BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
|
|
2
|
+
#define BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
|
|
3
|
+
/* =================================================================
|
|
4
|
+
Copyright (C) 20014 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
================================================================= */
|
|
21
|
+
#include <mysql.h>
|
|
22
|
+
|
|
23
|
+
namespace bzs
|
|
24
|
+
{
|
|
25
|
+
namespace test
|
|
26
|
+
{
|
|
27
|
+
namespace worker
|
|
28
|
+
{
|
|
29
|
+
|
|
30
|
+
namespace mysql
|
|
31
|
+
{
|
|
32
|
+
|
|
33
|
+
#define USE_SHARED_PREPAREDSTATEMENT
|
|
34
|
+
|
|
35
|
+
#define MYSQL_READ_ONE 10
|
|
36
|
+
#define MYSQL_INSERT_ONE 11
|
|
37
|
+
#define MYSQL_QUERY 12
|
|
38
|
+
#define MYSQL_RECORDSET_COUNT 50
|
|
39
|
+
|
|
40
|
+
class connectParam
|
|
41
|
+
{
|
|
42
|
+
public:
|
|
43
|
+
connectParam(){};
|
|
44
|
+
connectParam(const _TCHAR* host, const _TCHAR* dbname, const _TCHAR* user,
|
|
45
|
+
const _TCHAR* pass = _T(""))
|
|
46
|
+
|
|
47
|
+
{
|
|
48
|
+
port = 0;
|
|
49
|
+
#ifdef _UNICODE
|
|
50
|
+
char tmp[256];
|
|
51
|
+
WideCharToMultiByte(CP_UTF8, 0, host, -1, tmp, 256, NULL, NULL);
|
|
52
|
+
hostname = tmp;
|
|
53
|
+
WideCharToMultiByte(CP_UTF8, 0, dbname, -1, tmp, 256, NULL, NULL);
|
|
54
|
+
database = tmp;
|
|
55
|
+
WideCharToMultiByte(CP_UTF8, 0, user, -1, tmp, 256, NULL, NULL);
|
|
56
|
+
username = tmp;
|
|
57
|
+
WideCharToMultiByte(CP_UTF8, 0, pass, -1, tmp, 256, NULL, NULL);
|
|
58
|
+
passwd = tmp;
|
|
59
|
+
#else
|
|
60
|
+
hostname = host;
|
|
61
|
+
database = dbname;
|
|
62
|
+
username = user;
|
|
63
|
+
passwd = pass;
|
|
64
|
+
#endif
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
std::string hostname;
|
|
68
|
+
std::string username;
|
|
69
|
+
std::string passwd;
|
|
70
|
+
std::string database;
|
|
71
|
+
unsigned long port;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const char* readOneQuery = "select * from user where id = ? \n";
|
|
75
|
+
/*const char* queryOneQuery = "select `user`.`id` \n"
|
|
76
|
+
",`user`.`%s` as `name` \n"
|
|
77
|
+
",`extention`.`comment` \n"
|
|
78
|
+
",`groups`.`name` as `group_name` \n"
|
|
79
|
+
" from `user` INNER JOIN `extention` \n"
|
|
80
|
+
" ON `user`.`id` =
|
|
81
|
+
`extention`.`id` \n"
|
|
82
|
+
" LEFT JOIN `groups` \n"
|
|
83
|
+
" ON `user`.`group` =
|
|
84
|
+
`groups`.`code` \n"
|
|
85
|
+
" where `user`.`id` >= ? \n"
|
|
86
|
+
"and `user`.`id` < ?";
|
|
87
|
+
*/
|
|
88
|
+
const char* queryOneQuery =
|
|
89
|
+
"select `user`.`id` ,`user`.`%s` as `name`"
|
|
90
|
+
",`groups`.`name` as `group_name`"
|
|
91
|
+
" from `user` LEFT JOIN `groups` ON `user`.`group` = `groups`.`code`"
|
|
92
|
+
"where `user`.`id` >= ? and `user`.`id` < ?";
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
const char* queryOneQuery = "select `user`.`id` ,`user`.`%s` as `name`"
|
|
96
|
+
" from `user`"
|
|
97
|
+
" where `user`.`id` >= ? and `user`.`id` < ?";
|
|
98
|
+
*/
|
|
99
|
+
class worker : public workerBase
|
|
100
|
+
{
|
|
101
|
+
struct readResult
|
|
102
|
+
{
|
|
103
|
+
int id;
|
|
104
|
+
char name[41];
|
|
105
|
+
int group;
|
|
106
|
+
union
|
|
107
|
+
{
|
|
108
|
+
char tel[43];
|
|
109
|
+
char group_name[43];
|
|
110
|
+
};
|
|
111
|
+
char comment[256];
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const connectParam& m_parmas;
|
|
115
|
+
MYSQL* m_mysql;
|
|
116
|
+
readResult m_result;
|
|
117
|
+
int m_bindParam;
|
|
118
|
+
int m_bindParam2;
|
|
119
|
+
MYSQL_STMT* m_stmt;
|
|
120
|
+
std::vector<readResult> m_resultset;
|
|
121
|
+
|
|
122
|
+
void bindParam(MYSQL_STMT* stmt)
|
|
123
|
+
{
|
|
124
|
+
if (m_functionNumber == MYSQL_READ_ONE)
|
|
125
|
+
{
|
|
126
|
+
MYSQL_BIND bind[1];
|
|
127
|
+
memset(bind, 0, sizeof(MYSQL_BIND));
|
|
128
|
+
bind[0].buffer_type = MYSQL_TYPE_LONG;
|
|
129
|
+
bind[0].buffer = &m_bindParam;
|
|
130
|
+
bind[0].is_null = 0;
|
|
131
|
+
if (mysql_stmt_bind_param(stmt, bind))
|
|
132
|
+
printf("error: %s\n", mysql_stmt_error(stmt));
|
|
133
|
+
}
|
|
134
|
+
else if (m_functionNumber == MYSQL_QUERY)
|
|
135
|
+
{
|
|
136
|
+
MYSQL_BIND bind[2];
|
|
137
|
+
memset(bind, 0, sizeof(MYSQL_BIND) * 2);
|
|
138
|
+
bind[0].buffer_type = MYSQL_TYPE_LONG;
|
|
139
|
+
bind[0].buffer = &m_bindParam;
|
|
140
|
+
bind[0].is_null = 0;
|
|
141
|
+
bind[1].buffer_type = MYSQL_TYPE_LONG;
|
|
142
|
+
bind[1].buffer = &m_bindParam2;
|
|
143
|
+
bind[1].is_null = 0;
|
|
144
|
+
if (mysql_stmt_bind_param(stmt, bind))
|
|
145
|
+
printf("error: %s\n", mysql_stmt_error(stmt));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void bindOutput(MYSQL_STMT* stmt)
|
|
150
|
+
{
|
|
151
|
+
|
|
152
|
+
MYSQL_BIND result[4];
|
|
153
|
+
memset(result, 0, sizeof(MYSQL_BIND) * 4);
|
|
154
|
+
|
|
155
|
+
result[0].buffer_type = MYSQL_TYPE_LONG;
|
|
156
|
+
result[0].buffer = &m_result.id;
|
|
157
|
+
result[0].is_null = 0;
|
|
158
|
+
result[1].buffer_type = MYSQL_TYPE_VAR_STRING;
|
|
159
|
+
result[1].buffer = m_result.name;
|
|
160
|
+
result[1].buffer_length = 41;
|
|
161
|
+
result[1].is_null = 0;
|
|
162
|
+
if (m_functionNumber == MYSQL_QUERY)
|
|
163
|
+
{
|
|
164
|
+
result[2].buffer_type = MYSQL_TYPE_VAR_STRING;
|
|
165
|
+
result[2].buffer = &m_result.comment;
|
|
166
|
+
result[2].buffer_length = 256;
|
|
167
|
+
}
|
|
168
|
+
else
|
|
169
|
+
{
|
|
170
|
+
result[2].buffer_type = MYSQL_TYPE_LONG;
|
|
171
|
+
result[2].buffer = &m_result.group;
|
|
172
|
+
}
|
|
173
|
+
result[2].is_null = 0;
|
|
174
|
+
result[3].buffer_type = MYSQL_TYPE_VAR_STRING;
|
|
175
|
+
result[3].buffer = m_result.tel; // or group_name
|
|
176
|
+
result[3].buffer_length = 43;
|
|
177
|
+
result[3].is_null = 0;
|
|
178
|
+
|
|
179
|
+
if (mysql_stmt_bind_result(stmt, result))
|
|
180
|
+
printf("error: %s\n", mysql_stmt_error(stmt));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
MYSQL_STMT* init(const char* query)
|
|
184
|
+
{
|
|
185
|
+
#ifdef LINUX
|
|
186
|
+
const char* fd_name = "���O";
|
|
187
|
+
#else
|
|
188
|
+
char fd_name[30];
|
|
189
|
+
WideCharToMultiByte(CP_UTF8, 0, L"���O", -1, fd_name, 30, NULL, NULL);
|
|
190
|
+
#endif
|
|
191
|
+
char tmp[512];
|
|
192
|
+
if (m_functionNumber == MYSQL_QUERY)
|
|
193
|
+
{
|
|
194
|
+
sprintf_s(tmp, 512, query, fd_name);
|
|
195
|
+
query = tmp;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
MYSQL_STMT* stmt = mysql_stmt_init(m_mysql);
|
|
199
|
+
if (!stmt)
|
|
200
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
201
|
+
if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query)))
|
|
202
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
203
|
+
bindParam(stmt);
|
|
204
|
+
bindOutput(stmt);
|
|
205
|
+
return stmt;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
void readOne(MYSQL_STMT* stmt)
|
|
209
|
+
{
|
|
210
|
+
m_bindParam = m_id % 20000 + 1;
|
|
211
|
+
mysql_stmt_execute(stmt);
|
|
212
|
+
int ret;
|
|
213
|
+
ret = mysql_stmt_fetch(stmt);
|
|
214
|
+
if (ret)
|
|
215
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
void insertOne()
|
|
219
|
+
{
|
|
220
|
+
char tmp[256];
|
|
221
|
+
sprintf_s(tmp, 256, "insert into cache (value) values(%d)", m_id);
|
|
222
|
+
int ret;
|
|
223
|
+
ret = mysql_query(m_mysql, tmp);
|
|
224
|
+
if (ret)
|
|
225
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
void queryOne(MYSQL_STMT* stmt)
|
|
229
|
+
{
|
|
230
|
+
int v = rand() % 15000 + 1;
|
|
231
|
+
m_bindParam = v;
|
|
232
|
+
m_bindParam2 = v + MYSQL_RECORDSET_COUNT;
|
|
233
|
+
int ret;
|
|
234
|
+
ret = mysql_stmt_execute(stmt);
|
|
235
|
+
if (ret)
|
|
236
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
237
|
+
int count = 0;
|
|
238
|
+
m_resultset.clear();
|
|
239
|
+
while ((ret = mysql_stmt_fetch(stmt)) == 0)
|
|
240
|
+
{
|
|
241
|
+
m_resultset.push_back(m_result);
|
|
242
|
+
++count;
|
|
243
|
+
}
|
|
244
|
+
if (count != MYSQL_RECORDSET_COUNT)
|
|
245
|
+
printf("query read error! id = %d \n", m_id);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
public:
|
|
249
|
+
worker(int id, int loopCount, int functionNumber, const connectParam& param,
|
|
250
|
+
boost::barrier& sync)
|
|
251
|
+
: workerBase(id, loopCount, functionNumber, sync), m_parmas(param)
|
|
252
|
+
{
|
|
253
|
+
boost::mutex::scoped_lock lck(m_mutex);
|
|
254
|
+
mysql_thread_init();
|
|
255
|
+
|
|
256
|
+
m_mysql = mysql_init(NULL);
|
|
257
|
+
int v = 1;
|
|
258
|
+
if (NULL == mysql_real_connect(
|
|
259
|
+
m_mysql, m_parmas.hostname.c_str(),
|
|
260
|
+
m_parmas.username.c_str(), m_parmas.passwd.c_str(),
|
|
261
|
+
m_parmas.database.c_str(), m_parmas.port, NULL, 0))
|
|
262
|
+
printf("error: %s\n", mysql_error(m_mysql));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
void initExecute()
|
|
266
|
+
{
|
|
267
|
+
#ifdef USE_SHARED_PREPAREDSTATEMENT
|
|
268
|
+
if (m_functionNumber == MYSQL_READ_ONE)
|
|
269
|
+
m_stmt = init(readOneQuery);
|
|
270
|
+
else if (m_functionNumber == MYSQL_QUERY)
|
|
271
|
+
m_stmt = init(queryOneQuery);
|
|
272
|
+
#endif
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
void endExecute()
|
|
276
|
+
{
|
|
277
|
+
#ifdef USE_SHARED_PREPAREDSTATEMENT
|
|
278
|
+
if (m_functionNumber != MYSQL_INSERT_ONE)
|
|
279
|
+
mysql_stmt_close(m_stmt);
|
|
280
|
+
#endif
|
|
281
|
+
mysql_close(m_mysql);
|
|
282
|
+
mysql_thread_end();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
void doExecute()
|
|
286
|
+
{
|
|
287
|
+
if (m_functionNumber == MYSQL_READ_ONE)
|
|
288
|
+
{
|
|
289
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
290
|
+
{
|
|
291
|
+
#ifndef USE_SHARED_PREPAREDSTATEMENT
|
|
292
|
+
m_stmt = init(readOneQuery);
|
|
293
|
+
#endif
|
|
294
|
+
readOne(m_stmt);
|
|
295
|
+
#ifndef USE_SHARED_PREPAREDSTATEMENT
|
|
296
|
+
mysql_stmt_close(m_stmt);
|
|
297
|
+
#endif
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
else if (m_functionNumber == MYSQL_INSERT_ONE)
|
|
301
|
+
{
|
|
302
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
303
|
+
insertOne();
|
|
304
|
+
}
|
|
305
|
+
else
|
|
306
|
+
{
|
|
307
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
308
|
+
{
|
|
309
|
+
#ifndef USE_SHARED_PREPAREDSTATEMENT
|
|
310
|
+
m_stmt = init(queryOneQuery);
|
|
311
|
+
#endif
|
|
312
|
+
queryOne(m_stmt);
|
|
313
|
+
#ifndef USE_SHARED_PREPAREDSTATEMENT
|
|
314
|
+
mysql_stmt_close(m_stmt);
|
|
315
|
+
#endif
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
class mysqlInit
|
|
322
|
+
{
|
|
323
|
+
public:
|
|
324
|
+
mysqlInit() { mysql_library_init(0, NULL, NULL); }
|
|
325
|
+
~mysqlInit() { mysql_library_end(); }
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
} // namespace transactd
|
|
329
|
+
} // namespace worker
|
|
330
|
+
} // namespace test
|
|
331
|
+
} // namespace bzs
|
|
332
|
+
|
|
333
|
+
#endif // BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#ifndef BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H
|
|
2
|
+
#define BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H
|
|
3
|
+
/* =================================================================
|
|
4
|
+
Copyright (C) 20014 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
================================================================= */
|
|
21
|
+
#include <bzs/test/transactdBench/workerBase.h>
|
|
22
|
+
#include <bzs/db/protocol/tdap/client/connectionPool.h>
|
|
23
|
+
#include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>
|
|
24
|
+
#include <bzs/example/queryData.h>
|
|
25
|
+
#include <bzs/db/protocol/tdap/client/activeTable.h>
|
|
26
|
+
#include <tchar.h>
|
|
27
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
28
|
+
using namespace bzs::db::protocol::tdap;
|
|
29
|
+
|
|
30
|
+
namespace bzs
|
|
31
|
+
{
|
|
32
|
+
namespace test
|
|
33
|
+
{
|
|
34
|
+
namespace worker
|
|
35
|
+
{
|
|
36
|
+
namespace transactd
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
#define USE_CONNECTION_POOL
|
|
40
|
+
#define TRD_READ_ONE 0
|
|
41
|
+
#define TRD_INSERT_ONE 1
|
|
42
|
+
#define TRD_QUERY 2
|
|
43
|
+
#define TRD_RECORDSET_COUNT 50
|
|
44
|
+
|
|
45
|
+
class worker : public workerBase
|
|
46
|
+
{
|
|
47
|
+
const connectParams& m_parmas;
|
|
48
|
+
#ifdef USE_CONNECTION_POOL
|
|
49
|
+
pooledDbManager m_db_real;
|
|
50
|
+
pooledDbManager* m_db;
|
|
51
|
+
#else
|
|
52
|
+
database_ptr m_db;
|
|
53
|
+
|
|
54
|
+
#endif
|
|
55
|
+
table_ptr m_tb;
|
|
56
|
+
boost::shared_ptr<activeTable> m_atu;
|
|
57
|
+
boost::shared_ptr<activeTable> m_atg;
|
|
58
|
+
boost::shared_ptr<activeTable> m_ate;
|
|
59
|
+
recordset m_rs;
|
|
60
|
+
void readOne(table_ptr& tb)
|
|
61
|
+
{
|
|
62
|
+
int v = (rand() % 15000) + 1;
|
|
63
|
+
tb->setFV((short)0, v);
|
|
64
|
+
tb->seek();
|
|
65
|
+
if (tb->stat() != 0)
|
|
66
|
+
printf("readOne error! stat = %d id = %ld\n", tb->stat(), m_id);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void insertOne(table_ptr& tb)
|
|
70
|
+
{
|
|
71
|
+
tb->clearBuffer();
|
|
72
|
+
tb->setFV(1, m_id);
|
|
73
|
+
insertRecord(tb);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void queryOne()
|
|
77
|
+
{
|
|
78
|
+
m_rs.clear();
|
|
79
|
+
query q;
|
|
80
|
+
int v = (rand() % 15000) + 1;
|
|
81
|
+
q.select(_T("id"), _T("name"), _T("group"))
|
|
82
|
+
.where(_T("id"), _T("<"), v + TRD_RECORDSET_COUNT);
|
|
83
|
+
m_atu->index(0).keyValue(v).read(m_rs, q);
|
|
84
|
+
q.reset();
|
|
85
|
+
|
|
86
|
+
// m_ate->index(0).join(m_rs,
|
|
87
|
+
// q.select(_T("comment")).optimize(queryBase::joinHasOneOrHasMany),
|
|
88
|
+
// _T("id"));
|
|
89
|
+
|
|
90
|
+
// Join group::name
|
|
91
|
+
/*recordset rs2;
|
|
92
|
+
|
|
93
|
+
q.select(_T("group_name"));
|
|
94
|
+
for (int i=0;i<m_rs.size();++i)
|
|
95
|
+
q.addSeekKeyValuePtr(m_rs[i][(short)0].ptr());
|
|
96
|
+
m_atg->table()->setQuery(&q);
|
|
97
|
+
m_atg->index(0).keyValue(0).read(rs2, q);
|
|
98
|
+
*/
|
|
99
|
+
m_atg->index(0).join(m_rs, q.select(_T("group_name")), _T("group"));
|
|
100
|
+
if (m_rs.size() != TRD_RECORDSET_COUNT)
|
|
101
|
+
printf("query read error! id = %d size = %d\n", m_id, m_rs.size());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
public:
|
|
105
|
+
worker(int id, int loopCount, int functionNumber,
|
|
106
|
+
const connectParams& param, boost::barrier& sync)
|
|
107
|
+
: workerBase(id, loopCount, functionNumber, sync), m_parmas(param)
|
|
108
|
+
{
|
|
109
|
+
m_db = &m_db_real;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void initExecute()
|
|
113
|
+
{
|
|
114
|
+
#ifdef USE_CONNECTION_POOL
|
|
115
|
+
m_db->use(&m_parmas);
|
|
116
|
+
const _TCHAR* tbName =
|
|
117
|
+
(m_functionNumber == TRD_READ_ONE) ? _T("user") : _T("cache");
|
|
118
|
+
m_tb = m_db->table(tbName);
|
|
119
|
+
#else
|
|
120
|
+
try
|
|
121
|
+
{
|
|
122
|
+
m_db = createDatabaseObject();
|
|
123
|
+
connectOpen(m_db, m_parmas, true);
|
|
124
|
+
const _TCHAR* tbName =
|
|
125
|
+
(m_functionNumber == TRD_READ_ONE) ? _T("user") : _T("cache");
|
|
126
|
+
m_tb = openTable(m_db, tbName);
|
|
127
|
+
m_tb->setKeyNum(0);
|
|
128
|
+
}
|
|
129
|
+
catch (bzs::rtl::exception& e)
|
|
130
|
+
{
|
|
131
|
+
std::_tstring msg;
|
|
132
|
+
msg = *bzs::rtl::getMsg(e);
|
|
133
|
+
boost::mutex::scoped_lock lck(m_mutex);
|
|
134
|
+
std::tcout << _T("[ERROR] ") << msg.c_str() << std::endl;
|
|
135
|
+
}
|
|
136
|
+
#endif // USE_CONNECTION_POOL
|
|
137
|
+
if (m_functionNumber == TRD_QUERY)
|
|
138
|
+
{
|
|
139
|
+
m_atu.reset(new activeTable(m_db, _T("user")));
|
|
140
|
+
m_atg.reset(new activeTable(m_db, _T("groups")));
|
|
141
|
+
m_ate.reset(new activeTable(m_db, _T("extention")));
|
|
142
|
+
|
|
143
|
+
_TCHAR tmp[30];
|
|
144
|
+
m_atu->alias(name_field_str(tmp), _T("name"));
|
|
145
|
+
m_atg->alias(_T("name"), _T("group_name"));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void endExecute()
|
|
150
|
+
{
|
|
151
|
+
m_tb.reset();
|
|
152
|
+
#ifdef USE_CONNECTION_POOL
|
|
153
|
+
m_db->unUse();
|
|
154
|
+
#else
|
|
155
|
+
m_db.reset();
|
|
156
|
+
#endif
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
void doExecute()
|
|
160
|
+
{
|
|
161
|
+
try
|
|
162
|
+
{
|
|
163
|
+
if (m_functionNumber == TRD_READ_ONE)
|
|
164
|
+
{
|
|
165
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
166
|
+
readOne(m_tb);
|
|
167
|
+
}
|
|
168
|
+
else if (m_functionNumber == TRD_INSERT_ONE)
|
|
169
|
+
{
|
|
170
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
171
|
+
insertOne(m_tb);
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
{
|
|
175
|
+
for (int i = 0; i < m_loopCount; ++i)
|
|
176
|
+
queryOne();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
catch (bzs::rtl::exception& e)
|
|
181
|
+
{
|
|
182
|
+
std::_tstring msg;
|
|
183
|
+
msg = *bzs::rtl::getMsg(e);
|
|
184
|
+
boost::mutex::scoped_lock lck(m_mutex);
|
|
185
|
+
std::tcout << _T("[ERROR] ") << msg.c_str() << std::endl;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
catch (...)
|
|
189
|
+
{
|
|
190
|
+
boost::mutex::scoped_lock lck(m_mutex);
|
|
191
|
+
std::cout << "worker error id = " << m_id << std::endl;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
} // namespace transactd
|
|
197
|
+
} // namespace worker
|
|
198
|
+
} // namespace test
|
|
199
|
+
} // namespace bzs
|
|
200
|
+
|
|
201
|
+
#endif // BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H
|