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
|
@@ -38,9 +38,9 @@ namespace tdap
|
|
|
38
38
|
namespace client
|
|
39
39
|
{
|
|
40
40
|
|
|
41
|
-
typedef int(*isMbcleadFunc)(unsigned int c);
|
|
41
|
+
typedef int (*isMbcleadFunc)(unsigned int c);
|
|
42
42
|
|
|
43
|
-
inline size_t charNumByteUtf8(const unsigned char
|
|
43
|
+
inline size_t charNumByteUtf8(const unsigned char* p, size_t isize, size_t num)
|
|
44
44
|
{
|
|
45
45
|
int n = 0;
|
|
46
46
|
const unsigned char* end = p + isize;
|
|
@@ -58,15 +58,16 @@ inline size_t charNumByteUtf8(const unsigned char *p, size_t isize, size_t num)
|
|
|
58
58
|
for (unsigned char tmp = *p & 0xfc; (tmp & 0x80); tmp = tmp << 1)
|
|
59
59
|
{
|
|
60
60
|
++n;
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
if (++p == end)
|
|
62
|
+
break;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
return n;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
inline size_t charNumByte(isMbcleadFunc func, const unsigned char* p,
|
|
69
|
+
inline size_t charNumByte(isMbcleadFunc func, const unsigned char* p,
|
|
70
|
+
size_t isize, size_t num)
|
|
70
71
|
{
|
|
71
72
|
size_t n = 0;
|
|
72
73
|
const unsigned char* end = p + isize;
|
|
@@ -86,25 +87,27 @@ inline size_t charNumByte(isMbcleadFunc func, const unsigned char* p, size_t isi
|
|
|
86
87
|
|
|
87
88
|
/** Trim or fill fc charctor and return bytes that not include fill char bytes.
|
|
88
89
|
*/
|
|
89
|
-
inline size_t validateTrim(isMbcleadFunc func, unsigned char* src,
|
|
90
|
+
inline size_t validateTrim(isMbcleadFunc func, unsigned char* src,
|
|
91
|
+
size_t maxBytes, int fc)
|
|
90
92
|
{
|
|
91
93
|
unsigned char* p = src + maxBytes - 1;
|
|
92
94
|
unsigned char* tmp = p;
|
|
93
95
|
if (fc == -1)
|
|
94
96
|
fc = 0x00;
|
|
95
|
-
while (func(*tmp) && (--tmp>=src))
|
|
97
|
+
while (func(*tmp) && (--tmp >= src))
|
|
98
|
+
;
|
|
96
99
|
|
|
97
|
-
//if (func(*p) && (maxBytes>1) && !func(*(p-1)))
|
|
98
|
-
if ((p-tmp) % 2)
|
|
100
|
+
// if (func(*p) && (maxBytes>1) && !func(*(p-1)))
|
|
101
|
+
if ((p - tmp) % 2)
|
|
99
102
|
{
|
|
100
103
|
*p = (unsigned char)fc;
|
|
101
104
|
return maxBytes - 1;
|
|
102
105
|
}
|
|
103
106
|
return maxBytes;
|
|
104
|
-
|
|
105
107
|
}
|
|
106
108
|
|
|
107
|
-
/** UTF8 Version: Trim or fill fc charctor and return bytes that not include
|
|
109
|
+
/** UTF8 Version: Trim or fill fc charctor and return bytes that not include
|
|
110
|
+
* fill char bytes.
|
|
108
111
|
*/
|
|
109
112
|
inline size_t validateTrimUTF8(unsigned char* src, size_t maxBytes, int fc)
|
|
110
113
|
{
|
|
@@ -114,7 +117,7 @@ inline size_t validateTrimUTF8(unsigned char* src, size_t maxBytes, int fc)
|
|
|
114
117
|
if ((*p & 0x80) == 0)
|
|
115
118
|
return maxBytes;
|
|
116
119
|
|
|
117
|
-
//If multi byte string then first byte is 0xC0.
|
|
120
|
+
// If multi byte string then first byte is 0xC0.
|
|
118
121
|
while ((*p & 0xC0) != 0xC0)
|
|
119
122
|
{
|
|
120
123
|
if (--p < src)
|
|
@@ -135,20 +138,25 @@ inline size_t validateTrimUTF8(unsigned char* src, size_t maxBytes, int fc)
|
|
|
135
138
|
return p - src;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
inline int isMbcCP932(unsigned int c)
|
|
141
|
+
inline int isMbcCP932(unsigned int c)
|
|
142
|
+
{
|
|
143
|
+
return ((c >= 0x81) && (c <= 0x9F)) || ((c >= 0xE0) && (c <= 0xFC));
|
|
139
144
|
}
|
|
140
145
|
|
|
141
146
|
// Trim or fill fc charctor and return bytes.
|
|
142
|
-
inline size_t charNumTrim(int codePage, char* src, size_t inputsize,
|
|
147
|
+
inline size_t charNumTrim(int codePage, char* src, size_t inputsize,
|
|
148
|
+
size_t maxCharnum, int fc)
|
|
143
149
|
{
|
|
144
150
|
size_t size = inputsize;
|
|
145
151
|
switch (codePage)
|
|
146
152
|
{
|
|
147
|
-
case CP_UTF8:
|
|
153
|
+
case CP_UTF8:
|
|
154
|
+
size = charNumByteUtf8((unsigned char*)src, inputsize, maxCharnum);
|
|
148
155
|
break;
|
|
149
|
-
case 932:
|
|
156
|
+
case 932:
|
|
157
|
+
size =
|
|
158
|
+
charNumByte(isMbcCP932, (unsigned char*)src, inputsize, maxCharnum);
|
|
150
159
|
break;
|
|
151
|
-
|
|
152
160
|
}
|
|
153
161
|
if (size && (fc != -1))
|
|
154
162
|
memset(src + size, fc, inputsize - size);
|
|
@@ -156,7 +164,8 @@ inline size_t charNumTrim(int codePage, char* src, size_t inputsize, size_t maxC
|
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
// Wide version: Trim or fill fc charctor and return wide char number..
|
|
159
|
-
inline size_t charNumTrim(int codePage, WCHAR* src, size_t inputsize,
|
|
167
|
+
inline size_t charNumTrim(int codePage, WCHAR* src, size_t inputsize,
|
|
168
|
+
size_t maxCharnum, int fc)
|
|
160
169
|
{
|
|
161
170
|
WCHAR* end = src + inputsize;
|
|
162
171
|
WCHAR* p = src;
|
|
@@ -179,13 +188,16 @@ inline size_t validateTrim(int codePage, char* src, size_t maxlen, int fc)
|
|
|
179
188
|
{
|
|
180
189
|
switch (codePage)
|
|
181
190
|
{
|
|
182
|
-
case CP_UTF8:
|
|
183
|
-
|
|
191
|
+
case CP_UTF8:
|
|
192
|
+
return validateTrimUTF8((unsigned char*)src, maxlen, fc);
|
|
193
|
+
case 932:
|
|
194
|
+
return validateTrim(isMbcCP932, (unsigned char*)src, maxlen, fc);
|
|
184
195
|
}
|
|
185
196
|
return maxlen;
|
|
186
197
|
}
|
|
187
198
|
|
|
188
|
-
// Wide Version if invalid end charctor then fill fc char. And return wide
|
|
199
|
+
// Wide Version if invalid end charctor then fill fc char. And return wide
|
|
200
|
+
// charctor number.
|
|
189
201
|
inline size_t validateTrim(int codePage, WCHAR* src, size_t maxlen, int fc)
|
|
190
202
|
{
|
|
191
203
|
if (IS_HIGH_SURROGATE(src[maxlen - 1]))
|
|
@@ -202,56 +214,72 @@ class stringConverter
|
|
|
202
214
|
|
|
203
215
|
public:
|
|
204
216
|
stringConverter(unsigned int src_codPage, unsigned int exec_codePage)
|
|
205
|
-
: m_codePage(src_codPage), m_exec_codePage(exec_codePage)
|
|
217
|
+
: m_codePage(src_codPage), m_exec_codePage(exec_codePage)
|
|
218
|
+
{
|
|
219
|
+
}
|
|
206
220
|
|
|
207
|
-
inline void setCodePage(unsigned int src_codPage)
|
|
221
|
+
inline void setCodePage(unsigned int src_codPage)
|
|
222
|
+
{
|
|
223
|
+
m_codePage = src_codPage;
|
|
224
|
+
}
|
|
208
225
|
|
|
209
|
-
inline void setExecCodePage(unsigned int codPage)
|
|
226
|
+
inline void setExecCodePage(unsigned int codPage)
|
|
227
|
+
{
|
|
228
|
+
m_exec_codePage = codPage;
|
|
229
|
+
}
|
|
210
230
|
|
|
211
|
-
inline unsigned int execCodePage() const {return m_exec_codePage;};
|
|
231
|
+
inline unsigned int execCodePage() const { return m_exec_codePage; };
|
|
212
232
|
|
|
213
233
|
// wide to codepage. Result is no need Nullterminate.
|
|
214
|
-
inline size_t convert(char* to, size_t tsize, const WCHAR* from,
|
|
234
|
+
inline size_t convert(char* to, size_t tsize, const WCHAR* from,
|
|
235
|
+
size_t fsize)
|
|
215
236
|
{
|
|
216
237
|
to[tsize - 1] = 0x00;
|
|
217
|
-
size_t len = WideCharToMultiByte(
|
|
218
|
-
|
|
238
|
+
size_t len = WideCharToMultiByte(
|
|
239
|
+
m_codePage, (m_codePage == CP_UTF8) ? 0 : WC_COMPOSITECHECK, from,
|
|
240
|
+
(int)fsize, to, (int)tsize, NULL, NULL);
|
|
219
241
|
if (len == 0)
|
|
220
242
|
return tsize - (to[tsize - 1] ? 0 : 1);
|
|
221
243
|
return len;
|
|
222
244
|
}
|
|
223
245
|
|
|
224
|
-
inline size_t convert(WCHAR* to, size_t tsize, const char* from,
|
|
246
|
+
inline size_t convert(WCHAR* to, size_t tsize, const char* from,
|
|
247
|
+
size_t fsize)
|
|
225
248
|
{
|
|
226
249
|
to[tsize - 1] = 0x00;
|
|
227
|
-
size_t len = MultiByteToWideChar(
|
|
228
|
-
|
|
250
|
+
size_t len = MultiByteToWideChar(
|
|
251
|
+
m_exec_codePage, (m_exec_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
252
|
+
from, (int)fsize, to, (int)tsize);
|
|
229
253
|
if (len == 0)
|
|
230
254
|
return tsize - (to[tsize - 1] ? 0 : 1);
|
|
231
255
|
return len;
|
|
232
|
-
|
|
233
256
|
}
|
|
234
257
|
|
|
235
|
-
inline size_t convert(WCHAR* to, size_t tsize, const WCHAR* from,
|
|
258
|
+
inline size_t convert(WCHAR* to, size_t tsize, const WCHAR* from,
|
|
259
|
+
size_t fsize)
|
|
236
260
|
{
|
|
237
261
|
assert(0);
|
|
238
262
|
return fsize;
|
|
239
263
|
}
|
|
240
264
|
|
|
241
|
-
inline size_t convert(char* to, size_t tsize, const char* from,
|
|
265
|
+
inline size_t convert(char* to, size_t tsize, const char* from,
|
|
266
|
+
size_t fsize)
|
|
242
267
|
{
|
|
243
268
|
size_t size = 0;
|
|
244
269
|
#ifdef _WIN32
|
|
245
|
-
size = MultiByteToWideChar(
|
|
246
|
-
|
|
270
|
+
size = MultiByteToWideChar(
|
|
271
|
+
m_exec_codePage, (m_exec_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
272
|
+
from, (int)fsize, NULL, (int)0);
|
|
247
273
|
WCHAR* ws = new WCHAR[++size];
|
|
248
|
-
size = MultiByteToWideChar(
|
|
249
|
-
|
|
274
|
+
size = MultiByteToWideChar(
|
|
275
|
+
m_exec_codePage, (m_exec_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
276
|
+
from, (int)fsize, ws, (int)size);
|
|
250
277
|
|
|
251
278
|
to[tsize - 1] = 0x00;
|
|
252
|
-
size = WideCharToMultiByte(
|
|
279
|
+
size = WideCharToMultiByte(
|
|
280
|
+
m_codePage, (m_codePage == CP_UTF8) ? 0 : WC_COMPOSITECHECK, ws,
|
|
253
281
|
(int)size, to, (int)tsize, NULL, NULL);
|
|
254
|
-
delete[]ws;
|
|
282
|
+
delete[] ws;
|
|
255
283
|
if (size == 0)
|
|
256
284
|
size = tsize - (to[tsize - 1] ? 0 : 1);
|
|
257
285
|
#else
|
|
@@ -264,15 +292,25 @@ public:
|
|
|
264
292
|
}
|
|
265
293
|
|
|
266
294
|
// codepage to wide. Result is need Nullterminate.
|
|
267
|
-
inline size_t revert(WCHAR* to, size_t tsize, const char* from,
|
|
268
|
-
|
|
269
|
-
|
|
295
|
+
inline size_t revert(WCHAR* to, size_t tsize, const char* from,
|
|
296
|
+
size_t fsize)
|
|
297
|
+
{
|
|
298
|
+
return MultiByteToWideChar(m_codePage,
|
|
299
|
+
(m_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
300
|
+
from, (int)fsize, to, (int)tsize);
|
|
301
|
+
}
|
|
270
302
|
|
|
271
|
-
inline size_t revert(char* to, size_t tsize, const WCHAR* from,
|
|
272
|
-
|
|
273
|
-
|
|
303
|
+
inline size_t revert(char* to, size_t tsize, const WCHAR* from,
|
|
304
|
+
size_t fsize)
|
|
305
|
+
{
|
|
306
|
+
return WideCharToMultiByte(
|
|
307
|
+
m_exec_codePage,
|
|
308
|
+
(m_exec_codePage == CP_UTF8) ? 0 : WC_COMPOSITECHECK, from,
|
|
309
|
+
(int)fsize, to, (int)tsize, NULL, NULL);
|
|
310
|
+
}
|
|
274
311
|
|
|
275
|
-
inline size_t revert(WCHAR* to, size_t tsize, const WCHAR* from,
|
|
312
|
+
inline size_t revert(WCHAR* to, size_t tsize, const WCHAR* from,
|
|
313
|
+
size_t fsize)
|
|
276
314
|
{
|
|
277
315
|
assert(0);
|
|
278
316
|
return fsize;
|
|
@@ -282,14 +320,18 @@ public:
|
|
|
282
320
|
{
|
|
283
321
|
size_t size = 0;
|
|
284
322
|
#ifdef _WIN32
|
|
285
|
-
size = MultiByteToWideChar(m_codePage,
|
|
286
|
-
|
|
323
|
+
size = MultiByteToWideChar(m_codePage,
|
|
324
|
+
(m_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
325
|
+
from, (int)fsize, NULL, (int)0);
|
|
287
326
|
WCHAR* ws = new WCHAR[++size];
|
|
288
|
-
size = MultiByteToWideChar(m_codePage,
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
327
|
+
size = MultiByteToWideChar(m_codePage,
|
|
328
|
+
(m_codePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
329
|
+
from, (int)fsize, ws, (int)size);
|
|
330
|
+
size = WideCharToMultiByte(m_exec_codePage, (m_exec_codePage == CP_UTF8)
|
|
331
|
+
? 0
|
|
332
|
+
: WC_COMPOSITECHECK,
|
|
333
|
+
ws, (int)size, to, (int)tsize, NULL, NULL);
|
|
334
|
+
delete[] ws;
|
|
293
335
|
#else
|
|
294
336
|
if (m_exec_codePage == CP_UTF8)
|
|
295
337
|
size = bzs::env::mbctou8(from, fsize, to, tsize);
|
|
@@ -299,29 +341,30 @@ public:
|
|
|
299
341
|
return size;
|
|
300
342
|
}
|
|
301
343
|
|
|
302
|
-
inline bool isNeedConvert() const
|
|
303
|
-
|
|
344
|
+
inline bool isNeedConvert() const
|
|
345
|
+
{
|
|
346
|
+
return (m_codePage != m_exec_codePage);
|
|
347
|
+
}
|
|
304
348
|
};
|
|
305
349
|
|
|
306
350
|
typedef stringConverter converter_type;
|
|
307
351
|
|
|
308
352
|
class myCharStoreBase
|
|
309
353
|
{
|
|
310
|
-
fielddef& m_fd;
|
|
354
|
+
const fielddef& m_fd;
|
|
311
355
|
|
|
312
356
|
public:
|
|
313
|
-
inline myCharStoreBase(fielddef& fd) : m_fd(fd)
|
|
357
|
+
inline myCharStoreBase(const fielddef& fd) : m_fd(fd){};
|
|
314
358
|
|
|
315
|
-
inline size_t maxStoreBytes() const {return m_fd.len;};
|
|
359
|
+
inline size_t maxStoreBytes() const { return m_fd.len; };
|
|
316
360
|
|
|
317
|
-
inline int padChar() const {return 0x20;};
|
|
361
|
+
inline int padChar() const { return 0x20; };
|
|
318
362
|
|
|
319
|
-
inline int storeOffsetBytes() const {return 0;};
|
|
363
|
+
inline int storeOffsetBytes() const { return 0; };
|
|
320
364
|
|
|
321
|
-
inline int maxCharNum() const {return m_fd.charNum();}
|
|
322
|
-
|
|
323
|
-
inline bool isNeedReadCopy() const {return true;}
|
|
365
|
+
inline int maxCharNum() const { return m_fd.charNum(); }
|
|
324
366
|
|
|
367
|
+
inline bool isNeedReadCopy() const { return true; }
|
|
325
368
|
};
|
|
326
369
|
|
|
327
370
|
typedef myCharStoreBase myWcharStore;
|
|
@@ -329,65 +372,68 @@ typedef myCharStoreBase myCharStore;
|
|
|
329
372
|
|
|
330
373
|
class myVarCharStoreBase
|
|
331
374
|
{
|
|
332
|
-
fielddef& m_fd;
|
|
375
|
+
const fielddef& m_fd;
|
|
333
376
|
|
|
334
377
|
public:
|
|
335
|
-
inline myVarCharStoreBase(fielddef& fd) : m_fd(fd)
|
|
336
|
-
|
|
337
|
-
inline size_t maxStoreBytes() const {return m_fd.len - m_fd.varLenBytes();};
|
|
378
|
+
inline myVarCharStoreBase(const fielddef& fd) : m_fd(fd){};
|
|
338
379
|
|
|
339
|
-
inline
|
|
380
|
+
inline size_t maxStoreBytes() const
|
|
381
|
+
{
|
|
382
|
+
return m_fd.len - m_fd.varLenBytes();
|
|
383
|
+
};
|
|
340
384
|
|
|
341
|
-
inline int
|
|
385
|
+
inline int padChar() const { return -1; };
|
|
342
386
|
|
|
343
|
-
inline int
|
|
387
|
+
inline int storeOffsetBytes() const { return m_fd.varLenBytes(); };
|
|
344
388
|
|
|
345
|
-
inline
|
|
389
|
+
inline int maxCharNum() const { return m_fd.charNum(); }
|
|
346
390
|
|
|
391
|
+
inline bool isNeedReadCopy() const { return true; }
|
|
347
392
|
};
|
|
348
393
|
|
|
349
394
|
typedef myVarCharStoreBase myWvarCharStore;
|
|
350
395
|
typedef myVarCharStoreBase myVarCharStore;
|
|
351
396
|
|
|
352
|
-
|
|
353
397
|
class myVarBinaryStoreBase
|
|
354
398
|
{
|
|
355
|
-
fielddef& m_fd;
|
|
399
|
+
const fielddef& m_fd;
|
|
356
400
|
|
|
357
401
|
public:
|
|
358
|
-
inline myVarBinaryStoreBase(fielddef& fd) : m_fd(fd)
|
|
402
|
+
inline myVarBinaryStoreBase(const fielddef& fd) : m_fd(fd){};
|
|
359
403
|
|
|
360
|
-
inline size_t maxStoreBytes() const
|
|
404
|
+
inline size_t maxStoreBytes() const
|
|
405
|
+
{
|
|
406
|
+
return m_fd.len - m_fd.varLenBytes();
|
|
407
|
+
};
|
|
361
408
|
|
|
362
|
-
inline int padChar() const {return -1;};
|
|
409
|
+
inline int padChar() const { return -1; };
|
|
363
410
|
|
|
364
|
-
inline int storeOffsetBytes() const {return m_fd.varLenBytes();};
|
|
411
|
+
inline int storeOffsetBytes() const { return m_fd.varLenBytes(); };
|
|
365
412
|
|
|
366
|
-
inline int maxCharNum() const {return -1;}
|
|
413
|
+
inline int maxCharNum() const { return -1; }
|
|
367
414
|
|
|
368
|
-
inline bool isNeedReadCopy() const {return true;}
|
|
415
|
+
inline bool isNeedReadCopy() const { return true; }
|
|
369
416
|
};
|
|
370
417
|
|
|
371
|
-
|
|
372
418
|
typedef myVarBinaryStoreBase myWvarBinaryStore;
|
|
373
419
|
typedef myVarBinaryStoreBase myVarBinaryStore;
|
|
374
420
|
|
|
375
421
|
class myBinaryStoreBase
|
|
376
422
|
{
|
|
377
|
-
fielddef& m_fd;
|
|
423
|
+
const fielddef& m_fd;
|
|
378
424
|
|
|
379
425
|
public:
|
|
380
|
-
inline myBinaryStoreBase(fielddef& fd) : m_fd(fd)
|
|
426
|
+
inline myBinaryStoreBase(const fielddef& fd) : m_fd(fd){};
|
|
381
427
|
|
|
382
|
-
inline size_t maxStoreBytes() const {return m_fd.len;};
|
|
428
|
+
inline size_t maxStoreBytes() const { return m_fd.len; };
|
|
383
429
|
|
|
384
|
-
inline int padChar() const {return 0;};
|
|
430
|
+
inline int padChar() const { return 0; };
|
|
385
431
|
|
|
386
|
-
inline int storeOffsetBytes() const {return 0;};
|
|
432
|
+
inline int storeOffsetBytes() const { return 0; };
|
|
387
433
|
|
|
388
|
-
inline int maxCharNum() const {return -1;}
|
|
434
|
+
inline int maxCharNum() const { return -1; }
|
|
389
435
|
|
|
390
|
-
inline bool isNeedReadCopy() const {return true;}
|
|
436
|
+
inline bool isNeedReadCopy() const { return true; }
|
|
391
437
|
};
|
|
392
438
|
|
|
393
439
|
typedef myBinaryStoreBase myWbinaryStore;
|
|
@@ -395,78 +441,94 @@ typedef myBinaryStoreBase myBinaryStore;
|
|
|
395
441
|
|
|
396
442
|
class zstringStore
|
|
397
443
|
{
|
|
398
|
-
fielddef& m_fd;
|
|
444
|
+
const fielddef& m_fd;
|
|
399
445
|
|
|
400
446
|
public:
|
|
401
|
-
inline zstringStore(fielddef& fd) : m_fd(fd)
|
|
447
|
+
inline zstringStore(const fielddef& fd) : m_fd(fd){};
|
|
402
448
|
|
|
403
|
-
inline size_t maxStoreBytes() const {return m_fd.len - 1;};
|
|
449
|
+
inline size_t maxStoreBytes() const { return m_fd.len - 1; };
|
|
404
450
|
|
|
405
|
-
inline int padChar() const {return 0;};
|
|
451
|
+
inline int padChar() const { return 0; };
|
|
406
452
|
|
|
407
|
-
inline int storeOffsetBytes() const {return 0;};
|
|
453
|
+
inline int storeOffsetBytes() const { return 0; };
|
|
408
454
|
|
|
409
|
-
inline int maxCharNum() const {return -1;}
|
|
455
|
+
inline int maxCharNum() const { return -1; }
|
|
410
456
|
|
|
411
|
-
inline bool isNeedReadCopy() const {return false;}
|
|
457
|
+
inline bool isNeedReadCopy() const { return false; }
|
|
412
458
|
};
|
|
413
459
|
|
|
414
460
|
class wzstringStore
|
|
415
461
|
{
|
|
416
|
-
fielddef& m_fd;
|
|
462
|
+
const fielddef& m_fd;
|
|
417
463
|
|
|
418
464
|
public:
|
|
419
|
-
inline wzstringStore(fielddef& fd) : m_fd(fd)
|
|
465
|
+
inline wzstringStore(const fielddef& fd) : m_fd(fd){};
|
|
420
466
|
|
|
421
|
-
inline size_t maxStoreBytes() const {return m_fd.len -sizeof(short);};
|
|
467
|
+
inline size_t maxStoreBytes() const { return m_fd.len - sizeof(short); };
|
|
422
468
|
|
|
423
|
-
inline int padChar() const {return 0;};
|
|
469
|
+
inline int padChar() const { return 0; };
|
|
424
470
|
|
|
425
|
-
inline int storeOffsetBytes() const {return 0;};
|
|
471
|
+
inline int storeOffsetBytes() const { return 0; };
|
|
426
472
|
|
|
427
|
-
inline int maxCharNum() const {return -1;}
|
|
473
|
+
inline int maxCharNum() const { return -1; }
|
|
428
474
|
|
|
429
|
-
inline bool isNeedReadCopy() const {return false;}
|
|
475
|
+
inline bool isNeedReadCopy() const { return false; }
|
|
430
476
|
};
|
|
431
477
|
|
|
432
478
|
class stringStoreBase
|
|
433
479
|
{
|
|
434
|
-
fielddef& m_fd;
|
|
480
|
+
const fielddef& m_fd;
|
|
435
481
|
|
|
436
482
|
public:
|
|
437
|
-
inline stringStoreBase(fielddef& fd) : m_fd(fd)
|
|
483
|
+
inline stringStoreBase(const fielddef& fd) : m_fd(fd){};
|
|
438
484
|
|
|
439
|
-
inline size_t maxStoreBytes() const {return m_fd.len;};
|
|
485
|
+
inline size_t maxStoreBytes() const { return m_fd.len; };
|
|
440
486
|
|
|
441
|
-
inline int padChar() const {return 0x20;};
|
|
487
|
+
inline int padChar() const { return 0x20; };
|
|
442
488
|
|
|
443
|
-
inline int storeOffsetBytes() const {return 0;};
|
|
489
|
+
inline int storeOffsetBytes() const { return 0; };
|
|
444
490
|
|
|
445
|
-
inline int maxCharNum() const {return -1;}
|
|
491
|
+
inline int maxCharNum() const { return -1; }
|
|
446
492
|
|
|
447
|
-
inline bool isNeedReadCopy() const {return true;}
|
|
493
|
+
inline bool isNeedReadCopy() const { return true; }
|
|
448
494
|
};
|
|
449
495
|
|
|
450
|
-
|
|
451
496
|
typedef stringStoreBase wstringStore;
|
|
452
497
|
typedef stringStoreBase stringStore;
|
|
453
498
|
|
|
499
|
+
inline size_t strlen_t(const WCHAR* p)
|
|
500
|
+
{
|
|
501
|
+
return strlen16(p);
|
|
502
|
+
}
|
|
454
503
|
|
|
455
|
-
inline size_t strlen_t(const
|
|
456
|
-
|
|
457
|
-
|
|
504
|
+
inline size_t strlen_t(const char* p)
|
|
505
|
+
{
|
|
506
|
+
return strlen(p);
|
|
507
|
+
}
|
|
458
508
|
|
|
459
|
-
inline void* memcpy_t(void
|
|
509
|
+
inline void* memcpy_t(void* dest, const void* src, size_t count)
|
|
510
|
+
{
|
|
511
|
+
return memcpy(dest, src, count);
|
|
512
|
+
}
|
|
460
513
|
|
|
461
|
-
inline WCHAR* memcpy_t(WCHAR* dest, const WCHAR
|
|
462
|
-
|
|
514
|
+
inline WCHAR* memcpy_t(WCHAR* dest, const WCHAR* src, size_t count)
|
|
515
|
+
{
|
|
516
|
+
return wmemcpy(dest, src, count);
|
|
517
|
+
}
|
|
463
518
|
|
|
464
|
-
inline void* memset_t(void
|
|
519
|
+
inline void* memset_t(void* dest, int c, size_t count)
|
|
520
|
+
{
|
|
521
|
+
return memset(dest, c, count);
|
|
522
|
+
}
|
|
465
523
|
|
|
466
|
-
inline WCHAR* memset_t(WCHAR* dest, int c, size_t count)
|
|
524
|
+
inline WCHAR* memset_t(WCHAR* dest, int c, size_t count)
|
|
525
|
+
{
|
|
526
|
+
return wmemset16(dest, (WCHAR)c, count);
|
|
527
|
+
}
|
|
467
528
|
|
|
468
|
-
template<typename _SF, typename store_type, typename T>
|
|
469
|
-
void store(char* ptr, const T* data, fielddef& fd, stringConverter* cv,
|
|
529
|
+
template <typename _SF, typename store_type, typename T>
|
|
530
|
+
void store(char* ptr, const T* data, const fielddef& fd, stringConverter* cv,
|
|
531
|
+
bool usePad = true)
|
|
470
532
|
{
|
|
471
533
|
_SF sf(fd);
|
|
472
534
|
|
|
@@ -491,7 +553,8 @@ void store(char* ptr, const T* data, fielddef& fd, stringConverter* cv, bool use
|
|
|
491
553
|
}
|
|
492
554
|
int fc = usePad ? sf.padChar() : -1;
|
|
493
555
|
|
|
494
|
-
// Trim by max charctor number (not char type length) and invalid mbc lead
|
|
556
|
+
// Trim by max charctor number (not char type length) and invalid mbc lead
|
|
557
|
+
// byte.
|
|
495
558
|
int maxCharnum = sf.maxCharNum();
|
|
496
559
|
if (maxCharnum != -1)
|
|
497
560
|
len = charNumTrim(fd.codePage(), strPtr, len, maxCharnum, fc);
|
|
@@ -510,8 +573,7 @@ void store(char* ptr, const T* data, fielddef& fd, stringConverter* cv, bool use
|
|
|
510
573
|
}
|
|
511
574
|
}
|
|
512
575
|
|
|
513
|
-
template<class T>
|
|
514
|
-
T* trim(T* src, T* end, int padChar)
|
|
576
|
+
template <class T> T* trim(T* src, T* end, int padChar)
|
|
515
577
|
{
|
|
516
578
|
while (src <= --end)
|
|
517
579
|
{
|
|
@@ -525,23 +587,24 @@ T* trim(T* src, T* end, int padChar)
|
|
|
525
587
|
#pragma warn -8008
|
|
526
588
|
#pragma warn -8066
|
|
527
589
|
|
|
528
|
-
template<class _SF, typename store_type, typename T>
|
|
529
|
-
const T* read(char* ptr, ::bzs::rtl::stringBuffer* strBufs, fielddef& fd,
|
|
530
|
-
|
|
590
|
+
template <class _SF, typename store_type, typename T>
|
|
591
|
+
const T* read(char* ptr, ::bzs::rtl::stringBuffer* strBufs, const fielddef& fd,
|
|
592
|
+
stringConverter* cv, bool isTrimPadChar = false)
|
|
531
593
|
{
|
|
532
594
|
_SF sf(fd);
|
|
533
595
|
|
|
534
596
|
int offset = sf.storeOffsetBytes();
|
|
535
597
|
T* result = (T*)(ptr + offset);
|
|
536
|
-
//convert
|
|
598
|
+
// convert
|
|
537
599
|
size_t len;
|
|
538
|
-
if ((typeid(T) != typeid(store_type)) ||
|
|
600
|
+
if ((typeid(T) != typeid(store_type)) ||
|
|
601
|
+
(cv->isNeedConvert() && (typeid(T) == typeid(char))))
|
|
539
602
|
{
|
|
540
603
|
len = fd.dataLen((const uchar_td*)ptr) / sizeof(store_type);
|
|
541
|
-
size_t olen =
|
|
604
|
+
size_t olen =
|
|
605
|
+
len * 2 * sizeof(store_type) + 1; // utf8�ւ�2�{�̉\��������
|
|
542
606
|
result = strBufs->getPtr<T>(olen);
|
|
543
607
|
len = cv->revert(result, olen, (const store_type*)(ptr + offset), len);
|
|
544
|
-
|
|
545
608
|
}
|
|
546
609
|
else if (sf.isNeedReadCopy())
|
|
547
610
|
{
|
|
@@ -552,7 +615,6 @@ const T* read(char* ptr, ::bzs::rtl::stringBuffer* strBufs, fielddef& fd, string
|
|
|
552
615
|
memcpy(result, ptr + offset, len);
|
|
553
616
|
}
|
|
554
617
|
len /= sizeof(store_type);
|
|
555
|
-
|
|
556
618
|
}
|
|
557
619
|
else
|
|
558
620
|
return result; // zstring;
|
|
@@ -564,22 +626,25 @@ const T* read(char* ptr, ::bzs::rtl::stringBuffer* strBufs, fielddef& fd, string
|
|
|
564
626
|
#pragma warn .8008
|
|
565
627
|
#pragma warn .8066
|
|
566
628
|
|
|
567
|
-
template<typename T>
|
|
568
|
-
char* blobStore(char* ptr, const T* data, fielddef& fd,
|
|
629
|
+
template <typename T>
|
|
630
|
+
char* blobStore(char* ptr, const T* data, const fielddef& fd,
|
|
631
|
+
stringConverter* cv)
|
|
569
632
|
{
|
|
570
633
|
size_t len = strlen_t(data);
|
|
571
634
|
int offset = fd.len - 8;
|
|
572
635
|
char* p = NULL;
|
|
573
|
-
size_t maxlen =
|
|
574
|
-
|
|
636
|
+
size_t maxlen =
|
|
637
|
+
(offset == 1) ? 255 : (offset == 2) ? USHRT_MAX : (offset == 3)
|
|
638
|
+
? USHRT_MAX * 255
|
|
639
|
+
: UINT_MAX;
|
|
575
640
|
if (len != 0)
|
|
576
641
|
{
|
|
577
|
-
if ((typeid(T) != typeid(char)) ||
|
|
642
|
+
if ((typeid(T) != typeid(char)) ||
|
|
643
|
+
(cv->isNeedConvert() && (typeid(T) == typeid(char))))
|
|
578
644
|
{
|
|
579
645
|
maxlen = std::min<size_t>(maxlen, len * 2 * sizeof(T) + 1);
|
|
580
646
|
p = new char[maxlen];
|
|
581
647
|
len = cv->convert(p, maxlen, data, len);
|
|
582
|
-
|
|
583
648
|
}
|
|
584
649
|
else
|
|
585
650
|
{
|
|
@@ -594,25 +659,25 @@ char* blobStore(char* ptr, const T* data, fielddef& fd, stringConverter* cv)
|
|
|
594
659
|
if (p)
|
|
595
660
|
memcpy(ptr + offset, &(p), sizeof(char*));
|
|
596
661
|
return p;
|
|
597
|
-
|
|
598
662
|
}
|
|
599
663
|
#pragma warn -8004
|
|
600
|
-
template<typename T>
|
|
601
|
-
const T* readBlob(char* ptr, ::bzs::rtl::stringBuffer* strBufs,
|
|
664
|
+
template <typename T>
|
|
665
|
+
const T* readBlob(char* ptr, ::bzs::rtl::stringBuffer* strBufs,
|
|
666
|
+
const fielddef& fd, stringConverter* cv)
|
|
602
667
|
{
|
|
603
668
|
|
|
604
669
|
int offset = fd.len - 8;
|
|
605
670
|
T* result = (T*)(ptr + offset);
|
|
606
671
|
char** pc = (char**)(ptr + fd.blobLenBytes());
|
|
607
672
|
|
|
608
|
-
if ((typeid(T) != typeid(char)) ||
|
|
673
|
+
if ((typeid(T) != typeid(char)) ||
|
|
674
|
+
(cv->isNeedConvert() && (typeid(T) == typeid(char))))
|
|
609
675
|
{
|
|
610
676
|
size_t len = fd.blobDataLen((const uchar_td*)ptr);
|
|
611
677
|
size_t olen = len * 2 + 1;
|
|
612
678
|
result = strBufs->getPtr<T>(olen);
|
|
613
679
|
len = cv->revert(result, olen, *pc, len);
|
|
614
680
|
result[len] = 0x00;
|
|
615
|
-
|
|
616
681
|
}
|
|
617
682
|
else
|
|
618
683
|
result = (T*)*pc;
|
|
@@ -620,9 +685,10 @@ const T* readBlob(char* ptr, ::bzs::rtl::stringBuffer* strBufs, fielddef& fd, st
|
|
|
620
685
|
}
|
|
621
686
|
#pragma warn .8004
|
|
622
687
|
|
|
623
|
-
}// namespace client
|
|
624
|
-
}// namespace tdap
|
|
625
|
-
}// namespace protocol
|
|
626
|
-
}// namespace db
|
|
627
|
-
}// namespace bzs
|
|
628
|
-
|
|
688
|
+
} // namespace client
|
|
689
|
+
} // namespace tdap
|
|
690
|
+
} // namespace protocol
|
|
691
|
+
} // namespace db
|
|
692
|
+
} // namespace bzs
|
|
693
|
+
|
|
694
|
+
#endif // BZS_DB_PROTOCOL_TDAP_CLIENT_STRINGCONVERTER_H
|