transactd 1.2.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|