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,156 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 2014 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 <bzs/db/protocol/tdap/client/activeTable.h>
|
|
20
|
+
#include <bzs/rtl/benchmark.h>
|
|
21
|
+
#include <bzs/example/queryData.h>
|
|
22
|
+
#include <iostream>
|
|
23
|
+
#include <locale.h>
|
|
24
|
+
|
|
25
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
26
|
+
using namespace bzs::db::protocol::tdap;
|
|
27
|
+
|
|
28
|
+
void showConsole(recordset& rowset)
|
|
29
|
+
{
|
|
30
|
+
const fielddefs& fields = *rowset.fieldDefs();
|
|
31
|
+
for (int j = 0; j < (int)fields.size(); ++j)
|
|
32
|
+
std::tcout << fields[j].name() << _T("\t");
|
|
33
|
+
std::tcout << _T("\n");
|
|
34
|
+
|
|
35
|
+
for (int i = 0; i < (int)rowset.size(); ++i)
|
|
36
|
+
{
|
|
37
|
+
row& m = rowset[i];
|
|
38
|
+
for (int j = 0; j < (int)m.size(); ++j)
|
|
39
|
+
{
|
|
40
|
+
std::tcout << m[(short)j].c_str() << _T("\t");
|
|
41
|
+
if (j == (int)m.size() - 1)
|
|
42
|
+
std::tcout << _T("\n");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
bool btest(recordset* rsp, activeTable* atup, activeTable* atgp,
|
|
48
|
+
activeTable* atep, int kind, int n)
|
|
49
|
+
{
|
|
50
|
+
#ifdef LINUX
|
|
51
|
+
const char* fd_name = "名前";
|
|
52
|
+
#else
|
|
53
|
+
#ifdef _UNICODE
|
|
54
|
+
const wchar_t* fd_name = L"名前";
|
|
55
|
+
#else
|
|
56
|
+
char fd_name[30];
|
|
57
|
+
WideCharToMultiByte(CP_UTF8, 0, L"名前", -1, fd_name, 30, NULL, NULL);
|
|
58
|
+
#endif
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
activeTable& atu = *atup;
|
|
62
|
+
activeTable& atg = *atgp;
|
|
63
|
+
activeTable& ate = *atep;
|
|
64
|
+
recordset& rs = *rsp;
|
|
65
|
+
query q;
|
|
66
|
+
|
|
67
|
+
for (int i = 0; i < n; ++i)
|
|
68
|
+
{
|
|
69
|
+
rs.clear();
|
|
70
|
+
if (kind & 1)
|
|
71
|
+
{
|
|
72
|
+
q.reset();
|
|
73
|
+
atu.alias(fd_name, _T("name"));
|
|
74
|
+
|
|
75
|
+
q.select(_T("id"), _T("name"), _T("group"))
|
|
76
|
+
.where(_T("id"), _T("<="), i + 15000);
|
|
77
|
+
atu.index(0).keyValue(i + 1).read(rs, q);
|
|
78
|
+
|
|
79
|
+
// Join extention::comment
|
|
80
|
+
if (kind & 2)
|
|
81
|
+
{
|
|
82
|
+
q.reset();
|
|
83
|
+
ate.index(0).join(rs, q.select(_T("comment")).optimize(
|
|
84
|
+
queryBase::joinHasOneOrHasMany),
|
|
85
|
+
_T("id"));
|
|
86
|
+
}
|
|
87
|
+
if (kind & 4)
|
|
88
|
+
{
|
|
89
|
+
// Join group::name
|
|
90
|
+
q.reset();
|
|
91
|
+
atg.alias(_T("name"), _T("group_name"));
|
|
92
|
+
atg.index(0).join(rs, q.select(_T("group_name")), _T("group"));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (kind & 8)
|
|
96
|
+
std::tcout << "." << std::flush;
|
|
97
|
+
}
|
|
98
|
+
if (kind & 8)
|
|
99
|
+
std::tcout << std::endl;
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#pragma warning(disable : 4101)
|
|
104
|
+
#pragma argsused
|
|
105
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
106
|
+
{
|
|
107
|
+
#ifdef _UNICODE
|
|
108
|
+
std::locale::global(std::locale(""));
|
|
109
|
+
#endif
|
|
110
|
+
database_ptr db = createDatabaseObject();
|
|
111
|
+
try
|
|
112
|
+
{
|
|
113
|
+
const _TCHAR* host = _T("localhost");
|
|
114
|
+
int kind = 15;
|
|
115
|
+
int n = 100;
|
|
116
|
+
bool makeDatabase = true;
|
|
117
|
+
|
|
118
|
+
if (argc >= 5)
|
|
119
|
+
n = _ttol(argv[4]);
|
|
120
|
+
if (argc >= 4)
|
|
121
|
+
kind = _ttol(argv[3]);
|
|
122
|
+
if (argc >= 3)
|
|
123
|
+
host = argv[2];
|
|
124
|
+
if (argc >= 2)
|
|
125
|
+
makeDatabase = (_ttol(argv[1]) != 0);
|
|
126
|
+
#ifndef USE_PSQL_DATABASE
|
|
127
|
+
connectParams param(_T("tdap"), host, _T("querytest"), _T("test"));
|
|
128
|
+
#else
|
|
129
|
+
connectParams param(_T("btrv"), host, _T("querytest"), _T("test"));
|
|
130
|
+
#endif
|
|
131
|
+
param.setMode(TD_OPEN_NORMAL);
|
|
132
|
+
if (prebuiltData(db, param, makeDatabase))
|
|
133
|
+
{
|
|
134
|
+
std::tcout << "The query data build error." << std::endl;
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
activeTable atu(db, _T("user"));
|
|
138
|
+
activeTable atg(db, _T("groups"));
|
|
139
|
+
activeTable ate(db, _T("extention"));
|
|
140
|
+
|
|
141
|
+
recordset rs;
|
|
142
|
+
|
|
143
|
+
bzs::rtl::benchmark bm;
|
|
144
|
+
bm.report(boost::bind(btest, &rs, &atu, &atg, &ate, kind, n),
|
|
145
|
+
"exec time ");
|
|
146
|
+
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
catch (bzs::rtl::exception& e)
|
|
151
|
+
{
|
|
152
|
+
std::tcout << *bzs::rtl::getMsg(e) << std::endl;
|
|
153
|
+
}
|
|
154
|
+
return 1;
|
|
155
|
+
}
|
|
156
|
+
#pragma warning(default : 4101)
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 2014 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
|
+
#pragma hdrstop
|
|
20
|
+
#include "workerTransactdImple.h"
|
|
21
|
+
#include "workerMySQLImple.h"
|
|
22
|
+
|
|
23
|
+
using namespace bzs::test::worker;
|
|
24
|
+
using namespace boost;
|
|
25
|
+
|
|
26
|
+
typedef std::vector<boost::shared_ptr<workerBase> > workers;
|
|
27
|
+
|
|
28
|
+
struct transactionSec
|
|
29
|
+
{
|
|
30
|
+
transactionSec() : value(0) {}
|
|
31
|
+
int workes;
|
|
32
|
+
__int64 value;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
struct commandLineParam
|
|
36
|
+
{
|
|
37
|
+
int funcNumber;
|
|
38
|
+
int maxWorkerNum;
|
|
39
|
+
int workerNumStep;
|
|
40
|
+
int loopCount;
|
|
41
|
+
int avg_count;
|
|
42
|
+
int stressMode;
|
|
43
|
+
commandLineParam(_TCHAR* argv[])
|
|
44
|
+
{
|
|
45
|
+
funcNumber = _ttol(argv[2]);
|
|
46
|
+
maxWorkerNum = _ttol(argv[3]);
|
|
47
|
+
workerNumStep = maxWorkerNum / 20;
|
|
48
|
+
if (workerNumStep == 0)
|
|
49
|
+
workerNumStep = 1;
|
|
50
|
+
loopCount = _ttol(argv[4]);
|
|
51
|
+
avg_count = _ttol(argv[5]);
|
|
52
|
+
stressMode = (loopCount == -1) ? true : false;
|
|
53
|
+
if (stressMode)
|
|
54
|
+
loopCount = 1;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
void showResult(const std::vector<transactionSec>& results, int total,
|
|
59
|
+
int totalTransactionTime, int totalTransactions,
|
|
60
|
+
bool stressMode)
|
|
61
|
+
{
|
|
62
|
+
std::tcout << _T("----------------------------------") << std::endl;
|
|
63
|
+
std::tcout << _T("Clients \tTransactions/sec") << std::endl;
|
|
64
|
+
std::tcout << _T("----------------------------------") << std::endl;
|
|
65
|
+
|
|
66
|
+
for (int i = 0; i < (int)results.size(); ++i)
|
|
67
|
+
std::tcout << results[i].workes << _T("\t") << results[i].value
|
|
68
|
+
<< std::endl;
|
|
69
|
+
if (!stressMode)
|
|
70
|
+
{
|
|
71
|
+
std::tcout << _T("----------------------------------") << std::endl;
|
|
72
|
+
std::tcout << _T("total transaction time (sec) ")
|
|
73
|
+
<< totalTransactionTime / 1000000.0f << std::endl;
|
|
74
|
+
std::tcout << _T("avarage transaction time (sec) ")
|
|
75
|
+
<< totalTransactionTime / 1000000.0f / totalTransactions
|
|
76
|
+
<< std::endl;
|
|
77
|
+
std::tcout << _T("total testing time (sec) ")
|
|
78
|
+
<< total / 1000000.0f << std::endl;
|
|
79
|
+
}
|
|
80
|
+
std::tcout << _T("----------------------------------") << std::endl;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
bool tableFixer(const connectParams& param)
|
|
84
|
+
{
|
|
85
|
+
|
|
86
|
+
database_ptr db = createDatabaseObject();
|
|
87
|
+
openDatabase(db, param);
|
|
88
|
+
|
|
89
|
+
dbdef* def = db->dbDef();
|
|
90
|
+
short index = def->tableNumByName(_T("cache"));
|
|
91
|
+
if (index == -1 && !createCacheTable(def))
|
|
92
|
+
return false;
|
|
93
|
+
dropTable(db, _T("cache"));
|
|
94
|
+
openTable(db, _T("cache"));
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
void makeMysqlParam(bzs::test::worker::mysql::connectParam& param,
|
|
99
|
+
const _TCHAR* host)
|
|
100
|
+
{
|
|
101
|
+
#ifdef _UNICODE
|
|
102
|
+
char hostname[256];
|
|
103
|
+
WideCharToMultiByte(CP_ACP, 0, host, -1, hostname, 256, NULL, NULL);
|
|
104
|
+
#else
|
|
105
|
+
const char* hostname = host;
|
|
106
|
+
#endif
|
|
107
|
+
param.hostname = hostname;
|
|
108
|
+
param.username = "root";
|
|
109
|
+
param.passwd = "";
|
|
110
|
+
param.database = "querytest";
|
|
111
|
+
param.port = 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
#define BENCH_TIMER_SECONDS 1.5f
|
|
115
|
+
double executeWorkers(const commandLineParam& cmd, const connectParams param,
|
|
116
|
+
const bzs::test::worker::mysql::connectParam& paramMysql,
|
|
117
|
+
int wn)
|
|
118
|
+
{
|
|
119
|
+
double t = 0;
|
|
120
|
+
for (int k = 0; k < cmd.avg_count; ++k)
|
|
121
|
+
{
|
|
122
|
+
g_bench_signal = cmd.stressMode ? BENCH_SIGNAL_GO : BENCH_SIGNAL_BLUE;
|
|
123
|
+
workers workers;
|
|
124
|
+
thread_group threads;
|
|
125
|
+
boost::barrier sync(wn + 1);
|
|
126
|
+
for (int i = 0; i < wn; ++i)
|
|
127
|
+
{
|
|
128
|
+
int id = i + (wn * 10000);
|
|
129
|
+
|
|
130
|
+
boost::shared_ptr<workerBase> w;
|
|
131
|
+
if (cmd.funcNumber < 10)
|
|
132
|
+
w.reset(new transactd::worker(id, cmd.loopCount, cmd.funcNumber,
|
|
133
|
+
param, sync));
|
|
134
|
+
else
|
|
135
|
+
w.reset(new bzs::test::worker::mysql::worker(
|
|
136
|
+
id, cmd.loopCount, cmd.funcNumber, paramMysql, sync));
|
|
137
|
+
workers.push_back(w);
|
|
138
|
+
threads.create_thread(bind(&workerBase::execute, w.get()));
|
|
139
|
+
}
|
|
140
|
+
printf("*");
|
|
141
|
+
fflush(stdout);
|
|
142
|
+
Sleep(200 * MCRTOMM);
|
|
143
|
+
sync.wait(); // start all workers
|
|
144
|
+
if (cmd.stressMode)
|
|
145
|
+
{
|
|
146
|
+
Sleep(200 * MCRTOMM);
|
|
147
|
+
g_bench_signal = BENCH_SIGNAL_GREEN;
|
|
148
|
+
Sleep((unsigned int)(BENCH_TIMER_SECONDS * 1000 * MCRTOMM));
|
|
149
|
+
g_bench_signal = BENCH_SIGNAL_BREAK;
|
|
150
|
+
}
|
|
151
|
+
threads.join_all();
|
|
152
|
+
for (int i = 0; i < wn; ++i)
|
|
153
|
+
t += workers[i]->total();
|
|
154
|
+
}
|
|
155
|
+
return t;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
int execute(const commandLineParam& cmd, const connectParams param,
|
|
159
|
+
const bzs::test::worker::mysql::connectParam& paramMysql,
|
|
160
|
+
std::vector<transactionSec>& results, double& totalTransactionTime)
|
|
161
|
+
{
|
|
162
|
+
int totalTransactions = 0;
|
|
163
|
+
for (int wn = cmd.workerNumStep; wn <= cmd.maxWorkerNum;
|
|
164
|
+
wn += cmd.workerNumStep)
|
|
165
|
+
{
|
|
166
|
+
double t = executeWorkers(cmd, param, paramMysql, wn);
|
|
167
|
+
transactionSec ts;
|
|
168
|
+
if (cmd.stressMode)
|
|
169
|
+
{
|
|
170
|
+
if (t)
|
|
171
|
+
ts.value = (__int64)(t / BENCH_TIMER_SECONDS);
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
{
|
|
175
|
+
totalTransactionTime += t;
|
|
176
|
+
totalTransactions += wn * cmd.loopCount * cmd.avg_count;
|
|
177
|
+
if (t)
|
|
178
|
+
ts.value = (__int64)((double)1000000.0f * wn * wn *
|
|
179
|
+
cmd.avg_count * cmd.loopCount / t);
|
|
180
|
+
}
|
|
181
|
+
ts.workes = wn;
|
|
182
|
+
results.push_back(ts);
|
|
183
|
+
}
|
|
184
|
+
return totalTransactions;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
void showUsage()
|
|
188
|
+
{
|
|
189
|
+
printf("\nusage: bench_scale [host] [function_number] [max_worker_num]"
|
|
190
|
+
" [trnsactions] [avg_count]\n"
|
|
191
|
+
"\n"
|
|
192
|
+
"|----- [function_number] description -----|\n"
|
|
193
|
+
"| 0: Read a record by unique id. |\n"
|
|
194
|
+
"| 1: Insert a record by autoincrement. |\n"
|
|
195
|
+
"| 2: Read 50 user records and join group name. |\n"
|
|
196
|
+
"| +10 Test MySQL (10 11 12) |\n"
|
|
197
|
+
"|----------------------------------------------|\n"
|
|
198
|
+
"\n"
|
|
199
|
+
"|----- [trnsactions] description -----|\n"
|
|
200
|
+
"| 1 - n : N times roop a function |\n"
|
|
201
|
+
"| -1 : Execute Infinite loop and the number|\n"
|
|
202
|
+
"| of processings within regulation |\n"
|
|
203
|
+
"| time is counted. |\n"
|
|
204
|
+
"|----------------------------------------------|\n"
|
|
205
|
+
"\n"
|
|
206
|
+
"|----- [avg_count] description -----|\n"
|
|
207
|
+
"| 1 - n : Count N times and results return |\n"
|
|
208
|
+
"| those avarage. |\n"
|
|
209
|
+
"|----------------------------------------------|\n"
|
|
210
|
+
|
|
211
|
+
"exsample : bench_scale localhost 0 100 1 5 \n");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
#pragma argsused
|
|
215
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
216
|
+
{
|
|
217
|
+
try
|
|
218
|
+
{
|
|
219
|
+
if (argc < 6)
|
|
220
|
+
{
|
|
221
|
+
showUsage();
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
bzs::test::worker::mysql::mysqlInit mysql;
|
|
225
|
+
|
|
226
|
+
if (!mysql_thread_safe())
|
|
227
|
+
{
|
|
228
|
+
std::tcout << _T("MySQL client is not thread safe.") << std::endl;
|
|
229
|
+
return 1;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
connectParams param(_T("tdap"), argv[1], _T("querytest"), _T("test"));
|
|
233
|
+
param.setMode(0);
|
|
234
|
+
|
|
235
|
+
bzs::test::worker::mysql::connectParam paramMysql(
|
|
236
|
+
argv[1], _T("querytest"), _T("root"));
|
|
237
|
+
|
|
238
|
+
commandLineParam cmd(argv);
|
|
239
|
+
|
|
240
|
+
if (tableFixer(param))
|
|
241
|
+
{
|
|
242
|
+
std::vector<transactionSec> results;
|
|
243
|
+
results.reserve(cmd.maxWorkerNum);
|
|
244
|
+
pooledDbManager::setMaxConnections(cmd.maxWorkerNum);
|
|
245
|
+
|
|
246
|
+
double totalTransactionTime = 0;
|
|
247
|
+
bzs::rtl::benchmarkMt bm;
|
|
248
|
+
bm.start();
|
|
249
|
+
int totalTransactions =
|
|
250
|
+
execute(cmd, param, paramMysql, results, totalTransactionTime);
|
|
251
|
+
printf("\n");
|
|
252
|
+
showResult(results, bm.end(), (int)totalTransactionTime,
|
|
253
|
+
totalTransactions, cmd.stressMode);
|
|
254
|
+
return 0;
|
|
255
|
+
}
|
|
256
|
+
return 1;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
catch (bzs::rtl::exception& e)
|
|
260
|
+
{
|
|
261
|
+
std::_tstring s = *bzs::rtl::getMsg(e);
|
|
262
|
+
std::tcout << _T("[ERROR] ") << s << std::endl;
|
|
263
|
+
}
|
|
264
|
+
return 1;
|
|
265
|
+
}
|