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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#ifndef
|
|
2
|
-
#define
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_TRDORMAPI_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_TDAP_CLIENT_TRDORMAPI_H
|
|
3
3
|
/*=================================================================
|
|
4
4
|
Copyright (C) 2013 BizStation Corp All rights reserved.
|
|
5
5
|
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
GNU General Public License for more details.
|
|
15
15
|
|
|
16
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
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
19
|
02111-1307, USA.
|
|
20
20
|
=================================================================*/
|
|
21
|
-
#include
|
|
22
|
-
#include
|
|
21
|
+
#include "trdboostapi.h"
|
|
22
|
+
#include "fieldNameAlias.h"
|
|
23
|
+
#include "memRecord.h"
|
|
24
|
+
#include "groupComp.h"
|
|
25
|
+
#include <boost/shared_array.hpp>
|
|
23
26
|
#include <vector>
|
|
24
|
-
#include <tstring.h>
|
|
25
|
-
#include <boost/noncopyable.hpp>
|
|
26
|
-
#include <boost/lexical_cast.hpp>
|
|
27
27
|
|
|
28
28
|
namespace bzs
|
|
29
29
|
{
|
|
@@ -36,242 +36,109 @@ namespace tdap
|
|
|
36
36
|
namespace client
|
|
37
37
|
{
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
combineType m_next;
|
|
39
|
+
/** @cond INTERNAL */
|
|
40
|
+
template <class Container>
|
|
41
|
+
typename Container::key_type resolvKeyValue(Container& m,
|
|
42
|
+
const std::_tstring& name,
|
|
43
|
+
bool noexception = false);
|
|
45
44
|
|
|
46
|
-
|
|
45
|
+
template <class Container> typename Container::iterator begin(Container& m);
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
:m_name(name),m_type(type),m_value(value),m_next(next){}
|
|
50
|
-
logic(const _TCHAR* name, const _TCHAR* type, int value, combineType next)
|
|
51
|
-
:m_name(name),m_type(type),m_next(next)
|
|
52
|
-
{
|
|
53
|
-
_TCHAR buf[50];
|
|
54
|
-
m_value = _ltot(value, buf, 10);
|
|
55
|
-
}
|
|
56
|
-
logic(const _TCHAR* name, const _TCHAR* type, __int64 value, combineType next)
|
|
57
|
-
:m_name(name),m_type(type),m_next(next)
|
|
58
|
-
{
|
|
59
|
-
_TCHAR buf[50];
|
|
60
|
-
m_value = _i64tot(value, buf, 10);
|
|
61
|
-
}
|
|
62
|
-
logic(const _TCHAR* name, const _TCHAR* type, double value, combineType next)
|
|
63
|
-
:m_name(name),m_type(type),m_next(next)
|
|
64
|
-
{
|
|
65
|
-
_TCHAR buf[50];
|
|
66
|
-
_stprintf(buf, _T("%.*f"),15, value);
|
|
67
|
-
m_value = buf;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
47
|
+
template <class Container> typename Container::iterator end(Container& m);
|
|
70
48
|
|
|
71
|
-
class
|
|
72
|
-
{
|
|
73
|
-
database* m_db;
|
|
74
|
-
database_ptr m_dbPtr;
|
|
75
|
-
std::vector<table_ptr> m_tables;
|
|
76
|
-
int findTable(const _TCHAR* name)
|
|
77
|
-
{
|
|
78
|
-
for (int i=0;i<(int)m_tables.size();++i)
|
|
79
|
-
if (_tcscmp(m_tables[i]->tableDef()->tableName(), name)==0)
|
|
80
|
-
return i;
|
|
81
|
-
return -1;
|
|
82
|
-
}
|
|
83
|
-
public:
|
|
84
|
-
databaseManager(database_ptr db):m_dbPtr(db),m_db(db.get()){};
|
|
85
|
-
databaseManager(database* db):m_db(db){};
|
|
86
|
-
table_ptr table(const _TCHAR* name)
|
|
87
|
-
{
|
|
88
|
-
int index = findTable(name);
|
|
89
|
-
if (index !=-1)
|
|
90
|
-
return m_tables[index];
|
|
91
|
-
table_ptr t = openTable(m_db, name);
|
|
92
|
-
m_tables.push_back(t);
|
|
93
|
-
return t;
|
|
94
|
-
}
|
|
95
|
-
database* db(){return m_db;}
|
|
49
|
+
template <class Container> void clear(Container& m);
|
|
96
50
|
|
|
97
|
-
|
|
51
|
+
template <class Container>
|
|
52
|
+
void push_back(Container& m, typename Container::row_type c);
|
|
53
|
+
|
|
54
|
+
template <class ROW_TYPE, class KEY_TYPE, class T>
|
|
55
|
+
void setValue(ROW_TYPE& row, KEY_TYPE key, const T& value);
|
|
56
|
+
/** @endcond */
|
|
57
|
+
|
|
58
|
+
/** @cond INTERNAL */
|
|
98
59
|
|
|
99
|
-
class
|
|
60
|
+
template <class T>
|
|
61
|
+
inline typename std::vector<T>::iterator begin(std::vector<T>& m)
|
|
100
62
|
{
|
|
101
|
-
|
|
102
|
-
|
|
63
|
+
return m.begin();
|
|
64
|
+
}
|
|
103
65
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
{
|
|
110
|
-
clearSelectFields();
|
|
111
|
-
return *this;
|
|
112
|
-
}
|
|
113
|
-
addField(name);
|
|
114
|
-
if (name1) addField(name1);
|
|
115
|
-
if (name2) addField(name2);
|
|
116
|
-
if (name3) addField(name3);
|
|
117
|
-
if (name4) addField(name4);
|
|
118
|
-
if (name5) addField(name5);
|
|
119
|
-
if (name6) addField(name6);
|
|
120
|
-
if (name7) addField(name7);
|
|
121
|
-
if (name8) addField(name8);
|
|
122
|
-
if (name9) addField(name9);
|
|
123
|
-
if (name10) addField(name10);
|
|
124
|
-
return *this;
|
|
125
|
-
}
|
|
66
|
+
template <class T>
|
|
67
|
+
inline typename std::vector<T>::iterator end(std::vector<T>& m)
|
|
68
|
+
{
|
|
69
|
+
return m.end();
|
|
70
|
+
}
|
|
126
71
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return *this;
|
|
132
|
-
}
|
|
72
|
+
template <class T> inline void push_back(std::vector<T>& m, T c)
|
|
73
|
+
{
|
|
74
|
+
return m.push_back(c);
|
|
75
|
+
}
|
|
133
76
|
|
|
134
|
-
|
|
135
|
-
query& and(const _TCHAR* name, const _TCHAR* type, T value)
|
|
136
|
-
{
|
|
137
|
-
if (m_wheres.size() == 0)
|
|
138
|
-
throw bzs::rtl::exception(STATUS_FILTERSTRING_ERROR, _T("Invalid function call."));
|
|
77
|
+
#if (_MSC_VER || (__BCPLUSPLUS__ && !defined(__clang__)))
|
|
139
78
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
79
|
+
/* Container has readBefore(table_ptr, alias) function*/
|
|
80
|
+
template <class Container>
|
|
81
|
+
inline void readBefore(Container& mdls, table_ptr tb,
|
|
82
|
+
const aliasMap_type* alias,
|
|
83
|
+
typename Container::header_type* dummy = 0)
|
|
84
|
+
{
|
|
85
|
+
mdls.readBefore(tb, alias);
|
|
86
|
+
}
|
|
143
87
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
{
|
|
147
|
-
if (m_wheres.size() == 0)
|
|
148
|
-
throw bzs::rtl::exception(STATUS_FILTERSTRING_ERROR, _T("Invalid function call."));
|
|
88
|
+
/* Container has'nt readBefore(table_ptr, alias) function*/
|
|
89
|
+
template <class Container> inline void readBefore(...){};
|
|
149
90
|
|
|
150
|
-
|
|
151
|
-
return *this;
|
|
152
|
-
}
|
|
91
|
+
#else
|
|
153
92
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
{
|
|
157
|
-
if (m_wheres.size() == 0)
|
|
158
|
-
throw bzs::rtl::exception(STATUS_FILTERSTRING_ERROR, _T("Invalid function call."));
|
|
159
|
-
|
|
160
|
-
addLogic(_T("or"), name, logic, boost::lexical_cast<std::_tstring>(value).c_str());
|
|
161
|
-
return *this;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
template <class T0, class T1 , class T2, class T3
|
|
165
|
-
,class T4, class T5 , class T6 , class T7>
|
|
166
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
|
|
167
|
-
,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
|
|
168
|
-
{
|
|
169
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
170
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
171
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
172
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv3).c_str());
|
|
173
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv4).c_str());
|
|
174
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv5).c_str());
|
|
175
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv6).c_str());
|
|
176
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv7).c_str());
|
|
177
|
-
return *this;
|
|
178
|
-
}
|
|
179
|
-
template <class T0, class T1 , class T2, class T3
|
|
180
|
-
,class T4, class T5 , class T6>
|
|
181
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
|
|
182
|
-
,const T4 kv4, const T5 kv5, const T6 kv6)
|
|
183
|
-
{
|
|
184
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
185
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
186
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
187
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv3).c_str());
|
|
188
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv4).c_str());
|
|
189
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv5).c_str());
|
|
190
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv6).c_str());
|
|
191
|
-
return *this;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
template <class T0, class T1 , class T2, class T3
|
|
195
|
-
,class T4, class T5>
|
|
196
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
|
|
197
|
-
,const T4 kv4, const T5 kv5)
|
|
198
|
-
{
|
|
199
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
200
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
201
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
202
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv3).c_str());
|
|
203
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv4).c_str());
|
|
204
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv5).c_str());
|
|
205
|
-
return *this;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
template <class T0, class T1 , class T2, class T3, class T4>
|
|
209
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
|
|
210
|
-
{
|
|
211
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
212
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
213
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
214
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv3).c_str());
|
|
215
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv4).c_str());
|
|
216
|
-
return *this;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
template <class T0, class T1 , class T2, class T3>
|
|
220
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
|
|
221
|
-
{
|
|
222
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
223
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
224
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
225
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv3).c_str());
|
|
226
|
-
return *this;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
template <class T0, class T1 , class T2>
|
|
230
|
-
query& in(const T0 kv0, const T1 kv1, const T2 kv2)
|
|
231
|
-
{
|
|
232
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
233
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv1).c_str());
|
|
234
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv2).c_str());
|
|
235
|
-
return *this;
|
|
236
|
-
}
|
|
93
|
+
template <class Container>
|
|
94
|
+
void push_back(Container& m, typename Container::item_type c);
|
|
237
95
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
96
|
+
template <class T> class has_header
|
|
97
|
+
{
|
|
98
|
+
typedef char yes;
|
|
99
|
+
typedef struct
|
|
100
|
+
{
|
|
101
|
+
char foo[2];
|
|
102
|
+
} no;
|
|
245
103
|
|
|
246
|
-
template <class
|
|
247
|
-
query& in(const T0 kv0)
|
|
248
|
-
{
|
|
249
|
-
addSeekKeyValue(boost::lexical_cast<std::_tstring>(kv0).c_str());
|
|
250
|
-
return *this;
|
|
251
|
-
}
|
|
104
|
+
template <class C> static yes test(typename C::header_type*);
|
|
252
105
|
|
|
253
|
-
|
|
106
|
+
template <class C> static no test(...);
|
|
254
107
|
|
|
108
|
+
public:
|
|
109
|
+
#ifdef SWIG
|
|
110
|
+
static const bool value;
|
|
111
|
+
#else
|
|
112
|
+
static const bool value = sizeof(test<T>(0)) == sizeof(char);
|
|
113
|
+
#endif
|
|
114
|
+
};
|
|
255
115
|
|
|
256
|
-
|
|
257
|
-
|
|
116
|
+
/* Container has readBefore(table_ptr, alias) function*/
|
|
117
|
+
template <class Container>
|
|
118
|
+
inline void
|
|
119
|
+
readBefore(Container& mdls, table_ptr tb, const aliasMap_type* alias,
|
|
120
|
+
typename boost::enable_if<has_header<Container> >::type* = 0)
|
|
258
121
|
|
|
259
|
-
|
|
260
|
-
|
|
122
|
+
{
|
|
123
|
+
mdls.readBefore(tb, alias);
|
|
124
|
+
}
|
|
261
125
|
|
|
262
|
-
|
|
263
|
-
|
|
126
|
+
/* Container has'nt readBefore(table_ptr, alias) function*/
|
|
127
|
+
template <class Container>
|
|
128
|
+
inline void
|
|
129
|
+
readBefore(Container& mdls, table_ptr tb, const aliasMap_type* alias,
|
|
130
|
+
typename boost::disable_if<has_header<Container> >::type* = 0)
|
|
131
|
+
{
|
|
132
|
+
}
|
|
133
|
+
#endif
|
|
264
134
|
|
|
265
135
|
/* Container operation handlter
|
|
266
136
|
|
|
267
137
|
*/
|
|
268
|
-
template <class MAP
|
|
269
|
-
|
|
270
|
-
, class T=MAP::mdl_typename
|
|
271
|
-
, class FDI=MAP::fdi_typename>
|
|
138
|
+
template <class MAP, class Container, class T = typename MAP::mdl_typename,
|
|
139
|
+
class FDI = typename MAP::fdi_typename>
|
|
272
140
|
class mdlsHandler
|
|
273
141
|
{
|
|
274
|
-
typedef std::vector<boost::shared_ptr<typename T> > collection_vec_type;
|
|
275
142
|
mdlsHandler();
|
|
276
143
|
|
|
277
144
|
protected:
|
|
@@ -281,29 +148,29 @@ protected:
|
|
|
281
148
|
MAP* m_map;
|
|
282
149
|
|
|
283
150
|
template <class mdls_type>
|
|
284
|
-
void addContainer(T* u, typename mdls_type::item_type* p
|
|
151
|
+
void addContainer(T* u, typename mdls_type::item_type* p)
|
|
285
152
|
{
|
|
286
|
-
mdls_type::item_type ptr(u);
|
|
153
|
+
typename mdls_type::item_type ptr(u);
|
|
287
154
|
push_back(m_mdls, ptr);
|
|
288
155
|
}
|
|
289
156
|
|
|
290
|
-
template <class mdls_type>
|
|
291
|
-
void addContainer(T* u, ...)
|
|
157
|
+
template <class mdls_type> void addContainer(T* u, ...)
|
|
292
158
|
{
|
|
293
159
|
push_back(m_mdls, boost::shared_ptr<T>(u));
|
|
294
160
|
}
|
|
295
161
|
|
|
296
|
-
|
|
297
162
|
public:
|
|
298
|
-
mdlsHandler(Container& mdls):m_mdls(mdls){}
|
|
163
|
+
mdlsHandler(Container& mdls) : m_mdls(mdls) {}
|
|
299
164
|
|
|
300
165
|
virtual ~mdlsHandler(){};
|
|
301
166
|
|
|
302
|
-
void init(int option, FDI* fdi, MAP& map
|
|
167
|
+
void init(int option, FDI* fdi, MAP& map, table_ptr tb,
|
|
168
|
+
const aliasMap_type* alias = NULL)
|
|
303
169
|
{
|
|
304
170
|
m_option = option;
|
|
305
171
|
m_fdi = fdi;
|
|
306
172
|
m_map = ↦
|
|
173
|
+
readBefore<Container>(m_mdls, tb, alias);
|
|
307
174
|
}
|
|
308
175
|
|
|
309
176
|
void operator()(const fields& fds)
|
|
@@ -312,18 +179,17 @@ public:
|
|
|
312
179
|
m_map->readMap(*u, fds, m_option);
|
|
313
180
|
addContainer<Container>(u, 0);
|
|
314
181
|
}
|
|
315
|
-
|
|
316
182
|
};
|
|
317
183
|
|
|
318
184
|
/* For sort in readEach
|
|
319
185
|
*/
|
|
320
|
-
template <class MAP, class T>
|
|
321
|
-
class compFunc
|
|
186
|
+
template <class MAP, class T> class compFunc
|
|
322
187
|
{
|
|
323
188
|
MAP& m_map;
|
|
324
189
|
int m_keynum;
|
|
190
|
+
|
|
325
191
|
public:
|
|
326
|
-
compFunc(MAP& map, int keynum):m_map(map),m_keynum(keynum){}
|
|
192
|
+
compFunc(MAP& map, int keynum) : m_map(map), m_keynum(keynum) {}
|
|
327
193
|
bool operator()(T* l, T* r) const
|
|
328
194
|
{
|
|
329
195
|
return m_map.compKeyValue(*l, *r, m_keynum);
|
|
@@ -335,9 +201,8 @@ public:
|
|
|
335
201
|
}
|
|
336
202
|
};
|
|
337
203
|
|
|
338
|
-
|
|
339
204
|
template <class T, class RET>
|
|
340
|
-
bool sortFuncBase(T&l, T& r
|
|
205
|
+
bool sortFuncBase(const T& l, const T& r, RET (T::*func1)() const)
|
|
341
206
|
{
|
|
342
207
|
RET retl = (l.*func1)();
|
|
343
208
|
RET retr = (r.*func1)();
|
|
@@ -345,51 +210,57 @@ bool sortFuncBase(T&l, T& r , RET (T::*func1)() const)
|
|
|
345
210
|
}
|
|
346
211
|
|
|
347
212
|
template <class T, class FUNC1, class FUNC2, class FUNC3>
|
|
348
|
-
bool sortFunc(T&l, T& r
|
|
213
|
+
bool sortFunc(const T& l, const T& r, FUNC1 func1, FUNC2 func2, FUNC3 func3)
|
|
349
214
|
{
|
|
350
215
|
bool v = sortFuncBase(l, r, func1);
|
|
351
216
|
if (func2)
|
|
352
217
|
{
|
|
353
|
-
if (v)
|
|
218
|
+
if (v)
|
|
219
|
+
return v;
|
|
354
220
|
v = sortFuncBase(r, l, func1);
|
|
355
|
-
if (v)
|
|
221
|
+
if (v)
|
|
222
|
+
return !v;
|
|
356
223
|
v = sortFuncBase(l, r, func2);
|
|
357
224
|
if (func3)
|
|
358
225
|
{
|
|
359
|
-
if (v)
|
|
226
|
+
if (v)
|
|
227
|
+
return v;
|
|
360
228
|
v = sortFuncBase(r, l, func2);
|
|
361
|
-
if (v)
|
|
229
|
+
if (v)
|
|
230
|
+
return !v;
|
|
362
231
|
v = sortFuncBase(l, r, func3);
|
|
363
232
|
}
|
|
364
233
|
}
|
|
365
234
|
return v;
|
|
366
235
|
}
|
|
367
236
|
|
|
368
|
-
template <class FUNC1, class FUNC2, class FUNC3>
|
|
369
|
-
class sortFunctor
|
|
237
|
+
template <class FUNC1, class FUNC2, class FUNC3> class sortFunctor
|
|
370
238
|
{
|
|
371
239
|
FUNC1 m_func1;
|
|
372
240
|
FUNC2 m_func2;
|
|
373
241
|
FUNC3 m_func3;
|
|
242
|
+
|
|
374
243
|
public:
|
|
375
244
|
sortFunctor(FUNC1 func1, FUNC2 func2, FUNC3 func3)
|
|
376
|
-
:m_func1(func1),m_func2(func2), m_func3(func3)
|
|
377
|
-
|
|
378
|
-
|
|
245
|
+
: m_func1(func1), m_func2(func2), m_func3(func3)
|
|
246
|
+
{
|
|
247
|
+
}
|
|
248
|
+
template <class T> bool operator()(const T* l, const T* r) const
|
|
379
249
|
{
|
|
380
250
|
return sortFunc(*l, *r, m_func1, m_func2, m_func2);
|
|
381
251
|
}
|
|
382
252
|
|
|
383
253
|
template <class T>
|
|
384
|
-
bool operator()(boost::shared_ptr<T>& l,
|
|
254
|
+
bool operator()(const boost::shared_ptr<T>& l,
|
|
255
|
+
const boost::shared_ptr<T>& r) const
|
|
385
256
|
{
|
|
386
|
-
bool v =
|
|
257
|
+
bool v = sortFunc(*l, *r, m_func1, m_func2, m_func2);
|
|
387
258
|
return v;
|
|
388
259
|
}
|
|
389
260
|
};
|
|
390
261
|
|
|
391
262
|
template <class Container, class FUNC1, class FUNC2, class FUNC3>
|
|
392
|
-
void sort(Container& mdls, FUNC1 func1, FUNC2 func2, FUNC3 func3
|
|
263
|
+
void sort(Container& mdls, FUNC1 func1, FUNC2 func2, FUNC3 func3)
|
|
393
264
|
{
|
|
394
265
|
sortFunctor<FUNC1, FUNC2, FUNC3> functor(func1, func2, func3);
|
|
395
266
|
std::sort(begin(mdls), end(mdls), functor);
|
|
@@ -402,266 +273,311 @@ void sort(Container& mdls, FUNC1 func1, FUNC2 func2)
|
|
|
402
273
|
std::sort(begin(mdls), end(mdls), functor);
|
|
403
274
|
}
|
|
404
275
|
|
|
405
|
-
template <class Container, class FUNC1>
|
|
406
|
-
void sort(Container& mdls, FUNC1 func1)
|
|
276
|
+
template <class Container, class FUNC1> void sort(Container& mdls, FUNC1 func1)
|
|
407
277
|
{
|
|
408
278
|
sortFunctor<FUNC1, FUNC1, FUNC1> functor(func1, NULL, NULL);
|
|
409
279
|
std::sort(begin(mdls), end(mdls), functor);
|
|
410
280
|
}
|
|
411
281
|
|
|
412
282
|
template <class T2, class T, class Container>
|
|
413
|
-
inline boost::shared_ptr<std::vector<T> > listup(Container& mdls,
|
|
283
|
+
inline boost::shared_ptr<std::vector<T> > listup(Container& mdls,
|
|
284
|
+
T (T2::*func)() const)
|
|
414
285
|
{
|
|
415
286
|
typename Container::iterator it = begin(mdls), ite = end(mdls);
|
|
416
287
|
|
|
417
|
-
|
|
418
|
-
while(it != ite)
|
|
288
|
+
boost::shared_ptr<std::vector<T> > mdlst(new std::vector<T>());
|
|
289
|
+
while (it != ite)
|
|
419
290
|
{
|
|
420
291
|
T2& mdl = *(*it);
|
|
421
292
|
T ref = (mdl.*func)();
|
|
422
293
|
mdlst->push_back(ref);
|
|
423
294
|
++it;
|
|
424
295
|
}
|
|
425
|
-
|
|
296
|
+
return mdlst;
|
|
426
297
|
}
|
|
427
298
|
|
|
428
|
-
|
|
429
|
-
class activeTable : boost::noncopyable
|
|
299
|
+
class mraResetter
|
|
430
300
|
{
|
|
431
|
-
|
|
301
|
+
table_ptr& m_tb;
|
|
302
|
+
|
|
303
|
+
public:
|
|
304
|
+
mraResetter(table_ptr& tb) : m_tb(tb) {}
|
|
305
|
+
|
|
306
|
+
~mraResetter()
|
|
307
|
+
{
|
|
308
|
+
if (m_tb->mra())
|
|
309
|
+
m_tb->mra()->setJoinType(mra_nojoin);
|
|
310
|
+
m_tb->setMra(NULL);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
/** @endcond */
|
|
315
|
+
|
|
316
|
+
template <class MAP, class T = typename MAP::mdl_typename,
|
|
317
|
+
class FDI = typename MAP::fdi_typename>
|
|
318
|
+
class activeObject : boost::noncopyable
|
|
319
|
+
{
|
|
320
|
+
void init(idatabaseManager* mgr, const _TCHAR* name)
|
|
321
|
+
{
|
|
322
|
+
m_tb = mgr->table(name);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
void init(database_ptr& db, const _TCHAR* name)
|
|
326
|
+
{
|
|
327
|
+
m_tb = openTable(db, name);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
void init(database* db, const _TCHAR* name) { m_tb = openTable(db, name); }
|
|
331
|
+
|
|
332
|
+
protected:
|
|
432
333
|
table_ptr m_tb;
|
|
433
334
|
FDI* m_fdi;
|
|
434
335
|
MAP m_map;
|
|
435
336
|
int m_option;
|
|
436
|
-
|
|
337
|
+
fdNmaeAlias m_alias;
|
|
437
338
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
void init(databaseManager& mgr, const _TCHAR* name)
|
|
441
|
-
{
|
|
442
|
-
m_tb = mgr.table(name);
|
|
443
|
-
}
|
|
339
|
+
public:
|
|
340
|
+
typedef std::vector<boost::shared_ptr<T> > collection_vec_type;
|
|
444
341
|
|
|
445
|
-
|
|
342
|
+
explicit activeObject(idatabaseManager* mgr)
|
|
343
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
446
344
|
{
|
|
447
|
-
|
|
345
|
+
init(mgr, m_map.getTableName());
|
|
346
|
+
if (table() && m_fdi)
|
|
347
|
+
initFdi(m_fdi, m_tb.get());
|
|
448
348
|
}
|
|
449
349
|
|
|
450
|
-
|
|
350
|
+
explicit activeObject(database_ptr& db)
|
|
351
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
451
352
|
{
|
|
452
|
-
|
|
353
|
+
init(db, m_map.getTableName());
|
|
354
|
+
if (table() && m_fdi)
|
|
355
|
+
initFdi(m_fdi, m_tb.get());
|
|
453
356
|
}
|
|
454
357
|
|
|
455
|
-
|
|
358
|
+
explicit activeObject(idatabaseManager* mgr, const _TCHAR* tableName)
|
|
359
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
360
|
+
{
|
|
361
|
+
init(mgr, tableName);
|
|
362
|
+
if (table() && m_fdi)
|
|
363
|
+
initFdi(m_fdi, m_tb.get());
|
|
364
|
+
}
|
|
456
365
|
|
|
457
|
-
|
|
366
|
+
/*explicit activeObject(dbmanager_ptr& mgr, const _TCHAR* tableName)
|
|
458
367
|
:m_option(0)
|
|
459
368
|
,m_fdi(createFdi(m_fdi))
|
|
460
369
|
,m_map(*m_fdi)
|
|
461
|
-
,m_useTransactd(mgr.db()->isUseTransactd())
|
|
462
370
|
{
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
371
|
+
init(mgr, tableName);
|
|
372
|
+
if (table() && m_fdi)
|
|
373
|
+
initFdi(m_fdi, m_tb.get());
|
|
466
374
|
}
|
|
375
|
+
*/
|
|
467
376
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
if (table() && m_fdi)
|
|
476
|
-
initFdi(m_fdi, m_tb.get());
|
|
477
|
-
}
|
|
377
|
+
explicit activeObject(database_ptr& db, const _TCHAR* tableName)
|
|
378
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
379
|
+
{
|
|
380
|
+
init(db, tableName);
|
|
381
|
+
if (table() && m_fdi)
|
|
382
|
+
initFdi(m_fdi, m_tb.get());
|
|
383
|
+
}
|
|
478
384
|
|
|
479
|
-
|
|
385
|
+
explicit activeObject(database* db, const _TCHAR* tableName)
|
|
386
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
387
|
+
{
|
|
388
|
+
init(db, tableName);
|
|
389
|
+
if (table() && m_fdi)
|
|
390
|
+
initFdi(m_fdi, m_tb.get());
|
|
391
|
+
}
|
|
480
392
|
|
|
481
|
-
|
|
482
|
-
inline void abortBulkInsert(){m_tb->abortBulkInsert();}
|
|
483
|
-
inline ushort_td commitBulkInsert() {m_tb->commitBulkInsert();}
|
|
393
|
+
~activeObject() { destroyFdi(m_fdi); }
|
|
484
394
|
|
|
485
|
-
|
|
395
|
+
activeObject& index(int v)
|
|
486
396
|
{
|
|
487
397
|
m_tb->clearBuffer();
|
|
488
398
|
m_tb->setKeyNum(v);
|
|
489
399
|
return *this;
|
|
490
400
|
}
|
|
491
401
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
402
|
+
/** @cond INTERNAL */
|
|
403
|
+
|
|
404
|
+
template <class T0> activeObject& keyValue(const T0 kv0)
|
|
405
|
+
{
|
|
495
406
|
keyValueSetter<T0>::set(m_tb, m_tb->keyNum(), kv0);
|
|
496
407
|
return *this;
|
|
497
|
-
|
|
408
|
+
}
|
|
498
409
|
|
|
499
410
|
template <class T0, class T1>
|
|
500
|
-
|
|
501
|
-
|
|
411
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1)
|
|
412
|
+
{
|
|
502
413
|
keyValueSetter<T0, T1>::set(m_tb, m_tb->keyNum(), kv0, kv1);
|
|
503
414
|
return *this;
|
|
504
|
-
|
|
415
|
+
}
|
|
505
416
|
|
|
506
|
-
template <class T0, class T1
|
|
507
|
-
|
|
508
|
-
|
|
417
|
+
template <class T0, class T1, class T2>
|
|
418
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2)
|
|
419
|
+
{
|
|
509
420
|
keyValueSetter<T0, T1, T2>::set(m_tb, m_tb->keyNum(), kv0, kv1, kv2);
|
|
510
421
|
return *this;
|
|
511
|
-
|
|
422
|
+
}
|
|
512
423
|
|
|
513
|
-
template <class T0, class T1
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
424
|
+
template <class T0, class T1, class T2, class T3>
|
|
425
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2,
|
|
426
|
+
const T3 kv3)
|
|
427
|
+
{
|
|
428
|
+
keyValueSetter<T0, T1, T2, T3>::set(m_tb, m_tb->keyNum(), kv0, kv1, kv2,
|
|
429
|
+
kv3);
|
|
517
430
|
return *this;
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
template <class T0, class T1
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
keyValueSetter<T0, T1, T2, T3, T4
|
|
525
|
-
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
template <class T0, class T1, class T2, class T3, class T4>
|
|
434
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2,
|
|
435
|
+
const T3 kv3, const T4 kv4)
|
|
436
|
+
{
|
|
437
|
+
keyValueSetter<T0, T1, T2, T3, T4>::set(m_tb, m_tb->keyNum(), kv0, kv1,
|
|
438
|
+
kv2, kv3, kv4);
|
|
526
439
|
return *this;
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
template <class T0, class T1
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
keyValueSetter<T0, T1, T2, T3, T4, T5
|
|
534
|
-
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
template <class T0, class T1, class T2, class T3, class T4, class T5>
|
|
443
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2,
|
|
444
|
+
const T3 kv3, const T4 kv4, const T5 kv5)
|
|
445
|
+
{
|
|
446
|
+
keyValueSetter<T0, T1, T2, T3, T4, T5>::set(m_tb, m_tb->keyNum(), kv0,
|
|
447
|
+
kv1, kv2, kv3, kv4, kv5);
|
|
535
448
|
return *this;
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
template <class T0, class T1
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
template <class T0, class T1, class T2, class T3, class T4, class T5,
|
|
452
|
+
class T6>
|
|
453
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2,
|
|
454
|
+
const T3 kv3, const T4 kv4, const T5 kv5,
|
|
455
|
+
const T6 kv6)
|
|
456
|
+
{
|
|
457
|
+
keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(
|
|
458
|
+
m_tb, m_tb->keyNum(), kv0, kv1, kv2, kv3, kv4, kv5, kv6);
|
|
544
459
|
return *this;
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/** @endcond */
|
|
463
|
+
|
|
464
|
+
template <class T0, class T1, class T2, class T3, class T4, class T5,
|
|
465
|
+
class T6, class T7>
|
|
466
|
+
activeObject& keyValue(const T0 kv0, const T1 kv1, const T2 kv2,
|
|
467
|
+
const T3 kv3, const T4 kv4, const T5 kv5,
|
|
468
|
+
const T6 kv6, const T7 kv7)
|
|
469
|
+
{
|
|
470
|
+
keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
|
|
471
|
+
m_tb, m_tb->keyNum(), kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
|
|
554
472
|
return *this;
|
|
555
|
-
|
|
473
|
+
}
|
|
556
474
|
|
|
557
|
-
inline table_ptr table() const {return m_tb;};
|
|
475
|
+
inline table_ptr table() const { return m_tb; };
|
|
558
476
|
|
|
559
|
-
|
|
477
|
+
activeObject& option(int v)
|
|
560
478
|
{
|
|
561
479
|
m_option = v;
|
|
562
480
|
return *this;
|
|
563
481
|
}
|
|
564
482
|
|
|
565
483
|
template <class Any_Map_type>
|
|
566
|
-
|
|
484
|
+
activeObject& readMap(Any_Map_type& map, queryBase& q)
|
|
567
485
|
{
|
|
568
|
-
|
|
486
|
+
mraResetter mras(m_tb);
|
|
487
|
+
m_alias.reverseAliasNamesQuery(q);
|
|
569
488
|
m_tb->setQuery(&q);
|
|
570
489
|
if (m_tb->stat())
|
|
571
490
|
nstable::throwError(_T("Query is inaccurate"), &(*m_tb));
|
|
572
491
|
|
|
492
|
+
map.init(m_option, m_fdi, m_map, m_tb, &m_alias);
|
|
573
493
|
m_tb->find(q.getDirection());
|
|
574
494
|
if (q.getDirection() == table::findForword)
|
|
575
495
|
{
|
|
576
496
|
findIterator itsf(*m_tb);
|
|
577
497
|
for_each(itsf, map);
|
|
578
|
-
}
|
|
498
|
+
}
|
|
499
|
+
else
|
|
579
500
|
{
|
|
580
501
|
findRvIterator itsf(*m_tb);
|
|
581
502
|
for_each(itsf, map);
|
|
582
503
|
}
|
|
504
|
+
return *this;
|
|
583
505
|
}
|
|
584
506
|
|
|
585
|
-
|
|
586
507
|
template <class Any_Map_type>
|
|
587
|
-
|
|
508
|
+
activeObject& readMap(Any_Map_type& map, queryBase& q, validationFunc func)
|
|
588
509
|
{
|
|
589
|
-
|
|
510
|
+
mraResetter mras(m_tb);
|
|
511
|
+
m_alias.reverseAliasNamesQuery(q);
|
|
512
|
+
|
|
590
513
|
m_tb->setQuery(&q);
|
|
591
514
|
if (m_tb->stat())
|
|
592
515
|
nstable::throwError(_T("Query is inaccurate"), &(*m_tb));
|
|
516
|
+
map.init(m_option, m_fdi, m_map, m_tb, &m_alias);
|
|
593
517
|
m_tb->find(q.getDirection());
|
|
594
518
|
if (q.getDirection() == table::findForword)
|
|
595
519
|
{
|
|
596
520
|
findIterator itsf(*m_tb);
|
|
597
521
|
filterdFindIterator it(itsf, func);
|
|
598
522
|
for_each(it, map);
|
|
599
|
-
}
|
|
523
|
+
}
|
|
524
|
+
else
|
|
600
525
|
{
|
|
601
526
|
findRvIterator itsf(*m_tb);
|
|
602
527
|
filterdFindRvIterator it(itsf, func);
|
|
603
528
|
for_each(it, map);
|
|
604
529
|
}
|
|
530
|
+
return *this;
|
|
605
531
|
}
|
|
606
532
|
|
|
607
|
-
|
|
533
|
+
activeObject& read(collection_vec_type& mdls, queryBase& q,
|
|
534
|
+
validationFunc func)
|
|
608
535
|
{
|
|
609
536
|
mdlsHandler<MAP, collection_vec_type> map(mdls);
|
|
610
|
-
|
|
537
|
+
return readMap(map, q, func);
|
|
611
538
|
}
|
|
612
539
|
|
|
613
|
-
|
|
540
|
+
activeObject& read(collection_vec_type& mdls, queryBase& q)
|
|
614
541
|
{
|
|
615
542
|
mdlsHandler<MAP, collection_vec_type> map(mdls);
|
|
616
|
-
|
|
543
|
+
return readMap(map, q);
|
|
617
544
|
}
|
|
618
545
|
|
|
619
|
-
template <class Container>
|
|
620
|
-
void read(Container& mdls, queryBase& q)
|
|
546
|
+
template <class Container> activeObject& read(Container& mdls, queryBase& q)
|
|
621
547
|
{
|
|
622
548
|
typename MAP::collection_orm_typename map(mdls);
|
|
623
|
-
|
|
549
|
+
return readMap(map, q);
|
|
624
550
|
}
|
|
625
551
|
|
|
626
552
|
template <class Container>
|
|
627
|
-
|
|
553
|
+
activeObject& read(Container& mdls, queryBase& q, validationFunc func)
|
|
628
554
|
{
|
|
629
555
|
typename MAP::collection_orm_typename map(mdls);
|
|
630
|
-
|
|
556
|
+
return readMap(map, q, func);
|
|
631
557
|
}
|
|
632
558
|
|
|
633
|
-
void read(
|
|
559
|
+
template <class T2> void read(T2& mdl, bool setKeyValueFromObj = true)
|
|
634
560
|
{
|
|
635
561
|
fields fds(m_tb);
|
|
636
562
|
if (setKeyValueFromObj)
|
|
637
563
|
m_map.setKeyValues(mdl, fds, m_tb->keyNum());
|
|
638
564
|
indexIterator it = readIndex(m_tb, eSeekEqual);
|
|
639
565
|
if (m_tb->stat() != 0)
|
|
640
|
-
nstable::throwError(_T("
|
|
566
|
+
nstable::throwError(_T("activeObject read"), &(*m_tb));
|
|
641
567
|
m_map.readMap(mdl, fds, m_option);
|
|
642
568
|
}
|
|
643
569
|
|
|
644
|
-
void update(
|
|
570
|
+
template <class T2> void update(T2& mdl, bool setKeyValueFromObj = true)
|
|
645
571
|
{
|
|
646
572
|
fields fds(m_tb);
|
|
647
573
|
if (setKeyValueFromObj)
|
|
648
574
|
m_map.setKeyValues(mdl, fds, m_tb->keyNum());
|
|
649
575
|
indexIterator it = readIndex(m_tb, eSeekEqual);
|
|
650
576
|
if (m_tb->stat() != 0)
|
|
651
|
-
nstable::throwError(_T("
|
|
577
|
+
nstable::throwError(_T("activeObject update"), &(*m_tb));
|
|
652
578
|
|
|
653
579
|
m_map.writeMap(mdl, fds, m_option);
|
|
654
580
|
updateRecord(it);
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
template <class Container>
|
|
659
|
-
void update(Container& mdls)
|
|
660
|
-
{
|
|
661
|
-
typename Container::iterator it = begin(mdls),ite = end(mdls);
|
|
662
|
-
while (it != ite)
|
|
663
|
-
update(*it);
|
|
664
|
-
|
|
665
581
|
}
|
|
666
582
|
|
|
667
583
|
// No need object
|
|
@@ -669,27 +585,22 @@ public:
|
|
|
669
585
|
{
|
|
670
586
|
readIndex(m_tb, eSeekEqual);
|
|
671
587
|
if (m_tb->stat() != 0)
|
|
672
|
-
nstable::throwError(_T("
|
|
588
|
+
nstable::throwError(_T("activeObject delete"), &(*m_tb));
|
|
673
589
|
m_tb->del();
|
|
590
|
+
if (m_tb->stat() != 0)
|
|
591
|
+
nstable::throwError(_T("activeObject delete"), &(*m_tb));
|
|
674
592
|
}
|
|
675
593
|
|
|
676
|
-
//Recieve delete record by mdl
|
|
677
|
-
void del(
|
|
594
|
+
// Recieve delete record by mdl
|
|
595
|
+
template <class T2> void del(T2& mdl, bool setKeyValueFromObj = true)
|
|
678
596
|
{
|
|
679
597
|
read(mdl, setKeyValueFromObj);
|
|
680
598
|
m_tb->del();
|
|
599
|
+
if (m_tb->stat() != 0)
|
|
600
|
+
nstable::throwError(_T("activeObject delete"), &(*m_tb));
|
|
681
601
|
}
|
|
682
602
|
|
|
683
|
-
template <class
|
|
684
|
-
void del(Container& mdls)
|
|
685
|
-
{
|
|
686
|
-
typename Container::iterator it = begin(mdls),ite = end(mdls);
|
|
687
|
-
while (it != ite)
|
|
688
|
-
del(*it);
|
|
689
|
-
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
void insert(T& mdl)
|
|
603
|
+
template <class T2> void insert(T2& mdl)
|
|
693
604
|
{
|
|
694
605
|
fields fds(m_tb);
|
|
695
606
|
m_map.writeMap(mdl, fds, m_option);
|
|
@@ -697,16 +608,7 @@ public:
|
|
|
697
608
|
m_map.readAuntoincValue(mdl, fds, m_option);
|
|
698
609
|
}
|
|
699
610
|
|
|
700
|
-
template <class
|
|
701
|
-
void insert(Container& mdls)
|
|
702
|
-
{
|
|
703
|
-
typename Container::iterator it = begin(mdls),ite = end(mdls);
|
|
704
|
-
while (it != ite)
|
|
705
|
-
insert(*it);
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
void save(T& mdl, bool setKeyValueFromObj=true)
|
|
611
|
+
template <class T2> void save(T2& mdl, bool setKeyValueFromObj = true)
|
|
710
612
|
{
|
|
711
613
|
fields fds(m_tb);
|
|
712
614
|
if (setKeyValueFromObj)
|
|
@@ -721,31 +623,56 @@ public:
|
|
|
721
623
|
}
|
|
722
624
|
}
|
|
723
625
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
626
|
+
#ifdef USE_CONTAINER_CUD // default not support
|
|
627
|
+
|
|
628
|
+
template <class Container> void update(Container& mdls)
|
|
629
|
+
{
|
|
630
|
+
typename Container::iterator it = begin(mdls), ite = end(mdls);
|
|
631
|
+
while (it != ite)
|
|
632
|
+
update(*it);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
template <class Container> void del(Container& mdls)
|
|
636
|
+
{
|
|
637
|
+
typename Container::iterator it = begin(mdls), ite = end(mdls);
|
|
638
|
+
while (it != ite)
|
|
639
|
+
del(*it);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
template <class Container> void insert(Container& mdls)
|
|
643
|
+
{
|
|
644
|
+
typename Container::iterator it = begin(mdls), ite = end(mdls);
|
|
645
|
+
while (it != ite)
|
|
646
|
+
insert(*it);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
#endif
|
|
650
|
+
|
|
727
651
|
template <class Container>
|
|
728
|
-
void readEach(Container& mdls, queryBase& q, bool sorted=false,
|
|
652
|
+
void readEach(Container& mdls, queryBase& q, bool sorted = false,
|
|
653
|
+
bzs::rtl::exception * e = NULL)
|
|
729
654
|
{
|
|
730
|
-
|
|
655
|
+
mraResetter mras(m_tb);
|
|
656
|
+
m_alias.reverseAliasNamesQuery(q);
|
|
731
657
|
fields fds(m_tb);
|
|
732
|
-
typename Container::iterator it = begin(mdls),itb = begin(mdls),
|
|
658
|
+
typename Container::iterator it = begin(mdls), itb = begin(mdls),
|
|
659
|
+
ite = end(mdls);
|
|
733
660
|
it = itb = begin(mdls);
|
|
734
661
|
T& mdlb = *(*it);
|
|
735
|
-
if (!
|
|
736
|
-
nstable::throwError(_T("
|
|
737
|
-
|
|
662
|
+
if (!m_tb->isUseTransactd())
|
|
663
|
+
nstable::throwError(_T("activeObject P.SQL can not use this"),
|
|
664
|
+
(short_td)0);
|
|
665
|
+
while (it != ite)
|
|
738
666
|
{
|
|
739
|
-
//if mdl has same key value, to be once read access to server
|
|
667
|
+
// if mdl has same key value, to be once read access to server
|
|
740
668
|
T& mdl = *(*it);
|
|
741
|
-
if ((it == itb)
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|| (m_map.compKeyValue(mdlb, mdl, m_tb->keyNum())==true))
|
|
669
|
+
if ((it == itb) || !sorted ||
|
|
670
|
+
(m_map.compKeyValue(mdl, mdlb, m_tb->keyNum()) == true) ||
|
|
671
|
+
(m_map.compKeyValue(mdlb, mdl, m_tb->keyNum()) == true))
|
|
745
672
|
{
|
|
746
673
|
m_map.setKeyValues(mdl, fds, m_tb->keyNum());
|
|
747
674
|
keydef* kd = &m_tb->tableDef()->keyDefs[m_tb->keyNum()];
|
|
748
|
-
for (int i=0;i<kd->segmentCount
|
|
675
|
+
for (int i = 0; i < kd->segmentCount; ++i)
|
|
749
676
|
q.addSeekKeyValue(fds[kd->segments[i].fieldNum].c_str());
|
|
750
677
|
}
|
|
751
678
|
mdlb = mdl;
|
|
@@ -753,20 +680,20 @@ public:
|
|
|
753
680
|
}
|
|
754
681
|
m_tb->setQuery(&q);
|
|
755
682
|
if (m_tb->stat() != 0)
|
|
756
|
-
nstable::throwError(_T("
|
|
683
|
+
nstable::throwError(_T("activeObject readEach Query"), &(*m_tb));
|
|
757
684
|
m_tb->find();
|
|
758
|
-
|
|
759
|
-
//�s���ƂɃG���[���ǂ����킩���������悢�B
|
|
685
|
+
|
|
760
686
|
it = itb = begin(mdls);
|
|
761
|
-
while(it != ite)
|
|
687
|
+
while (it != ite)
|
|
762
688
|
{
|
|
763
|
-
if (m_tb->stat() !=
|
|
764
|
-
|
|
689
|
+
if ((m_tb->stat() != STATUS_SUCCESS) &&
|
|
690
|
+
(m_tb->stat() != STATUS_NOT_FOUND_TI))
|
|
691
|
+
nstable::throwError(_T("activeObject readEach"), &(*m_tb));
|
|
765
692
|
T& mdl = *(*it);
|
|
766
693
|
if ((it != itb) &&
|
|
767
|
-
(!sorted
|
|
768
|
-
|
|
769
|
-
|
|
694
|
+
(!sorted ||
|
|
695
|
+
(m_map.compKeyValue(mdl, mdlb, m_tb->keyNum()) == true) ||
|
|
696
|
+
(m_map.compKeyValue(mdlb, mdl, m_tb->keyNum()) == true)))
|
|
770
697
|
{
|
|
771
698
|
m_tb->findNext();
|
|
772
699
|
if (m_tb->stat() != 0)
|
|
@@ -774,11 +701,11 @@ public:
|
|
|
774
701
|
_TCHAR buf[8192];
|
|
775
702
|
m_tb->keyValueDescription(buf, 8192);
|
|
776
703
|
if (e)
|
|
777
|
-
*e << bzs::rtl::errnoCode(m_tb->stat())
|
|
704
|
+
*e << bzs::rtl::errnoCode(m_tb->stat())
|
|
705
|
+
<< bzs::rtl::errMessage(buf);
|
|
778
706
|
else
|
|
779
707
|
THROW_BZS_ERROR_WITH_CODEMSG(m_tb->stat(), buf);
|
|
780
708
|
}
|
|
781
|
-
|
|
782
709
|
}
|
|
783
710
|
if (m_tb->stat() == 0)
|
|
784
711
|
m_map.readMap(mdl, fds, m_option);
|
|
@@ -787,10 +714,8 @@ public:
|
|
|
787
714
|
}
|
|
788
715
|
}
|
|
789
716
|
|
|
790
|
-
/** Join�����̏��������O�\�[�g���č����ɍs���܂��B
|
|
791
|
-
*/
|
|
792
717
|
template <class BaseContainer, class T2>
|
|
793
|
-
void readEach(BaseContainer& mdls, T* (T2::*func)()const, queryBase& q)
|
|
718
|
+
void readEach(BaseContainer& mdls, T* (T2::*func)() const, queryBase& q)
|
|
794
719
|
{
|
|
795
720
|
boost::shared_ptr<std::vector<T*> > refList(listup(mdls, func));
|
|
796
721
|
compFunc<MAP, T> comp(m_map, m_tb->keyNum());
|
|
@@ -799,7 +724,8 @@ public:
|
|
|
799
724
|
}
|
|
800
725
|
|
|
801
726
|
template <class BaseContainer, class T2>
|
|
802
|
-
void readEach(BaseContainer& mdls, T* (T2::*func)()const, queryBase& q,
|
|
727
|
+
void readEach(BaseContainer& mdls, T* (T2::*func)() const, queryBase& q,
|
|
728
|
+
bzs::rtl::exception& e)
|
|
803
729
|
{
|
|
804
730
|
boost::shared_ptr<std::vector<T*> > refList(listup(mdls, func));
|
|
805
731
|
compFunc<MAP, T> comp(m_map, m_tb->keyNum());
|
|
@@ -809,19 +735,21 @@ public:
|
|
|
809
735
|
|
|
810
736
|
/* No use field select */
|
|
811
737
|
template <class Container>
|
|
812
|
-
void readEach(Container& mdls, bool sorted=false,
|
|
738
|
+
void readEach(Container& mdls, bool sorted = false,
|
|
739
|
+
bzs::rtl::exception * e = NULL)
|
|
813
740
|
{
|
|
814
741
|
fields fds(m_tb);
|
|
815
|
-
|
|
742
|
+
mraResetter mras(m_tb);
|
|
743
|
+
typename Container::iterator it = begin(mdls), itb = begin(mdls),
|
|
744
|
+
ite = end(mdls);
|
|
816
745
|
it = itb = begin(mdls);
|
|
817
746
|
T& mdlb = *(*it);
|
|
818
|
-
while(it != ite)
|
|
747
|
+
while (it != ite)
|
|
819
748
|
{
|
|
820
749
|
T& mdl = *(*it);
|
|
821
|
-
if ((it == itb)
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|| (m_map.compKeyValue(mdlb, mdl, m_tb->keyNum())==true))
|
|
750
|
+
if ((it == itb) || !sorted ||
|
|
751
|
+
(m_map.compKeyValue(mdl, mdlb, m_tb->keyNum()) == true) ||
|
|
752
|
+
(m_map.compKeyValue(mdlb, mdl, m_tb->keyNum()) == true))
|
|
825
753
|
{
|
|
826
754
|
m_map.setKeyValues(mdl, fds, m_tb->keyNum());
|
|
827
755
|
readIndex(m_tb, eSeekEqual);
|
|
@@ -830,7 +758,8 @@ public:
|
|
|
830
758
|
_TCHAR buf[8192];
|
|
831
759
|
m_tb->keyValueDescription(buf, 8192);
|
|
832
760
|
if (e)
|
|
833
|
-
*e << bzs::rtl::errnoCode(m_tb->stat())
|
|
761
|
+
*e << bzs::rtl::errnoCode(m_tb->stat())
|
|
762
|
+
<< bzs::rtl::errMessage(buf);
|
|
834
763
|
else
|
|
835
764
|
THROW_BZS_ERROR_WITH_CODEMSG(m_tb->stat(), buf);
|
|
836
765
|
}
|
|
@@ -844,7 +773,7 @@ public:
|
|
|
844
773
|
|
|
845
774
|
/* No use field select */
|
|
846
775
|
template <class BaseContainer, class T2>
|
|
847
|
-
void readEach(BaseContainer& mdls, T* (T2::*func)()const)
|
|
776
|
+
void readEach(BaseContainer& mdls, T* (T2::*func)() const)
|
|
848
777
|
{
|
|
849
778
|
boost::shared_ptr<std::vector<T*> > refList(listup(mdls, func));
|
|
850
779
|
compFunc<MAP, T> comp(m_map, m_tb->keyNum());
|
|
@@ -853,20 +782,32 @@ public:
|
|
|
853
782
|
}
|
|
854
783
|
|
|
855
784
|
template <class BaseContainer, class T2>
|
|
856
|
-
void readEach(BaseContainer& mdls, T* (T2::*func)()const
|
|
785
|
+
void readEach(BaseContainer& mdls, T* (T2::*func)() const,
|
|
786
|
+
bzs::rtl::exception& e)
|
|
857
787
|
{
|
|
858
788
|
boost::shared_ptr<std::vector<T*> > refList(listup(mdls, func));
|
|
859
789
|
compFunc<MAP, T> comp(m_map, m_tb->keyNum());
|
|
860
790
|
std::sort(refList->begin(), refList->end(), comp);
|
|
861
791
|
readEach(*refList, true, &e);
|
|
862
792
|
}
|
|
863
|
-
};
|
|
864
793
|
|
|
794
|
+
inline activeObject& alias(const _TCHAR* src, const _TCHAR* dst)
|
|
795
|
+
{
|
|
796
|
+
m_alias.set(src, dst);
|
|
797
|
+
return *this;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
inline activeObject& resetAlias()
|
|
801
|
+
{
|
|
802
|
+
m_alias.clear();
|
|
803
|
+
return *this;
|
|
804
|
+
}
|
|
805
|
+
};
|
|
865
806
|
|
|
866
|
-
}// namespace client
|
|
867
|
-
}// namespace tdap
|
|
868
|
-
}// namespace protocol
|
|
869
|
-
}// namespace db
|
|
870
|
-
}// namespace bzs
|
|
807
|
+
} // namespace client
|
|
808
|
+
} // namespace tdap
|
|
809
|
+
} // namespace protocol
|
|
810
|
+
} // namespace db
|
|
811
|
+
} // namespace bzs
|
|
871
812
|
|
|
872
|
-
#endif//
|
|
813
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_TRDORMAPI_H
|