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,689 @@
|
|
|
1
|
+
/*=================================================================
|
|
2
|
+
Copyright (C) 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 "hsCommandExecuter.h"
|
|
20
|
+
#include <bzs/db/engine/mysql/database.h>
|
|
21
|
+
#include <bzs/db/engine/mysql/errorMessage.h>
|
|
22
|
+
#include <bzs/db/engine/mysql/mydebuglog.h>
|
|
23
|
+
#include <bzs/netsvc/server/IAppModule.h> //lookup for result value
|
|
24
|
+
#include <bzs/rtl/stl_uty.h>
|
|
25
|
+
#include <limits.h>
|
|
26
|
+
#include <bzs/db/transactd/connManager.h>
|
|
27
|
+
#include <bzs/rtl/exception.h>
|
|
28
|
+
|
|
29
|
+
#ifdef USE_HANDLERSOCKET
|
|
30
|
+
namespace bzs
|
|
31
|
+
{
|
|
32
|
+
namespace db
|
|
33
|
+
{
|
|
34
|
+
using namespace engine::mysql;
|
|
35
|
+
namespace protocol
|
|
36
|
+
{
|
|
37
|
+
using namespace transactd;
|
|
38
|
+
using namespace transactd::connection;
|
|
39
|
+
namespace hs
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
//-----------------------------------------------------------------------
|
|
43
|
+
// request
|
|
44
|
+
//-----------------------------------------------------------------------
|
|
45
|
+
ha_rkey_function request::seekFlag()
|
|
46
|
+
{
|
|
47
|
+
switch(table.key.logical)
|
|
48
|
+
{
|
|
49
|
+
case HS_LG_EQUAL:return HA_READ_KEY_EXACT;
|
|
50
|
+
case HS_LG_GREATER:return HA_READ_AFTER_KEY;
|
|
51
|
+
case HS_LG_GREATEROREQUAL:return HA_READ_KEY_OR_NEXT;
|
|
52
|
+
case HS_LG_LESS:return HA_READ_BEFORE_KEY;
|
|
53
|
+
case HS_LG_LESSOREQUAL:return HA_READ_KEY_OR_PREV;
|
|
54
|
+
}
|
|
55
|
+
return HA_READ_KEY_EXACT;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
bool request::naviSame()
|
|
59
|
+
{
|
|
60
|
+
return (table.key.logical == HS_LG_EQUAL);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
bool request::naviForward()
|
|
64
|
+
{
|
|
65
|
+
return (table.key.logical == HS_LG_GREATER)||(table.key.logical == HS_LG_GREATEROREQUAL);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void seriarizeRecordsetBegin(engine::mysql::table* tb, resultBuffer& buf
|
|
69
|
+
, bool sendBforeValue)
|
|
70
|
+
{
|
|
71
|
+
if (sendBforeValue)
|
|
72
|
+
{
|
|
73
|
+
buf.append("0\t");
|
|
74
|
+
buf.append((int)tb->useFields().size());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void seriarizeRecord(engine::mysql::table* tb, resultBuffer& buf, bool sendBforeValue)
|
|
79
|
+
{
|
|
80
|
+
if (sendBforeValue)
|
|
81
|
+
{
|
|
82
|
+
for (int i=0;i<tb->useFields().size();i++)
|
|
83
|
+
{
|
|
84
|
+
buf.append("\t");
|
|
85
|
+
int size;
|
|
86
|
+
const char* p = tb->valStr(tb->useFields()[i], size);
|
|
87
|
+
if (size == -1)
|
|
88
|
+
buf.append("\0");
|
|
89
|
+
else
|
|
90
|
+
buf.append(p, size);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void seriarizeRecordsetEnd(engine::mysql::table* tb, resultBuffer& buf
|
|
96
|
+
, int count, bool sendBforeValue)
|
|
97
|
+
{
|
|
98
|
+
if (!sendBforeValue)
|
|
99
|
+
{
|
|
100
|
+
buf.append("0\t1\t");
|
|
101
|
+
buf.append(count);
|
|
102
|
+
buf.append("\n");
|
|
103
|
+
}else
|
|
104
|
+
buf.append("\n");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void writeError(int error, resultBuffer& buf, const char* msg)
|
|
108
|
+
{
|
|
109
|
+
buf.append(error);
|
|
110
|
+
buf.append("\t");
|
|
111
|
+
buf.append(msg);
|
|
112
|
+
buf.append("\n");
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
void writeStatus(int stat, resultBuffer& buf, int option)
|
|
116
|
+
{
|
|
117
|
+
int v = 0;
|
|
118
|
+
v = std::min(stat, 1);
|
|
119
|
+
buf.append(v);
|
|
120
|
+
buf.append("\t");
|
|
121
|
+
buf.append(option);
|
|
122
|
+
buf.append("\n\0");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//-----------------------------------------------------------------------
|
|
126
|
+
// clas dbExecuter
|
|
127
|
+
//-----------------------------------------------------------------------
|
|
128
|
+
#define READ_SUCCESS 0
|
|
129
|
+
#define FILTER_MATCH READ_SUCCESS
|
|
130
|
+
#define FILTER_SKIP 1
|
|
131
|
+
#define FILTER_BREAK 2
|
|
132
|
+
|
|
133
|
+
int update(request& req, engine::mysql::table* tb, int type)
|
|
134
|
+
{
|
|
135
|
+
tb->beginUpdate(tb->keyNum());
|
|
136
|
+
tb->setUseValues(req.table.values, type);
|
|
137
|
+
tb->update(true);
|
|
138
|
+
return tb->stat();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
int del(request& req, engine::mysql::table* tb, int type)
|
|
142
|
+
{
|
|
143
|
+
tb->beginDel();
|
|
144
|
+
tb->del();
|
|
145
|
+
return tb->stat();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
inline bool match(short logical, int v)
|
|
149
|
+
{
|
|
150
|
+
switch(logical)
|
|
151
|
+
{
|
|
152
|
+
case HS_LG_EQUAL:return (v==0); //==
|
|
153
|
+
case HS_LG_GREATER:return (v>0); //>
|
|
154
|
+
case HS_LG_LESS:return (v<0); //<
|
|
155
|
+
case HS_LG_NOTEQUAL:return (v!=0); //!=
|
|
156
|
+
case HS_LG_GREATEROREQUAL:return (v>=0); //>=
|
|
157
|
+
case HS_LG_LESSOREQUAL:return (v<=0); //<=
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
int filter(engine::mysql::table* tb, request::table::filters_type& filters)
|
|
163
|
+
{
|
|
164
|
+
for(size_t i=0;i<filters.size();++i)
|
|
165
|
+
{
|
|
166
|
+
request::table::filter& f = filters[i];
|
|
167
|
+
if (f.col >= tb->useFields().size())
|
|
168
|
+
THROW_BZS_ERROR_WITH_MSG("fcol");
|
|
169
|
+
Field* fd = tb->field(tb->useFields()[f.col]);
|
|
170
|
+
uchar tmp[1024]={NULL};
|
|
171
|
+
if (fd->pack_length() > 1024)
|
|
172
|
+
THROW_BZS_ERROR_WITH_MSG("field_length > 1024");
|
|
173
|
+
memcpy(tmp, fd->ptr, fd->pack_length());
|
|
174
|
+
tb->setValue(fd->field_index, f.value, 0);
|
|
175
|
+
int v = fd->cmp(tmp, fd->ptr);
|
|
176
|
+
memcpy(fd->ptr, tmp, fd->pack_length());
|
|
177
|
+
if (!match(f.logical, v))
|
|
178
|
+
return (f.type=='F') ? FILTER_SKIP : FILTER_BREAK;
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
return FILTER_MATCH;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
inline int type(request& req)
|
|
185
|
+
{
|
|
186
|
+
if (req.op == HS_OP_UPDATE_INC) return UPDATE_INC;
|
|
187
|
+
if (req.op == HS_OP_UPDATE_DEC) return UPDATE_DEC;
|
|
188
|
+
return UPDATE_REPLACE;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
inline int dbExecuter::readAfter(request& req, engine::mysql::table* tb, resultBuffer& buf,changeFunc func)
|
|
192
|
+
{
|
|
193
|
+
int ret = filter(tb, req.table.filters);
|
|
194
|
+
if (ret == FILTER_MATCH)
|
|
195
|
+
{
|
|
196
|
+
if (req.result.offset==0)
|
|
197
|
+
{
|
|
198
|
+
seriarizeRecord(tb, buf, req.result.returnBeforeValue);
|
|
199
|
+
if (func)
|
|
200
|
+
func(req, tb, type(req));
|
|
201
|
+
return READ_SUCCESS;
|
|
202
|
+
}
|
|
203
|
+
--req.result.offset;
|
|
204
|
+
return FILTER_SKIP;
|
|
205
|
+
}
|
|
206
|
+
return ret;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
inline void setKeyValues(request& req, engine::mysql::table* tb, int index)
|
|
210
|
+
{
|
|
211
|
+
if (req.table.in.keypart >= tb->keyDef(tb->keyNum()).user_defined_key_parts)
|
|
212
|
+
THROW_BZS_ERROR_WITH_MSG("icol");
|
|
213
|
+
tb->clearBuffer();
|
|
214
|
+
if (index != -1)
|
|
215
|
+
tb->setKeyValues(req.table.key.values, req.table.in.keypart, &(req.table.in.values[index]));
|
|
216
|
+
else
|
|
217
|
+
tb->setKeyValues(req.table.key.values, -1);
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
void dbExecuter::doRecordOperation(request& req, engine::mysql::table* tb, resultBuffer& buf, changeFunc func)
|
|
222
|
+
{
|
|
223
|
+
int count = 0;
|
|
224
|
+
int curInValueIndex = req.table.in.values.size() ? 0: -1;
|
|
225
|
+
int offset = req.result.offset;
|
|
226
|
+
int filterResult = 0;
|
|
227
|
+
seriarizeRecordsetBegin(tb, buf, req.result.returnBeforeValue);
|
|
228
|
+
|
|
229
|
+
setKeyValues(req, tb, curInValueIndex);
|
|
230
|
+
if (curInValueIndex >= 0) ++curInValueIndex;
|
|
231
|
+
tb->seekKey(req.seekFlag());
|
|
232
|
+
if (tb->stat()==0)
|
|
233
|
+
{
|
|
234
|
+
filterResult = readAfter(req, tb, buf, func);
|
|
235
|
+
if (filterResult == READ_SUCCESS) ++count;
|
|
236
|
+
}
|
|
237
|
+
if (((tb->stat()==0) && (filterResult != FILTER_BREAK))
|
|
238
|
+
|| (curInValueIndex > -1))
|
|
239
|
+
{
|
|
240
|
+
for (size_t i=1;i<req.result.limit + offset;i++)
|
|
241
|
+
{
|
|
242
|
+
if (curInValueIndex > -1)
|
|
243
|
+
{
|
|
244
|
+
if (curInValueIndex >= req.table.in.values.size())
|
|
245
|
+
break;
|
|
246
|
+
setKeyValues(req, tb, curInValueIndex++);
|
|
247
|
+
tb->seekKey(req.seekFlag());
|
|
248
|
+
}else
|
|
249
|
+
{
|
|
250
|
+
if (req.naviSame())
|
|
251
|
+
tb->getNextSame();
|
|
252
|
+
else if (req.naviForward())
|
|
253
|
+
tb->getNext();
|
|
254
|
+
else
|
|
255
|
+
tb->getPrev();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (tb->stat()) break;
|
|
259
|
+
filterResult = readAfter(req, tb, buf, func);
|
|
260
|
+
if (filterResult == READ_SUCCESS) ++count;
|
|
261
|
+
if (tb->stat() || (filterResult == FILTER_BREAK)) break;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
seriarizeRecordsetEnd(m_tb, buf, count, req.result.returnBeforeValue);
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
int dbExecuter::commandExec(std::vector<request>& requests, char* result, size_t& size, netsvc::server::buffers* optionalData)
|
|
269
|
+
{
|
|
270
|
+
request& req = requests[0];
|
|
271
|
+
resultBuffer buf(result);
|
|
272
|
+
try
|
|
273
|
+
{
|
|
274
|
+
switch(req.op)
|
|
275
|
+
{
|
|
276
|
+
case HS_OP_QUIT:
|
|
277
|
+
return EXECUTE_RESULT_QUIT;
|
|
278
|
+
case HS_OP_AUTH:
|
|
279
|
+
writeStatus(0, buf, 1);//allways success.
|
|
280
|
+
break;
|
|
281
|
+
case HS_OP_OPEN:
|
|
282
|
+
{
|
|
283
|
+
checkNewHandle(req.handle);
|
|
284
|
+
database* db = getDatabase(req.db.name, 0/*cid*/);
|
|
285
|
+
m_tb = db->openTable(req.table.name, req.table.openMode);
|
|
286
|
+
addHandle(getDatabaseID(0/*cid*/), m_tb->id(), req.handle);
|
|
287
|
+
m_tb = getTable(req.handle);
|
|
288
|
+
m_tb->setUseFieldList(req.table.fields);
|
|
289
|
+
m_tb->setKeyNum(req.table.key.name);
|
|
290
|
+
writeStatus(m_tb->stat(), buf, 1);
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
case HS_OP_INSERT:
|
|
294
|
+
{
|
|
295
|
+
m_tb = getTable(req.handle, SQLCOM_INSERT);
|
|
296
|
+
m_tb->clearBuffer();
|
|
297
|
+
m_tb->setUseValues(req.table.values, 0);
|
|
298
|
+
m_tb->insert(true);
|
|
299
|
+
writeStatus(m_tb->stat(), buf, 1);
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
case HS_OP_UPDATE_INC:
|
|
303
|
+
case HS_OP_UPDATE_DEC:
|
|
304
|
+
case HS_OP_UPDATE:
|
|
305
|
+
{
|
|
306
|
+
m_tb = getTable(req.handle, SQLCOM_UPDATE);
|
|
307
|
+
doRecordOperation(req, m_tb, buf, update);
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
case HS_OP_DELETE:
|
|
311
|
+
{
|
|
312
|
+
m_tb = getTable(req.handle, SQLCOM_UPDATE);
|
|
313
|
+
doRecordOperation(req, m_tb, buf, del);
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
case HS_OP_READ:
|
|
317
|
+
{
|
|
318
|
+
m_tb = getTable(req.handle);
|
|
319
|
+
doRecordOperation(req, m_tb, buf, NULL);
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (m_tb)m_tb->unUse();
|
|
324
|
+
size = buf.size();
|
|
325
|
+
return EXECUTE_RESULT_SUCCESS;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
catch(bzs::rtl::exception &e)
|
|
329
|
+
{
|
|
330
|
+
clenupNoException();
|
|
331
|
+
const std::string* msg = getMsg(e);
|
|
332
|
+
const int* code = getCode(e);
|
|
333
|
+
if(code && msg)
|
|
334
|
+
writeError(*code, buf, msg->c_str());
|
|
335
|
+
else
|
|
336
|
+
{
|
|
337
|
+
if(msg)
|
|
338
|
+
writeError(1, buf, msg->c_str());
|
|
339
|
+
else
|
|
340
|
+
writeError(1, buf, "");
|
|
341
|
+
sql_print_error("%s", boost::diagnostic_information(e).c_str());
|
|
342
|
+
}
|
|
343
|
+
printErrorMessage(code, msg);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
catch(...)
|
|
347
|
+
{
|
|
348
|
+
clenupNoException();
|
|
349
|
+
writeError(1, buf, "Unknown error.");
|
|
350
|
+
}
|
|
351
|
+
size = buf.size();
|
|
352
|
+
return EXECUTE_RESULT_SUCCESS;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// ---------------------------------------------------------------------------
|
|
356
|
+
// class commandExecuter
|
|
357
|
+
// ---------------------------------------------------------------------------
|
|
358
|
+
#define PARSEREAD_START 0
|
|
359
|
+
#define PARSEREAD_COMMAND 1
|
|
360
|
+
#define PARSEREAD_HANDLEID 2
|
|
361
|
+
#define PARSEREAD_SEEKCMD 3
|
|
362
|
+
#define PARSEREAD_DBNAME 4
|
|
363
|
+
#define PARSEREAD_TABLENAME 5
|
|
364
|
+
#define PARSEREAD_INDEXNAME 6
|
|
365
|
+
#define PARSEREAD_FIELDS 7
|
|
366
|
+
#define PARSEREAD_KEYVAL_COUNT 8
|
|
367
|
+
#define PARSEREAD_KEYVAL 9
|
|
368
|
+
#define PARSEREAD_LIMIT 10
|
|
369
|
+
#define PARSEREAD_OFFSET 11
|
|
370
|
+
#define PARSEREAD_DATA_COUNT 12
|
|
371
|
+
#define PARSEREAD_DATA_VAL 13
|
|
372
|
+
#define PARSEREAD_IN_MODE 15
|
|
373
|
+
#define PARSEREAD_IN_KEYPART 16
|
|
374
|
+
#define PARSEREAD_IN_COUNT 17
|
|
375
|
+
#define PARSEREAD_IN_VAL 18
|
|
376
|
+
#define PARSEREAD_FL_TYPE 19
|
|
377
|
+
#define PARSEREAD_FL_LOG 20
|
|
378
|
+
#define PARSEREAD_FL_COL 21
|
|
379
|
+
#define PARSEREAD_FL_VAL 22
|
|
380
|
+
|
|
381
|
+
inline void setHandleID(const std::string& src, int &parseMode, request* req)
|
|
382
|
+
{
|
|
383
|
+
req->handle = (short)atol(src.c_str());
|
|
384
|
+
if (req->op == HS_OP_OPEN)
|
|
385
|
+
parseMode = PARSEREAD_DBNAME;
|
|
386
|
+
else
|
|
387
|
+
parseMode = PARSEREAD_SEEKCMD;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
inline void setCmd(const std::string& src, int &parseMode, request* req)
|
|
391
|
+
{
|
|
392
|
+
if (src[0] >= '0' && src[0] <= '9')
|
|
393
|
+
return setHandleID(src, parseMode, req);
|
|
394
|
+
else
|
|
395
|
+
req->op = src[0];
|
|
396
|
+
parseMode = PARSEREAD_HANDLEID;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
inline void setChangeCmd(const std::string& src, int &parseMode, request* req)
|
|
400
|
+
{
|
|
401
|
+
req->op = src[0];
|
|
402
|
+
if (req->table.key.logical && (req->op == HS_OP_INSERT))
|
|
403
|
+
req->op = HS_OP_UPDATE_INC;
|
|
404
|
+
req->result.returnBeforeValue = (src[1] == '?');
|
|
405
|
+
if (req->op == HS_OP_INSERT)
|
|
406
|
+
parseMode = PARSEREAD_DATA_COUNT;
|
|
407
|
+
else
|
|
408
|
+
parseMode = PARSEREAD_DATA_VAL;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
inline void setSeekCmd(const std::string& src, int &parseMode, request* req)
|
|
412
|
+
{
|
|
413
|
+
if ((src[0] == HS_OP_INSERT)|| (src[0] == HS_OP_UPDATE)|| (src[0] == HS_OP_DELETE))
|
|
414
|
+
return setChangeCmd(src, parseMode, req);
|
|
415
|
+
req->table.key.logical = src[0];
|
|
416
|
+
if ((src.size()>1) && (src[1] == '='))
|
|
417
|
+
req->table.key.logical += 0xff;
|
|
418
|
+
req->result.returnBeforeValue = true;
|
|
419
|
+
parseMode = PARSEREAD_KEYVAL_COUNT;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
inline void setDbname(const std::string& src, int &parseMode, request* req)
|
|
423
|
+
{
|
|
424
|
+
strncpy(req->db.name, src.c_str(), DEBNAME_SIZE);
|
|
425
|
+
|
|
426
|
+
parseMode = PARSEREAD_TABLENAME;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
inline void setTablename(const std::string& src, int &parseMode, request* req)
|
|
430
|
+
{
|
|
431
|
+
strncpy(req->table.name, src.c_str(), TABELNAME_SIZE);
|
|
432
|
+
req->table.openMode = TD_OPEN_NORMAL;
|
|
433
|
+
parseMode = PARSEREAD_INDEXNAME;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
inline void setIndexname(const std::string& src, int &parseMode, request* req)
|
|
437
|
+
{
|
|
438
|
+
strncpy(req->table.key.name, src.c_str(), INDEXNAME_SIZE);
|
|
439
|
+
parseMode = PARSEREAD_FIELDS;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
inline void setValueCount(const std::string& src, int &parseMode,int &count)
|
|
443
|
+
{
|
|
444
|
+
count = atol(src.c_str());
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
inline void setValue(const std::string& src, int &parseMode, std::vector<std::string>& values,int &count)
|
|
448
|
+
{
|
|
449
|
+
if (count)
|
|
450
|
+
{
|
|
451
|
+
values.push_back(src);
|
|
452
|
+
--count;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
inline bool setLimit(const std::string& src, int &parseMode, request* req)
|
|
457
|
+
{
|
|
458
|
+
if ((src[0]>='0') && (src[0]<='9'))
|
|
459
|
+
{
|
|
460
|
+
req->result.limit = atol(src.c_str());
|
|
461
|
+
parseMode = PARSEREAD_OFFSET;
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
parseMode = PARSEREAD_IN_MODE;
|
|
465
|
+
return true;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
inline void setOffset(const std::string& src, int &parseMode, request* req)
|
|
469
|
+
{
|
|
470
|
+
req->result.offset = atol(src.c_str());
|
|
471
|
+
parseMode = PARSEREAD_IN_MODE;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
inline void setFields(const std::string& src, int &parseMode, request* req)
|
|
475
|
+
{
|
|
476
|
+
req->table.fields = src;
|
|
477
|
+
parseMode = PARSEREAD_START;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
inline bool setInMode(const std::string& src, int &parseMode, request* req)
|
|
481
|
+
{
|
|
482
|
+
if (src[0] == '@')
|
|
483
|
+
{
|
|
484
|
+
parseMode = PARSEREAD_IN_KEYPART;
|
|
485
|
+
return false;
|
|
486
|
+
}
|
|
487
|
+
parseMode = PARSEREAD_FL_TYPE;
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
inline void setInKeyPart(const std::string& src, int &parseMode, request* req)
|
|
492
|
+
{
|
|
493
|
+
req->table.in.keypart = (short)atol(src.c_str());
|
|
494
|
+
parseMode = PARSEREAD_IN_COUNT;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
inline bool setFilterType(const std::string& src, int &parseMode, request* req)
|
|
498
|
+
{
|
|
499
|
+
if ((src[0] == 'F') || (src[0] == 'W'))
|
|
500
|
+
{
|
|
501
|
+
request::table::filter f;
|
|
502
|
+
f.type = src[0];
|
|
503
|
+
req->table.filters.push_back(f);
|
|
504
|
+
|
|
505
|
+
parseMode = PARSEREAD_FL_LOG;
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
parseMode = PARSEREAD_SEEKCMD;
|
|
509
|
+
return true;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
inline void setFilterLog(const std::string& src, int &parseMode, request* req)
|
|
513
|
+
{
|
|
514
|
+
request::table::filter& f = req->table.filters[req->table.filters.size()-1];
|
|
515
|
+
f.logical = src[0];
|
|
516
|
+
if ((src.size()>1) && (src[1] == '='))
|
|
517
|
+
f.logical += 0xff;
|
|
518
|
+
else if ((src.size()>1) && (src[1] == '>'))
|
|
519
|
+
f.logical += 0xfe;
|
|
520
|
+
parseMode = PARSEREAD_FL_COL;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
inline void setFilterCol(const std::string& src, int &parseMode, request* req)
|
|
524
|
+
{
|
|
525
|
+
request::table::filter& f = req->table.filters[req->table.filters.size()-1];
|
|
526
|
+
f.col = (short)atol(src.c_str());
|
|
527
|
+
parseMode = PARSEREAD_FL_VAL;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
inline void setFilterVal(const std::string& src, int &parseMode, request* req)
|
|
531
|
+
{
|
|
532
|
+
request::table::filter& f = req->table.filters[req->table.filters.size()-1];
|
|
533
|
+
f.value = src;
|
|
534
|
+
parseMode = PARSEREAD_FL_TYPE;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
commandExecuter::commandExecuter(__int64 /*parent*/)
|
|
538
|
+
:m_dbExec(new dbExecuter())
|
|
539
|
+
{
|
|
540
|
+
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
commandExecuter::~commandExecuter()
|
|
544
|
+
{
|
|
545
|
+
m_dbExec.reset();
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
size_t commandExecuter::perseRequestEnd(const char* p, size_t transfered, bool& comp)const
|
|
549
|
+
{
|
|
550
|
+
if (transfered)
|
|
551
|
+
{
|
|
552
|
+
const char* tmp = p + transfered - 1;
|
|
553
|
+
comp = (*tmp=='\n');
|
|
554
|
+
}
|
|
555
|
+
if (!comp && transfered < strlen(p)+10)
|
|
556
|
+
return transfered + 64000;
|
|
557
|
+
return 0;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
char* readTorkn(std::string& buf, char* src, const char* end)
|
|
561
|
+
{
|
|
562
|
+
buf.erase();
|
|
563
|
+
while(!((*src=='\t') || (*src=='\n')|| (*src=='\r')))
|
|
564
|
+
{
|
|
565
|
+
if (src == end)
|
|
566
|
+
break;
|
|
567
|
+
if (*src == 0x01)
|
|
568
|
+
*(++src) -= 0x040;
|
|
569
|
+
buf.append(1, *src);
|
|
570
|
+
++src;
|
|
571
|
+
}
|
|
572
|
+
return ++src;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
bool commandExecuter::parse(const char* ptr, size_t size)
|
|
576
|
+
{
|
|
577
|
+
m_requests.clear();
|
|
578
|
+
char* p = (char*)ptr;
|
|
579
|
+
const char* end = p + size;
|
|
580
|
+
int parseMode = PARSEREAD_START;
|
|
581
|
+
request* req ;
|
|
582
|
+
int keyval_count = 0;
|
|
583
|
+
int data_count = INT_MAX;
|
|
584
|
+
int in_count = 0;
|
|
585
|
+
bool skip = false;
|
|
586
|
+
std::string buf;
|
|
587
|
+
buf.reserve(1024);
|
|
588
|
+
while (p != end)
|
|
589
|
+
{
|
|
590
|
+
if (skip == false)
|
|
591
|
+
p = readTorkn(buf, p, end);
|
|
592
|
+
else
|
|
593
|
+
skip = false;
|
|
594
|
+
if (buf.size() == 0)
|
|
595
|
+
break;
|
|
596
|
+
switch(parseMode)
|
|
597
|
+
{
|
|
598
|
+
case PARSEREAD_START:
|
|
599
|
+
m_requests.push_back(request());
|
|
600
|
+
req = &m_requests[m_requests.size()-1];
|
|
601
|
+
parseMode = PARSEREAD_COMMAND;
|
|
602
|
+
skip = true;
|
|
603
|
+
break;
|
|
604
|
+
case PARSEREAD_COMMAND:
|
|
605
|
+
setCmd(buf, parseMode, req);
|
|
606
|
+
break;
|
|
607
|
+
case PARSEREAD_HANDLEID:
|
|
608
|
+
setHandleID(buf, parseMode, req);
|
|
609
|
+
break;
|
|
610
|
+
case PARSEREAD_SEEKCMD:
|
|
611
|
+
setSeekCmd(buf, parseMode, req);
|
|
612
|
+
break;
|
|
613
|
+
case PARSEREAD_DATA_COUNT:
|
|
614
|
+
setValueCount(buf, parseMode, data_count);
|
|
615
|
+
parseMode = PARSEREAD_DATA_VAL;
|
|
616
|
+
break;
|
|
617
|
+
case PARSEREAD_DATA_VAL:
|
|
618
|
+
setValue(buf, parseMode, req->table.values, data_count);
|
|
619
|
+
if (data_count==0)
|
|
620
|
+
parseMode = PARSEREAD_START;
|
|
621
|
+
break;
|
|
622
|
+
case PARSEREAD_KEYVAL_COUNT:
|
|
623
|
+
setValueCount(buf, parseMode, keyval_count);
|
|
624
|
+
parseMode = PARSEREAD_KEYVAL;
|
|
625
|
+
break;
|
|
626
|
+
case PARSEREAD_KEYVAL:
|
|
627
|
+
setValue(buf, parseMode, req->table.key.values, keyval_count);
|
|
628
|
+
if (keyval_count==0)
|
|
629
|
+
parseMode = PARSEREAD_LIMIT;
|
|
630
|
+
break;
|
|
631
|
+
case PARSEREAD_DBNAME:
|
|
632
|
+
setDbname(buf, parseMode, req);
|
|
633
|
+
break;
|
|
634
|
+
case PARSEREAD_TABLENAME:
|
|
635
|
+
setTablename(buf, parseMode, req);
|
|
636
|
+
break;
|
|
637
|
+
case PARSEREAD_INDEXNAME:
|
|
638
|
+
setIndexname(buf, parseMode, req);
|
|
639
|
+
break;
|
|
640
|
+
case PARSEREAD_FIELDS:
|
|
641
|
+
setFields(buf, parseMode, req);
|
|
642
|
+
break;
|
|
643
|
+
case PARSEREAD_LIMIT:
|
|
644
|
+
skip = setLimit(buf, parseMode, req);
|
|
645
|
+
break;
|
|
646
|
+
case PARSEREAD_OFFSET:
|
|
647
|
+
setOffset(buf, parseMode, req);
|
|
648
|
+
break;
|
|
649
|
+
case PARSEREAD_IN_MODE:
|
|
650
|
+
skip = setInMode(buf, parseMode, req);
|
|
651
|
+
break;
|
|
652
|
+
case PARSEREAD_IN_KEYPART:
|
|
653
|
+
setInKeyPart(buf, parseMode, req);
|
|
654
|
+
break;
|
|
655
|
+
case PARSEREAD_IN_COUNT:
|
|
656
|
+
setValueCount(buf, parseMode, in_count);
|
|
657
|
+
parseMode = PARSEREAD_IN_VAL;
|
|
658
|
+
break;
|
|
659
|
+
case PARSEREAD_IN_VAL:
|
|
660
|
+
setValue(buf, parseMode, req->table.in.values, in_count);
|
|
661
|
+
if (in_count==0)
|
|
662
|
+
parseMode = PARSEREAD_FL_TYPE;
|
|
663
|
+
break;
|
|
664
|
+
case PARSEREAD_FL_TYPE:
|
|
665
|
+
skip = setFilterType(buf, parseMode, req);
|
|
666
|
+
break;
|
|
667
|
+
case PARSEREAD_FL_LOG:
|
|
668
|
+
setFilterLog(buf, parseMode, req);
|
|
669
|
+
break;
|
|
670
|
+
case PARSEREAD_FL_COL:
|
|
671
|
+
setFilterCol(buf, parseMode, req);
|
|
672
|
+
parseMode = PARSEREAD_FL_VAL;
|
|
673
|
+
break;
|
|
674
|
+
case PARSEREAD_FL_VAL:
|
|
675
|
+
setFilterVal(buf, parseMode, req);
|
|
676
|
+
break;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
}
|
|
680
|
+
return !(m_requests.size()==0);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
}//namespace hs
|
|
685
|
+
}//namespace protocol
|
|
686
|
+
}//namespace db
|
|
687
|
+
}//namespace bzs
|
|
688
|
+
|
|
689
|
+
#endif // USE_HANDLERSOCKET
|