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
|
@@ -16,13 +16,9 @@
|
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
=================================================================*/
|
|
19
|
-
#include <bzs/env/tstring.h>
|
|
20
|
-
#pragma hdrstop
|
|
21
|
-
|
|
22
19
|
#include "connMgr.h"
|
|
23
20
|
#include "database.h"
|
|
24
21
|
|
|
25
|
-
|
|
26
22
|
#pragma package(smart_init)
|
|
27
23
|
|
|
28
24
|
namespace bzs
|
|
@@ -36,17 +32,18 @@ namespace tdap
|
|
|
36
32
|
namespace client
|
|
37
33
|
{
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
connMgr::connMgr(database* db):nstable(db)
|
|
35
|
+
connMgr::connMgr(database* db) : nstable(db)
|
|
41
36
|
{
|
|
42
37
|
m_db = db;
|
|
43
38
|
}
|
|
44
39
|
|
|
45
40
|
connMgr::~connMgr()
|
|
46
41
|
{
|
|
47
|
-
|
|
48
42
|
}
|
|
49
|
-
database*
|
|
43
|
+
database* connMgr::db() const
|
|
44
|
+
{
|
|
45
|
+
return m_db;
|
|
46
|
+
}
|
|
50
47
|
|
|
51
48
|
void connMgr::connect(const _TCHAR* uri)
|
|
52
49
|
{
|
|
@@ -67,11 +64,12 @@ void connMgr::disconnect()
|
|
|
67
64
|
}
|
|
68
65
|
}
|
|
69
66
|
|
|
70
|
-
void
|
|
67
|
+
void connMgr::allocBuffer()
|
|
71
68
|
{
|
|
72
|
-
m_records.resize(64000/sizeof(connMgr::record));
|
|
69
|
+
m_records.resize(64000 / sizeof(connMgr::record));
|
|
73
70
|
|
|
74
|
-
m_datalen = m_buflen =
|
|
71
|
+
m_datalen = m_buflen =
|
|
72
|
+
(uint_td)(m_records.size() * sizeof(connMgr::record));
|
|
75
73
|
m_pdata = (void*)&m_records[0];
|
|
76
74
|
memset(m_pdata, 0, m_datalen);
|
|
77
75
|
setIsOpen(true);
|
|
@@ -87,7 +85,7 @@ const connMgr::records& connMgr::connections()
|
|
|
87
85
|
m_keynum = TD_STSTCS_READ;
|
|
88
86
|
tdap(TD_STASTISTICS);
|
|
89
87
|
if (m_stat == 0)
|
|
90
|
-
m_records.resize(m_datalen/sizeof(connMgr::record));
|
|
88
|
+
m_records.resize(m_datalen / sizeof(connMgr::record));
|
|
91
89
|
return m_records;
|
|
92
90
|
}
|
|
93
91
|
|
|
@@ -99,7 +97,7 @@ const connMgr::records& connMgr::databases(__int64 connid)
|
|
|
99
97
|
m_params[1] = -1;
|
|
100
98
|
tdap(TD_STASTISTICS);
|
|
101
99
|
if (m_stat == 0)
|
|
102
|
-
m_records.resize(m_datalen/sizeof(connMgr::record));
|
|
100
|
+
m_records.resize(m_datalen / sizeof(connMgr::record));
|
|
103
101
|
return m_records;
|
|
104
102
|
}
|
|
105
103
|
|
|
@@ -111,7 +109,7 @@ const connMgr::records& connMgr::tables(__int64 connid, int dbid)
|
|
|
111
109
|
m_params[1] = dbid;
|
|
112
110
|
tdap(TD_STASTISTICS);
|
|
113
111
|
if (m_stat == 0)
|
|
114
|
-
m_records.resize(m_datalen/sizeof(connMgr::record));
|
|
112
|
+
m_records.resize(m_datalen / sizeof(connMgr::record));
|
|
115
113
|
return m_records;
|
|
116
114
|
}
|
|
117
115
|
|
|
@@ -127,7 +125,6 @@ void connMgr::disconnectAll()
|
|
|
127
125
|
{
|
|
128
126
|
m_keynum = TD_STSTCS_DISCONNECT_ALL;
|
|
129
127
|
tdap(TD_STASTISTICS);
|
|
130
|
-
|
|
131
128
|
}
|
|
132
129
|
|
|
133
130
|
short_td connMgr::stat()
|
|
@@ -135,10 +132,8 @@ short_td connMgr::stat()
|
|
|
135
132
|
return m_stat;
|
|
136
133
|
}
|
|
137
134
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}//namespace
|
|
141
|
-
}//namespace
|
|
142
|
-
}//namespace
|
|
143
|
-
}//namespace db
|
|
144
|
-
}//namespace bzs
|
|
135
|
+
} // namespace client
|
|
136
|
+
} // namespace tdap
|
|
137
|
+
} // namespace protocol
|
|
138
|
+
} // namespace db
|
|
139
|
+
} // namespace bzs
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
#include <bzs/db/transactd/connectionRecord.h>
|
|
23
23
|
#include <vector>
|
|
24
24
|
|
|
25
|
-
|
|
26
25
|
namespace bzs
|
|
27
26
|
{
|
|
28
27
|
namespace db
|
|
@@ -35,28 +34,28 @@ namespace client
|
|
|
35
34
|
{
|
|
36
35
|
|
|
37
36
|
class database;
|
|
38
|
-
#pragma warning(disable:4251)
|
|
37
|
+
#pragma warning(disable : 4251)
|
|
39
38
|
|
|
40
|
-
class
|
|
39
|
+
class DLLLIB connMgr : private nstable
|
|
41
40
|
{
|
|
42
41
|
public:
|
|
43
|
-
typedef
|
|
44
|
-
typedef
|
|
45
|
-
protected:
|
|
46
|
-
|
|
42
|
+
typedef bzs::db::transactd::connection::record record;
|
|
43
|
+
typedef std::vector<record> records;
|
|
47
44
|
|
|
45
|
+
protected:
|
|
48
46
|
private:
|
|
49
47
|
std::vector<record> m_records;
|
|
50
|
-
|
|
48
|
+
__int64 m_params[2];
|
|
51
49
|
database* m_db;
|
|
52
50
|
std::_tstring m_uri;
|
|
53
51
|
void allocBuffer();
|
|
54
52
|
void writeRecordData(){};
|
|
55
53
|
void onReadAfter(){};
|
|
56
54
|
|
|
57
|
-
|
|
55
|
+
~connMgr();
|
|
56
|
+
|
|
58
57
|
public:
|
|
59
|
-
|
|
58
|
+
explicit connMgr(database* db);
|
|
60
59
|
|
|
61
60
|
void connect(const _TCHAR* uri);
|
|
62
61
|
void disconnect();
|
|
@@ -67,16 +66,15 @@ public:
|
|
|
67
66
|
void disconnectAll();
|
|
68
67
|
short_td stat();
|
|
69
68
|
|
|
70
|
-
database* db()const;
|
|
69
|
+
database* db() const;
|
|
71
70
|
using nstable::tdapErr;
|
|
72
71
|
};
|
|
73
72
|
|
|
74
|
-
#pragma warning(default:4251)
|
|
75
|
-
|
|
73
|
+
#pragma warning(default : 4251)
|
|
76
74
|
|
|
77
|
-
}//namespace client
|
|
78
|
-
}//namespace tdap
|
|
79
|
-
}//namespace protocol
|
|
80
|
-
}//namespace db
|
|
81
|
-
}//namespace bzs
|
|
82
|
-
#endif //BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H
|
|
75
|
+
} // namespace client
|
|
76
|
+
} // namespace tdap
|
|
77
|
+
} // namespace protocol
|
|
78
|
+
} // namespace db
|
|
79
|
+
} // namespace bzs
|
|
80
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H
|
|
@@ -0,0 +1,243 @@
|
|
|
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 "connectionPool.h"
|
|
20
|
+
|
|
21
|
+
#ifdef __BCPLUSPLUS__
|
|
22
|
+
#ifdef _WIN64
|
|
23
|
+
#define BZS_LINK_BOOST_SYSTEM
|
|
24
|
+
#define BZS_LINK_BOOST_THREAD
|
|
25
|
+
#define BZS_LINK_BOOST_CHRONO
|
|
26
|
+
namespace boost
|
|
27
|
+
{
|
|
28
|
+
void tss_cleanup_implemented()
|
|
29
|
+
{
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
#else
|
|
33
|
+
#define BZS_LINK_BOOST_THREAD
|
|
34
|
+
namespace boost
|
|
35
|
+
{
|
|
36
|
+
extern "C" void tss_cleanup_implemented()
|
|
37
|
+
{
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
#endif
|
|
41
|
+
#include <bzs/env/boost_bcb_link.h>
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
namespace bzs
|
|
45
|
+
{
|
|
46
|
+
namespace db
|
|
47
|
+
{
|
|
48
|
+
namespace protocol
|
|
49
|
+
{
|
|
50
|
+
namespace tdap
|
|
51
|
+
{
|
|
52
|
+
namespace client
|
|
53
|
+
{
|
|
54
|
+
|
|
55
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
56
|
+
struct busyWaitArguments
|
|
57
|
+
{
|
|
58
|
+
mutable boost::condition* m_busy;
|
|
59
|
+
mutable boost::mutex* m_mutex2;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
void scopedLock(boost::mutex::scoped_lock* lck)
|
|
63
|
+
{
|
|
64
|
+
lck->lock();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void busyWait(busyWaitArguments* args)
|
|
68
|
+
{
|
|
69
|
+
boost::mutex::scoped_lock lck(*(args->m_mutex2));
|
|
70
|
+
args->m_busy->wait(lck);
|
|
71
|
+
}
|
|
72
|
+
#endif // TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
73
|
+
|
|
74
|
+
short __STDCALL dllUnloadCallbackFunc()
|
|
75
|
+
{
|
|
76
|
+
cpool.reset(0);
|
|
77
|
+
cpool.m_regitfunc = NULL;
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
void releaseConnection(stdDbmCconnectionPool* pool)
|
|
82
|
+
{
|
|
83
|
+
pool->releaseOne();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
template <class Database_Ptr>
|
|
87
|
+
connectionPool<Database_Ptr>::connectionPool(int maxConnections)
|
|
88
|
+
: m_maxConnections(maxConnections)
|
|
89
|
+
{
|
|
90
|
+
#ifdef USE_DLLUNLOAD_CALLBACK
|
|
91
|
+
m_regitfunc = nsdatabase::getDllUnloadCallbackFunc();
|
|
92
|
+
if (m_regitfunc)
|
|
93
|
+
m_regitfunc(dllUnloadCallbackFunc);
|
|
94
|
+
#else
|
|
95
|
+
m_regitfunc = NULL;
|
|
96
|
+
#endif
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
template <class Database_Ptr> connectionPool<Database_Ptr>::~connectionPool()
|
|
100
|
+
{
|
|
101
|
+
if (m_regitfunc)
|
|
102
|
+
m_regitfunc(NULL);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
template <class Database_Ptr>
|
|
106
|
+
Database_Ptr connectionPool<Database_Ptr>::addOne(const connectParams& param)
|
|
107
|
+
{
|
|
108
|
+
Database_Ptr db;
|
|
109
|
+
db = createDatabaseForConnectionPool(db);
|
|
110
|
+
connectOpen(db, param, true /* new connection*/);
|
|
111
|
+
m_dbs.push_back(db);
|
|
112
|
+
return m_dbs[m_dbs.size() - 1];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Delivery database instance
|
|
116
|
+
If a connect error is occured then bzs::rtl::exception exception is
|
|
117
|
+
thrown.
|
|
118
|
+
*/
|
|
119
|
+
template <class Database_Ptr>
|
|
120
|
+
Database_Ptr connectionPool<Database_Ptr>::get(const connectParams* param)
|
|
121
|
+
{
|
|
122
|
+
boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
|
|
123
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
124
|
+
TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
|
|
125
|
+
#else
|
|
126
|
+
lck.lock();
|
|
127
|
+
#endif
|
|
128
|
+
assert((param && m_maxConnections) || m_dbs.size());
|
|
129
|
+
|
|
130
|
+
while (1)
|
|
131
|
+
{
|
|
132
|
+
for (size_t i = 0; i < m_dbs.size(); i++)
|
|
133
|
+
{
|
|
134
|
+
if (m_dbs[i].use_count() == 1)
|
|
135
|
+
{
|
|
136
|
+
if (param)
|
|
137
|
+
{
|
|
138
|
+
Database_Ptr db = m_dbs[i];
|
|
139
|
+
if (isSameUri(param, db))
|
|
140
|
+
return db;
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
return m_dbs[i];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// create a new database object if there is no free one.
|
|
147
|
+
if (param && (m_maxConnections > (int)m_dbs.size()))
|
|
148
|
+
return addOne(*param);
|
|
149
|
+
// Wait until releaseOne() called
|
|
150
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
151
|
+
busyWaitArguments bwArgs;
|
|
152
|
+
bwArgs.m_busy = &m_busy;
|
|
153
|
+
bwArgs.m_mutex2 = &m_mutex2;
|
|
154
|
+
TRANSACTD_RB_CALL_WITHOUT_GVL(busyWait, bwArgs);
|
|
155
|
+
#else
|
|
156
|
+
boost::mutex::scoped_lock lck(m_mutex2);
|
|
157
|
+
m_busy.wait(lck);
|
|
158
|
+
#endif
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Create database and login the server with each connection.
|
|
163
|
+
If a connect error is occured then bzs::rtl::exception exception is
|
|
164
|
+
thrown.
|
|
165
|
+
*/
|
|
166
|
+
template <class Database_Ptr>
|
|
167
|
+
void connectionPool<Database_Ptr>::reserve(size_t size,
|
|
168
|
+
const connectParams& param)
|
|
169
|
+
{
|
|
170
|
+
boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
|
|
171
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
172
|
+
TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
|
|
173
|
+
#else
|
|
174
|
+
lck.lock();
|
|
175
|
+
#endif
|
|
176
|
+
m_maxConnections = (int)size;
|
|
177
|
+
for (size_t i = 0; i < size; ++i)
|
|
178
|
+
addOne(param);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** Set max connections.*/
|
|
182
|
+
template <class Database_Ptr>
|
|
183
|
+
void connectionPool<Database_Ptr>::setMaxConnections(int n)
|
|
184
|
+
{
|
|
185
|
+
boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
|
|
186
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
187
|
+
TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
|
|
188
|
+
#else
|
|
189
|
+
lck.lock();
|
|
190
|
+
#endif
|
|
191
|
+
m_maxConnections = n;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Return max connections. */
|
|
195
|
+
template <class Database_Ptr>
|
|
196
|
+
int connectionPool<Database_Ptr>::maxConnections() const
|
|
197
|
+
{
|
|
198
|
+
return m_maxConnections;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
template <class Database_Ptr> void connectionPool<Database_Ptr>::releaseOne()
|
|
202
|
+
{
|
|
203
|
+
m_busy.notify_one();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// max 5second
|
|
207
|
+
template <class Database_Ptr>
|
|
208
|
+
bool connectionPool<Database_Ptr>::reset(int waitSec)
|
|
209
|
+
{
|
|
210
|
+
boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
|
|
211
|
+
#ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
|
|
212
|
+
TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
|
|
213
|
+
#else
|
|
214
|
+
lck.lock();
|
|
215
|
+
#endif
|
|
216
|
+
bool flag = true;
|
|
217
|
+
for (int j = 0; j < waitSec * 100; j++)
|
|
218
|
+
{
|
|
219
|
+
flag = false;
|
|
220
|
+
for (size_t i = 0; i < m_dbs.size(); i++)
|
|
221
|
+
if (m_dbs[i].use_count() != 1)
|
|
222
|
+
flag = true;
|
|
223
|
+
if (!flag)
|
|
224
|
+
break;
|
|
225
|
+
Sleep(100 * MCRTOMM);
|
|
226
|
+
}
|
|
227
|
+
m_dbs.clear();
|
|
228
|
+
return flag;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
#ifdef USE_DBM_CONNECTION_POOL
|
|
232
|
+
template class connectionPool<dbmanager_ptr>;
|
|
233
|
+
#else
|
|
234
|
+
template class connectionPool<database_ptr>;
|
|
235
|
+
#endif
|
|
236
|
+
|
|
237
|
+
stdCconnectionPool cpool;
|
|
238
|
+
|
|
239
|
+
} // namespace client
|
|
240
|
+
} // namespace tdap
|
|
241
|
+
} // namespace protocol
|
|
242
|
+
} // namespace db
|
|
243
|
+
} // namespace bzs
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H
|
|
3
|
+
/*=================================================================
|
|
4
|
+
Copyright (C) 2014 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
|
+
#if HAVE_RB_THREAD_CALL_WITHOUT_GVL || HAVE_RB_THREAD_BLOCKING_REGION
|
|
22
|
+
#include <build/swig/ruby/threadBlockRegionWrapper.h>
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#include <bzs/db/protocol/tdap/client/databaseManager.h>
|
|
26
|
+
#define BOOST_THREAD_USE_LIB
|
|
27
|
+
#include <boost/thread/thread.hpp>
|
|
28
|
+
#include <boost/thread/condition.hpp>
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
namespace bzs
|
|
32
|
+
{
|
|
33
|
+
namespace db
|
|
34
|
+
{
|
|
35
|
+
namespace protocol
|
|
36
|
+
{
|
|
37
|
+
namespace tdap
|
|
38
|
+
{
|
|
39
|
+
namespace client
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
/** connection pool class
|
|
43
|
+
Hold database or databaseManager instance and delivery.
|
|
44
|
+
|
|
45
|
+
If maxConnections = 0 then not create databases automaticaly at no free
|
|
46
|
+
a database.
|
|
47
|
+
This case need call reserve() function at start up the process.\n
|
|
48
|
+
|
|
49
|
+
Otherwise, create new database automaticaly by get() function with
|
|
50
|
+
connectParams.
|
|
51
|
+
This case need call setMaxConnections() function at start up the
|
|
52
|
+
process.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
template <class Database_Ptr> class connectionPool
|
|
56
|
+
{
|
|
57
|
+
std::vector<Database_Ptr> m_dbs;
|
|
58
|
+
mutable boost::mutex m_mutex;
|
|
59
|
+
mutable boost::mutex m_mutex2;
|
|
60
|
+
mutable boost::condition m_busy;
|
|
61
|
+
int m_maxConnections;
|
|
62
|
+
Database_Ptr addOne(const connectParams& param);
|
|
63
|
+
#if (__BCPLUSPLUS__)
|
|
64
|
+
public:
|
|
65
|
+
#endif
|
|
66
|
+
DLLUNLOADCALLBACK_PTR m_regitfunc;
|
|
67
|
+
friend short __STDCALL dllUnloadCallbackFunc();
|
|
68
|
+
|
|
69
|
+
public:
|
|
70
|
+
connectionPool(int maxConnections = 0);
|
|
71
|
+
~connectionPool();
|
|
72
|
+
|
|
73
|
+
Database_Ptr get(const connectParams* param = NULL);
|
|
74
|
+
void reserve(size_t size, const connectParams& param);
|
|
75
|
+
void setMaxConnections(int n);
|
|
76
|
+
int maxConnections() const;
|
|
77
|
+
void releaseOne();
|
|
78
|
+
bool reset(int waitSec = 5);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
typedef connectionPool<database_ptr> stdDbCconnectionPool;
|
|
82
|
+
typedef connectionPool<dbmanager_ptr> stdDbmCconnectionPool;
|
|
83
|
+
|
|
84
|
+
/** stdDbmCconnectionPool is default for connetion pool.
|
|
85
|
+
pooling database and reuse tables.
|
|
86
|
+
*/
|
|
87
|
+
#ifdef USE_DBM_CONNECTION_POOL
|
|
88
|
+
typedef stdDbmCconnectionPool stdCconnectionPool;
|
|
89
|
+
#else
|
|
90
|
+
#ifdef USE_DB_CONNECTION_POOL
|
|
91
|
+
typedef stdDbCconnectionPool stdCconnectionPool;
|
|
92
|
+
#else
|
|
93
|
+
#error \
|
|
94
|
+
"Please define the USE_DBM_CONNECTION_POOL when you need a connection pool";
|
|
95
|
+
#endif
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
short __STDCALL dllUnloadCallbackFunc();
|
|
99
|
+
void releaseConnection(stdDbmCconnectionPool* pool);
|
|
100
|
+
|
|
101
|
+
extern stdCconnectionPool cpool;
|
|
102
|
+
|
|
103
|
+
} // namespace client
|
|
104
|
+
} // namespace tdap
|
|
105
|
+
} // namespace protocol
|
|
106
|
+
} // namespace db
|
|
107
|
+
} // namespace bzs
|
|
108
|
+
|
|
109
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H
|