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
|
@@ -16,13 +16,8 @@
|
|
|
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 "database.h"
|
|
23
|
-
|
|
24
20
|
#include "table.h"
|
|
25
|
-
|
|
26
21
|
#include "dbDef.h"
|
|
27
22
|
#include <limits.h>
|
|
28
23
|
#include <sys/stat.h>
|
|
@@ -45,23 +40,24 @@ namespace client
|
|
|
45
40
|
|
|
46
41
|
struct dbimple
|
|
47
42
|
{
|
|
48
|
-
|
|
49
|
-
_TCHAR rootDir[MAX_PATH];
|
|
50
|
-
bool isOpened;
|
|
51
43
|
dbdef* dbDef;
|
|
52
44
|
void* optionalData;
|
|
53
|
-
|
|
54
|
-
bool lockReadOnly;
|
|
45
|
+
_TCHAR rootDir[MAX_PATH];
|
|
55
46
|
deleteRecordFn m_deleteRecordFn;
|
|
56
47
|
copyDataFn m_copyDataFn;
|
|
48
|
+
bool isOpened;
|
|
49
|
+
bool isTableReadOnly;
|
|
50
|
+
bool lockReadOnly;
|
|
57
51
|
|
|
58
|
-
dbimple()
|
|
59
|
-
|
|
52
|
+
dbimple()
|
|
53
|
+
: dbDef(NULL), optionalData(NULL), m_deleteRecordFn(NULL),
|
|
54
|
+
m_copyDataFn(NULL), isOpened(false), isTableReadOnly(false),
|
|
55
|
+
lockReadOnly(false)
|
|
60
56
|
{
|
|
61
57
|
rootDir[0] = 0x00;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
|
-
dbimple& operator
|
|
60
|
+
dbimple& operator=(const dbimple& rt)
|
|
65
61
|
{
|
|
66
62
|
if (&rt != this)
|
|
67
63
|
{
|
|
@@ -73,59 +69,105 @@ struct dbimple
|
|
|
73
69
|
lockReadOnly = rt.lockReadOnly;
|
|
74
70
|
m_deleteRecordFn = rt.m_deleteRecordFn;
|
|
75
71
|
m_copyDataFn = rt.m_copyDataFn;
|
|
76
|
-
|
|
77
72
|
}
|
|
78
73
|
return *this;
|
|
79
|
-
|
|
80
74
|
}
|
|
81
75
|
};
|
|
82
76
|
|
|
83
|
-
void database::destroy(database* db)
|
|
77
|
+
void database::destroy(database* db)
|
|
78
|
+
{
|
|
79
|
+
delete db;
|
|
80
|
+
}
|
|
84
81
|
|
|
85
|
-
database::database() : nsdatabase()
|
|
82
|
+
database::database() : nsdatabase()
|
|
86
83
|
{
|
|
87
|
-
|
|
84
|
+
m_impl = new dbimple();
|
|
88
85
|
}
|
|
89
86
|
|
|
90
87
|
database::~database()
|
|
91
88
|
{
|
|
92
|
-
|
|
89
|
+
doClose();
|
|
93
90
|
delete m_impl;
|
|
94
91
|
}
|
|
95
92
|
|
|
96
93
|
void database::release()
|
|
97
94
|
{
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
95
|
+
if (refCount() == 1)
|
|
96
|
+
nsdatabase::release();
|
|
97
|
+
else
|
|
98
|
+
{
|
|
99
|
+
nsdatabase::release();
|
|
100
|
+
if ((refCount() == 1) && m_impl->dbDef &&
|
|
101
|
+
(m_impl->dbDef->nsdb() == this))
|
|
102
|
+
nsdatabase::release();
|
|
103
|
+
}
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
dbdef* database::dbDef() const
|
|
106
|
+
dbdef* database::dbDef() const
|
|
107
|
+
{
|
|
108
|
+
return m_impl->dbDef;
|
|
109
|
+
}
|
|
107
110
|
|
|
108
|
-
const _TCHAR* database::rootDir() const
|
|
111
|
+
const _TCHAR* database::rootDir() const
|
|
112
|
+
{
|
|
113
|
+
return m_impl->rootDir;
|
|
114
|
+
}
|
|
109
115
|
|
|
110
|
-
void database::setRootDir(const _TCHAR* directory)
|
|
116
|
+
void database::setRootDir(const _TCHAR* directory)
|
|
117
|
+
{
|
|
118
|
+
setDir(directory);
|
|
119
|
+
}
|
|
111
120
|
|
|
112
|
-
void* database::optionalData() const
|
|
121
|
+
void* database::optionalData() const
|
|
122
|
+
{
|
|
123
|
+
return m_impl->optionalData;
|
|
124
|
+
}
|
|
113
125
|
|
|
114
|
-
void database::setOptionalData(void* v)
|
|
126
|
+
void database::setOptionalData(void* v)
|
|
127
|
+
{
|
|
128
|
+
m_impl->optionalData = v;
|
|
129
|
+
}
|
|
115
130
|
|
|
116
|
-
bool database::tableReadOnly() const
|
|
131
|
+
bool database::tableReadOnly() const
|
|
132
|
+
{
|
|
133
|
+
return m_impl->isTableReadOnly;
|
|
134
|
+
}
|
|
117
135
|
|
|
118
|
-
const deleteRecordFn database::onDeleteRecord() const
|
|
136
|
+
const deleteRecordFn database::onDeleteRecord() const
|
|
137
|
+
{
|
|
138
|
+
return m_impl->m_deleteRecordFn;
|
|
139
|
+
}
|
|
119
140
|
|
|
120
|
-
void database::setOnDeleteRecord(const deleteRecordFn v)
|
|
141
|
+
void database::setOnDeleteRecord(const deleteRecordFn v)
|
|
142
|
+
{
|
|
143
|
+
m_impl->m_deleteRecordFn = v;
|
|
144
|
+
}
|
|
121
145
|
|
|
122
|
-
const copyDataFn database::onCopyData() const
|
|
146
|
+
const copyDataFn database::onCopyData() const
|
|
147
|
+
{
|
|
148
|
+
return m_impl->m_copyDataFn;
|
|
149
|
+
}
|
|
123
150
|
|
|
124
|
-
void database::setOnCopyData(const copyDataFn v)
|
|
151
|
+
void database::setOnCopyData(const copyDataFn v)
|
|
152
|
+
{
|
|
153
|
+
m_impl->m_copyDataFn = v;
|
|
154
|
+
}
|
|
125
155
|
|
|
126
|
-
void database::setLockReadOnly(bool v)
|
|
156
|
+
void database::setLockReadOnly(bool v)
|
|
157
|
+
{
|
|
158
|
+
m_impl->lockReadOnly = v;
|
|
159
|
+
}
|
|
127
160
|
|
|
128
|
-
bool database::isOpened() const
|
|
161
|
+
bool database::isOpened() const
|
|
162
|
+
{
|
|
163
|
+
return m_impl->isOpened;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
char_td database::mode() const
|
|
167
|
+
{
|
|
168
|
+
assert(m_impl->dbDef);
|
|
169
|
+
return m_impl->dbDef->mode();
|
|
170
|
+
}
|
|
129
171
|
|
|
130
172
|
void database::create(const _TCHAR* fullpath, short type)
|
|
131
173
|
{
|
|
@@ -140,13 +182,13 @@ void database::drop()
|
|
|
140
182
|
if (m_impl->dbDef == NULL)
|
|
141
183
|
m_stat = STATUS_DB_YET_OPEN;
|
|
142
184
|
_TCHAR FullPath[MAX_PATH];
|
|
143
|
-
std::vector<std::_tstring>fileNames;
|
|
185
|
+
std::vector<std::_tstring> fileNames;
|
|
144
186
|
for (int i = 0; i <= m_impl->dbDef->tableCount(); i++)
|
|
145
187
|
{
|
|
146
188
|
if (m_impl->dbDef->tableDefs(i))
|
|
147
189
|
{
|
|
148
|
-
_stprintf_s(FullPath, MAX_PATH, _T("%s") PSEPARATOR _T("%s"),
|
|
149
|
-
|
|
190
|
+
_stprintf_s(FullPath, MAX_PATH, _T("%s") PSEPARATOR _T("%s"),
|
|
191
|
+
rootDir(), m_impl->dbDef->tableDefs(i)->fileName());
|
|
150
192
|
fileNames.push_back(FullPath);
|
|
151
193
|
}
|
|
152
194
|
}
|
|
@@ -178,16 +220,17 @@ void database::dropTable(const _TCHAR* TableName)
|
|
|
178
220
|
|
|
179
221
|
void database::setDir(const _TCHAR* directory)
|
|
180
222
|
{
|
|
181
|
-
|
|
223
|
+
_tcscpy(m_impl->rootDir, directory);
|
|
182
224
|
}
|
|
183
225
|
|
|
184
|
-
database& database::
|
|
226
|
+
database& database::operator=(const database& rt)
|
|
185
227
|
{
|
|
186
228
|
if (&rt != this)
|
|
187
229
|
{
|
|
188
230
|
nsdatabase::operator=(rt);
|
|
189
|
-
m_impl->dbimple::
|
|
231
|
+
m_impl->dbimple::operator=(*(rt.m_impl));
|
|
190
232
|
rt.m_impl->dbDef->addref();
|
|
233
|
+
addref();
|
|
191
234
|
}
|
|
192
235
|
return *this;
|
|
193
236
|
}
|
|
@@ -207,9 +250,10 @@ void database::getBtrVersion(btrVersions* versions)
|
|
|
207
250
|
if (m_impl->dbDef)
|
|
208
251
|
posblk = const_cast<uchar_td*>(m_impl->dbDef->posblk());
|
|
209
252
|
nsdatabase::getBtrVersion(versions, posblk);
|
|
210
|
-
|
|
211
253
|
}
|
|
212
|
-
|
|
254
|
+
|
|
255
|
+
void database::onCopyDataInternal(table* tb, int recordCount, int count,
|
|
256
|
+
bool& cancel)
|
|
213
257
|
{
|
|
214
258
|
if (m_impl->m_copyDataFn)
|
|
215
259
|
m_impl->m_copyDataFn(this, recordCount, count, cancel);
|
|
@@ -221,22 +265,23 @@ void database::setTableReadOnly(bool value)
|
|
|
221
265
|
m_impl->isTableReadOnly = value;
|
|
222
266
|
}
|
|
223
267
|
|
|
224
|
-
void database::doOpen(const _TCHAR* uri, short type, short mode,
|
|
268
|
+
void database::doOpen(const _TCHAR* uri, short type, short mode,
|
|
269
|
+
const _TCHAR* ownername)
|
|
225
270
|
{
|
|
226
271
|
m_stat = STATUS_SUCCESS;
|
|
227
272
|
m_impl->dbDef->setDefType(type);
|
|
228
273
|
m_impl->dbDef->open(uri, (char_td)mode, ownername);
|
|
229
274
|
|
|
230
275
|
if ((m_stat == STATUS_SUCCESS) &&
|
|
231
|
-
|
|
276
|
+
(m_impl->dbDef->m_stat == STATUS_INVALID_OWNERNAME) && (type == 0))
|
|
232
277
|
m_impl->dbDef->m_stat = STATUS_DIFFERENT_DBVERSION;
|
|
233
278
|
|
|
234
279
|
m_stat = m_impl->dbDef->m_stat;
|
|
235
|
-
m_impl->isOpened = (m_stat == STATUS_SUCCESS)
|
|
280
|
+
m_impl->isOpened = (m_stat == STATUS_SUCCESS); // important
|
|
236
281
|
}
|
|
237
282
|
|
|
238
|
-
bool database::open(const _TCHAR* _uri, short type, short mode,
|
|
239
|
-
|
|
283
|
+
bool database::open(const _TCHAR* _uri, short type, short mode,
|
|
284
|
+
const _TCHAR* dir, const _TCHAR* ownername)
|
|
240
285
|
{
|
|
241
286
|
|
|
242
287
|
_TCHAR buf[MAX_PATH];
|
|
@@ -268,8 +313,9 @@ bool database::open(const _TCHAR* _uri, short type, short mode, const _TCHAR* di
|
|
|
268
313
|
m_impl->dbDef = new dbdef(this, type);
|
|
269
314
|
|
|
270
315
|
doOpen(_uri, type, mode, ownername);
|
|
271
|
-
|
|
272
|
-
|
|
316
|
+
m_impl->isOpened = (m_stat == STATUS_SUCCESS); // important
|
|
317
|
+
if ((m_stat == STATUS_TABLE_NOTOPEN) && isUseTransactd() &&
|
|
318
|
+
_tcsstr(_uri, TRANSACTD_SCHEMANAME))
|
|
273
319
|
{
|
|
274
320
|
// Specified TRANSACTD_SCHEMANAME and no table
|
|
275
321
|
// Auto make schema.
|
|
@@ -285,7 +331,6 @@ bool database::open(const _TCHAR* _uri, short type, short mode, const _TCHAR* di
|
|
|
285
331
|
}
|
|
286
332
|
}
|
|
287
333
|
}
|
|
288
|
-
|
|
289
334
|
}
|
|
290
335
|
if (m_impl->isOpened && onOpenAfter())
|
|
291
336
|
return true;
|
|
@@ -293,6 +338,7 @@ bool database::open(const _TCHAR* _uri, short type, short mode, const _TCHAR* di
|
|
|
293
338
|
m_impl->isOpened = false;
|
|
294
339
|
m_impl->dbDef->close();
|
|
295
340
|
m_impl->dbDef->release();
|
|
341
|
+
nsdatabase::release();
|
|
296
342
|
m_impl->dbDef = NULL;
|
|
297
343
|
return false;
|
|
298
344
|
}
|
|
@@ -330,10 +376,11 @@ short database::continuous(char_td IsEnd, bool inclideRepfile)
|
|
|
330
376
|
{ // Local databse only.Cnat not use remote database.
|
|
331
377
|
if (!m_impl->isOpened)
|
|
332
378
|
return STATUS_DB_YET_OPEN;
|
|
333
|
-
char tmp[128] = {0x00};
|
|
379
|
+
char tmp[128] = { 0x00 };
|
|
334
380
|
char* buf = getContinuousList(inclideRepfile);
|
|
335
381
|
uint_td buflen = (uint_td)strlen(buf) + 1;
|
|
336
|
-
m_stat =
|
|
382
|
+
m_stat =
|
|
383
|
+
m_btrcallid(TD_BACKUPMODE, tmp, buf, &buflen, 0, 0, IsEnd, clientID());
|
|
337
384
|
free(buf);
|
|
338
385
|
return m_stat;
|
|
339
386
|
}
|
|
@@ -342,26 +389,35 @@ void database::doClose()
|
|
|
342
389
|
{
|
|
343
390
|
m_stat = STATUS_SUCCESS;
|
|
344
391
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
392
|
+
if (m_impl->dbDef)
|
|
393
|
+
{
|
|
394
|
+
m_impl->dbDef->release();
|
|
395
|
+
nsdatabase::reset();
|
|
396
|
+
}
|
|
397
|
+
m_impl->dbDef = NULL;
|
|
398
|
+
m_impl->isOpened = false;
|
|
399
|
+
m_impl->rootDir[0] = 0x00;
|
|
400
|
+
m_impl->lockReadOnly = false;
|
|
353
401
|
}
|
|
354
402
|
|
|
355
|
-
void database::close()
|
|
403
|
+
void database::close()
|
|
404
|
+
{
|
|
405
|
+
bool flag = (m_impl->dbDef != NULL);
|
|
406
|
+
doClose();
|
|
407
|
+
if (flag)
|
|
408
|
+
nsdatabase::release();
|
|
409
|
+
}
|
|
356
410
|
|
|
357
411
|
_TCHAR* database::getTableUri(_TCHAR* buf, short FileNum)
|
|
358
412
|
{
|
|
359
413
|
m_stat = STATUS_SUCCESS;
|
|
360
414
|
if ((m_impl->dbDef) && (m_impl->isOpened))
|
|
361
415
|
{
|
|
362
|
-
if (_tcsstr(m_impl->dbDef->tableDefs(FileNum)->fileName(),
|
|
363
|
-
|
|
364
|
-
|
|
416
|
+
if (_tcsstr(m_impl->dbDef->tableDefs(FileNum)->fileName(),
|
|
417
|
+
PSEPARATOR) == NULL)
|
|
418
|
+
_stprintf_s(buf, MAX_PATH, _T("%s") PSEPARATOR _T("%s"),
|
|
419
|
+
m_impl->rootDir,
|
|
420
|
+
m_impl->dbDef->tableDefs(FileNum)->fileName());
|
|
365
421
|
else
|
|
366
422
|
_tcscpy(buf, m_impl->dbDef->tableDefs(FileNum)->fileName());
|
|
367
423
|
return buf;
|
|
@@ -371,7 +427,7 @@ _TCHAR* database::getTableUri(_TCHAR* buf, short FileNum)
|
|
|
371
427
|
}
|
|
372
428
|
|
|
373
429
|
table* database::openTable(const _TCHAR* TableName, short mode, bool AutoCreate,
|
|
374
|
-
|
|
430
|
+
const _TCHAR* OrnerName, const _TCHAR* pPath)
|
|
375
431
|
{
|
|
376
432
|
short filenum;
|
|
377
433
|
m_stat = 0;
|
|
@@ -397,21 +453,22 @@ table* database::createTableObject()
|
|
|
397
453
|
return new table(this);
|
|
398
454
|
}
|
|
399
455
|
|
|
400
|
-
table* database::openTable(short FileNum, short mode, bool AutoCreate,
|
|
401
|
-
|
|
456
|
+
table* database::openTable(short FileNum, short mode, bool AutoCreate,
|
|
457
|
+
const _TCHAR* OrnerName, const _TCHAR* path)
|
|
402
458
|
{
|
|
403
459
|
/* Select directory
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
460
|
+
- Fiest, Specify Direct.
|
|
461
|
+
- Second, specified in filename.
|
|
462
|
+
- Thard, Smae as schem table.
|
|
463
|
+
*/
|
|
408
464
|
|
|
409
465
|
_TCHAR buf[MAX_PATH];
|
|
410
466
|
bool regularDir = false;
|
|
411
467
|
bool NewFile = false;
|
|
412
468
|
m_stat = 0;
|
|
413
469
|
|
|
414
|
-
if ((!m_impl->dbDef) || (!m_impl->isOpened))
|
|
470
|
+
if ((!m_impl->dbDef) || (!m_impl->isOpened))
|
|
471
|
+
{
|
|
415
472
|
m_stat = STATUS_DB_YET_OPEN;
|
|
416
473
|
return NULL;
|
|
417
474
|
}
|
|
@@ -429,7 +486,7 @@ table* database::openTable(short FileNum, short mode, bool AutoCreate, const _TC
|
|
|
429
486
|
table* tb = createTableObject();
|
|
430
487
|
dbdef::cacheFieldPos(td);
|
|
431
488
|
|
|
432
|
-
if ((path == NULL) || (path[0]==0x00))
|
|
489
|
+
if ((path == NULL) || (path[0] == 0x00))
|
|
433
490
|
{
|
|
434
491
|
if (_tcsstr(td->fileName(), PSEPARATOR) == NULL)
|
|
435
492
|
{
|
|
@@ -445,14 +502,14 @@ table* database::openTable(short FileNum, short mode, bool AutoCreate, const _TC
|
|
|
445
502
|
if (m_impl->isTableReadOnly)
|
|
446
503
|
mode = TD_OPEN_READONLY;
|
|
447
504
|
tb->open(buf, (char_td)mode, OrnerName);
|
|
448
|
-
if ((tb->m_stat == STATUS_TABLE_NOTOPEN) ||
|
|
505
|
+
if ((tb->m_stat == STATUS_TABLE_NOTOPEN) ||
|
|
506
|
+
(tb->m_stat == ERROR_NOSPECIFY_TABLE))
|
|
449
507
|
{
|
|
450
508
|
if (AutoCreate)
|
|
451
509
|
{
|
|
452
510
|
createTable(FileNum, buf);
|
|
453
511
|
if (m_stat != STATUS_SUCCESS)
|
|
454
512
|
{
|
|
455
|
-
m_stat = tb->m_stat;
|
|
456
513
|
tb->release();
|
|
457
514
|
return NULL;
|
|
458
515
|
}
|
|
@@ -463,16 +520,19 @@ table* database::openTable(short FileNum, short mode, bool AutoCreate, const _TC
|
|
|
463
520
|
tb->setOwnerName(OrnerName);
|
|
464
521
|
NewFile = true;
|
|
465
522
|
}
|
|
466
|
-
}
|
|
523
|
+
}
|
|
524
|
+
else
|
|
467
525
|
{
|
|
468
526
|
m_stat = tb->m_stat;
|
|
469
527
|
tb->release();
|
|
470
528
|
return NULL;
|
|
471
529
|
}
|
|
472
530
|
}
|
|
473
|
-
tb->
|
|
531
|
+
if (tb->m_stat == 0)
|
|
532
|
+
tb->init(td, FileNum, regularDir);
|
|
474
533
|
|
|
475
|
-
if ((m_stat != 0) || (tb->m_stat != 0) ||
|
|
534
|
+
if ((m_stat != 0) || (tb->m_stat != 0) ||
|
|
535
|
+
!onTableOpened(tb, FileNum, mode, NewFile))
|
|
476
536
|
{
|
|
477
537
|
m_stat = tb->m_stat;
|
|
478
538
|
tb->release();
|
|
@@ -488,19 +548,20 @@ bool database::createTable(short FileNum, const _TCHAR* FilePath)
|
|
|
488
548
|
if (setUseTransactd() == false)
|
|
489
549
|
return false;
|
|
490
550
|
|
|
491
|
-
char buf2[MAX_PATH]={0x00};
|
|
492
|
-
_TCHAR posblk[128] = {0x00};
|
|
551
|
+
char buf2[MAX_PATH] = { 0x00 };
|
|
552
|
+
_TCHAR posblk[128] = { 0x00 };
|
|
493
553
|
|
|
494
554
|
const char* p = toServerUri(buf2, MAX_PATH, FilePath, isUseTransactd());
|
|
495
555
|
|
|
496
|
-
m_stat = m_btrcallid(
|
|
497
|
-
|
|
498
|
-
|
|
556
|
+
m_stat = m_btrcallid(
|
|
557
|
+
TD_CREATETABLE, posblk, m_impl->dbDef->tableDefs(FileNum),
|
|
558
|
+
&m_impl->dbDef->m_datalen, (void*)p, (uchar_td)strlen(p),
|
|
559
|
+
CR_SUBOP_BY_TABLEDEF /* exists check */, clientID());
|
|
499
560
|
}
|
|
500
561
|
else
|
|
501
562
|
{
|
|
502
563
|
const _TCHAR* buf;
|
|
503
|
-
fileSpec* fs = (fileSpec*)
|
|
564
|
+
fileSpec* fs = (fileSpec*)malloc(1024);
|
|
504
565
|
if (fs == NULL)
|
|
505
566
|
{
|
|
506
567
|
m_stat = STATUS_CANT_ALLOC_MEMORY;
|
|
@@ -517,36 +578,15 @@ bool database::createTable(short FileNum, const _TCHAR* FilePath)
|
|
|
517
578
|
return (m_stat == 0);
|
|
518
579
|
}
|
|
519
580
|
|
|
520
|
-
int moveVaileRecord(table* src)
|
|
521
|
-
{
|
|
522
|
-
int count = 0;
|
|
523
|
-
bookmark_td bm = 0;
|
|
524
|
-
src->stepLast();
|
|
525
|
-
while (src->stat() == STATUS_SUCCESS)
|
|
526
|
-
{
|
|
527
|
-
bm = src->bookmark();
|
|
528
|
-
++count;
|
|
529
|
-
src->stepPrev();
|
|
530
|
-
}
|
|
531
|
-
if (count)
|
|
532
|
-
{
|
|
533
|
-
src->seekByBookmark(bm);
|
|
534
|
-
return count;
|
|
535
|
-
}
|
|
536
|
-
return 0;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
581
|
short database::assignSchemaData(dbdef* src)
|
|
540
582
|
{
|
|
541
583
|
beginTrn();
|
|
542
|
-
int Count;
|
|
543
|
-
|
|
544
|
-
Count = 1;
|
|
584
|
+
int Count = 1;
|
|
545
585
|
|
|
546
586
|
dbdef* defDest = dbDef();
|
|
547
587
|
int recordCount = src->tableCount();
|
|
548
588
|
|
|
549
|
-
for (int i=0;i<=src->tableCount();i++)
|
|
589
|
+
for (int i = 0; i <= src->tableCount(); i++)
|
|
550
590
|
{
|
|
551
591
|
tabledef* td = src->tableDefs(i);
|
|
552
592
|
if (td)
|
|
@@ -555,18 +595,21 @@ short database::assignSchemaData(dbdef* src)
|
|
|
555
595
|
tdtmp.fieldCount = 0;
|
|
556
596
|
tdtmp.keyCount = 0;
|
|
557
597
|
defDest->insertTable(&tdtmp);
|
|
558
|
-
|
|
598
|
+
if (defDest->stat())
|
|
599
|
+
break;
|
|
600
|
+
for (int j = 0; j < td->fieldCount; ++j)
|
|
559
601
|
{
|
|
560
602
|
fielddef& fd = td->fieldDefs[j];
|
|
561
603
|
*defDest->insertField(td->id, j) = fd;
|
|
562
604
|
}
|
|
563
|
-
for (int j=0;j<td->keyCount
|
|
605
|
+
for (int j = 0; j < td->keyCount; ++j)
|
|
564
606
|
{
|
|
565
607
|
keydef& kd = td->keyDefs[j];
|
|
566
608
|
*defDest->insertKey(td->id, j) = kd;
|
|
567
609
|
}
|
|
568
610
|
defDest->updateTableDef(td->id);
|
|
569
|
-
if (defDest->stat()
|
|
611
|
+
if (defDest->stat())
|
|
612
|
+
break;
|
|
570
613
|
}
|
|
571
614
|
bool Cancel = false;
|
|
572
615
|
onCopyDataInternal(NULL, recordCount, Count, Cancel);
|
|
@@ -574,9 +617,9 @@ short database::assignSchemaData(dbdef* src)
|
|
|
574
617
|
return -1;
|
|
575
618
|
Count++;
|
|
576
619
|
}
|
|
577
|
-
|
|
578
620
|
|
|
579
|
-
if ((nstable::tdapErr((HWND)NULL, src->stat()) == 0) &&
|
|
621
|
+
if ((nstable::tdapErr((HWND)NULL, src->stat()) == 0) &&
|
|
622
|
+
(defDest->stat() == 0))
|
|
580
623
|
{
|
|
581
624
|
endTrn();
|
|
582
625
|
return 0;
|
|
@@ -588,58 +631,139 @@ short database::assignSchemaData(dbdef* src)
|
|
|
588
631
|
return defDest->stat();
|
|
589
632
|
}
|
|
590
633
|
|
|
591
|
-
|
|
592
|
-
* Copy as same field name.
|
|
593
|
-
* If turbo then copy use memcpy and offset dest of first address.
|
|
594
|
-
*/
|
|
595
|
-
#pragma warn -8004
|
|
596
|
-
short database::copyTableData(table* dest, table* src, bool turbo, int offset, short keyNum,
|
|
597
|
-
int maxSkip)
|
|
634
|
+
struct filedChnageInfo
|
|
598
635
|
{
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
int recordCount = src->recordCount();
|
|
610
|
-
for (i = 0; i < src->tableDef()->fieldCount; i++)
|
|
636
|
+
filedChnageInfo() : fieldnum(-1), changed(0) {}
|
|
637
|
+
|
|
638
|
+
short fieldnum;
|
|
639
|
+
bool changed;
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
void makeChangeInfo(const tabledef* ddef, const tabledef* sdef,
|
|
643
|
+
filedChnageInfo* fci)
|
|
644
|
+
{
|
|
645
|
+
for (short i = 0; i < sdef->fieldCount; i++)
|
|
611
646
|
{
|
|
612
|
-
|
|
647
|
+
fielddef& fds = sdef->fieldDefs[i];
|
|
648
|
+
for (short j = 0; j < ddef->fieldCount; j++)
|
|
613
649
|
{
|
|
614
|
-
|
|
615
|
-
|
|
650
|
+
fielddef& fdd = ddef->fieldDefs[j];
|
|
651
|
+
if (strcmp(fdd.nameA(), fds.nameA()) == 0)
|
|
616
652
|
{
|
|
617
|
-
|
|
618
|
-
if (
|
|
619
|
-
|
|
620
|
-
else if (
|
|
621
|
-
|
|
622
|
-
cpytype[i] = 1; //diffrent type
|
|
623
|
-
else if (src->tableDef()->fieldDefs[i].len != dest->tableDef()
|
|
624
|
-
->fieldDefs[NewFieldNum[i]].len)
|
|
625
|
-
cpytype[i] = 1; //different size
|
|
626
|
-
else
|
|
627
|
-
cpytype[i] = 0;
|
|
653
|
+
fci[i].fieldnum = j;
|
|
654
|
+
if (fds.type != fdd.type)
|
|
655
|
+
fci[i].changed = true; // diffrent type
|
|
656
|
+
else if (fds.len != fdd.len)
|
|
657
|
+
fci[i].changed = true; // different size
|
|
628
658
|
break;
|
|
629
659
|
}
|
|
630
660
|
else
|
|
631
|
-
|
|
661
|
+
fci[i].fieldnum = -1;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
inline void copyEachFieldData(table* dest, table* src, filedChnageInfo* fci)
|
|
667
|
+
{
|
|
668
|
+
const tabledef* ddef = dest->tableDef();
|
|
669
|
+
const tabledef* sdef = src->tableDef();
|
|
670
|
+
|
|
671
|
+
for (int i = 0; i < sdef->fieldCount; i++)
|
|
672
|
+
{
|
|
673
|
+
int dindex = fci[i].fieldnum;
|
|
674
|
+
fielddef& fds = sdef->fieldDefs[i];
|
|
675
|
+
fielddef& fdd = ddef->fieldDefs[dindex];
|
|
632
676
|
|
|
677
|
+
if (dindex != -1)
|
|
678
|
+
{
|
|
679
|
+
// src valiable len and last field;
|
|
680
|
+
if ((fci[i].changed == false) || (fdd.type == ft_myfixedbinary))
|
|
681
|
+
{
|
|
682
|
+
int len = fds.len;
|
|
683
|
+
if (fds.len > fdd.len)
|
|
684
|
+
len = fdd.len;
|
|
685
|
+
memcpy(dest->fieldPtr(dindex), src->fieldPtr(i), len);
|
|
686
|
+
}
|
|
687
|
+
else
|
|
688
|
+
{
|
|
689
|
+
if (fdd.maxVarDatalen() && fds.maxVarDatalen())
|
|
690
|
+
{
|
|
691
|
+
uint_td size;
|
|
692
|
+
uint_td maxlen = fdd.maxVarDatalen();
|
|
693
|
+
const void* data = src->getFVbin(i, size);
|
|
694
|
+
if (maxlen < size)
|
|
695
|
+
size = maxlen;
|
|
696
|
+
dest->setFV(dindex, data, size);
|
|
697
|
+
}
|
|
698
|
+
else
|
|
699
|
+
{
|
|
700
|
+
// If diffrent field type then convert to string then copy.
|
|
701
|
+
dest->setFV(dindex, src->getFVstr(i));
|
|
702
|
+
}
|
|
703
|
+
}
|
|
633
704
|
}
|
|
634
705
|
}
|
|
635
|
-
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
inline int moveVaileRecord(table* src)
|
|
709
|
+
{
|
|
710
|
+
int count = 0;
|
|
711
|
+
bookmark_td bm = 0;
|
|
712
|
+
src->stepLast();
|
|
713
|
+
while (src->stat() == STATUS_SUCCESS)
|
|
714
|
+
{
|
|
715
|
+
bm = src->bookmark();
|
|
716
|
+
++count;
|
|
717
|
+
src->stepPrev();
|
|
718
|
+
}
|
|
719
|
+
if (count)
|
|
720
|
+
{
|
|
721
|
+
src->seekByBookmark(bm);
|
|
722
|
+
return count;
|
|
723
|
+
}
|
|
724
|
+
return 0;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
inline void moveNextRecord(table* src, short keyNum)
|
|
728
|
+
{
|
|
729
|
+
if (keyNum == -1)
|
|
730
|
+
src->stepNext();
|
|
731
|
+
else
|
|
732
|
+
src->seekNext();
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
inline void moveFirstRecord(table* src, short keyNum)
|
|
736
|
+
{
|
|
636
737
|
if (keyNum == -1)
|
|
637
738
|
src->stepFirst();
|
|
638
739
|
else
|
|
639
740
|
src->seekFirst();
|
|
640
|
-
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/* Copy from src to dest table.
|
|
744
|
+
* Copy as same field name.
|
|
745
|
+
* If turbo then copy use memcpy and offset dest of first address.
|
|
746
|
+
* if a src field is variable size binary, that dest field needs to be variable
|
|
747
|
+
*size binary.
|
|
748
|
+
* if src and dest fields are different type ,then a text copy is used.
|
|
749
|
+
*/
|
|
750
|
+
#pragma warn -8004
|
|
751
|
+
|
|
752
|
+
short database::copyTableData(table* dest, table* src, bool turbo, int offset,
|
|
753
|
+
short keyNum, int maxSkip)
|
|
754
|
+
{
|
|
755
|
+
src->setKeyNum((char_td)keyNum);
|
|
756
|
+
const tabledef* ddef = dest->tableDef();
|
|
757
|
+
const tabledef* sdef = src->tableDef();
|
|
758
|
+
ushort_td ins_rows = 0;
|
|
759
|
+
bool repData = (_tcsstr(ddef->fileName(), _T("rep.dat"))) ? true : false;
|
|
760
|
+
int skipCount = 0, count = 1;
|
|
761
|
+
int recordCount = src->recordCount();
|
|
762
|
+
filedChnageInfo fci[256];
|
|
763
|
+
|
|
764
|
+
makeChangeInfo(ddef, sdef, fci);
|
|
765
|
+
moveFirstRecord(src, keyNum);
|
|
641
766
|
|
|
642
|
-
int len;
|
|
643
767
|
while (1)
|
|
644
768
|
{
|
|
645
769
|
if (src->stat())
|
|
@@ -648,28 +772,24 @@ short database::copyTableData(table* dest, table* src, bool turbo, int offset, s
|
|
|
648
772
|
{
|
|
649
773
|
if (maxSkip != -1)
|
|
650
774
|
break;
|
|
651
|
-
if (recordCount <
|
|
775
|
+
if (recordCount < skipCount + count)
|
|
652
776
|
{
|
|
653
777
|
if (src->stat() == STATUS_IO_ERROR)
|
|
654
778
|
{
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
779
|
+
int n = moveVaileRecord(src);
|
|
780
|
+
if (n)
|
|
781
|
+
skipCount = recordCount - n - count;
|
|
782
|
+
else
|
|
783
|
+
break;
|
|
660
784
|
}
|
|
661
785
|
else
|
|
662
|
-
|
|
786
|
+
break;
|
|
663
787
|
}
|
|
664
|
-
|
|
665
|
-
src->stepNext();
|
|
666
|
-
else
|
|
667
|
-
src->seekNext();
|
|
788
|
+
moveNextRecord(src, keyNum);
|
|
668
789
|
|
|
669
|
-
|
|
790
|
+
skipCount++;
|
|
670
791
|
if (src->stat() == STATUS_SUCCESS)
|
|
671
792
|
break;
|
|
672
|
-
|
|
673
793
|
}
|
|
674
794
|
if (src->stat())
|
|
675
795
|
break;
|
|
@@ -681,58 +801,39 @@ short database::copyTableData(table* dest, table* src, bool turbo, int offset, s
|
|
|
681
801
|
return STATUS_CANT_ALLOC_MEMORY;
|
|
682
802
|
if (offset)
|
|
683
803
|
memset(dest->fieldPtr(0), 0, offset);
|
|
684
|
-
memcpy((char*)dest->fieldPtr(0) + offset, src->fieldPtr(0),
|
|
804
|
+
memcpy((char*)dest->fieldPtr(0) + offset, src->fieldPtr(0),
|
|
805
|
+
src->datalen());
|
|
685
806
|
}
|
|
686
807
|
else
|
|
687
|
-
|
|
688
|
-
for (i = 0; i < src->tableDef()->fieldCount; i++)
|
|
689
|
-
{
|
|
690
|
-
if (NewFieldNum[i] != -1)
|
|
691
|
-
{
|
|
692
|
-
// If diffrent field type then convert to string then copy.
|
|
693
|
-
if (cpytype[i] != 0)
|
|
694
|
-
dest->setFV(NewFieldNum[i], src->getFVstr(i));
|
|
695
|
-
else
|
|
696
|
-
{
|
|
697
|
-
len = src->tableDef()->fieldDefs[i].len;
|
|
698
|
-
if (src->tableDef()->fieldDefs[i].len >
|
|
699
|
-
dest->tableDef()->fieldDefs[NewFieldNum[i]].len)
|
|
700
|
-
len = dest->tableDef()->fieldDefs[NewFieldNum[i]].len;
|
|
701
|
-
memcpy(dest->fieldPtr(NewFieldNum[i]), src->fieldPtr(i), len);
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
bool Cancel = false;
|
|
707
|
-
onCopyDataInternal(dest, recordCount, Count, Cancel);
|
|
708
|
-
if (Cancel)
|
|
709
|
-
return -1;
|
|
710
|
-
Count++;
|
|
808
|
+
copyEachFieldData(dest, src, fci);
|
|
711
809
|
|
|
712
810
|
if (repData)
|
|
713
811
|
{
|
|
714
|
-
|
|
715
812
|
dest->m_datalen = src->m_datalen;
|
|
716
813
|
dest->tdap(TD_REC_INSERT);
|
|
717
814
|
}
|
|
718
815
|
else
|
|
719
816
|
ins_rows += dest->insert();
|
|
720
817
|
if (dest->stat() == STATUS_INVALID_VALLEN)
|
|
721
|
-
|
|
818
|
+
skipCount++;
|
|
722
819
|
else if (dest->stat() == STATUS_DUPPLICATE_KEYVALUE)
|
|
723
|
-
|
|
820
|
+
skipCount++;
|
|
724
821
|
else if (dest->stat() != STATUS_SUCCESS)
|
|
725
822
|
return dest->stat();
|
|
726
|
-
if (keyNum == -1)
|
|
727
|
-
src->stepNext();
|
|
728
823
|
else
|
|
729
|
-
|
|
824
|
+
count++;
|
|
825
|
+
bool cancel = false;
|
|
826
|
+
onCopyDataInternal(dest, recordCount, count, cancel);
|
|
827
|
+
if (cancel)
|
|
828
|
+
return -1;
|
|
829
|
+
|
|
830
|
+
moveNextRecord(src, keyNum);
|
|
730
831
|
}
|
|
731
|
-
if ((
|
|
832
|
+
if ((skipCount) && (maxSkip == -1))
|
|
732
833
|
{
|
|
733
|
-
bool
|
|
734
|
-
onCopyDataInternal(dest,
|
|
735
|
-
if (
|
|
834
|
+
bool cancel = false;
|
|
835
|
+
onCopyDataInternal(dest, -1, count, cancel);
|
|
836
|
+
if (cancel)
|
|
736
837
|
return -1;
|
|
737
838
|
}
|
|
738
839
|
|
|
@@ -742,7 +843,8 @@ short database::copyTableData(table* dest, table* src, bool turbo, int offset, s
|
|
|
742
843
|
}
|
|
743
844
|
#pragma warn .8004
|
|
744
845
|
|
|
745
|
-
void database::doConvertTable(short TableIndex, bool Turbo,
|
|
846
|
+
void database::doConvertTable(short TableIndex, bool Turbo,
|
|
847
|
+
const _TCHAR* OwnerName)
|
|
746
848
|
{
|
|
747
849
|
table* src;
|
|
748
850
|
table* dest;
|
|
@@ -767,15 +869,23 @@ void database::doConvertTable(short TableIndex, bool Turbo, const _TCHAR* OwnerN
|
|
|
767
869
|
TableDef = m_impl->dbDef->tableDefs(TableIndex);
|
|
768
870
|
short len = TableDef->maxRecordLen;
|
|
769
871
|
|
|
770
|
-
TableDef->preAlloc =
|
|
872
|
+
TableDef->preAlloc =
|
|
873
|
+
(ushort_td)(src->recordCount() / TableDef->pageSize / len);
|
|
771
874
|
TableDef->flags.bit2 = true;
|
|
772
875
|
|
|
773
876
|
_tcscpy(szTempPath, getTableUri(buf, TableIndex));
|
|
877
|
+
_TCHAR* p = _tcsstr(szTempPath, _T("dbfile="));
|
|
878
|
+
if (p == 0)
|
|
879
|
+
p = szTempPath;
|
|
880
|
+
else
|
|
881
|
+
p += 7;
|
|
882
|
+
|
|
883
|
+
_TCHAR* p2 = _tcschr(p, _T('.'));
|
|
884
|
+
if (p2 == 0)
|
|
885
|
+
p2 = p + _tcslen(p);
|
|
886
|
+
*p2 = 0x00;
|
|
774
887
|
|
|
775
|
-
|
|
776
|
-
if (pireod)
|
|
777
|
-
* pireod = 0x00;
|
|
778
|
-
_tcscat(szTempPath, _T("_conv_dest.tmp"));
|
|
888
|
+
_tcscat(szTempPath, _T("_conv_dest_tmp"));
|
|
779
889
|
|
|
780
890
|
createTable(TableIndex, szTempPath);
|
|
781
891
|
dest = openTable(TableIndex, TD_OPEN_EXCLUSIVE, true, NULL, szTempPath);
|
|
@@ -796,7 +906,6 @@ void database::doConvertTable(short TableIndex, bool Turbo, const _TCHAR* OwnerN
|
|
|
796
906
|
dest->release();
|
|
797
907
|
src->release();
|
|
798
908
|
|
|
799
|
-
|
|
800
909
|
if (ret == 0)
|
|
801
910
|
{
|
|
802
911
|
_TCHAR tmp[MAX_PATH];
|
|
@@ -805,10 +914,9 @@ void database::doConvertTable(short TableIndex, bool Turbo, const _TCHAR* OwnerN
|
|
|
805
914
|
swapTablename(szTempPath, tmp);
|
|
806
915
|
else
|
|
807
916
|
{
|
|
808
|
-
|
|
809
917
|
_TCHAR* pireod = _tcsrchr(tmp, '.');
|
|
810
918
|
if (pireod)
|
|
811
|
-
*
|
|
919
|
+
*pireod = 0x00;
|
|
812
920
|
_tcscat(tmp, _T("_conv_src.tmp"));
|
|
813
921
|
rename(getTableUri(buf, TableIndex), tmp);
|
|
814
922
|
if (m_stat)
|
|
@@ -824,10 +932,10 @@ void database::doConvertTable(short TableIndex, bool Turbo, const _TCHAR* OwnerN
|
|
|
824
932
|
}
|
|
825
933
|
else
|
|
826
934
|
m_stat = ret;
|
|
827
|
-
|
|
828
935
|
}
|
|
829
936
|
|
|
830
|
-
void database::convertTable(short tableIndex, bool turbo,
|
|
937
|
+
void database::convertTable(short tableIndex, bool turbo,
|
|
938
|
+
const _TCHAR* ownername)
|
|
831
939
|
{
|
|
832
940
|
doConvertTable(tableIndex, turbo, ownername);
|
|
833
941
|
}
|
|
@@ -839,14 +947,15 @@ bool database::existsTableFile(short TableIndex, const _TCHAR* OwnerName)
|
|
|
839
947
|
{
|
|
840
948
|
m_impl->dbDef->tableDefs(TABLE_NUM_TMP)->fieldDefs =
|
|
841
949
|
dbdef::getFieldDef(m_impl->dbDef->tableDefs(TABLE_NUM_TMP));
|
|
842
|
-
m_impl->dbDef->tableDefs(TABLE_NUM_TMP)->keyDefs =
|
|
950
|
+
m_impl->dbDef->tableDefs(TABLE_NUM_TMP)->keyDefs =
|
|
951
|
+
dbdef::getKeyDef(m_impl->dbDef->tableDefs(512));
|
|
843
952
|
}
|
|
844
953
|
table* bao = openTable(TableIndex, TD_OPEN_READONLY, false, OwnerName);
|
|
845
954
|
bool ret = false;
|
|
846
955
|
if (m_stat == STATUS_TABLE_NOTOPEN)
|
|
847
956
|
ret = false;
|
|
848
957
|
else if (m_stat == STATUS_INVALID_OWNERNAME)
|
|
849
|
-
ret =
|
|
958
|
+
ret = true;
|
|
850
959
|
else if (m_stat == STATUS_SUCCESS)
|
|
851
960
|
ret = true;
|
|
852
961
|
if (bao)
|
|
@@ -855,9 +964,8 @@ bool database::existsTableFile(short TableIndex, const _TCHAR* OwnerName)
|
|
|
855
964
|
return ret;
|
|
856
965
|
}
|
|
857
966
|
|
|
858
|
-
|
|
859
|
-
}// namespace
|
|
860
|
-
}// namespace
|
|
861
|
-
}// namespace
|
|
862
|
-
}// namespace
|
|
863
|
-
}// namespace bzs
|
|
967
|
+
} // namespace client
|
|
968
|
+
} // namespace btrv
|
|
969
|
+
} // namespace protocol
|
|
970
|
+
} // namespace db
|
|
971
|
+
} // namespace bzs
|