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,527 @@
|
|
|
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 "filter.h"
|
|
23
|
+
#pragma option -w-ucp
|
|
24
|
+
|
|
25
|
+
#pragma package(smart_init)
|
|
26
|
+
|
|
27
|
+
namespace bzs
|
|
28
|
+
{
|
|
29
|
+
namespace db
|
|
30
|
+
{
|
|
31
|
+
namespace protocol
|
|
32
|
+
{
|
|
33
|
+
namespace tdap
|
|
34
|
+
{
|
|
35
|
+
namespace client
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
inline ushort_td varlenForFilter(const fielddef& fd)
|
|
39
|
+
{
|
|
40
|
+
if (((fd.type >= ft_myvarchar) && (fd.type <= ft_mywvarbinary)) || fd.type == ft_lstring)
|
|
41
|
+
return fd.len < 256 ? 1 : 2;
|
|
42
|
+
else if ((fd.type == ft_myblob) || (fd.type == ft_mytext))
|
|
43
|
+
return fd.len - 8;
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Length of compare
|
|
48
|
+
* if part of string or zstring then return strlen.
|
|
49
|
+
*/
|
|
50
|
+
inline uint_td compDataLen(const fielddef& fd, const uchar_td* ptr, bool part)
|
|
51
|
+
{
|
|
52
|
+
uint_td length = fd.keyDataLen(ptr);
|
|
53
|
+
if (part)
|
|
54
|
+
{
|
|
55
|
+
if ((fd.type == ft_string) || (fd.type == ft_zstring) || (fd.type == ft_note))
|
|
56
|
+
length = (uint_td)strlen((const char*)ptr);
|
|
57
|
+
else if ((fd.type == ft_wstring) || (fd.type == ft_wzstring))
|
|
58
|
+
length = (uint_td)wcslen((const wchar_t*)ptr);
|
|
59
|
+
}
|
|
60
|
+
return length;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** copy data for select comp
|
|
64
|
+
*/
|
|
65
|
+
inline ushort_td copyForCompare(const fielddef& fd, uchar_td* to, const uchar_td* from, bool part)
|
|
66
|
+
{
|
|
67
|
+
ushort_td varlen = varlenForFilter(fd);
|
|
68
|
+
int copylen = compDataLen(fd, from, part);
|
|
69
|
+
if (varlen)
|
|
70
|
+
memcpy(to, from, varlen);
|
|
71
|
+
memcpy(to + varlen, fd.keyData(from), copylen);
|
|
72
|
+
return copylen + varlen;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
filter::filter(table* pBao)
|
|
76
|
+
{
|
|
77
|
+
m_pFilter = NULL;
|
|
78
|
+
m_pEntendBuf = NULL;
|
|
79
|
+
m_pEntendBuflen = 0;
|
|
80
|
+
|
|
81
|
+
init(pBao);
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void filter::init(table* pBao)
|
|
86
|
+
{
|
|
87
|
+
m_tb = pBao;
|
|
88
|
+
strcpy(&m_PosType[0], "UC");
|
|
89
|
+
m_RejectCount = 65000;
|
|
90
|
+
m_iRecordCount = 1;
|
|
91
|
+
m_iFieldCount = 1;
|
|
92
|
+
memset(m_iFieldLen, 0, 255 * sizeof(ushort_td));
|
|
93
|
+
memset(m_iFieldOffset, 0, 255 * sizeof(ushort_td));
|
|
94
|
+
m_iFieldLen[0] = (ushort_td) m_tb->tableDef()->maxRecordLen;
|
|
95
|
+
m_iFieldOffset[0] = 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
filter::~filter()
|
|
99
|
+
{
|
|
100
|
+
if (m_pFilter != NULL)
|
|
101
|
+
delete[]m_pFilter; ;
|
|
102
|
+
if (m_pEntendBuf != NULL)
|
|
103
|
+
free(m_pEntendBuf);
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
ushort_td filter::GetFieldLen(int index) {return m_iFieldLen[index];
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
ushort_td filter::GetFieldOffset(int index) {return m_iFieldOffset[index];}
|
|
112
|
+
|
|
113
|
+
_TCHAR* filter::filterStr() {return m_pFilter;}
|
|
114
|
+
|
|
115
|
+
bool filter::GetPosType()
|
|
116
|
+
{
|
|
117
|
+
|
|
118
|
+
if (strcmp(m_PosType, "UC") == 0)
|
|
119
|
+
return false;
|
|
120
|
+
else
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
void filter::SetPosType(bool getnext)
|
|
125
|
+
{
|
|
126
|
+
|
|
127
|
+
if (getnext)
|
|
128
|
+
strcpy(&m_PosType[0], "EG");
|
|
129
|
+
else
|
|
130
|
+
strcpy(&m_PosType[0], "UC");
|
|
131
|
+
if (m_pEntendBuf)
|
|
132
|
+
memcpy((void*)((char*)m_pEntendBuf + 2), &m_PosType[0], 2);
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void filter::WriteBuffer() {memcpy(m_tb->dataBak(), m_pEntendBuf, m_pEntendBuflen);}
|
|
137
|
+
|
|
138
|
+
bool filter::setFilter(const _TCHAR* str, ushort_td RejectCount, ushort_td CashCount)
|
|
139
|
+
{
|
|
140
|
+
|
|
141
|
+
_TCHAR* NewPointer;
|
|
142
|
+
|
|
143
|
+
BFilter* itm;
|
|
144
|
+
BFilter* Olditm = NULL;
|
|
145
|
+
|
|
146
|
+
bool joint = false;
|
|
147
|
+
bool cmpfield;
|
|
148
|
+
ushort_td Oldlen;
|
|
149
|
+
short OldfieldNum = -1;
|
|
150
|
+
BFilterHeader* FilterHead;
|
|
151
|
+
ushort_td LogicalCount = 0;
|
|
152
|
+
BFilterDisc* disc;
|
|
153
|
+
|
|
154
|
+
m_RejectCount = RejectCount;
|
|
155
|
+
m_iRecordCount = CashCount;
|
|
156
|
+
|
|
157
|
+
if (m_pFilter)
|
|
158
|
+
delete[]m_pFilter;
|
|
159
|
+
size_t size = _tcslen(str) + 2;
|
|
160
|
+
m_pFilter = new _TCHAR[size];
|
|
161
|
+
if (m_pFilter == NULL)
|
|
162
|
+
return false;
|
|
163
|
+
memset(m_pFilter, 0, size * sizeof(_TCHAR));
|
|
164
|
+
_tcscpy(m_pFilter, str);
|
|
165
|
+
|
|
166
|
+
int sDataBufSize = 8192;
|
|
167
|
+
if (m_pEntendBuf == NULL)
|
|
168
|
+
m_pEntendBuf = malloc(sDataBufSize);
|
|
169
|
+
else
|
|
170
|
+
memset(m_pEntendBuf, 0, sDataBufSize);
|
|
171
|
+
|
|
172
|
+
if (m_pEntendBuf == NULL)
|
|
173
|
+
return false;
|
|
174
|
+
|
|
175
|
+
itm = (BFilter*)((char*)m_pEntendBuf + 8);
|
|
176
|
+
|
|
177
|
+
NewPointer = m_pFilter;
|
|
178
|
+
|
|
179
|
+
m_FieldSelected = false;
|
|
180
|
+
if (m_pFilter[0] == '*')
|
|
181
|
+
LogicalCount = 0;
|
|
182
|
+
else
|
|
183
|
+
{
|
|
184
|
+
|
|
185
|
+
// -------------------------------------------------------------
|
|
186
|
+
// SELECT
|
|
187
|
+
if (_tcsstr(m_pFilter, _T("SELECT ")) == NewPointer)
|
|
188
|
+
{
|
|
189
|
+
if (!MakeFieldSelect(&NewPointer))
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
while (1)
|
|
194
|
+
{
|
|
195
|
+
cmpfield = false;
|
|
196
|
+
|
|
197
|
+
// -------------------------------------------------------------
|
|
198
|
+
// Get filed number
|
|
199
|
+
// -------------------------------------------------------------
|
|
200
|
+
short fieldNum = GetField(&NewPointer);
|
|
201
|
+
if (fieldNum == -1)
|
|
202
|
+
break;
|
|
203
|
+
|
|
204
|
+
LogicalCount++;
|
|
205
|
+
fielddef* fd = &m_tb->tableDef()->fieldDefs[fieldNum];
|
|
206
|
+
itm->Type = fd->type;
|
|
207
|
+
itm->Len = fd->len;
|
|
208
|
+
itm->Pos = fd->pos;
|
|
209
|
+
|
|
210
|
+
// -------------------------------------------------------------
|
|
211
|
+
// Get logical type
|
|
212
|
+
// -------------------------------------------------------------
|
|
213
|
+
itm->CompType = GetCompType(&NewPointer);
|
|
214
|
+
if (itm->CompType == 255)
|
|
215
|
+
return false;
|
|
216
|
+
|
|
217
|
+
// -------------------------------------------------------------
|
|
218
|
+
// Get compare value
|
|
219
|
+
// if [fieldName] then comapre as field value
|
|
220
|
+
// -------------------------------------------------------------
|
|
221
|
+
_TCHAR* start = NewPointer;
|
|
222
|
+
if (!GetCompStr(&NewPointer))
|
|
223
|
+
return false;
|
|
224
|
+
if (NewPointer == NULL)
|
|
225
|
+
return false;
|
|
226
|
+
|
|
227
|
+
int offset = 0;
|
|
228
|
+
if (start[0] == '[')
|
|
229
|
+
{
|
|
230
|
+
start++;
|
|
231
|
+
int num = m_tb->fieldNumByName(start);
|
|
232
|
+
if (num != -1)
|
|
233
|
+
{
|
|
234
|
+
itm->Data = m_tb->tableDef()->fieldDefs[num].pos;
|
|
235
|
+
itm->CompType |= CMPLOGICAL_FIELD;
|
|
236
|
+
cmpfield = true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else
|
|
240
|
+
{
|
|
241
|
+
|
|
242
|
+
bool isPart = false;
|
|
243
|
+
if (start[0] == '\'')
|
|
244
|
+
{// string
|
|
245
|
+
start++; // erase front '
|
|
246
|
+
int len = (ushort_td) _tcslen(start);
|
|
247
|
+
start[--len] = 0x00; // erase after '
|
|
248
|
+
isPart = (start[len - 1] == '*');
|
|
249
|
+
if (isPart)
|
|
250
|
+
start[--len] = 0x00;
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
m_tb->setFV(fieldNum, start);
|
|
254
|
+
itm->Len =
|
|
255
|
+
copyForCompare(*fd, (uchar_td*)(&itm->Data),
|
|
256
|
+
(const uchar_td*)m_tb->fieldPtr(fieldNum), isPart);
|
|
257
|
+
if (!isPart && (fd->varLenBytes() || fd->blobLenBytes()))
|
|
258
|
+
itm->CompType |= CMPLOGICAL_VAR_COMP_ALL; //match complate
|
|
259
|
+
offset = itm->Len - 2;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// LogicalType
|
|
263
|
+
itm->LogicalType = GetLogical(&NewPointer);
|
|
264
|
+
// ------------------------------------------------------------
|
|
265
|
+
// chain befor field
|
|
266
|
+
// ------------------------------------------------------------
|
|
267
|
+
Oldlen = fd->len;
|
|
268
|
+
|
|
269
|
+
if ((joint == true) && (OldfieldNum + 1 == fieldNum) && (itm->CompType == 1) &&
|
|
270
|
+
(cmpfield == false) && (itm->Len == fd->len) && (itm->Type != 11) &&
|
|
271
|
+
(varlenForFilter(*fd) == 0))
|
|
272
|
+
{
|
|
273
|
+
Olditm->LogicalType = itm->LogicalType;
|
|
274
|
+
Oldlen = itm->Len;
|
|
275
|
+
memcpy((void*)((char*)(&Olditm->Data) + Olditm->Len), &itm->Data, itm->Len);
|
|
276
|
+
Olditm->Len += Oldlen;
|
|
277
|
+
Oldlen = Olditm->Len;
|
|
278
|
+
itm = Olditm;
|
|
279
|
+
itm->Type = 0; // comapre as string
|
|
280
|
+
|
|
281
|
+
offset = itm->Len - 2;
|
|
282
|
+
LogicalCount--;
|
|
283
|
+
}
|
|
284
|
+
if (itm->LogicalType != 0) // If zero then logical is end.
|
|
285
|
+
{
|
|
286
|
+
// ------------------------------------------------------------
|
|
287
|
+
// Can it connect? not * and not zstring
|
|
288
|
+
// ------------------------------------------------------------
|
|
289
|
+
if ((itm->CompType == 1) && (itm->LogicalType == 1) && (cmpfield == false) &&
|
|
290
|
+
(itm->Len == Oldlen) && (itm->Type != 11) && (varlenForFilter(*fd) == 0))
|
|
291
|
+
joint = true;
|
|
292
|
+
else
|
|
293
|
+
joint = false;
|
|
294
|
+
Olditm = itm;
|
|
295
|
+
OldfieldNum = fieldNum;
|
|
296
|
+
}
|
|
297
|
+
// ------------------------------------------------------------
|
|
298
|
+
// move pointer
|
|
299
|
+
itm = (BFilter*)((char*)itm +sizeof(BFilter) + offset);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
_tcscpy(m_pFilter, str);
|
|
303
|
+
// header
|
|
304
|
+
FilterHead = (BFilterHeader*) m_pEntendBuf;
|
|
305
|
+
FilterHead->BufLen = (ushort_td)((char*)itm - (char*)m_pEntendBuf + 4 + (m_iFieldCount * 4));
|
|
306
|
+
memcpy(FilterHead->PosType, m_PosType, 2);
|
|
307
|
+
FilterHead->RejectCount = m_RejectCount;
|
|
308
|
+
FilterHead->LogicalCount = LogicalCount;
|
|
309
|
+
|
|
310
|
+
// descipter
|
|
311
|
+
disc = (BFilterDisc*)itm;
|
|
312
|
+
disc->iRecordCount = m_iRecordCount;
|
|
313
|
+
disc->iFieldCount = m_iFieldCount;
|
|
314
|
+
int RecordSize = 0;
|
|
315
|
+
for (int i = 0; i < m_iFieldCount; i++)
|
|
316
|
+
{
|
|
317
|
+
disc->iSelectFields[i].iFieldLen = m_iFieldLen[i];
|
|
318
|
+
disc->iSelectFields[i].iFieldOffset = m_iFieldOffset[i];
|
|
319
|
+
RecordSize += m_iFieldLen[i];
|
|
320
|
+
}
|
|
321
|
+
m_iRecordCountDirect = &disc->iRecordCount;
|
|
322
|
+
m_pEntendBuflen = FilterHead->BufLen;
|
|
323
|
+
if (disc->iRecordCount == 0)
|
|
324
|
+
{
|
|
325
|
+
disc->iRecordCount = (ushort_td)(57000 / (RecordSize + 6));
|
|
326
|
+
}
|
|
327
|
+
m_ExDataBufLen = (ushort_td)((disc->iRecordCount * (RecordSize + 6)) + 2);
|
|
328
|
+
|
|
329
|
+
if ((ushort_td)m_ExDataBufLen < m_pEntendBuflen)
|
|
330
|
+
m_ExDataBufLen = m_pEntendBuflen;
|
|
331
|
+
|
|
332
|
+
uint_td len;
|
|
333
|
+
if ((m_FieldSelected == false) && !m_tb->valiableFormatType())
|
|
334
|
+
len = m_ExDataBufLen;
|
|
335
|
+
else
|
|
336
|
+
len = (uint_td)(m_ExDataBufLen + m_tb->buflen());
|
|
337
|
+
|
|
338
|
+
if (m_tb->buflen() < len)
|
|
339
|
+
{
|
|
340
|
+
m_tb->setDataBak((void*) realloc(m_tb->dataBak(), len));
|
|
341
|
+
m_tb->setData(m_tb->dataBak());
|
|
342
|
+
|
|
343
|
+
if (m_tb->data() == NULL)
|
|
344
|
+
return false;
|
|
345
|
+
|
|
346
|
+
}
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
bool filter::MakeFieldSelect(_TCHAR** str)
|
|
351
|
+
{
|
|
352
|
+
_TCHAR* p;
|
|
353
|
+
_TCHAR* ret;
|
|
354
|
+
_TCHAR* point[255];
|
|
355
|
+
ushort_td index = 0;
|
|
356
|
+
_TCHAR FiledName[20] = {0x00};
|
|
357
|
+
|
|
358
|
+
m_iFieldCount = 0;
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
*str += 7; // "select" length = 7
|
|
362
|
+
point[index] = *str;
|
|
363
|
+
|
|
364
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*)_T(" "));
|
|
365
|
+
if (ret == NULL)
|
|
366
|
+
return false;
|
|
367
|
+
ret[0] = 0x00; // set null
|
|
368
|
+
*str = ret + 1;
|
|
369
|
+
|
|
370
|
+
index++;
|
|
371
|
+
p = (_TCHAR*)_tcsmstr((_TUCHAR*)point[index - 1], (_TUCHAR*)_T(",")) + 1;
|
|
372
|
+
point[index] = p;
|
|
373
|
+
p--;
|
|
374
|
+
while (p)
|
|
375
|
+
{
|
|
376
|
+
index++;
|
|
377
|
+
p = (_TCHAR*)_tcsmstr((_TUCHAR*)point[index - 1], (_TUCHAR*)_T(","));
|
|
378
|
+
if (p)
|
|
379
|
+
point[index] = p + 1;
|
|
380
|
+
else
|
|
381
|
+
break;
|
|
382
|
+
|
|
383
|
+
}
|
|
384
|
+
point[index] = ret + 1;
|
|
385
|
+
size_t n;
|
|
386
|
+
short FieldNum;
|
|
387
|
+
for (int i = 0; i < index; i++)
|
|
388
|
+
{
|
|
389
|
+
n = point[i + 1] - point[i] - 1;
|
|
390
|
+
_tcsncpy(FiledName, point[i], n);
|
|
391
|
+
FiledName[n] = 0x00;
|
|
392
|
+
FieldNum = m_tb->fieldNumByName(FiledName);
|
|
393
|
+
if (FieldNum < 0)
|
|
394
|
+
return false;
|
|
395
|
+
m_iFieldLen[i] = m_tb->tableDef()->fieldDefs[FieldNum].len;
|
|
396
|
+
m_iFieldOffset[i] = m_tb->tableDef()->fieldDefs[FieldNum].pos;
|
|
397
|
+
}
|
|
398
|
+
m_iFieldCount = index;
|
|
399
|
+
m_FieldSelected = true;
|
|
400
|
+
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
short filter::GetField(_TCHAR** str)
|
|
405
|
+
{
|
|
406
|
+
_TCHAR* ret;
|
|
407
|
+
_TCHAR FiledName[20] = {0x00};
|
|
408
|
+
int offset = 0;
|
|
409
|
+
// Get string that until next space.
|
|
410
|
+
if (*str[0] == '[')
|
|
411
|
+
{
|
|
412
|
+
offset = 1;
|
|
413
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*) _T("]"));
|
|
414
|
+
}
|
|
415
|
+
else
|
|
416
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*)_T(" "));
|
|
417
|
+
|
|
418
|
+
if (ret)
|
|
419
|
+
{
|
|
420
|
+
_tcsncpy(FiledName, *str + offset, ret - *str - offset);
|
|
421
|
+
*str = ret + 1 + offset;
|
|
422
|
+
return m_tb->fieldNumByName(FiledName);
|
|
423
|
+
}
|
|
424
|
+
else
|
|
425
|
+
return -1;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
bool filter::GetCompStr(_TCHAR** str)
|
|
429
|
+
{
|
|
430
|
+
_TCHAR* ret;
|
|
431
|
+
int offset = 0;
|
|
432
|
+
|
|
433
|
+
// Get string that until next space.
|
|
434
|
+
if (*str[0] == _T('['))
|
|
435
|
+
{
|
|
436
|
+
offset = 1;
|
|
437
|
+
ret = _tcsstr(*str, _T("]"));
|
|
438
|
+
if (!ret)
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
else if (*str[0] == _T('\''))
|
|
442
|
+
{ // find next '
|
|
443
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str + 1, (_TUCHAR*)_T("\'"));
|
|
444
|
+
|
|
445
|
+
if (ret)
|
|
446
|
+
ret += 1;
|
|
447
|
+
else
|
|
448
|
+
return false;
|
|
449
|
+
}
|
|
450
|
+
else
|
|
451
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*)_T(" "));
|
|
452
|
+
|
|
453
|
+
if (ret)
|
|
454
|
+
{
|
|
455
|
+
*ret = 0x00;
|
|
456
|
+
*str = ret + 1 + offset;
|
|
457
|
+
|
|
458
|
+
}
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
uchar_td filter::GetLogical(_TCHAR** str)
|
|
463
|
+
{
|
|
464
|
+
_TCHAR* ret;
|
|
465
|
+
_TCHAR LogicalStr[10] = {0x00};
|
|
466
|
+
|
|
467
|
+
// Get string that until next space.
|
|
468
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*)_T(" "));
|
|
469
|
+
if (ret)
|
|
470
|
+
{
|
|
471
|
+
_tcsncpy(LogicalStr, *str, ret - *str);
|
|
472
|
+
_tcsmupr((_TUCHAR*)LogicalStr);
|
|
473
|
+
*str = ret + 1;
|
|
474
|
+
if (_tcscmp(LogicalStr, _T("AND")) == 0)
|
|
475
|
+
return (uchar_td)1;
|
|
476
|
+
else if (_tcscmp(LogicalStr, _T("OR")) == 0)
|
|
477
|
+
return (uchar_td)2;
|
|
478
|
+
else
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
else
|
|
482
|
+
return 0;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
uchar_td filter::GetCompType(_TCHAR** str)
|
|
486
|
+
{
|
|
487
|
+
_TCHAR* ret;
|
|
488
|
+
_TCHAR cmpstr[10] = {0x00};
|
|
489
|
+
|
|
490
|
+
// Get string that until next space.
|
|
491
|
+
ret = (_TCHAR*)_tcsmstr((_TUCHAR*)*str, (_TUCHAR*)_T(" "));
|
|
492
|
+
if (ret)
|
|
493
|
+
{
|
|
494
|
+
_tcsncpy(cmpstr, *str, ret - *str);
|
|
495
|
+
*str = ret + 1;
|
|
496
|
+
if (_tcscmp(cmpstr, _T("=")) == 0)
|
|
497
|
+
return (uchar_td)1;
|
|
498
|
+
|
|
499
|
+
if (_tcscmp(cmpstr, _T(">")) == 0)
|
|
500
|
+
return (uchar_td)2;
|
|
501
|
+
|
|
502
|
+
if (_tcscmp(cmpstr, _T("<")) == 0)
|
|
503
|
+
return (uchar_td)3;
|
|
504
|
+
|
|
505
|
+
if (_tcscmp(cmpstr, _T("<>")) == 0)
|
|
506
|
+
return (uchar_td)4;
|
|
507
|
+
|
|
508
|
+
if (_tcscmp(cmpstr, _T("=>")) == 0)
|
|
509
|
+
return (uchar_td)5;
|
|
510
|
+
if (_tcscmp(cmpstr, _T(">=")) == 0)
|
|
511
|
+
return (uchar_td)5;
|
|
512
|
+
|
|
513
|
+
if (_tcscmp(cmpstr, _T("=<")) == 0)
|
|
514
|
+
return (uchar_td)6;
|
|
515
|
+
if (_tcscmp(cmpstr, _T("<=")) == 0)
|
|
516
|
+
return (uchar_td)6;
|
|
517
|
+
return 255;
|
|
518
|
+
}
|
|
519
|
+
else
|
|
520
|
+
return 255;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
}// namespace client
|
|
524
|
+
}// namespace tdap
|
|
525
|
+
}// namespace protocol
|
|
526
|
+
}// namespace db
|
|
527
|
+
}// namespace bzs
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_FILTER_H
|
|
2
|
+
#define BZS_DB_PROTOCOL_TDAP_CLIENT_FILTER_H
|
|
3
|
+
/* =================================================================
|
|
4
|
+
Copyright (C) 2000-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 "table.h"
|
|
22
|
+
|
|
23
|
+
namespace bzs
|
|
24
|
+
{
|
|
25
|
+
namespace db
|
|
26
|
+
{
|
|
27
|
+
namespace protocol
|
|
28
|
+
{
|
|
29
|
+
namespace tdap
|
|
30
|
+
{
|
|
31
|
+
namespace client
|
|
32
|
+
{
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#pragma option -a-
|
|
36
|
+
pragma_pack1
|
|
37
|
+
|
|
38
|
+
struct BFilter
|
|
39
|
+
{
|
|
40
|
+
uchar_td Type;
|
|
41
|
+
ushort_td Len;
|
|
42
|
+
ushort_td Pos;
|
|
43
|
+
uchar_td CompType;
|
|
44
|
+
uchar_td LogicalType;
|
|
45
|
+
ushort_td Data;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
struct BFilterHeader
|
|
49
|
+
{
|
|
50
|
+
ushort_td BufLen;
|
|
51
|
+
char PosType[2]; // "EG" or "UC"
|
|
52
|
+
ushort_td RejectCount;
|
|
53
|
+
ushort_td LogicalCount;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
struct BSelectField
|
|
57
|
+
{
|
|
58
|
+
ushort_td iFieldLen;
|
|
59
|
+
ushort_td iFieldOffset;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
struct BFilterDisc
|
|
63
|
+
{
|
|
64
|
+
ushort_td iRecordCount;
|
|
65
|
+
ushort_td iFieldCount;
|
|
66
|
+
BSelectField iSelectFields[255];
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
#pragma option -a
|
|
70
|
+
pragma_pop
|
|
71
|
+
|
|
72
|
+
class filter
|
|
73
|
+
{
|
|
74
|
+
|
|
75
|
+
table* m_tb;
|
|
76
|
+
|
|
77
|
+
//buffer
|
|
78
|
+
_TCHAR* m_pFilter;
|
|
79
|
+
void* m_pEntendBuf;
|
|
80
|
+
ushort_td m_pEntendBuflen;
|
|
81
|
+
uint_td m_ExDataBufLen;
|
|
82
|
+
|
|
83
|
+
//hedaer
|
|
84
|
+
ushort_td m_RejectCount;
|
|
85
|
+
char m_PosType[3]; // "EG" or "UC"
|
|
86
|
+
|
|
87
|
+
//tail
|
|
88
|
+
ushort_td m_iRecordCount;
|
|
89
|
+
ushort_td m_iFieldCount;
|
|
90
|
+
|
|
91
|
+
ushort_td* m_iRecordCountDirect;
|
|
92
|
+
//result
|
|
93
|
+
ushort_td m_iFieldLen[255];
|
|
94
|
+
ushort_td m_iFieldOffset[255];
|
|
95
|
+
|
|
96
|
+
bool GetCompStr(_TCHAR** str);
|
|
97
|
+
uchar_td GetLogical(_TCHAR** str);
|
|
98
|
+
uchar_td GetCompType(_TCHAR** str);
|
|
99
|
+
short GetField(_TCHAR** str);
|
|
100
|
+
ushort_td GetFieldLen(int index);
|
|
101
|
+
ushort_td GetFieldOffset(int index);
|
|
102
|
+
bool MakeFieldSelect(_TCHAR** str);
|
|
103
|
+
|
|
104
|
+
bool m_FieldSelected;
|
|
105
|
+
|
|
106
|
+
public:
|
|
107
|
+
filter(table* pBao);
|
|
108
|
+
~filter();
|
|
109
|
+
|
|
110
|
+
bool posTypeNext() {return GetPosType();}
|
|
111
|
+
|
|
112
|
+
void setPosTypeNext(bool v) {SetPosType(v);}
|
|
113
|
+
|
|
114
|
+
uint_td exDataBufLen() const {return m_ExDataBufLen;}
|
|
115
|
+
|
|
116
|
+
ushort_td recordCount() const {return m_iRecordCount;}
|
|
117
|
+
|
|
118
|
+
void setRecordCount(ushort_td v) {m_iRecordCount = v;}
|
|
119
|
+
|
|
120
|
+
ushort_td fieldCount() const {return m_iFieldCount;}
|
|
121
|
+
|
|
122
|
+
void setFieldCount(ushort_td v) {m_iFieldCount = v;}
|
|
123
|
+
|
|
124
|
+
void* entendBuf() const {return m_pEntendBuf;}
|
|
125
|
+
|
|
126
|
+
void setEntendBuf(void* v) {m_pEntendBuf = v;};
|
|
127
|
+
|
|
128
|
+
ushort_td* recordCountDirect() const {return m_iRecordCountDirect;}
|
|
129
|
+
|
|
130
|
+
void setRecordCountDirect(ushort_td* v) {m_iRecordCountDirect = v;}
|
|
131
|
+
|
|
132
|
+
ushort_td rejectCount() const {return m_RejectCount;}
|
|
133
|
+
|
|
134
|
+
ushort_td fieldLen(int index) {return GetFieldLen(index);}
|
|
135
|
+
|
|
136
|
+
ushort_td fieldOffset(int index) {return GetFieldOffset(index);}
|
|
137
|
+
|
|
138
|
+
bool fieldSelected() const {return m_FieldSelected;}
|
|
139
|
+
|
|
140
|
+
void init(table* pBao);
|
|
141
|
+
bool GetPosType();
|
|
142
|
+
void SetPosType(bool);
|
|
143
|
+
void WriteBuffer();
|
|
144
|
+
bool setFilter(const _TCHAR* str, ushort_td RejectCount, ushort_td CashCount);
|
|
145
|
+
_TCHAR* filterStr();
|
|
146
|
+
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
}// namespace client
|
|
150
|
+
}// namespace tdap
|
|
151
|
+
}// namespace protocol
|
|
152
|
+
}// namespace db
|
|
153
|
+
}// namespace bzs
|
|
154
|
+
#endif//BZS_DB_PROTOCOL_TDAP_CLIENT_FILTER_H
|