transactd 1.0.1
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 +7 -0
- data/BUILD_UNIX-JA +174 -0
- data/BUILD_WIN-JA +256 -0
- data/CMakeLists.txt +96 -0
- data/COPYING +339 -0
- data/README +406 -0
- data/README-JA +424 -0
- data/bin/common/tdclc_32_1_0.dll +0 -0
- data/bin/common/tdclc_64_1_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +73 -0
- data/build/common/copyifgreater.cmd +30 -0
- data/build/common/copyifgreater.js +290 -0
- data/build/common/get_boost_libs.cmake +106 -0
- data/build/common/get_ruby_path.cmake +115 -0
- data/build/common/options.cmake +127 -0
- data/build/common/smart_install.cmake +263 -0
- data/build/common/system.cmake +122 -0
- data/build/common/transactd.rc.in +52 -0
- data/build/common/transactd_cl_common.cmake +101 -0
- data/build/common/transactd_cl_output.cmake +93 -0
- data/build/common/transactd_common.cmake +237 -0
- data/build/common/transactd_required.cmake +28 -0
- data/build/swig/ruby/generate.cmake.in +35 -0
- data/build/swig/ruby/generate.cmd.in +19 -0
- data/build/swig/ruby/ruby.swg +101 -0
- data/build/swig/tdcl.i +188 -0
- data/build/tdclc/BUILDNUMBER.txt +1 -0
- data/build/tdclc/CMakeLists.txt +170 -0
- data/build/tdclc/tdclc_32.cbproj +181 -0
- data/build/tdclc/tdclc_64.cbproj +205 -0
- data/build/tdclcpp/BUILDNUMBER.txt +1 -0
- data/build/tdclcpp/CMakeLists.txt +142 -0
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +239 -0
- data/build/tdclcpp/tdclcpp_bcb_64.cbproj +304 -0
- data/build/tdclrb/BUILDNUMBER.txt +1 -0
- data/build/tdclrb/CMakeLists.txt +258 -0
- data/build/tdclrb/GEM_VERSION +3 -0
- data/build/tdclrb/bldgem/extconf.rb +123 -0
- data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
- data/build/tdclrb/gem/Makefile.win32-VS +65 -0
- data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
- data/build/tdclrb/gem/detect.rb +31 -0
- data/build/tdclrb/gem/helper.rb +113 -0
- data/build/tdclrb/gem/transactd.rb +22 -0
- data/build/tdclrb/gem_output.cmake +44 -0
- data/source/bzs/db/IBlobBuffer.h +51 -0
- data/source/bzs/db/blobBuffer.h +177 -0
- data/source/bzs/db/blobStructs.h +85 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +52 -0
- data/source/bzs/db/engine/mysql/bookmark.h +195 -0
- data/source/bzs/db/engine/mysql/database.cpp +1882 -0
- data/source/bzs/db/engine/mysql/database.h +465 -0
- data/source/bzs/db/engine/mysql/dbManager.cpp +303 -0
- data/source/bzs/db/engine/mysql/dbManager.h +143 -0
- data/source/bzs/db/engine/mysql/errorMessage.cpp +75 -0
- data/source/bzs/db/engine/mysql/errorMessage.h +43 -0
- data/source/bzs/db/engine/mysql/fieldAccess.h +158 -0
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +349 -0
- data/source/bzs/db/engine/mysql/mydebuglog.h +89 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +171 -0
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +169 -0
- data/source/bzs/db/engine/mysql/mysqlThd.h +35 -0
- data/source/bzs/db/engine/mysql/percentageKey.h +260 -0
- data/source/bzs/db/protocol/ICommandExecuter.h +49 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +689 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +228 -0
- data/source/bzs/db/protocol/tdap/btrDate.cpp +437 -0
- data/source/bzs/db/protocol/tdap/btrDate.h +227 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +127 -0
- data/source/bzs/db/protocol/tdap/client/client.cpp +106 -0
- data/source/bzs/db/protocol/tdap/client/client.h +292 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +144 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.h +82 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +863 -0
- data/source/bzs/db/protocol/tdap/client/database.h +118 -0
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +100 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +1640 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.h +135 -0
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +434 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +92 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +98 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +174 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +91 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +140 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +86 -0
- data/source/bzs/db/protocol/tdap/client/filter.cpp +527 -0
- data/source/bzs/db/protocol/tdap/client/filter.h +154 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +137 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +84 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +724 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +123 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +899 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.h +199 -0
- data/source/bzs/db/protocol/tdap/client/request.h +198 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +58 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.h +56 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +574 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +53 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +627 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +2613 -0
- data/source/bzs/db/protocol/tdap/client/table.h +221 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +1096 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +179 -0
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +40 -0
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +11 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +500 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +184 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +60 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +284 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +53 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +383 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +106 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +680 -0
- data/source/bzs/db/protocol/tdap/mysql/request.h +202 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1020 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +141 -0
- data/source/bzs/db/protocol/tdap/tdapRequest.h +190 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +295 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.h +558 -0
- data/source/bzs/db/protocol/tdap/tdapcapi.h +423 -0
- data/source/bzs/db/transactd/appBuilderImple.h +55 -0
- data/source/bzs/db/transactd/appModule.cpp +183 -0
- data/source/bzs/db/transactd/appModule.h +80 -0
- data/source/bzs/db/transactd/connManager.cpp +201 -0
- data/source/bzs/db/transactd/connManager.h +60 -0
- data/source/bzs/db/transactd/connectionRecord.h +69 -0
- data/source/bzs/db/transactd/transactd.cpp +325 -0
- data/source/bzs/env/compiler.h +135 -0
- data/source/bzs/env/crosscompile.cpp +130 -0
- data/source/bzs/env/crosscompile.h +150 -0
- data/source/bzs/env/fileopen.h +36 -0
- data/source/bzs/env/mbcswchrLinux.cpp +40 -0
- data/source/bzs/env/mbcswchrLinux.h +88 -0
- data/source/bzs/env/tstring.h +183 -0
- data/source/bzs/example/changeSchema.cpp +117 -0
- data/source/bzs/example/changeSchema_c.cpp +78 -0
- data/source/bzs/example/connection_pool_c.cpp +171 -0
- data/source/bzs/example/createDatabase.cpp +305 -0
- data/source/bzs/example/createDatabase_c.cpp +202 -0
- data/source/bzs/example/deleteRecords.cpp +87 -0
- data/source/bzs/example/deleteRecords_c.cpp +57 -0
- data/source/bzs/example/dropDatabase.cpp +59 -0
- data/source/bzs/example/dropDatabase_c.cpp +34 -0
- data/source/bzs/example/insertRecords.cpp +212 -0
- data/source/bzs/example/insertRecords_c.cpp +153 -0
- data/source/bzs/example/readRecords.cpp +141 -0
- data/source/bzs/example/readRecords_c.cpp +107 -0
- data/source/bzs/example/updateRecords.cpp +99 -0
- data/source/bzs/example/updateRecords_c.cpp +71 -0
- data/source/bzs/example/update_with_transaction.cpp +104 -0
- data/source/bzs/example/update_with_transaction_c.cpp +80 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +226 -0
- data/source/bzs/netsvc/client/tcpClient.h +489 -0
- data/source/bzs/netsvc/server/IAppModule.h +94 -0
- data/source/bzs/netsvc/server/iserver.h +65 -0
- data/source/bzs/netsvc/server/serverCpt.cpp +522 -0
- data/source/bzs/netsvc/server/serverCpt.h +88 -0
- data/source/bzs/netsvc/server/serverPipe.cpp +705 -0
- data/source/bzs/netsvc/server/serverPipe.h +96 -0
- data/source/bzs/netsvc/server/serverTpool.cpp +416 -0
- data/source/bzs/netsvc/server/serverTpool.h +84 -0
- data/source/bzs/rtl/benchmark.cpp +96 -0
- data/source/bzs/rtl/benchmark.h +65 -0
- data/source/bzs/rtl/datetime.cpp +375 -0
- data/source/bzs/rtl/datetime.h +53 -0
- data/source/bzs/rtl/debuglog.cpp +106 -0
- data/source/bzs/rtl/debuglog.h +97 -0
- data/source/bzs/rtl/exception.h +116 -0
- data/source/bzs/rtl/stl_uty.cpp +35 -0
- data/source/bzs/rtl/stl_uty.h +29 -0
- data/source/bzs/rtl/stringBuffers.cpp +101 -0
- data/source/bzs/rtl/stringBuffers.h +58 -0
- data/source/bzs/rtl/strtrim.cpp +135 -0
- data/source/bzs/rtl/strtrim.h +46 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +445 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
- data/source/bzs/test/tdclrb/prepare.rb +226 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +430 -0
- data/source/bzs/test/transactdBench/transactdBench2.cpp +342 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +2030 -0
- data/source/global/tdclatl/Database.cpp +503 -0
- data/source/global/tdclatl/Database.h +139 -0
- data/source/global/tdclatl/DbDef.cpp +242 -0
- data/source/global/tdclatl/DbDef.h +79 -0
- data/source/global/tdclatl/Field.cpp +92 -0
- data/source/global/tdclatl/Field.h +59 -0
- data/source/global/tdclatl/FieldDef.cpp +238 -0
- data/source/global/tdclatl/FieldDef.h +87 -0
- data/source/global/tdclatl/Flags.cpp +111 -0
- data/source/global/tdclatl/Flags.h +55 -0
- data/source/global/tdclatl/KeyDef.cpp +51 -0
- data/source/global/tdclatl/KeyDef.h +55 -0
- data/source/global/tdclatl/KeySegment.cpp +55 -0
- data/source/global/tdclatl/Table.cpp +600 -0
- data/source/global/tdclatl/Table.h +144 -0
- data/source/global/tdclatl/TableDef.cpp +291 -0
- data/source/global/tdclatl/TableDef.h +86 -0
- data/source/global/tdclatl/TdVersion.cpp +74 -0
- data/source/global/tdclatl/TdVersion.h +54 -0
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +113 -0
- data/source/global/tdclatl/dllmain.cpp +30 -0
- data/source/global/tdclatl/dllmain.h +27 -0
- data/source/global/tdclatl/keySegment.h +57 -0
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.cpp +2 -0
- data/source/global/tdclatl/stdafx.h +25 -0
- data/source/global/tdclatl/targetver.h +4 -0
- data/source/global/tdclatl/tdclatl.cpp +68 -0
- data/source/global/tdclatl/tdclatl.def +10 -0
- data/source/global/tdclatl/tdclatl.idl +1035 -0
- data/source/linux/charsetConvert.h +112 -0
- data/source/linux/linuxTypes.h +33 -0
- data/source/linux/tchar.h +428 -0
- data/transactd.gemspec +97 -0
- metadata +267 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_HS_HSCOMMANDEXECUTER_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_HS_HSCOMMANDEXECUTER_H
|
|
3
|
+
/*=================================================================
|
|
4
|
+
Copyright (C) 2013 BizStation Corp All rights reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or
|
|
7
|
+
modify it under the terms of the GNU General Public License
|
|
8
|
+
as published by the Free Software Foundation; either version 2
|
|
9
|
+
of the License, or (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
|
+
02111-1307, USA.
|
|
20
|
+
=================================================================*/
|
|
21
|
+
#include <bzs/db/engine/mysql/dbManager.h>
|
|
22
|
+
#include <bzs/db/protocol/ICommandExecuter.h>
|
|
23
|
+
#include <bzs/env/crosscompile.h>
|
|
24
|
+
|
|
25
|
+
namespace bzs
|
|
26
|
+
{
|
|
27
|
+
namespace db
|
|
28
|
+
{
|
|
29
|
+
namespace protocol
|
|
30
|
+
{
|
|
31
|
+
namespace hs
|
|
32
|
+
{
|
|
33
|
+
|
|
34
|
+
#define HS_OP_READ 'R'
|
|
35
|
+
#define HS_OP_OPEN 'P'
|
|
36
|
+
#define HS_OP_AUTH 'A'
|
|
37
|
+
#define HS_OP_INSERT '+'
|
|
38
|
+
#define HS_OP_DELETE 'D'
|
|
39
|
+
#define HS_OP_UPDATE 'U'
|
|
40
|
+
#define HS_OP_UPDATE_INC '+'+0xff
|
|
41
|
+
#define HS_OP_UPDATE_DEC '-'
|
|
42
|
+
#define HS_OP_QUIT 'Q'
|
|
43
|
+
|
|
44
|
+
#define HS_LG_EQUAL '='
|
|
45
|
+
#define HS_LG_GREATER '>'
|
|
46
|
+
#define HS_LG_LESS '<'
|
|
47
|
+
#define HS_LG_NOTEQUAL '<'+0xfe //<>
|
|
48
|
+
#define HS_LG_GREATEROREQUAL '>'+0xff //>=
|
|
49
|
+
#define HS_LG_LESSOREQUAL '<'+0xff //<=
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
#define DEBNAME_SIZE 64
|
|
53
|
+
#define TABELNAME_SIZE 64
|
|
54
|
+
#define INDEXNAME_SIZE 64
|
|
55
|
+
|
|
56
|
+
#define HS_OP_RESULTBUFSIZE 64000
|
|
57
|
+
|
|
58
|
+
//-----------------------------------------------------------------------
|
|
59
|
+
// result buffer
|
|
60
|
+
//-----------------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
class resultBuffer
|
|
63
|
+
{
|
|
64
|
+
char* m_ptr;
|
|
65
|
+
char* m_cur;
|
|
66
|
+
|
|
67
|
+
public:
|
|
68
|
+
resultBuffer(char* ptr):m_ptr(ptr),m_cur(m_ptr){}
|
|
69
|
+
|
|
70
|
+
void append(const char* ptr, size_t size)
|
|
71
|
+
{
|
|
72
|
+
const char* p = ptr;
|
|
73
|
+
const char* end = ptr + size;
|
|
74
|
+
for (;p < end; ++p)
|
|
75
|
+
{
|
|
76
|
+
if ((*p >= 0x00) && (*p <= 0x10))
|
|
77
|
+
{
|
|
78
|
+
*m_cur = 0x01;
|
|
79
|
+
*(++m_cur) = *p + 0x40;
|
|
80
|
+
}else
|
|
81
|
+
*m_cur = *p;
|
|
82
|
+
++m_cur;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void append(const char* ptr)
|
|
87
|
+
{
|
|
88
|
+
const char* p = ptr;
|
|
89
|
+
while(*p)
|
|
90
|
+
{
|
|
91
|
+
*m_cur = *p;
|
|
92
|
+
++p;
|
|
93
|
+
++m_cur;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void append(int v)
|
|
98
|
+
{
|
|
99
|
+
char tmp[50];
|
|
100
|
+
sprintf_s(tmp, 50, "%d", v);
|
|
101
|
+
append(tmp);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
size_t size()
|
|
105
|
+
{
|
|
106
|
+
*m_ptr = 0x00;
|
|
107
|
+
return m_cur - m_ptr;
|
|
108
|
+
}
|
|
109
|
+
const char* c_str(){return m_ptr;}
|
|
110
|
+
|
|
111
|
+
};
|
|
112
|
+
//-----------------------------------------------------------------------
|
|
113
|
+
// request
|
|
114
|
+
//-----------------------------------------------------------------------
|
|
115
|
+
|
|
116
|
+
struct request
|
|
117
|
+
{
|
|
118
|
+
short op;
|
|
119
|
+
int handle;
|
|
120
|
+
|
|
121
|
+
struct result
|
|
122
|
+
{
|
|
123
|
+
result():limit(1),offset(0),returnBeforeValue(0){};
|
|
124
|
+
int limit;
|
|
125
|
+
int offset;
|
|
126
|
+
bool returnBeforeValue;
|
|
127
|
+
}result;
|
|
128
|
+
|
|
129
|
+
struct db
|
|
130
|
+
{
|
|
131
|
+
char name[DEBNAME_SIZE];
|
|
132
|
+
}db;
|
|
133
|
+
|
|
134
|
+
struct table
|
|
135
|
+
{
|
|
136
|
+
table():openMode(0){}
|
|
137
|
+
char name[TABELNAME_SIZE];
|
|
138
|
+
short openMode;
|
|
139
|
+
|
|
140
|
+
struct key
|
|
141
|
+
{
|
|
142
|
+
key():logical(0){};
|
|
143
|
+
char name[INDEXNAME_SIZE];
|
|
144
|
+
std::vector<std::string> values;
|
|
145
|
+
short logical;
|
|
146
|
+
}key;
|
|
147
|
+
|
|
148
|
+
std::string fields;
|
|
149
|
+
std::vector<std::string> values;
|
|
150
|
+
struct in
|
|
151
|
+
{
|
|
152
|
+
in():keypart(0){}
|
|
153
|
+
uint keypart;
|
|
154
|
+
std::vector<std::string> values;
|
|
155
|
+
}in;
|
|
156
|
+
|
|
157
|
+
struct filter
|
|
158
|
+
{
|
|
159
|
+
filter():type(0),logical(0),col(0){}
|
|
160
|
+
char type;
|
|
161
|
+
short logical;
|
|
162
|
+
short col;
|
|
163
|
+
std::string value;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
typedef std::vector<filter> filters_type;
|
|
167
|
+
filters_type filters;
|
|
168
|
+
|
|
169
|
+
}table;
|
|
170
|
+
|
|
171
|
+
request():op(HS_OP_READ),handle(0){}
|
|
172
|
+
ha_rkey_function seekFlag();
|
|
173
|
+
bool naviForward();
|
|
174
|
+
bool naviSame();
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
//-----------------------------------------------------------------------
|
|
180
|
+
// class dbExecuter
|
|
181
|
+
//-----------------------------------------------------------------------
|
|
182
|
+
/** Current, no support auth command .
|
|
183
|
+
*/
|
|
184
|
+
typedef int (*changeFunc)(request& req, engine::mysql::table* tb, int type);
|
|
185
|
+
class dbExecuter : public engine::mysql::dbManager
|
|
186
|
+
{
|
|
187
|
+
void doRecordOperation( request& req, engine::mysql::table* tb, resultBuffer& buf, changeFunc func);
|
|
188
|
+
inline int readAfter(request& req, engine::mysql::table* tb, resultBuffer& buf, changeFunc func);
|
|
189
|
+
|
|
190
|
+
public:
|
|
191
|
+
int commandExec(std::vector<request>& requests, char* result, size_t& size, netsvc::server::buffers* optionalData);
|
|
192
|
+
int errorCode(int ha_error){return 0;};
|
|
193
|
+
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
//-----------------------------------------------------------------------
|
|
197
|
+
// class commandExecuter
|
|
198
|
+
//-----------------------------------------------------------------------
|
|
199
|
+
class commandExecuter : public ICommandExecuter, public engine::mysql::igetDatabases
|
|
200
|
+
{
|
|
201
|
+
boost::shared_ptr<dbExecuter> m_dbExec;
|
|
202
|
+
mutable std::vector<request> m_requests;
|
|
203
|
+
|
|
204
|
+
public:
|
|
205
|
+
commandExecuter(__int64 parent);
|
|
206
|
+
~commandExecuter();
|
|
207
|
+
size_t perseRequestEnd(const char* p, size_t size, bool& comp)const;
|
|
208
|
+
size_t getAcceptMessage(char* message, size_t size){return 0;};
|
|
209
|
+
bool parse(const char* p, size_t size) ;
|
|
210
|
+
int execute(char* resultBuffer, size_t& size, netsvc::server::buffers* optionalData)
|
|
211
|
+
{
|
|
212
|
+
return m_dbExec->commandExec(m_requests, resultBuffer, size, optionalData);
|
|
213
|
+
}
|
|
214
|
+
void cleanup(){};
|
|
215
|
+
bool isShutDown(){return m_dbExec->isShutDown();}
|
|
216
|
+
const engine::mysql::databases& dbs() const{return m_dbExec->dbs();};
|
|
217
|
+
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
}//namespace hs
|
|
222
|
+
}//namespace protocol
|
|
223
|
+
}//namespace db
|
|
224
|
+
}//namespace bzs
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
#endif //BZS_DB_PROTOCOL_HS_HSCOMMANDEXECUTER_H
|
|
228
|
+
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 2000-2013 BizStation Corp All rights reserved.
|
|
3
|
+
|
|
4
|
+
This program is free software; you can redistribute it and/or
|
|
5
|
+
modify it under the terms of the GNU General Public License
|
|
6
|
+
as published by the Free Software Foundation; either version 2
|
|
7
|
+
of the License, or (at your option) any later version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful,
|
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License
|
|
15
|
+
along with this program; if not, write to the Free Software
|
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
|
+
02111-1307, USA.
|
|
18
|
+
=================================================================*/
|
|
19
|
+
#include <bzs/env/tstring.h>
|
|
20
|
+
#pragma hdrstop
|
|
21
|
+
|
|
22
|
+
#include "btrDate.h"
|
|
23
|
+
#include <bzs/rtl/datetime.h>
|
|
24
|
+
#include <stdio.h>
|
|
25
|
+
#include <stdlib.h>
|
|
26
|
+
#include <time.h>
|
|
27
|
+
#include <bzs/env/compiler.h>
|
|
28
|
+
#ifdef LINUX
|
|
29
|
+
#include <bzs/env/mbcswchrLinux.h>
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#pragma package(smart_init)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#if (defined(_WIN32) && _MSC_VER)
|
|
36
|
+
extern DWORD g_tlsiID_SC2;
|
|
37
|
+
#else
|
|
38
|
+
__THREAD _TCHAR __THREAD_BCB g_date2[45];
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
inline _TCHAR* databuf()
|
|
42
|
+
{
|
|
43
|
+
#if (defined(_WIN32) && _MSC_VER)
|
|
44
|
+
return (_TCHAR*)TlsGetValue(g_tlsiID_SC2);
|
|
45
|
+
#else
|
|
46
|
+
return g_date2;
|
|
47
|
+
#endif
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
namespace bzs
|
|
52
|
+
{
|
|
53
|
+
using namespace rtl;
|
|
54
|
+
namespace db
|
|
55
|
+
{
|
|
56
|
+
namespace protocol
|
|
57
|
+
{
|
|
58
|
+
namespace tdap
|
|
59
|
+
{
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
#define dateToi64(p) (((__int64)JDate2Num(p) - 1721426)*86400) + _timezone
|
|
65
|
+
#define timeToi64(t) t.ss+t.nn*60+t.hh*3600
|
|
66
|
+
|
|
67
|
+
__int64 btrTimeStamp::getDateTimeInt(int& time)
|
|
68
|
+
{
|
|
69
|
+
// seconds from 0000-01-01 00:00:00
|
|
70
|
+
__int64 sec = i64 / 10000000 - _timezone;
|
|
71
|
+
time = sec % 86400;
|
|
72
|
+
// 1721426 days differs from JDate2Num.
|
|
73
|
+
__int64 days = sec / 86400 + 1721426;
|
|
74
|
+
return days;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
btrTimeStamp::btrTimeStamp(unsigned __int64 i):i64(i){};
|
|
79
|
+
|
|
80
|
+
btrTimeStamp::btrTimeStamp(const char* p)
|
|
81
|
+
{
|
|
82
|
+
fromString(p);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
btrTimeStamp::btrTimeStamp(btrDate d, btrTime t):i64(0)
|
|
86
|
+
{
|
|
87
|
+
i64 += timeToi64(t);
|
|
88
|
+
i64 += dateToi64(btrdtoa(d, (_TCHAR*)NULL));
|
|
89
|
+
i64 *= 10000000;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
#ifdef _WIN32
|
|
94
|
+
btrTimeStamp::btrTimeStamp(const wchar_t* p)
|
|
95
|
+
{
|
|
96
|
+
fromString(p);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
wchar_t* btrTimeStamp::toString(wchar_t* p)
|
|
100
|
+
{
|
|
101
|
+
int time;
|
|
102
|
+
int v = (int)getDateTimeInt(time);
|
|
103
|
+
#ifdef _UNICODE
|
|
104
|
+
swprintf_s(p, 20, _T("%s %02d:%02d:%02d"), JNum2Date(v), time/3600,time%3600/60,time%3600%60);
|
|
105
|
+
return p;
|
|
106
|
+
#else
|
|
107
|
+
char buf[30];
|
|
108
|
+
sprintf_s(buf, 30, _T("%s %02d:%02d:%02d"), JNum2Date(v), time/3600,time%3600/60,time%3600%60);
|
|
109
|
+
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, buf, -1, p, 20);
|
|
110
|
+
return p;
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
void btrTimeStamp::fromString(const wchar_t* p)
|
|
116
|
+
{
|
|
117
|
+
i64 = 0;
|
|
118
|
+
const wchar_t* p2 = wcsstr(p, L" ");
|
|
119
|
+
|
|
120
|
+
if (p2)
|
|
121
|
+
{
|
|
122
|
+
btrTime t = atobtrt(p2+1);
|
|
123
|
+
i64 += timeToi64(t);
|
|
124
|
+
}
|
|
125
|
+
i64 += dateToi64(p);
|
|
126
|
+
i64 *= 10000000;
|
|
127
|
+
}
|
|
128
|
+
#endif //_WIN32
|
|
129
|
+
|
|
130
|
+
char* btrTimeStamp::toString(char* p)
|
|
131
|
+
{
|
|
132
|
+
int time;
|
|
133
|
+
int v = (int)getDateTimeInt(time);
|
|
134
|
+
#ifndef _UNICODE
|
|
135
|
+
sprintf_s(p, 20, _T("%s %02d:%02d:%02d"), JNum2Date(v), time/3600,time%3600/60,time%3600%60);
|
|
136
|
+
return p;
|
|
137
|
+
#else
|
|
138
|
+
wchar_t buf[30];
|
|
139
|
+
swprintf_s(buf, 30, _T("%s %02d:%02d:%02d"), JNum2Date(v), time/3600,time%3600/60,time%3600%60);
|
|
140
|
+
wtoa(p, buf, 20);
|
|
141
|
+
return p;
|
|
142
|
+
#endif
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void btrTimeStamp::fromString(const char* p)
|
|
146
|
+
{
|
|
147
|
+
i64 = 0;
|
|
148
|
+
const char* p2 = strstr(p, " ");
|
|
149
|
+
|
|
150
|
+
if (p2)
|
|
151
|
+
{
|
|
152
|
+
btrTime t = atobtrt(p2+1);
|
|
153
|
+
i64 += timeToi64(t);
|
|
154
|
+
}
|
|
155
|
+
i64 += dateToi64(p);
|
|
156
|
+
i64 *= 10000000;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
bdate::bdate(int date)
|
|
162
|
+
{
|
|
163
|
+
m_date.i = date;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
bdate::bdate(const _TCHAR* date)
|
|
167
|
+
{
|
|
168
|
+
btrDate bt;
|
|
169
|
+
bt.yy = (short)GetYear(date, false);
|
|
170
|
+
bt.mm = (char)GetMonth(date, false);
|
|
171
|
+
bt.dd = (char)bzs::rtl::GetDate(date);
|
|
172
|
+
m_date = bt;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const _TCHAR* bdate::year_str()
|
|
176
|
+
{
|
|
177
|
+
_TCHAR* p = databuf();
|
|
178
|
+
_stprintf_s(p , 30, _T("%d"), (int)m_date.yy);
|
|
179
|
+
return p;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const _TCHAR* bdate::month_str()
|
|
183
|
+
{
|
|
184
|
+
_TCHAR* p = databuf();
|
|
185
|
+
_stprintf_s(p, 30,_T("%d"), (int)m_date.mm);
|
|
186
|
+
return p;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const _TCHAR* bdate::date_str()
|
|
190
|
+
{
|
|
191
|
+
_TCHAR* p = databuf();
|
|
192
|
+
_stprintf_s(p, 30, _T("%d"), (int)m_date.dd);
|
|
193
|
+
return p;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const _TCHAR* bdate::c_str()
|
|
197
|
+
{
|
|
198
|
+
return btrdtoa(m_date, (_TCHAR*)NULL);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const char* dateFormatString(const char*){return "%04d/%02d/%02d";}
|
|
202
|
+
const wchar_t* dateFormatString(const wchar_t*){return L"%04d/%02d/%02d";}
|
|
203
|
+
|
|
204
|
+
const char* dateFormatString_h(const char*){return "%04d-%02d-%02d";}
|
|
205
|
+
const wchar_t* dateFormatString_h(const wchar_t*){return L"%04d-%02d-%02d";}
|
|
206
|
+
|
|
207
|
+
const char* timeFormatString(const char*){return "%02d:%02d:%02d";}
|
|
208
|
+
const wchar_t* timeFormatString(const wchar_t*){return L"%02d:%02d:%02d";}
|
|
209
|
+
|
|
210
|
+
const char* timeFormatString_h(const char*){return "%02d-%02d-%02d";}
|
|
211
|
+
const wchar_t* timeFormatString_h(const wchar_t*){return L"%02d-%02d-%02d";}
|
|
212
|
+
|
|
213
|
+
template <class T>
|
|
214
|
+
size_t _tcslen_(const T* p);
|
|
215
|
+
|
|
216
|
+
template <> size_t _tcslen_(const char* p){return strlen(p);}
|
|
217
|
+
template <> size_t _tcslen_(const wchar_t* p){return wcslen(p);}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
template <class T>
|
|
221
|
+
int _ttoi_(const T* p);
|
|
222
|
+
|
|
223
|
+
template <> int _ttoi_(const char* p){return atoi(p);}
|
|
224
|
+
template <> int _ttoi_(const wchar_t* p){return _wtoi(p);}
|
|
225
|
+
|
|
226
|
+
template <class T>
|
|
227
|
+
T* formatDate(T* p, const btrDate& d, bool type_vb);
|
|
228
|
+
|
|
229
|
+
template <> char* formatDate(char* p, const btrDate& d, bool type_vb)
|
|
230
|
+
{
|
|
231
|
+
if (type_vb)
|
|
232
|
+
sprintf_s(p, 11, dateFormatString_h(p), d.yy, d.mm, d.dd);
|
|
233
|
+
else
|
|
234
|
+
sprintf_s(p, 11, dateFormatString(p), d.yy, d.mm, d.dd);
|
|
235
|
+
return p;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
template <> wchar_t* formatDate(wchar_t* p, const btrDate& d, bool type_vb)
|
|
239
|
+
{
|
|
240
|
+
if (type_vb)
|
|
241
|
+
swprintf_s(p, 11, dateFormatString_h(p), d.yy, d.mm, d.dd);
|
|
242
|
+
else
|
|
243
|
+
swprintf_s(p, 11, dateFormatString(p), d.yy, d.mm, d.dd);
|
|
244
|
+
return p;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
template <class T>
|
|
249
|
+
T* formatTime(T* p, const btrTime& d, bool type_vb);
|
|
250
|
+
|
|
251
|
+
template <> char* formatTime(char* p, const btrTime& t, bool type_vb)
|
|
252
|
+
{
|
|
253
|
+
if (type_vb)
|
|
254
|
+
sprintf_s(p, 9, timeFormatString_h(p), t.hh, t.nn, t.ss);
|
|
255
|
+
else
|
|
256
|
+
sprintf_s(p, 9, timeFormatString(p), t.hh, t.nn, t.ss);
|
|
257
|
+
return p;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
template <> wchar_t* formatTime(wchar_t* p, const btrTime& t, bool type_vb)
|
|
261
|
+
{
|
|
262
|
+
if (type_vb)
|
|
263
|
+
swprintf_s(p, 9, timeFormatString_h(p), t.hh, t.nn, t.ss);
|
|
264
|
+
else
|
|
265
|
+
swprintf_s(p, 9, timeFormatString(p), t.hh, t.nn, t.ss);
|
|
266
|
+
return p;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
template <class T>
|
|
270
|
+
btrDate atobtrd(const T* date)
|
|
271
|
+
{
|
|
272
|
+
btrDate bt;
|
|
273
|
+
bt.i=0;
|
|
274
|
+
if (date &&
|
|
275
|
+
((_tcslen_(date)==10) || ((_tcslen_(date) > 10) && (date[10]== 'T' || date[10]== ' '))))
|
|
276
|
+
{
|
|
277
|
+
bt.yy = (short)_ttoi_(date);
|
|
278
|
+
bt.mm = (char)_ttoi_(date + 5);
|
|
279
|
+
bt.dd = (char)_ttoi_(date + 8);
|
|
280
|
+
}
|
|
281
|
+
return bt;
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
template <class T>
|
|
287
|
+
const T* btrdtoa(const btrDate& d, T* retbuf, bool type_vb)
|
|
288
|
+
{
|
|
289
|
+
T* p = retbuf;
|
|
290
|
+
if (p == NULL)
|
|
291
|
+
p = (T*)databuf();
|
|
292
|
+
return formatDate(p, d, type_vb);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
template <class T>
|
|
296
|
+
const T* btrttoa(const btrTime& t, T* retbuf, bool type_vb)
|
|
297
|
+
{
|
|
298
|
+
T* p = retbuf;
|
|
299
|
+
if (p == NULL)
|
|
300
|
+
p = (T*)databuf();
|
|
301
|
+
return formatTime(p, t, type_vb);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
template <class T>
|
|
305
|
+
btrTime atobtrt(const T* p)
|
|
306
|
+
{
|
|
307
|
+
btrTime retVal;
|
|
308
|
+
retVal.i = 0;
|
|
309
|
+
if (p && (_tcslen_(p) == 8))
|
|
310
|
+
{
|
|
311
|
+
retVal.hh = (char)_ttoi_(p);
|
|
312
|
+
retVal.nn = (char)_ttoi_(p + 3);
|
|
313
|
+
retVal.ss = (char)_ttoi_(p + 6);
|
|
314
|
+
}else
|
|
315
|
+
retVal.i = 0;
|
|
316
|
+
return retVal;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
btrDate atobtrd(const char* p){return atobtrd<char>(p);}
|
|
320
|
+
|
|
321
|
+
const char* btrdtoa(const btrDate& d, char* retbuf, bool type_vb)
|
|
322
|
+
{
|
|
323
|
+
return btrdtoa<char>(d, retbuf, type_vb);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const char* btrttoa(const btrTime& t, char* retbuf, bool type_vb)
|
|
327
|
+
{
|
|
328
|
+
return btrttoa<char>(t, retbuf, type_vb);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
btrTime atobtrt(const char* p){return atobtrt<char>(p);}
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
#ifdef _WIN32
|
|
335
|
+
const wchar_t* btrdtoa(const btrDate& d, wchar_t* retbuf, bool type_vb)
|
|
336
|
+
{
|
|
337
|
+
return btrdtoa<wchar_t>(d, retbuf, type_vb);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const wchar_t* btrttoa(const btrTime& t, wchar_t* retbuf, bool type_vb)
|
|
341
|
+
{
|
|
342
|
+
return btrttoa<wchar_t>(t, retbuf, type_vb);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
btrDate atobtrd(const wchar_t* p){return atobtrd<wchar_t>(p);}
|
|
346
|
+
|
|
347
|
+
btrTime atobtrt(const wchar_t* p){return atobtrt<wchar_t>(p);}
|
|
348
|
+
|
|
349
|
+
#endif
|
|
350
|
+
|
|
351
|
+
const _TCHAR* btrstoa(const btrDateTime& s, _TCHAR* retbuf, bool type_vb)
|
|
352
|
+
{
|
|
353
|
+
_TCHAR * p= retbuf;
|
|
354
|
+
const btrDate& d = s.date;
|
|
355
|
+
const btrTime& t = s.time;
|
|
356
|
+
if (p==NULL)
|
|
357
|
+
p = databuf();;
|
|
358
|
+
if (type_vb)
|
|
359
|
+
_stprintf_s(p, 21, _T("%04d-%02d-%02dT%02d:%02d:%02d"), d.yy, d.mm, d.dd, t.hh, t.nn, t.ss);
|
|
360
|
+
else
|
|
361
|
+
_stprintf_s(p, 21, _T("%04d/%02d/%02d %02d:%02d:%02d"), d.yy, d.mm, d.dd, t.hh, t.nn, t.ss);
|
|
362
|
+
return p;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
btrDateTime atobtrs(const _TCHAR* p)
|
|
366
|
+
{
|
|
367
|
+
btrDateTime s;
|
|
368
|
+
s.i64 = 0;
|
|
369
|
+
s.date = atobtrd(p);
|
|
370
|
+
const _TCHAR* tmp = _tcsstr(p, _T("T"));
|
|
371
|
+
if (tmp)
|
|
372
|
+
s.time = atobtrt(tmp + 1);
|
|
373
|
+
else if ((tmp = _tcsstr(p, _T(" ")))!=NULL)
|
|
374
|
+
s.time = atobtrt(tmp + 1);
|
|
375
|
+
return s;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
int getNowDate()
|
|
381
|
+
{
|
|
382
|
+
btrDate dtb;
|
|
383
|
+
#ifdef _WIN32
|
|
384
|
+
SYSTEMTIME pst;
|
|
385
|
+
GetLocalTime(&pst);
|
|
386
|
+
|
|
387
|
+
dtb.yy = (short)pst.wYear;
|
|
388
|
+
dtb.mm = (char)(pst.wMonth);
|
|
389
|
+
dtb.dd = (char)pst.wDay;
|
|
390
|
+
#else
|
|
391
|
+
//not _WIN32
|
|
392
|
+
struct tm* date;
|
|
393
|
+
time_t now;
|
|
394
|
+
time(&now);
|
|
395
|
+
struct tm tmp;
|
|
396
|
+
date = &tmp;
|
|
397
|
+
localtime_x(date, &now);
|
|
398
|
+
|
|
399
|
+
dtb.yy = (short)date->tm_year + 1900;
|
|
400
|
+
dtb.mm = (char)date->tm_mon + 1;
|
|
401
|
+
dtb.dd = (char)date->tm_mday;
|
|
402
|
+
#endif //NOT _WIN32
|
|
403
|
+
return dtb.i;
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
int getNowTime()
|
|
408
|
+
{
|
|
409
|
+
btrTime tmb;
|
|
410
|
+
#ifdef _WIN32
|
|
411
|
+
|
|
412
|
+
tmb.i = 0;
|
|
413
|
+
SYSTEMTIME pst;
|
|
414
|
+
GetLocalTime(&pst);
|
|
415
|
+
tmb.hh = (char)pst.wHour; tmb.nn = (char)pst.wMinute;
|
|
416
|
+
tmb.ss = (char)pst.wSecond;
|
|
417
|
+
tmb.uu = (char)(pst.wMilliseconds/10);
|
|
418
|
+
#else
|
|
419
|
+
struct tm* date;
|
|
420
|
+
time_t now;
|
|
421
|
+
time(&now);
|
|
422
|
+
struct tm tmp;
|
|
423
|
+
date = &tmp;
|
|
424
|
+
localtime_x(date, &now);
|
|
425
|
+
tmb.hh = (char)date->tm_hour;
|
|
426
|
+
tmb.nn = (char)date->tm_min;
|
|
427
|
+
tmb.ss = (char)date->tm_sec;
|
|
428
|
+
tmb.uu = 00;
|
|
429
|
+
#endif
|
|
430
|
+
return tmb.i;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
}//namespace tdap
|
|
435
|
+
}//namespace protocol
|
|
436
|
+
}//namespace db
|
|
437
|
+
}//namespace bzs
|