transactd 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +46 -67
- data/BUILD_WIN-JA +106 -63
- data/CMakeLists.txt +40 -15
- data/README +219 -75
- data/README-JA +207 -76
- data/README_ORMSRCGEN +118 -0
- data/README_ORMSRCGEN-JA +115 -0
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +18 -14
- data/build/common/create_symlink.cmake.in +25 -0
- data/build/common/get_boost_libs.cmake +23 -23
- data/build/common/options.cmake +0 -66
- data/build/common/smart_install.cmake +3 -3
- data/build/common/transactd.rc.in +15 -5
- data/build/common/transactd_cl_common.cmake +37 -18
- data/build/common/transactd_cl_output.cmake +55 -13
- data/build/common/transactd_common.cmake +108 -31
- data/build/swig/php/generate.cmake.in +15 -17
- data/build/swig/php/generate.cmd.in +15 -9
- data/build/swig/php/php.swg +124 -82
- data/build/swig/php/transactd.no_yield.php +4494 -0
- data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
- data/build/swig/php/transactd.no_yield.php.patch +685 -0
- data/build/swig/php/transactd.yield.php +4461 -0
- data/build/swig/php/transactd.yield.php.git.patch +652 -0
- data/build/swig/php/transactd.yield.php.patch +652 -0
- data/build/swig/referencecounter.h +79 -0
- data/build/swig/ruby/ruby.swg +226 -76
- data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
- data/build/swig/ruby/without_gvl.swg +87 -0
- data/build/swig/tdcl.i +659 -170
- data/build/swig/validatablepointer.h +91 -0
- data/build/tdclc/CMakeLists.txt +49 -34
- data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +84 -20
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
- data/build/tdclrb/CMakeLists.txt +84 -66
- data/build/tdclrb/bldgem/extconf.rb +28 -3
- data/build/tdclrb/gem/helper.rb +11 -1
- data/build/tdclrb/gem_output.cmake +20 -16
- data/index_ja.html +15 -0
- data/source/bzs/db/IBlobBuffer.h +15 -17
- data/source/bzs/db/blobBuffer.h +186 -140
- data/source/bzs/db/blobStructs.h +37 -37
- data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
- data/source/bzs/db/engine/mysql/bookmark.h +150 -147
- data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
- data/source/bzs/db/engine/mysql/database.h +608 -370
- data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
- data/source/bzs/db/engine/mysql/dbManager.h +115 -104
- data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
- data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
- data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
- data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
- data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
- data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
- data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
- data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
- data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
- data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
- data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
- data/source/bzs/db/protocol/tdap/client/client.h +361 -320
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
- data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
- data/source/bzs/db/protocol/tdap/client/database.h +141 -118
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
- data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
- data/source/bzs/db/protocol/tdap/client/export.h +35 -0
- data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
- data/source/bzs/db/protocol/tdap/client/field.h +393 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
- data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
- data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
- data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
- data/source/bzs/db/protocol/tdap/client/request.h +227 -170
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
- data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
- data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
- data/source/bzs/db/protocol/tdap/client/table.h +413 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
- data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
- data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
- data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
- data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
- data/source/bzs/db/transactd/appBuilderImple.h +21 -20
- data/source/bzs/db/transactd/appModule.cpp +350 -98
- data/source/bzs/db/transactd/appModule.h +31 -37
- data/source/bzs/db/transactd/connManager.cpp +138 -135
- data/source/bzs/db/transactd/connManager.h +28 -21
- data/source/bzs/db/transactd/connectionRecord.h +39 -39
- data/source/bzs/db/transactd/transactd.cpp +217 -203
- data/source/bzs/env/boost_bcb_link.h +131 -0
- data/source/bzs/env/compiler.h +136 -79
- data/source/bzs/env/crosscompile.cpp +57 -57
- data/source/bzs/env/crosscompile.h +130 -115
- data/source/bzs/env/fileopen.h +7 -8
- data/source/bzs/env/mbcswchrLinux.cpp +4 -9
- data/source/bzs/env/mbcswchrLinux.h +37 -34
- data/source/bzs/env/tcharMinGW.h +59 -0
- data/source/bzs/env/tstring.h +90 -95
- data/source/bzs/example/changeSchema.cpp +22 -23
- data/source/bzs/example/changeSchema_c.cpp +22 -24
- data/source/bzs/example/connection_pool_c.cpp +49 -104
- data/source/bzs/example/createDatabase.cpp +40 -47
- data/source/bzs/example/createDatabase_c.cpp +38 -43
- data/source/bzs/example/deleteRecords.cpp +10 -15
- data/source/bzs/example/deleteRecords_c.cpp +10 -14
- data/source/bzs/example/dropDatabase.cpp +3 -9
- data/source/bzs/example/dropDatabase_c.cpp +5 -6
- data/source/bzs/example/insertRecords.cpp +37 -29
- data/source/bzs/example/insertRecords_c.cpp +19 -25
- data/source/bzs/example/ormap_c.cpp +621 -0
- data/source/bzs/example/queryData.cpp +371 -0
- data/source/bzs/example/queryData.h +16 -0
- data/source/bzs/example/query_c.cpp +109 -0
- data/source/bzs/example/readRecords.cpp +27 -27
- data/source/bzs/example/readRecords_c.cpp +25 -23
- data/source/bzs/example/updateRecords.cpp +16 -21
- data/source/bzs/example/updateRecords_c.cpp +8 -12
- data/source/bzs/example/update_with_transaction.cpp +21 -24
- data/source/bzs/example/update_with_transaction_c.cpp +12 -15
- data/source/bzs/example/useORMRecord.cpp +177 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
- data/source/bzs/netsvc/client/tcpClient.h +541 -489
- data/source/bzs/netsvc/server/IAppModule.h +119 -32
- data/source/bzs/netsvc/server/iserver.h +21 -23
- data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
- data/source/bzs/netsvc/server/serverCpt.h +41 -43
- data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
- data/source/bzs/netsvc/server/serverPipe.h +44 -45
- data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
- data/source/bzs/netsvc/server/serverTpool.h +38 -43
- data/source/bzs/rtl/benchmark.cpp +91 -31
- data/source/bzs/rtl/benchmark.h +76 -22
- data/source/bzs/rtl/datetime.cpp +231 -233
- data/source/bzs/rtl/datetime.h +16 -16
- data/source/bzs/rtl/debuglog.cpp +48 -51
- data/source/bzs/rtl/debuglog.h +55 -44
- data/source/bzs/rtl/exception.h +55 -48
- data/source/bzs/rtl/stl_uty.cpp +27 -28
- data/source/bzs/rtl/stl_uty.h +28 -29
- data/source/bzs/rtl/stringBuffers.cpp +8 -6
- data/source/bzs/rtl/stringBuffers.h +16 -9
- data/source/bzs/rtl/strtrim.cpp +90 -91
- data/source/bzs/rtl/strtrim.h +14 -16
- data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
- data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
- data/source/bzs/test/tdclphp/bench.php +357 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
- data/source/bzs/test/tdclrb/prepare.rb +15 -12
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
- data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
- data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
- data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
- data/source/bzs/test/transactdBench/workerBase.h +88 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
- data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
- data/source/global/ormsrcgen/confParam.h +80 -0
- data/source/global/ormsrcgen/fieldName.cpp +77 -0
- data/source/global/ormsrcgen/fieldName.h +43 -0
- data/source/global/ormsrcgen/main.cpp +196 -0
- data/source/global/ormsrcgen/srcgen.cpp +763 -0
- data/source/global/ormsrcgen/srcgen.h +72 -0
- data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
- data/source/global/ormsrcgen/template/template.cnf +38 -0
- data/source/global/querystmts/querystmts.cpp +237 -0
- data/source/global/tdclatl/ConnectParams.cpp +77 -0
- data/source/global/tdclatl/ConnectParams.h +70 -0
- data/source/global/tdclatl/Database.cpp +132 -128
- data/source/global/tdclatl/Database.h +60 -49
- data/source/global/tdclatl/DbDef.cpp +68 -64
- data/source/global/tdclatl/DbDef.h +36 -36
- data/source/global/tdclatl/Field.cpp +12 -17
- data/source/global/tdclatl/Field.h +15 -12
- data/source/global/tdclatl/FieldDef.cpp +75 -36
- data/source/global/tdclatl/FieldDef.h +38 -19
- data/source/global/tdclatl/FieldDefs.cpp +74 -0
- data/source/global/tdclatl/FieldDefs.h +56 -0
- data/source/global/tdclatl/FieldNames.cpp +99 -0
- data/source/global/tdclatl/FieldNames.h +66 -0
- data/source/global/tdclatl/Flags.cpp +75 -37
- data/source/global/tdclatl/Flags.h +13 -12
- data/source/global/tdclatl/GroupQuery.cpp +119 -0
- data/source/global/tdclatl/GroupQuery.h +65 -0
- data/source/global/tdclatl/KeyDef.cpp +15 -14
- data/source/global/tdclatl/KeyDef.h +20 -17
- data/source/global/tdclatl/KeySegment.cpp +13 -12
- data/source/global/tdclatl/PooledDbManager.cpp +223 -0
- data/source/global/tdclatl/PooledDbManager.h +76 -0
- data/source/global/tdclatl/QueryBase.cpp +206 -127
- data/source/global/tdclatl/QueryBase.h +55 -59
- data/source/global/tdclatl/Record.cpp +214 -0
- data/source/global/tdclatl/Record.h +96 -0
- data/source/global/tdclatl/Recordset.cpp +278 -0
- data/source/global/tdclatl/Recordset.h +83 -0
- data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
- data/source/global/tdclatl/RecordsetQuery.h +126 -0
- data/source/global/tdclatl/Table.cpp +57 -60
- data/source/global/tdclatl/Table.h +32 -29
- data/source/global/tdclatl/TableDef.cpp +63 -62
- data/source/global/tdclatl/TableDef.h +20 -22
- data/source/global/tdclatl/TdVersion.cpp +3 -3
- data/source/global/tdclatl/TdVersion.h +15 -11
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
- data/source/global/tdclatl/activeTable.cpp +355 -0
- data/source/global/tdclatl/activeTable.h +79 -0
- data/source/global/tdclatl/dllmain.cpp +4 -3
- data/source/global/tdclatl/dllmain.h +7 -6
- data/source/global/tdclatl/keySegment.h +22 -18
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.h +6 -4
- data/source/global/tdclatl/targetver.h +0 -1
- data/source/global/tdclatl/tdclatl.cpp +10 -5
- data/source/global/tdclatl/tdclatl.idl +530 -14
- data/source/linux/charsetConvert.h +78 -79
- data/source/linux/linuxTypes.h +9 -12
- data/source/linux/tchar.h +168 -166
- data/transactd.gemspec +24 -16
- metadata +98 -12
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/tdclc/tdclc_32.cbproj +0 -173
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
- data/build/tdclrb/GEM_VERSION +0 -3
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
- data/source/bzs/example/useORM.cpp +0 -585
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
|
|
3
|
+
/*=================================================================
|
|
4
|
+
Copyright (C) 2014 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
=================================================================*/
|
|
21
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
22
|
+
|
|
23
|
+
namespace bzs
|
|
24
|
+
{
|
|
25
|
+
namespace db
|
|
26
|
+
{
|
|
27
|
+
namespace protocol
|
|
28
|
+
{
|
|
29
|
+
namespace tdap
|
|
30
|
+
{
|
|
31
|
+
namespace client
|
|
32
|
+
{
|
|
33
|
+
|
|
34
|
+
class DLLLIB fieldNames
|
|
35
|
+
{
|
|
36
|
+
|
|
37
|
+
protected:
|
|
38
|
+
/** @cond INTERNAL */
|
|
39
|
+
struct fieldNamesImple* m_impl;
|
|
40
|
+
/** @endcond */
|
|
41
|
+
|
|
42
|
+
public:
|
|
43
|
+
fieldNames();
|
|
44
|
+
fieldNames(const fieldNames& r);
|
|
45
|
+
fieldNames& operator=(const fieldNames& r);
|
|
46
|
+
|
|
47
|
+
virtual ~fieldNames();
|
|
48
|
+
virtual fieldNames& reset();
|
|
49
|
+
fieldNames& keyField(const _TCHAR* name, const _TCHAR* name1 = NULL,
|
|
50
|
+
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
|
51
|
+
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
|
52
|
+
const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
|
|
53
|
+
const _TCHAR* name8 = NULL, const _TCHAR* name9 = NULL,
|
|
54
|
+
const _TCHAR* name10 = NULL);
|
|
55
|
+
|
|
56
|
+
int count() const;
|
|
57
|
+
const _TCHAR* operator[](int index) const;
|
|
58
|
+
const _TCHAR* getValue(int index) const;
|
|
59
|
+
void addValue(const _TCHAR* v);
|
|
60
|
+
void addValues(const _TCHAR* values,
|
|
61
|
+
const _TCHAR* delmi); // delmi = boost::is_any_of
|
|
62
|
+
static fieldNames* create();
|
|
63
|
+
void release();
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
struct sortField
|
|
67
|
+
{
|
|
68
|
+
std::_tstring name;
|
|
69
|
+
bool asc;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
class sortFields
|
|
73
|
+
{
|
|
74
|
+
std::vector<sortField> m_params;
|
|
75
|
+
/** @cond INTERNAL */
|
|
76
|
+
template <class Archive>
|
|
77
|
+
friend void serialize(Archive& ar, sortFields& q, const unsigned int);
|
|
78
|
+
/** @endcond */
|
|
79
|
+
|
|
80
|
+
public:
|
|
81
|
+
inline sortFields& add(const _TCHAR* name, bool asc)
|
|
82
|
+
{
|
|
83
|
+
sortField op = { name, asc };
|
|
84
|
+
m_params.push_back(op);
|
|
85
|
+
return *this;
|
|
86
|
+
}
|
|
87
|
+
inline size_t size() const { return m_params.size(); }
|
|
88
|
+
inline const sortField& operator[](int index) const
|
|
89
|
+
{
|
|
90
|
+
return m_params[index];
|
|
91
|
+
}
|
|
92
|
+
inline void clear() { m_params.clear(); }
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
class DLLLIB recordsetQuery : protected query
|
|
96
|
+
{
|
|
97
|
+
friend class groupFuncBase;
|
|
98
|
+
friend class recordsetImple;
|
|
99
|
+
|
|
100
|
+
struct recordsetQueryImple* m_imple;
|
|
101
|
+
void init(const fielddefs* fdinfo);
|
|
102
|
+
bool isMatch(int ret, unsigned char compType) const;
|
|
103
|
+
bool match(const row_ptr row) const;
|
|
104
|
+
|
|
105
|
+
public:
|
|
106
|
+
recordsetQuery();
|
|
107
|
+
recordsetQuery(const recordsetQuery& r);
|
|
108
|
+
~recordsetQuery();
|
|
109
|
+
|
|
110
|
+
recordsetQuery& operator=(const recordsetQuery& r);
|
|
111
|
+
|
|
112
|
+
template <class T>
|
|
113
|
+
inline recordsetQuery& when(const _TCHAR* name, const _TCHAR* qlogic,
|
|
114
|
+
T value)
|
|
115
|
+
{
|
|
116
|
+
query::where(name, qlogic, value);
|
|
117
|
+
return *this;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
template <class T>
|
|
121
|
+
inline recordsetQuery& and_(const _TCHAR* name, const _TCHAR* qlogic,
|
|
122
|
+
T value)
|
|
123
|
+
{
|
|
124
|
+
query::and_(name, qlogic, value);
|
|
125
|
+
return *this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
template <class T>
|
|
129
|
+
inline recordsetQuery& or_(const _TCHAR* name, const _TCHAR* qlogic,
|
|
130
|
+
T value)
|
|
131
|
+
{
|
|
132
|
+
query::or_(name, qlogic, value);
|
|
133
|
+
return *this;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
inline recordsetQuery& reset()
|
|
137
|
+
{
|
|
138
|
+
query::reset();
|
|
139
|
+
return *this;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
inline const _TCHAR* toString() const { return queryBase::toString(); }
|
|
143
|
+
|
|
144
|
+
inline query* internalQuery() { return this; }
|
|
145
|
+
static recordsetQuery* create();
|
|
146
|
+
void release();
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
class DLLLIB groupFuncBase : public recordsetQuery
|
|
150
|
+
{
|
|
151
|
+
protected:
|
|
152
|
+
friend class groupQueryImple;
|
|
153
|
+
|
|
154
|
+
class groupFuncBaseImple* m_imple;
|
|
155
|
+
virtual void initResultVariable(int index);
|
|
156
|
+
virtual void doCalc(const row_ptr& row, int groupIndex);
|
|
157
|
+
void init(const fielddefs* fdinfo);
|
|
158
|
+
|
|
159
|
+
public:
|
|
160
|
+
typedef double value_type;
|
|
161
|
+
groupFuncBase();
|
|
162
|
+
groupFuncBase(const groupFuncBase& v);
|
|
163
|
+
groupFuncBase& operator=(const groupFuncBase& v);
|
|
164
|
+
groupFuncBase(const fieldNames& targetNames,
|
|
165
|
+
const _TCHAR* resultName = NULL);
|
|
166
|
+
virtual ~groupFuncBase();
|
|
167
|
+
groupFuncBase& operator=(const recordsetQuery& v);
|
|
168
|
+
fieldNames& targetNames() const;
|
|
169
|
+
const _TCHAR* resultName() const;
|
|
170
|
+
void setResultName(const _TCHAR* v);
|
|
171
|
+
int resultKey() const;
|
|
172
|
+
void reset();
|
|
173
|
+
void operator()(const row_ptr& row, int index, bool insert);
|
|
174
|
+
virtual value_type result(int groupIndex) const;
|
|
175
|
+
virtual groupFuncBase* clone() = 0;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
class recordsetImple;
|
|
179
|
+
|
|
180
|
+
class DLLLIB groupQuery
|
|
181
|
+
{
|
|
182
|
+
friend class recordsetImple;
|
|
183
|
+
class groupQueryImple* m_imple;
|
|
184
|
+
void grouping(recordsetImple& rs);
|
|
185
|
+
|
|
186
|
+
public:
|
|
187
|
+
groupQuery();
|
|
188
|
+
groupQuery(const groupQuery& r);
|
|
189
|
+
groupQuery& operator=(const groupQuery& r);
|
|
190
|
+
|
|
191
|
+
~groupQuery();
|
|
192
|
+
groupQuery& reset();
|
|
193
|
+
groupQuery& addFunction(groupFuncBase* func);
|
|
194
|
+
groupQuery& keyField(const _TCHAR* name, const _TCHAR* name1 = NULL,
|
|
195
|
+
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
|
196
|
+
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
|
197
|
+
const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
|
|
198
|
+
const _TCHAR* name8 = NULL, const _TCHAR* name9 = NULL,
|
|
199
|
+
const _TCHAR* name10 = NULL);
|
|
200
|
+
const fieldNames& getKeyFields() const;
|
|
201
|
+
const groupFuncBase* getFunction(int index) const;
|
|
202
|
+
int functionCount() const;
|
|
203
|
+
static groupQuery* create();
|
|
204
|
+
void release();
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
class DLLLIB sum : public groupFuncBase
|
|
208
|
+
{
|
|
209
|
+
protected:
|
|
210
|
+
void doCalc(const row_ptr& row, int index);
|
|
211
|
+
|
|
212
|
+
public:
|
|
213
|
+
sum() {}
|
|
214
|
+
sum(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
|
|
215
|
+
groupFuncBase* clone();
|
|
216
|
+
static sum* create(const fieldNames& targetNames,
|
|
217
|
+
const _TCHAR* resultName = NULL);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
class DLLLIB count : public groupFuncBase
|
|
221
|
+
{
|
|
222
|
+
protected:
|
|
223
|
+
void doCalc(const row_ptr& row, int index);
|
|
224
|
+
|
|
225
|
+
public:
|
|
226
|
+
count() {}
|
|
227
|
+
count(const _TCHAR* resultName);
|
|
228
|
+
groupFuncBase* clone();
|
|
229
|
+
static count* create(const _TCHAR* resultName);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
class DLLLIB avg : public sum
|
|
233
|
+
{
|
|
234
|
+
|
|
235
|
+
void initResultVariable(int index);
|
|
236
|
+
void doCalc(const row_ptr& row, int index);
|
|
237
|
+
value_type result(int index) const;
|
|
238
|
+
|
|
239
|
+
public:
|
|
240
|
+
avg() {}
|
|
241
|
+
avg(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
|
|
242
|
+
groupFuncBase* clone();
|
|
243
|
+
static avg* create(const fieldNames& targetNames,
|
|
244
|
+
const _TCHAR* resultName = NULL);
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
#undef min
|
|
248
|
+
class DLLLIB min : public sum
|
|
249
|
+
{
|
|
250
|
+
bool m_flag;
|
|
251
|
+
void doCalc(const row_ptr& row, int index);
|
|
252
|
+
|
|
253
|
+
public:
|
|
254
|
+
min() {}
|
|
255
|
+
min(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
|
|
256
|
+
groupFuncBase* clone();
|
|
257
|
+
static min* create(const fieldNames& targetNames,
|
|
258
|
+
const _TCHAR* resultName = NULL);
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
#undef max
|
|
262
|
+
class DLLLIB max : public sum
|
|
263
|
+
{
|
|
264
|
+
bool m_flag;
|
|
265
|
+
void doCalc(const row_ptr& row, int index);
|
|
266
|
+
|
|
267
|
+
public:
|
|
268
|
+
max() {}
|
|
269
|
+
max(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
|
|
270
|
+
groupFuncBase* clone();
|
|
271
|
+
static max* create(const fieldNames& targetNames,
|
|
272
|
+
const _TCHAR* resultName = NULL);
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
} // namespace client
|
|
276
|
+
} // namespace tdap
|
|
277
|
+
} // namespace protocol
|
|
278
|
+
} // namespace db
|
|
279
|
+
} // namespace bzs
|
|
280
|
+
|
|
281
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
|
|
@@ -16,15 +16,10 @@
|
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
================================================================= */
|
|
19
|
-
#include <bzs/env/tstring.h>
|
|
20
|
-
#pragma hdrstop
|
|
21
|
-
|
|
22
19
|
#include "indexDDF.h"
|
|
23
20
|
#include "nsDatabase.h"
|
|
24
21
|
#pragma package(smart_init)
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
23
|
namespace bzs
|
|
29
24
|
{
|
|
30
25
|
namespace db
|
|
@@ -36,7 +31,10 @@ namespace tdap
|
|
|
36
31
|
namespace client
|
|
37
32
|
{
|
|
38
33
|
|
|
39
|
-
indexDDF::indexDDF(nsdatabase
|
|
34
|
+
indexDDF::indexDDF(nsdatabase* pbe) : nstable(pbe)
|
|
35
|
+
{
|
|
36
|
+
m_keybuflen = 128;
|
|
37
|
+
}
|
|
40
38
|
|
|
41
39
|
void indexDDF::doOpen(const _TCHAR* Dir, char_td mode, const _TCHAR* OwnerName)
|
|
42
40
|
{
|
|
@@ -61,11 +59,12 @@ keylen_td indexDDF::writeKeyData()
|
|
|
61
59
|
keylen_td len = 2;
|
|
62
60
|
switch (m_keynum)
|
|
63
61
|
{
|
|
64
|
-
case 0:
|
|
62
|
+
case 0:
|
|
63
|
+
memcpy(&keybuf[0], &fileid, len);
|
|
65
64
|
break;
|
|
66
|
-
case 1:
|
|
65
|
+
case 1:
|
|
66
|
+
memcpy(&keybuf[0], &fieldid, len);
|
|
67
67
|
break;
|
|
68
|
-
|
|
69
68
|
}
|
|
70
69
|
return len;
|
|
71
70
|
}
|
|
@@ -77,7 +76,6 @@ void indexDDF::writeRecordData()
|
|
|
77
76
|
datbuf.flag = flag;
|
|
78
77
|
datbuf.keyid = keyid;
|
|
79
78
|
datbuf.segmentnum = segmentnum;
|
|
80
|
-
|
|
81
79
|
}
|
|
82
80
|
|
|
83
81
|
void indexDDF::onReadAfter()
|
|
@@ -87,12 +85,11 @@ void indexDDF::onReadAfter()
|
|
|
87
85
|
flag = datbuf.flag;
|
|
88
86
|
keyid = datbuf.keyid;
|
|
89
87
|
segmentnum = datbuf.segmentnum;
|
|
90
|
-
|
|
91
88
|
}
|
|
92
89
|
|
|
93
90
|
void indexDDF::createTable(const _TCHAR* fullpath)
|
|
94
91
|
{
|
|
95
|
-
fileSpec
|
|
92
|
+
fileSpec* fs;
|
|
96
93
|
fs = (fileSpec*)malloc(512);
|
|
97
94
|
memset(fs, 512, 0x00);
|
|
98
95
|
fs->recLen = 10;
|
|
@@ -130,8 +127,8 @@ void indexDDF::createTable(const _TCHAR* fullpath)
|
|
|
130
127
|
m_stat = nsdb()->stat();
|
|
131
128
|
}
|
|
132
129
|
|
|
133
|
-
}// namespace client
|
|
134
|
-
}// namespace tdap
|
|
135
|
-
}// namespace protocol
|
|
136
|
-
}// namespace db
|
|
137
|
-
}// namespace bzs
|
|
130
|
+
} // namespace client
|
|
131
|
+
} // namespace tdap
|
|
132
|
+
} // namespace protocol
|
|
133
|
+
} // namespace db
|
|
134
|
+
} // namespace bzs
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
================================================================= */
|
|
21
21
|
#include "table.h"
|
|
22
22
|
|
|
23
|
-
|
|
24
23
|
namespace bzs
|
|
25
24
|
{
|
|
26
25
|
namespace db
|
|
@@ -32,8 +31,8 @@ namespace tdap
|
|
|
32
31
|
namespace client
|
|
33
32
|
{
|
|
34
33
|
|
|
35
|
-
#pragma
|
|
36
|
-
pragma_pack1
|
|
34
|
+
#pragma pack(push, 1)
|
|
35
|
+
pragma_pack1;
|
|
37
36
|
|
|
38
37
|
struct SIDXDDF
|
|
39
38
|
{
|
|
@@ -44,10 +43,8 @@ struct SIDXDDF
|
|
|
44
43
|
short flag;
|
|
45
44
|
};
|
|
46
45
|
|
|
47
|
-
#pragma
|
|
48
|
-
pragma_pop
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
#pragma pack(pop)
|
|
47
|
+
pragma_pop;
|
|
51
48
|
|
|
52
49
|
class indexDDF : public nstable
|
|
53
50
|
{
|
|
@@ -71,14 +68,14 @@ public:
|
|
|
71
68
|
|
|
72
69
|
char keybuf[128];
|
|
73
70
|
|
|
74
|
-
explicit indexDDF(nsdatabase
|
|
71
|
+
explicit indexDDF(nsdatabase* pbe);
|
|
75
72
|
void createTable(const _TCHAR* fullpath);
|
|
76
73
|
using nstable::open;
|
|
77
74
|
};
|
|
78
75
|
|
|
79
|
-
}// namespace client
|
|
80
|
-
}// namespace tdap
|
|
81
|
-
}// namespace protocol
|
|
82
|
-
}// namespace db
|
|
83
|
-
}// namespace bzs
|
|
84
|
-
#endif//BZS_DB_PROTOCOL_TDAP_CLIENT_INDEXDDF_H
|
|
76
|
+
} // namespace client
|
|
77
|
+
} // namespace tdap
|
|
78
|
+
} // namespace protocol
|
|
79
|
+
} // namespace db
|
|
80
|
+
} // namespace bzs
|
|
81
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_INDEXDDF_H
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 2014 BizStation Corp All rights reserved.
|
|
3
|
+
|
|
4
|
+
This program is free software; you can redistribute it and/or
|
|
5
|
+
modify it under the terms of the GNU General Public License
|
|
6
|
+
as published by the Free Software Foundation; either version 2
|
|
7
|
+
of the License, or (at your option) any later version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful,
|
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License
|
|
15
|
+
along with this program; if not, write to the Free Software
|
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
|
+
02111-1307, USA.
|
|
18
|
+
=================================================================*/
|
|
19
|
+
#pragma hdrstop
|
|
20
|
+
|
|
21
|
+
#include "memRecord.h"
|
|
22
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
23
|
+
//---------------------------------------------------------------------------
|
|
24
|
+
#pragma package(smart_init)
|
|
25
|
+
namespace bzs
|
|
26
|
+
{
|
|
27
|
+
namespace db
|
|
28
|
+
{
|
|
29
|
+
namespace protocol
|
|
30
|
+
{
|
|
31
|
+
namespace tdap
|
|
32
|
+
{
|
|
33
|
+
namespace client
|
|
34
|
+
{
|
|
35
|
+
|
|
36
|
+
autoMemory::autoMemory() : ptr(0), endFieldIndex(NULL), size(0), owner(false)
|
|
37
|
+
{
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
autoMemory::autoMemory(unsigned char* p, size_t s, short* endIndex, bool own)
|
|
41
|
+
: ptr(p), endFieldIndex(NULL), size((unsigned int)s), owner(own)
|
|
42
|
+
|
|
43
|
+
{
|
|
44
|
+
if (owner)
|
|
45
|
+
{
|
|
46
|
+
ptr = new unsigned char[s];
|
|
47
|
+
if (p)
|
|
48
|
+
memcpy(ptr, p, size);
|
|
49
|
+
else
|
|
50
|
+
memset(ptr, 0, size);
|
|
51
|
+
endFieldIndex = new short;
|
|
52
|
+
if (endIndex != NULL)
|
|
53
|
+
*endFieldIndex = *endIndex;
|
|
54
|
+
}
|
|
55
|
+
else
|
|
56
|
+
endFieldIndex = endIndex;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
autoMemory::~autoMemory()
|
|
60
|
+
{
|
|
61
|
+
if (owner)
|
|
62
|
+
{
|
|
63
|
+
delete[] ptr;
|
|
64
|
+
delete endFieldIndex;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
autoMemory::autoMemory(const autoMemory& p)
|
|
69
|
+
: ptr(p.ptr), endFieldIndex(p.endFieldIndex), size(p.size), owner(p.owner)
|
|
70
|
+
{
|
|
71
|
+
const_cast<autoMemory&>(p).owner = false;
|
|
72
|
+
// const_cast<autoMemory&>(p).ptr = NULL;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
autoMemory& autoMemory::operator=(const autoMemory& p)
|
|
76
|
+
{
|
|
77
|
+
ptr = p.ptr;
|
|
78
|
+
size = p.size;
|
|
79
|
+
endFieldIndex = p.endFieldIndex;
|
|
80
|
+
owner = p.owner;
|
|
81
|
+
const_cast<autoMemory&>(p).owner = false;
|
|
82
|
+
// const_cast<autoMemory&>(p).ptr = NULL;
|
|
83
|
+
return *this;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//---------------------------------------------------------------------------
|
|
87
|
+
// class memoryRecord
|
|
88
|
+
//---------------------------------------------------------------------------
|
|
89
|
+
inline memoryRecord::memoryRecord(fielddefs& fdinfo) : fieldsBase(fdinfo)
|
|
90
|
+
{
|
|
91
|
+
|
|
92
|
+
m_memblock.reserve(ROW_MEM_BLOCK_RESERVE);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
memoryRecord::memoryRecord(const memoryRecord& r)
|
|
96
|
+
: fieldsBase(r.m_fns), m_memblock(r.m_memblock)
|
|
97
|
+
{
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void memoryRecord::clear()
|
|
101
|
+
{
|
|
102
|
+
for (int i = 0; i < (int)m_memblock.size(); ++i)
|
|
103
|
+
memset(m_memblock[i].ptr, 0, m_memblock[i].size);
|
|
104
|
+
|
|
105
|
+
m_fns.resetUpdateIndicator();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
void memoryRecord::setRecordData(unsigned char* ptr, size_t size,
|
|
109
|
+
short* endFieldIndex, bool owner)
|
|
110
|
+
{
|
|
111
|
+
if ((size == 0) && owner)
|
|
112
|
+
{
|
|
113
|
+
size = m_fns.totalFieldLen();
|
|
114
|
+
*endFieldIndex = (short)m_fns.size();
|
|
115
|
+
}
|
|
116
|
+
autoMemory am(ptr, size, endFieldIndex, owner);
|
|
117
|
+
m_memblock.push_back(am);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
void memoryRecord::copyToBuffer(table* tb, bool updateOnly) const
|
|
121
|
+
{
|
|
122
|
+
if (!updateOnly)
|
|
123
|
+
memcpy(tb->fieldPtr(0), ptr(0), m_fns.totalFieldLen());
|
|
124
|
+
else
|
|
125
|
+
{
|
|
126
|
+
for (int i = 0; i < (int)m_fns.size(); ++i)
|
|
127
|
+
{
|
|
128
|
+
const fielddef& fd = m_fns[i];
|
|
129
|
+
// ptr() return memory block first address
|
|
130
|
+
if (fd.enableFlags.bitE)
|
|
131
|
+
memcpy(tb->fieldPtr(i), ptr(i) + fd.pos, fd.len);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
memoryRecord* memoryRecord::create(fielddefs& fdinfo)
|
|
137
|
+
{
|
|
138
|
+
return new memoryRecord(fdinfo);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
void memoryRecord::release(fieldsBase* p)
|
|
142
|
+
{
|
|
143
|
+
delete p;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
//---------------------------------------------------------------------------
|
|
147
|
+
// class writableRecord
|
|
148
|
+
//---------------------------------------------------------------------------
|
|
149
|
+
writableRecord::writableRecord(table* tb, const aliasMap_type* alias)
|
|
150
|
+
: memoryRecord(*fddefs()), m_tb(tb)
|
|
151
|
+
{
|
|
152
|
+
m_tb->setFilter(NULL, 0, 0);
|
|
153
|
+
m_tb->clearBuffer();
|
|
154
|
+
m_fddefs->clear();
|
|
155
|
+
m_fddefs->setAliases(alias);
|
|
156
|
+
m_fddefs->copyFrom(m_tb);
|
|
157
|
+
setRecordData(0, 0, &m_endIndex, true);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
fielddefs* writableRecord::fddefs()
|
|
161
|
+
{
|
|
162
|
+
m_fddefs = fielddefs::create();
|
|
163
|
+
return m_fddefs;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
writableRecord::~writableRecord()
|
|
167
|
+
{
|
|
168
|
+
m_fddefs->release();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
bool writableRecord::read(bool KeysetAlrady)
|
|
172
|
+
{
|
|
173
|
+
if (!KeysetAlrady)
|
|
174
|
+
copyToBuffer(m_tb);
|
|
175
|
+
m_tb->seek();
|
|
176
|
+
if (m_tb->stat())
|
|
177
|
+
return false;
|
|
178
|
+
copyFromBuffer(m_tb);
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
void writableRecord::insert()
|
|
183
|
+
{
|
|
184
|
+
copyToBuffer(m_tb);
|
|
185
|
+
insertRecord(m_tb);
|
|
186
|
+
copyFromBuffer(m_tb);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
void writableRecord::del(bool KeysetAlrady)
|
|
190
|
+
{
|
|
191
|
+
if (!KeysetAlrady)
|
|
192
|
+
copyToBuffer(m_tb);
|
|
193
|
+
m_tb->seek();
|
|
194
|
+
if (m_tb->stat())
|
|
195
|
+
nstable::throwError(_T("activeTable delete "), m_tb->stat());
|
|
196
|
+
deleteRecord(m_tb);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
void writableRecord::update()
|
|
200
|
+
{
|
|
201
|
+
copyToBuffer(m_tb);
|
|
202
|
+
m_tb->seek();
|
|
203
|
+
if (m_tb->stat())
|
|
204
|
+
nstable::throwError(_T("activeTable update "), m_tb->stat());
|
|
205
|
+
copyToBuffer(m_tb, true /*only changed*/);
|
|
206
|
+
updateRecord(m_tb);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
void writableRecord::save()
|
|
210
|
+
{
|
|
211
|
+
copyToBuffer(m_tb);
|
|
212
|
+
m_tb->seek();
|
|
213
|
+
if (m_tb->stat() == STATUS_NOT_FOUND_TI)
|
|
214
|
+
insertRecord(m_tb);
|
|
215
|
+
else
|
|
216
|
+
{
|
|
217
|
+
copyToBuffer(m_tb);
|
|
218
|
+
updateRecord(m_tb);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
writableRecord* writableRecord::create(table* tb, const aliasMap_type* alias)
|
|
223
|
+
{
|
|
224
|
+
return new writableRecord(tb, alias);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
} // namespace client
|
|
228
|
+
} // namespace tdap
|
|
229
|
+
} // namespace protocol
|
|
230
|
+
} // namespace db
|
|
231
|
+
} // namespace bzs
|