transactd 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +46 -67
- data/BUILD_WIN-JA +106 -63
- data/CMakeLists.txt +40 -15
- data/README +219 -75
- data/README-JA +207 -76
- data/README_ORMSRCGEN +118 -0
- data/README_ORMSRCGEN-JA +115 -0
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +18 -14
- data/build/common/create_symlink.cmake.in +25 -0
- data/build/common/get_boost_libs.cmake +23 -23
- data/build/common/options.cmake +0 -66
- data/build/common/smart_install.cmake +3 -3
- data/build/common/transactd.rc.in +15 -5
- data/build/common/transactd_cl_common.cmake +37 -18
- data/build/common/transactd_cl_output.cmake +55 -13
- data/build/common/transactd_common.cmake +108 -31
- data/build/swig/php/generate.cmake.in +15 -17
- data/build/swig/php/generate.cmd.in +15 -9
- data/build/swig/php/php.swg +124 -82
- data/build/swig/php/transactd.no_yield.php +4494 -0
- data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
- data/build/swig/php/transactd.no_yield.php.patch +685 -0
- data/build/swig/php/transactd.yield.php +4461 -0
- data/build/swig/php/transactd.yield.php.git.patch +652 -0
- data/build/swig/php/transactd.yield.php.patch +652 -0
- data/build/swig/referencecounter.h +79 -0
- data/build/swig/ruby/ruby.swg +226 -76
- data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
- data/build/swig/ruby/without_gvl.swg +87 -0
- data/build/swig/tdcl.i +659 -170
- data/build/swig/validatablepointer.h +91 -0
- data/build/tdclc/CMakeLists.txt +49 -34
- data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +84 -20
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
- data/build/tdclrb/CMakeLists.txt +84 -66
- data/build/tdclrb/bldgem/extconf.rb +28 -3
- data/build/tdclrb/gem/helper.rb +11 -1
- data/build/tdclrb/gem_output.cmake +20 -16
- data/index_ja.html +15 -0
- data/source/bzs/db/IBlobBuffer.h +15 -17
- data/source/bzs/db/blobBuffer.h +186 -140
- data/source/bzs/db/blobStructs.h +37 -37
- data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
- data/source/bzs/db/engine/mysql/bookmark.h +150 -147
- data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
- data/source/bzs/db/engine/mysql/database.h +608 -370
- data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
- data/source/bzs/db/engine/mysql/dbManager.h +115 -104
- data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
- data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
- data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
- data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
- data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
- data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
- data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
- data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
- data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
- data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
- data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
- data/source/bzs/db/protocol/tdap/client/client.h +361 -320
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
- data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
- data/source/bzs/db/protocol/tdap/client/database.h +141 -118
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
- data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
- data/source/bzs/db/protocol/tdap/client/export.h +35 -0
- data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
- data/source/bzs/db/protocol/tdap/client/field.h +393 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
- data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
- data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
- data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
- data/source/bzs/db/protocol/tdap/client/request.h +227 -170
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
- data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
- data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
- data/source/bzs/db/protocol/tdap/client/table.h +413 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
- data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
- data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
- data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
- data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
- data/source/bzs/db/transactd/appBuilderImple.h +21 -20
- data/source/bzs/db/transactd/appModule.cpp +350 -98
- data/source/bzs/db/transactd/appModule.h +31 -37
- data/source/bzs/db/transactd/connManager.cpp +138 -135
- data/source/bzs/db/transactd/connManager.h +28 -21
- data/source/bzs/db/transactd/connectionRecord.h +39 -39
- data/source/bzs/db/transactd/transactd.cpp +217 -203
- data/source/bzs/env/boost_bcb_link.h +131 -0
- data/source/bzs/env/compiler.h +136 -79
- data/source/bzs/env/crosscompile.cpp +57 -57
- data/source/bzs/env/crosscompile.h +130 -115
- data/source/bzs/env/fileopen.h +7 -8
- data/source/bzs/env/mbcswchrLinux.cpp +4 -9
- data/source/bzs/env/mbcswchrLinux.h +37 -34
- data/source/bzs/env/tcharMinGW.h +59 -0
- data/source/bzs/env/tstring.h +90 -95
- data/source/bzs/example/changeSchema.cpp +22 -23
- data/source/bzs/example/changeSchema_c.cpp +22 -24
- data/source/bzs/example/connection_pool_c.cpp +49 -104
- data/source/bzs/example/createDatabase.cpp +40 -47
- data/source/bzs/example/createDatabase_c.cpp +38 -43
- data/source/bzs/example/deleteRecords.cpp +10 -15
- data/source/bzs/example/deleteRecords_c.cpp +10 -14
- data/source/bzs/example/dropDatabase.cpp +3 -9
- data/source/bzs/example/dropDatabase_c.cpp +5 -6
- data/source/bzs/example/insertRecords.cpp +37 -29
- data/source/bzs/example/insertRecords_c.cpp +19 -25
- data/source/bzs/example/ormap_c.cpp +621 -0
- data/source/bzs/example/queryData.cpp +371 -0
- data/source/bzs/example/queryData.h +16 -0
- data/source/bzs/example/query_c.cpp +109 -0
- data/source/bzs/example/readRecords.cpp +27 -27
- data/source/bzs/example/readRecords_c.cpp +25 -23
- data/source/bzs/example/updateRecords.cpp +16 -21
- data/source/bzs/example/updateRecords_c.cpp +8 -12
- data/source/bzs/example/update_with_transaction.cpp +21 -24
- data/source/bzs/example/update_with_transaction_c.cpp +12 -15
- data/source/bzs/example/useORMRecord.cpp +177 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
- data/source/bzs/netsvc/client/tcpClient.h +541 -489
- data/source/bzs/netsvc/server/IAppModule.h +119 -32
- data/source/bzs/netsvc/server/iserver.h +21 -23
- data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
- data/source/bzs/netsvc/server/serverCpt.h +41 -43
- data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
- data/source/bzs/netsvc/server/serverPipe.h +44 -45
- data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
- data/source/bzs/netsvc/server/serverTpool.h +38 -43
- data/source/bzs/rtl/benchmark.cpp +91 -31
- data/source/bzs/rtl/benchmark.h +76 -22
- data/source/bzs/rtl/datetime.cpp +231 -233
- data/source/bzs/rtl/datetime.h +16 -16
- data/source/bzs/rtl/debuglog.cpp +48 -51
- data/source/bzs/rtl/debuglog.h +55 -44
- data/source/bzs/rtl/exception.h +55 -48
- data/source/bzs/rtl/stl_uty.cpp +27 -28
- data/source/bzs/rtl/stl_uty.h +28 -29
- data/source/bzs/rtl/stringBuffers.cpp +8 -6
- data/source/bzs/rtl/stringBuffers.h +16 -9
- data/source/bzs/rtl/strtrim.cpp +90 -91
- data/source/bzs/rtl/strtrim.h +14 -16
- data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
- data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
- data/source/bzs/test/tdclphp/bench.php +357 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
- data/source/bzs/test/tdclrb/prepare.rb +15 -12
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
- data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
- data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
- data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
- data/source/bzs/test/transactdBench/workerBase.h +88 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
- data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
- data/source/global/ormsrcgen/confParam.h +80 -0
- data/source/global/ormsrcgen/fieldName.cpp +77 -0
- data/source/global/ormsrcgen/fieldName.h +43 -0
- data/source/global/ormsrcgen/main.cpp +196 -0
- data/source/global/ormsrcgen/srcgen.cpp +763 -0
- data/source/global/ormsrcgen/srcgen.h +72 -0
- data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
- data/source/global/ormsrcgen/template/template.cnf +38 -0
- data/source/global/querystmts/querystmts.cpp +237 -0
- data/source/global/tdclatl/ConnectParams.cpp +77 -0
- data/source/global/tdclatl/ConnectParams.h +70 -0
- data/source/global/tdclatl/Database.cpp +132 -128
- data/source/global/tdclatl/Database.h +60 -49
- data/source/global/tdclatl/DbDef.cpp +68 -64
- data/source/global/tdclatl/DbDef.h +36 -36
- data/source/global/tdclatl/Field.cpp +12 -17
- data/source/global/tdclatl/Field.h +15 -12
- data/source/global/tdclatl/FieldDef.cpp +75 -36
- data/source/global/tdclatl/FieldDef.h +38 -19
- data/source/global/tdclatl/FieldDefs.cpp +74 -0
- data/source/global/tdclatl/FieldDefs.h +56 -0
- data/source/global/tdclatl/FieldNames.cpp +99 -0
- data/source/global/tdclatl/FieldNames.h +66 -0
- data/source/global/tdclatl/Flags.cpp +75 -37
- data/source/global/tdclatl/Flags.h +13 -12
- data/source/global/tdclatl/GroupQuery.cpp +119 -0
- data/source/global/tdclatl/GroupQuery.h +65 -0
- data/source/global/tdclatl/KeyDef.cpp +15 -14
- data/source/global/tdclatl/KeyDef.h +20 -17
- data/source/global/tdclatl/KeySegment.cpp +13 -12
- data/source/global/tdclatl/PooledDbManager.cpp +223 -0
- data/source/global/tdclatl/PooledDbManager.h +76 -0
- data/source/global/tdclatl/QueryBase.cpp +206 -127
- data/source/global/tdclatl/QueryBase.h +55 -59
- data/source/global/tdclatl/Record.cpp +214 -0
- data/source/global/tdclatl/Record.h +96 -0
- data/source/global/tdclatl/Recordset.cpp +278 -0
- data/source/global/tdclatl/Recordset.h +83 -0
- data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
- data/source/global/tdclatl/RecordsetQuery.h +126 -0
- data/source/global/tdclatl/Table.cpp +57 -60
- data/source/global/tdclatl/Table.h +32 -29
- data/source/global/tdclatl/TableDef.cpp +63 -62
- data/source/global/tdclatl/TableDef.h +20 -22
- data/source/global/tdclatl/TdVersion.cpp +3 -3
- data/source/global/tdclatl/TdVersion.h +15 -11
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
- data/source/global/tdclatl/activeTable.cpp +355 -0
- data/source/global/tdclatl/activeTable.h +79 -0
- data/source/global/tdclatl/dllmain.cpp +4 -3
- data/source/global/tdclatl/dllmain.h +7 -6
- data/source/global/tdclatl/keySegment.h +22 -18
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.h +6 -4
- data/source/global/tdclatl/targetver.h +0 -1
- data/source/global/tdclatl/tdclatl.cpp +10 -5
- data/source/global/tdclatl/tdclatl.idl +530 -14
- data/source/linux/charsetConvert.h +78 -79
- data/source/linux/linuxTypes.h +9 -12
- data/source/linux/tchar.h +168 -166
- data/transactd.gemspec +24 -16
- metadata +98 -12
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/tdclc/tdclc_32.cbproj +0 -173
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
- data/build/tdclrb/GEM_VERSION +0 -3
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
- data/source/bzs/example/useORM.cpp +0 -585
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/* =================================================================
|
|
2
|
+
Copyright (C) 2012 2013 BizStation Corp All rights reserved.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
19
|
|
|
20
20
|
#include "sqlBuilder.h"
|
|
21
21
|
#include <bzs/rtl/stl_uty.h>
|
|
@@ -42,534 +42,555 @@ namespace tdap
|
|
|
42
42
|
namespace client
|
|
43
43
|
{
|
|
44
44
|
|
|
45
|
-
|
|
46
45
|
/** Remove extention
|
|
47
46
|
* To lower_case
|
|
48
47
|
*/
|
|
49
48
|
std::string getFileName(const char* name)
|
|
50
49
|
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
50
|
+
const char* st = name;
|
|
51
|
+
const char* en = st + strlen(name);
|
|
52
|
+
const char* p = strrchr(name, '.');
|
|
53
|
+
if (p)
|
|
54
|
+
en = p;
|
|
55
|
+
p = strrchr(name, PSEPARATOR_C);
|
|
56
|
+
if (p)
|
|
57
|
+
st = p + 1;
|
|
58
|
+
p = strrchr(name, '=');
|
|
59
|
+
if (p && p + 1 > st)
|
|
60
|
+
st = p + 1;
|
|
61
|
+
|
|
62
|
+
char tableName[MYSQL_TBNAME_SIZE] = { 0x00 };
|
|
63
|
+
strncpy_s(tableName, MYSQL_TBNAME_SIZE, st, en - st);
|
|
64
|
+
_strlwr_s(tableName, MYSQL_TBNAME_SIZE);
|
|
65
|
+
return tableName;
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
#define TMP_BUFSIZE 100
|
|
70
69
|
char g_buf[TMP_BUFSIZE];
|
|
71
70
|
|
|
72
71
|
#define NOTE_TYPE 12
|
|
73
|
-
#define VAR_TYPE
|
|
72
|
+
#define VAR_TYPE 13
|
|
74
73
|
|
|
75
74
|
const char* getFieldTypeName(uchar_td fieldType, int size, bool nobinary,
|
|
76
|
-
|
|
75
|
+
const char* charsetName)
|
|
77
76
|
{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
77
|
+
const char* bin_ptr = nobinary ? "" : "binary";
|
|
78
|
+
char charsetString[128] = { " CHARACTER SET " };
|
|
79
|
+
if (charsetName[0])
|
|
80
|
+
strcat_s(charsetString, 128, charsetName);
|
|
81
|
+
else
|
|
82
|
+
charsetString[0] = 0x00;
|
|
83
|
+
|
|
84
|
+
switch (fieldType)
|
|
85
|
+
{
|
|
86
|
+
|
|
87
|
+
case ft_integer:
|
|
88
|
+
case ft_autoinc:
|
|
89
|
+
case ft_currency:
|
|
90
|
+
case ft_date:
|
|
91
|
+
case ft_time:
|
|
92
|
+
case ft_timestamp:
|
|
93
|
+
if (size == 1)
|
|
94
|
+
return "TINYINT";
|
|
95
|
+
if (size == 2)
|
|
96
|
+
return "SMALLINT";
|
|
97
|
+
if (size == 4)
|
|
98
|
+
return "INT";
|
|
99
|
+
if (size == 8)
|
|
100
|
+
return "BIGINT";
|
|
101
|
+
case ft_uinteger:
|
|
99
102
|
case ft_autoIncUnsigned:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
103
|
+
if (size == 1)
|
|
104
|
+
return "TINYINT UNSIGNED";
|
|
105
|
+
if (size == 2)
|
|
106
|
+
return "SMALLINT UNSIGNED";
|
|
107
|
+
if (size == 4)
|
|
108
|
+
return "INT UNSIGNED";
|
|
109
|
+
if (size == 8)
|
|
110
|
+
return "BIGINT UNSIGNED";
|
|
111
|
+
case ft_logical:
|
|
112
|
+
return "TINYINT UNSIGNED";
|
|
113
|
+
case ft_mydate:
|
|
114
|
+
return "DATE";
|
|
115
|
+
case ft_mytime:
|
|
116
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "TIME(%d)", (size - 3) * 2);
|
|
117
|
+
return g_buf;
|
|
118
|
+
case ft_mydatetime:
|
|
119
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "DATETIME(%d)", (size - 5) * 2);
|
|
120
|
+
return g_buf;
|
|
121
|
+
case ft_mytimestamp:
|
|
122
|
+
|
|
123
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "TIMESTAMP(%d)", (size - 4) * 2);
|
|
124
|
+
return g_buf;
|
|
125
|
+
case ft_mytext:
|
|
126
|
+
if (size - 8 == 4)
|
|
127
|
+
return "LONGTEXT";
|
|
128
|
+
else if (size - 8 == 3)
|
|
129
|
+
return "MEDIUMTEXT";
|
|
130
|
+
else if (size - 8 == 2)
|
|
131
|
+
return "TEXT";
|
|
132
|
+
return "TINYTEXT";
|
|
133
|
+
case ft_myblob:
|
|
134
|
+
if (size - 8 == 4)
|
|
135
|
+
return "LONGBLOB";
|
|
136
|
+
else if (size - 8 == 3)
|
|
137
|
+
return "MEDIUMBLOB";
|
|
138
|
+
else if (size - 8 == 2)
|
|
139
|
+
return "BLOB";
|
|
140
|
+
return "TINYBLOB";
|
|
141
|
+
case ft_float:
|
|
142
|
+
if (size == 4)
|
|
143
|
+
return "FLOAT";
|
|
144
|
+
if (size == 8)
|
|
145
|
+
return "DOUBLE";
|
|
146
|
+
case ft_string:
|
|
147
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "BINARY(%d)", size);
|
|
148
|
+
return g_buf;
|
|
149
|
+
case ft_zstring:
|
|
150
|
+
case ft_wzstring:
|
|
151
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "BINARY(%d)", size);
|
|
152
|
+
return g_buf;
|
|
153
|
+
case ft_note: // note can not use key
|
|
154
|
+
case ft_lvar: // var
|
|
155
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "VARBINARY(%d)", size);
|
|
156
|
+
return g_buf;
|
|
157
|
+
case ft_myvarbinary:
|
|
158
|
+
case ft_myfixedbinary:
|
|
159
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "VARBINARY(%d)", size);
|
|
160
|
+
return g_buf;
|
|
161
|
+
case ft_mywvarbinary:
|
|
162
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "VARBINARY(%d)", size);
|
|
163
|
+
return g_buf;
|
|
164
|
+
|
|
165
|
+
case ft_mywvarchar:
|
|
166
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "VARCHAR(%d) %s CHARACTER SET utf16le",
|
|
167
|
+
size, bin_ptr);
|
|
168
|
+
return g_buf;
|
|
169
|
+
case ft_myvarchar:
|
|
170
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "VARCHAR(%d) %s%s", size, bin_ptr,
|
|
171
|
+
charsetString);
|
|
172
|
+
return g_buf;
|
|
173
|
+
case ft_mychar:
|
|
174
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "CHAR(%d) %s%s", size, bin_ptr,
|
|
175
|
+
charsetString);
|
|
176
|
+
return g_buf;
|
|
177
|
+
case ft_mywchar:
|
|
178
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "CHAR(%d) %s CHARACTER SET utf16le", size,
|
|
179
|
+
bin_ptr);
|
|
180
|
+
return g_buf;
|
|
181
|
+
case ft_decimal:
|
|
182
|
+
case ft_money:
|
|
183
|
+
case ft_numeric:
|
|
184
|
+
case ft_bfloat:
|
|
185
|
+
case ft_numericsts:
|
|
186
|
+
case ft_numericsa:
|
|
187
|
+
case ft_guid:
|
|
188
|
+
sprintf_s(g_buf, TMP_BUFSIZE, "BINARY(%d)", size);
|
|
189
|
+
return g_buf;
|
|
190
|
+
}
|
|
191
|
+
return "";
|
|
176
192
|
}
|
|
177
193
|
|
|
178
194
|
FLAGS getKeyFlags(tabledef* table, short fieldNum)
|
|
179
195
|
{
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
for (int i = 0; i < table->keyCount; i++)
|
|
197
|
+
{
|
|
198
|
+
keydef& key = table->keyDefs[i];
|
|
199
|
+
for (int j = 0; j < key.segmentCount; j++)
|
|
200
|
+
{
|
|
201
|
+
if (key.segments[j].fieldNum == fieldNum)
|
|
202
|
+
return key.segments[j].flags;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
FLAGS a;
|
|
206
|
+
a.all = 0;
|
|
207
|
+
return a;
|
|
192
208
|
}
|
|
193
209
|
|
|
194
210
|
bool isNumericFieldName(const char* name)
|
|
195
211
|
{
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
212
|
+
if (name)
|
|
213
|
+
{
|
|
214
|
+
if (name[0] >= '0' && name[0] <= '9')
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
202
218
|
}
|
|
203
219
|
|
|
204
220
|
bool isNULLKeySegment(tabledef* table, short fieldIndex)
|
|
205
221
|
{
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
222
|
+
bool ret = 0;
|
|
223
|
+
for (int i = 0; i < table->keyCount; i++)
|
|
224
|
+
{
|
|
225
|
+
keydef& key = table->keyDefs[i];
|
|
226
|
+
for (int j = 0; j < key.segmentCount; j++)
|
|
227
|
+
{
|
|
228
|
+
if (key.segments[j].fieldNum == fieldIndex)
|
|
229
|
+
{
|
|
230
|
+
// bit3 all segment NULL key
|
|
231
|
+
// bit9 part segment NULL key
|
|
232
|
+
// if fd.nullValue != 0x00 then this field is type of not null .
|
|
233
|
+
const fielddef& fd = table->fieldDefs[fieldIndex];
|
|
234
|
+
if (((key.segments[j].flags.bit3 ||
|
|
235
|
+
key.segments[j].flags.bit9)) &&
|
|
236
|
+
(fd.nullValue == 0x00))
|
|
237
|
+
ret = true;
|
|
238
|
+
else
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return ret;
|
|
227
244
|
}
|
|
228
245
|
|
|
229
246
|
std::string getFiledList(tabledef* table, std::vector<std::string>& fdl)
|
|
230
247
|
{
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
248
|
+
std::string s;
|
|
249
|
+
int len;
|
|
250
|
+
for (int i = 0; i < table->fieldCount; i++)
|
|
251
|
+
{
|
|
252
|
+
fielddef& fd = table->fieldDefs[i];
|
|
253
|
+
s += "`";
|
|
254
|
+
s += fdl[i];
|
|
255
|
+
s += "` ";
|
|
256
|
+
len = fd.len - fd.varLenBytes();
|
|
257
|
+
|
|
258
|
+
/*
|
|
259
|
+
Although len is a number of bytes in BDF, it becomes the number of
|
|
260
|
+
characters in MySQL.
|
|
261
|
+
Moreover, unicode cannot be specified by charset of the field. */
|
|
262
|
+
if (fd.charsetIndex() == 0)
|
|
263
|
+
fd.setCharsetIndex(table->charsetIndex);
|
|
264
|
+
if ((fd.type == ft_myvarchar) || (fd.type == ft_mychar))
|
|
265
|
+
len /= mysql::charsize(fd.charsetIndex());
|
|
266
|
+
else if ((fd.type == ft_mywvarchar) || (fd.type == ft_mywchar))
|
|
267
|
+
len /= mysql::charsize(CHARSET_UTF16LE);
|
|
268
|
+
|
|
269
|
+
FLAGS f = getKeyFlags(table, i);
|
|
270
|
+
const char* charsetName = "";
|
|
271
|
+
if (fd.charsetIndex() != table->charsetIndex)
|
|
272
|
+
charsetName = mysql::charsetName(fd.charsetIndex());
|
|
273
|
+
|
|
274
|
+
s += getFieldTypeName(fd.type, len, f.bitA, charsetName);
|
|
275
|
+
if (isNULLKeySegment(table, i))
|
|
276
|
+
s += " NULL";
|
|
277
|
+
else
|
|
278
|
+
s += " NOT NULL";
|
|
279
|
+
if ((fd.type == ft_autoinc) || (fd.type == ft_autoIncUnsigned))
|
|
280
|
+
s += " AUTO_INCREMENT";
|
|
281
|
+
s += ",";
|
|
282
|
+
}
|
|
283
|
+
return s;
|
|
266
284
|
}
|
|
267
285
|
|
|
268
|
-
void insertNisFields(tabledef* table, std::vector<std::string>& fdl,
|
|
286
|
+
void insertNisFields(tabledef* table, std::vector<std::string>& fdl,
|
|
287
|
+
std::string& s)
|
|
269
288
|
{
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
289
|
+
char buf[20];
|
|
290
|
+
for (int i = 0; i < table->keyCount; i++)
|
|
291
|
+
{
|
|
292
|
+
_ltoa_s(i, buf, 20, 10);
|
|
293
|
+
std::string fddef = "";
|
|
294
|
+
keydef& key = table->keyDefs[i];
|
|
295
|
+
if (key.segmentCount > 1)
|
|
296
|
+
{
|
|
297
|
+
if (key.segments[0].flags.bit9)
|
|
298
|
+
fddef = std::string("`") + "$nfn" + buf +
|
|
299
|
+
"` TINYINT UNSIGNED NULL,";
|
|
300
|
+
else if (key.segments[0].flags.bit3)
|
|
301
|
+
fddef = std::string("`") + "$nfa" + buf +
|
|
302
|
+
"` TINYINT UNSIGNED NULL,";
|
|
303
|
+
}
|
|
304
|
+
if (fddef != "")
|
|
305
|
+
s += fddef;
|
|
306
|
+
}
|
|
287
307
|
}
|
|
288
308
|
|
|
289
309
|
std::string getKeyList(tabledef* table, std::vector<std::string>& fdl)
|
|
290
310
|
{
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return s;
|
|
311
|
+
char buf[20];
|
|
312
|
+
std::string s;
|
|
313
|
+
|
|
314
|
+
for (int i = 0; i < table->keyCount; i++)
|
|
315
|
+
{
|
|
316
|
+
keydef& key = table->keyDefs[i];
|
|
317
|
+
_ltoa_s(i, buf, 20, 10);
|
|
318
|
+
if ((table->primaryKeyNum == i) &&
|
|
319
|
+
(fdl[key.segments[0].fieldNum] == "auto_id_field"))
|
|
320
|
+
s += " PRIMARY KEY ";
|
|
321
|
+
else
|
|
322
|
+
{
|
|
323
|
+
if (key.segments[0].flags.bit0 == false)
|
|
324
|
+
s += " UNIQUE ";
|
|
325
|
+
else
|
|
326
|
+
s += " INDEX ";
|
|
327
|
+
s += "key";
|
|
328
|
+
|
|
329
|
+
s += buf;
|
|
330
|
+
}
|
|
331
|
+
s += "(";
|
|
332
|
+
|
|
333
|
+
// "nf" segment is added to a head.
|
|
334
|
+
if (key.segmentCount > 1)
|
|
335
|
+
{
|
|
336
|
+
// If a first segment is not 1 byte of Logical
|
|
337
|
+
fielddef& fd = table->fieldDefs[key.segments[0].fieldNum];
|
|
338
|
+
if (!((fd.len == 1) && (fd.type == ft_logical)))
|
|
339
|
+
{
|
|
340
|
+
if (key.segments[0].flags.bit9)
|
|
341
|
+
s += std::string("`") + "$nfn" + buf + "`,";
|
|
342
|
+
else if (key.segments[0].flags.bit3)
|
|
343
|
+
s += std::string("`") + "$nfa" + buf + "`,";
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
for (int j = 0; j < key.segmentCount; j++)
|
|
347
|
+
{
|
|
348
|
+
s += "`";
|
|
349
|
+
s += fdl[key.segments[j].fieldNum];
|
|
350
|
+
s += "`";
|
|
351
|
+
|
|
352
|
+
// part key
|
|
353
|
+
fielddef& fd = table->fieldDefs[key.segments[j].fieldNum];
|
|
354
|
+
if (fd.keylen && ((fd.keylen != fd.len) || fd.blobLenBytes()))
|
|
355
|
+
{
|
|
356
|
+
sprintf_s(buf, 20, "(%d)", fd.keylen);
|
|
357
|
+
s += buf;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (key.segments[j].flags.bit6)
|
|
361
|
+
s += " DESC";
|
|
362
|
+
s += ",";
|
|
363
|
+
}
|
|
364
|
+
s.erase(s.end() - 1);
|
|
365
|
+
s += "),";
|
|
366
|
+
}
|
|
367
|
+
return s;
|
|
349
368
|
}
|
|
350
369
|
|
|
351
|
-
std::string convertString(unsigned int toPage, unsigned int fromPage,
|
|
370
|
+
std::string convertString(unsigned int toPage, unsigned int fromPage,
|
|
371
|
+
const char* p)
|
|
352
372
|
{
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
373
|
+
std::string s;
|
|
374
|
+
stringConverter cv(toPage, fromPage);
|
|
375
|
+
int osize = (int)strlen(p) * 3;
|
|
376
|
+
char* srvchar = new char[osize];
|
|
377
|
+
size_t len = cv.convert(srvchar, osize, p, strlen(p));
|
|
378
|
+
srvchar[len] = 0x00;
|
|
379
|
+
s = srvchar;
|
|
380
|
+
delete[] srvchar;
|
|
381
|
+
return s;
|
|
362
382
|
}
|
|
363
383
|
|
|
364
|
-
std::string sqlCreateTable(const char* name/*utf8*/, tabledef* table,
|
|
384
|
+
std::string sqlCreateTable(const char* name /* utf8 */, tabledef* table,
|
|
385
|
+
uchar_td charsetIndexServer)
|
|
365
386
|
{
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
387
|
+
// Duplication of a name is inspected and, in duplication, _1 is added.
|
|
388
|
+
// It does not correspond to two or more duplications.
|
|
389
|
+
std::string s = "CREATE TABLE `";
|
|
390
|
+
|
|
391
|
+
std::vector<std::string> fdl;
|
|
392
|
+
std::vector<std::string> fds;
|
|
393
|
+
char tmp[256];
|
|
394
|
+
char num[10];
|
|
395
|
+
for (int i = 0; i < table->fieldCount; i++)
|
|
396
|
+
{
|
|
397
|
+
fielddef& fd = table->fieldDefs[i];
|
|
398
|
+
strcpy_s(tmp, 256, fd.nameA());
|
|
399
|
+
_strlwr_s(tmp, 256);
|
|
400
|
+
if (std::find(fdl.begin(), fdl.end(), tmp) != fdl.end())
|
|
401
|
+
{
|
|
402
|
+
_ltoa_s(i, num, 10, 10);
|
|
403
|
+
strcat_s(tmp, 256, num);
|
|
404
|
+
fds.push_back(std::string(fd.nameA()) + num);
|
|
405
|
+
}
|
|
406
|
+
else
|
|
407
|
+
fds.push_back(fd.nameA());
|
|
408
|
+
fdl.push_back(tmp);
|
|
409
|
+
}
|
|
410
|
+
uint_td schemaCodePage =
|
|
411
|
+
table->schemaCodePage ? table->schemaCodePage : GetACP();
|
|
412
|
+
if ((name && name[0]))
|
|
413
|
+
{
|
|
414
|
+
std::string name2 = name;
|
|
415
|
+
if (schemaCodePage != CP_UTF8)
|
|
416
|
+
name2 = convertString(schemaCodePage, CP_UTF8, name);
|
|
417
|
+
s += getFileName(name2.c_str()) + "` (";
|
|
418
|
+
}
|
|
419
|
+
else
|
|
420
|
+
s += getFileName(table->fileNameA()) + "` (";
|
|
421
|
+
s += getFiledList(table, fds);
|
|
422
|
+
insertNisFields(table, fds, s);
|
|
423
|
+
s += getKeyList(table, fds);
|
|
424
|
+
if (s[s.size() - 1] == ',')
|
|
425
|
+
s.erase(s.end() - 1);
|
|
426
|
+
s += ") ENGINE=InnoDB default charset=" +
|
|
427
|
+
std::string(mysql::charsetName(table->charsetIndex));
|
|
404
428
|
|
|
405
429
|
// create statement charset must be server default charset.
|
|
406
430
|
// server default charset writen in my.cnf.
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
431
|
+
if (schemaCodePage != mysql::codePage(charsetIndexServer))
|
|
432
|
+
s = convertString(mysql::codePage(charsetIndexServer), schemaCodePage,
|
|
433
|
+
s.c_str());
|
|
434
|
+
return s;
|
|
410
435
|
}
|
|
411
436
|
|
|
412
|
-
|
|
413
437
|
int findFieldNum(std::vector<fielddef>& fds, int pos)
|
|
414
438
|
{
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
439
|
+
for (int i = 0; i < (int)fds.size(); i++)
|
|
440
|
+
{
|
|
441
|
+
if (fds[i].pos == pos)
|
|
442
|
+
return i;
|
|
443
|
+
}
|
|
444
|
+
return -1;
|
|
421
445
|
}
|
|
422
446
|
|
|
423
447
|
void makeField(std::vector<fielddef>& fds, keySpec* ks, int keynum, int seg)
|
|
424
448
|
{
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
449
|
+
char buf[100];
|
|
450
|
+
fielddef fd;
|
|
451
|
+
memset(&fd, 0x00, sizeof(fielddef));
|
|
452
|
+
sprintf_s(buf, 100, "key%d_%d", keynum, seg);
|
|
453
|
+
fd.setNameA(buf);
|
|
454
|
+
fd.len = ks->keyLen;
|
|
455
|
+
fd.type = ks->keyType;
|
|
456
|
+
fd.pos = ks->keyPos;
|
|
457
|
+
fds.push_back(fd);
|
|
434
458
|
}
|
|
435
459
|
|
|
436
460
|
bool field_sort(const fielddef& l, const fielddef& r)
|
|
437
461
|
{
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
462
|
+
if (l.pos < r.pos)
|
|
463
|
+
return 1;
|
|
464
|
+
return 0;
|
|
441
465
|
}
|
|
442
466
|
|
|
443
467
|
void completeFields(std::vector<fielddef>& fds, int reclen, bool valiableLen)
|
|
444
468
|
{
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
469
|
+
char buf[100];
|
|
470
|
+
int pos = 1;
|
|
471
|
+
for (int i = 0; i < (int)fds.size(); i++)
|
|
472
|
+
{
|
|
473
|
+
if (fds[i].pos > pos)
|
|
474
|
+
{
|
|
475
|
+
fielddef fd;
|
|
476
|
+
memset(&fd, 0x00, sizeof(fielddef));
|
|
477
|
+
sprintf_s(buf, 100, "field%d", i);
|
|
478
|
+
fd.setNameA(buf);
|
|
479
|
+
fd.pos = pos;
|
|
480
|
+
fd.len = fds[i].pos - pos;
|
|
481
|
+
fd.type = (fd.len > 255) ? ft_note : ft_zstring;
|
|
482
|
+
fds.insert(fds.begin() + i, fd);
|
|
483
|
+
i++;
|
|
484
|
+
}
|
|
485
|
+
pos = fds[i].pos + fds[i].len;
|
|
486
|
+
}
|
|
487
|
+
if (pos <= reclen)
|
|
488
|
+
{
|
|
489
|
+
fielddef fd;
|
|
490
|
+
memset(&fd, 0x00, sizeof(fielddef));
|
|
491
|
+
|
|
492
|
+
sprintf_s(buf, 100, "field%d", (int)fds.size());
|
|
493
|
+
fd.setNameA(buf);
|
|
494
|
+
fd.pos = pos;
|
|
495
|
+
fd.len = reclen - pos + 1;
|
|
496
|
+
fd.type = (fd.len > 255) ? ft_note : ft_zstring;
|
|
497
|
+
if (fd.type == NOTE_TYPE)
|
|
498
|
+
fd.len = 57000 - pos + 1;
|
|
499
|
+
fds.push_back(fd);
|
|
500
|
+
pos = fd.pos + fd.len;
|
|
501
|
+
}
|
|
502
|
+
// In the case of a variable-length record, the last must have a variable
|
|
503
|
+
// length field.
|
|
504
|
+
if (valiableLen)
|
|
505
|
+
{
|
|
506
|
+
if (fds[fds.size() - 1].type != ft_note)
|
|
507
|
+
{
|
|
508
|
+
fielddef fd;
|
|
509
|
+
memset(&fd, 0x00, sizeof(fielddef));
|
|
510
|
+
sprintf_s(buf, 100, "field%d", (int)fds.size());
|
|
511
|
+
fd.setNameA(buf);
|
|
512
|
+
fd.pos = pos;
|
|
513
|
+
fd.len = 57000 - pos + 1;
|
|
514
|
+
fd.type = NOTE_TYPE;
|
|
515
|
+
fds.push_back(fd);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
495
518
|
}
|
|
496
519
|
|
|
497
520
|
void makeTableDef(tabledef* TableDef, fileSpec* fs, std::vector<fielddef>& fds)
|
|
498
521
|
{
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
seg++;
|
|
517
|
-
if (ks->keyFlag.bit4==false)
|
|
518
|
-
{
|
|
519
|
-
keynum++;
|
|
520
|
-
seg = 0;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
//Sort by position.
|
|
524
|
-
std::sort(fds.begin(), fds.end(), field_sort);
|
|
525
|
-
|
|
526
|
-
//Fields are added to non key spaces
|
|
527
|
-
completeFields(fds, fs->recLen, (fs->fileFlag.all & 1));
|
|
528
|
-
//Assignment of a field number
|
|
529
|
-
k=0;
|
|
530
|
-
seg = 0;
|
|
531
|
-
keynum = 0;
|
|
532
|
-
while(keynum<TableDef->keyCount)
|
|
533
|
-
{
|
|
534
|
-
keySpec* ks = &(fs->keySpecs[k++]);
|
|
535
|
-
TableDef->keyDefs[keynum].segments[seg].fieldNum = findFieldNum(fds, ks->keyPos);
|
|
522
|
+
TableDef->keyCount = (uchar_td)fs->indexCount;
|
|
523
|
+
TableDef->flags.all = fs->fileFlag.all;
|
|
524
|
+
TableDef->fixedRecordLen = fs->recLen;
|
|
525
|
+
|
|
526
|
+
int k = 0;
|
|
527
|
+
int seg = 0;
|
|
528
|
+
int keynum = 0;
|
|
529
|
+
while (keynum < TableDef->keyCount)
|
|
530
|
+
{
|
|
531
|
+
keySpec* ks = &(fs->keySpecs[k++]);
|
|
532
|
+
// key flag
|
|
533
|
+
TableDef->keyDefs[keynum].segments[seg].flags.all = ks->keyFlag.all;
|
|
534
|
+
TableDef->keyDefs[keynum].segmentCount = seg + 1;
|
|
535
|
+
|
|
536
|
+
// field info
|
|
537
|
+
if (findFieldNum(fds, ks->keyPos) == -1)
|
|
538
|
+
makeField(fds, ks, keynum, seg);
|
|
536
539
|
seg++;
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
540
|
+
if (ks->keyFlag.bit4 == false)
|
|
541
|
+
{
|
|
542
|
+
keynum++;
|
|
543
|
+
seg = 0;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
// Sort by position.
|
|
547
|
+
std::sort(fds.begin(), fds.end(), field_sort);
|
|
548
|
+
|
|
549
|
+
// Fields are added to non key spaces
|
|
550
|
+
completeFields(fds, fs->recLen, (fs->fileFlag.all & 1));
|
|
551
|
+
// Assignment of a field number
|
|
552
|
+
k = 0;
|
|
553
|
+
seg = 0;
|
|
554
|
+
keynum = 0;
|
|
555
|
+
while (keynum < TableDef->keyCount)
|
|
556
|
+
{
|
|
557
|
+
keySpec* ks = &(fs->keySpecs[k++]);
|
|
558
|
+
TableDef->keyDefs[keynum].segments[seg].fieldNum =
|
|
559
|
+
findFieldNum(fds, ks->keyPos);
|
|
560
|
+
seg++;
|
|
561
|
+
if (ks->keyFlag.bit4 == false)
|
|
562
|
+
{
|
|
563
|
+
keynum++;
|
|
564
|
+
seg = 0;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// Copy of field info.
|
|
569
|
+
TableDef->fieldDefs = &fds[0];
|
|
570
|
+
TableDef->fieldCount = (ushort_td)fds.size();
|
|
548
571
|
}
|
|
549
572
|
|
|
550
|
-
std::string sqlCreateTable(const char* fileName,
|
|
573
|
+
std::string sqlCreateTable(const char* fileName, fileSpec* fs,
|
|
574
|
+
uchar_td charsetIndexServer)
|
|
551
575
|
{
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
576
|
+
tabledef table;
|
|
577
|
+
memset(&table, 0, sizeof(tabledef));
|
|
578
|
+
table.setFileNameA(fileName);
|
|
579
|
+
table.charsetIndex = mysql::charsetIndex(GetACP());
|
|
580
|
+
table.schemaCodePage = CP_UTF8;
|
|
581
|
+
std::vector<fielddef> fds;
|
|
582
|
+
std::vector<keydef> kds;
|
|
583
|
+
for (int i = 0; i < fs->indexCount; i++)
|
|
584
|
+
kds.push_back(keydef());
|
|
585
|
+
if (fs->indexCount)
|
|
586
|
+
table.keyDefs = &kds[0];
|
|
587
|
+
makeTableDef(&table, fs, fds);
|
|
588
|
+
|
|
589
|
+
return sqlCreateTable(fileName, &table, charsetIndexServer);
|
|
567
590
|
}
|
|
568
591
|
|
|
569
|
-
}//namespace client
|
|
570
|
-
}//namespace tdap
|
|
571
|
-
}//namespace protocol
|
|
572
|
-
}//namespace db
|
|
573
|
-
}//namespace bzs
|
|
574
|
-
|
|
575
|
-
|
|
592
|
+
} // namespace client
|
|
593
|
+
} // namespace tdap
|
|
594
|
+
} // namespace protocol
|
|
595
|
+
} // namespace db
|
|
596
|
+
} // namespace bzs
|