transactd 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{BUILD_UNIX-JA → BUILD_UNIX-JA.md} +6 -6
- data/CMakeLists.txt +20 -15
- data/{README-JA → README-JA.md} +23 -23
- data/{README → README.md} +22 -24
- data/RELEASE_NOTE +120 -0
- data/RELEASE_NOTE-JA +110 -0
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/build/common/get_ruby_path.cmake +1 -1
- data/build/swig/ruby/tdclrb_wrap.cpp +1319 -830
- data/build/swig/tdcl.i +22 -2
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -1
- data/build/tdclrb/CMakeLists.txt +6 -1
- data/build/tdclrb/bldgem/extconf.rb +5 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +44 -40
- data/source/bzs/db/engine/mysql/database.h +28 -8
- data/source/bzs/db/engine/mysql/dbManager.cpp +2 -0
- data/source/bzs/db/engine/mysql/dbManager.h +2 -7
- data/source/bzs/db/engine/mysql/mysqlInternal.h +79 -7
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +5 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +32 -8
- data/source/bzs/db/protocol/tdap/client/activeTable.h +17 -4
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +51 -6
- data/source/bzs/db/protocol/tdap/client/client.h +41 -11
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +51 -15
- data/source/bzs/db/protocol/tdap/client/connMgr.h +6 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +26 -5
- data/source/bzs/db/protocol/tdap/client/database.h +3 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +38 -28
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +2 -32
- data/source/bzs/db/protocol/tdap/client/field.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +60 -33
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +2 -5
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +9 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +1 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +99 -48
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +5 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +76 -26
- data/source/bzs/db/protocol/tdap/client/nsTable.h +6 -4
- data/source/bzs/db/protocol/tdap/client/request.h +28 -11
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +19 -11
- data/source/bzs/db/protocol/tdap/client/table.cpp +157 -70
- data/source/bzs/db/protocol/tdap/client/table.h +20 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +57 -4
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +55 -20
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +65 -31
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +24 -36
- data/source/bzs/db/protocol/tdap/mysql/request.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +98 -18
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +12 -7
- data/source/bzs/db/protocol/tdap/tdapRequest.h +3 -8
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.h +31 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +49 -6
- data/source/bzs/db/protocol/tdap/uri.h +41 -6
- data/source/bzs/db/transactd/appModule.cpp +0 -1
- data/source/bzs/db/transactd/appModule.h +0 -2
- data/source/bzs/db/transactd/connManager.cpp +202 -33
- data/source/bzs/db/transactd/connManager.h +11 -4
- data/source/bzs/db/transactd/connectionRecord.h +19 -5
- data/source/bzs/db/transactd/transactd.cpp +39 -8
- data/source/bzs/env/crosscompile.cpp +1 -1
- data/source/bzs/example/queryData.cpp +1 -1
- data/source/bzs/netsvc/client/iconnection.h +2 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +48 -26
- data/source/bzs/netsvc/client/tcpClient.h +171 -106
- data/source/bzs/netsvc/server/IAppModule.h +0 -1
- data/source/bzs/netsvc/server/serverPipe.cpp +5 -1
- data/source/bzs/netsvc/server/serverPipe.h +2 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +105 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +129 -11
- data/source/bzs/test/tdclrb/transactd_spec.rb +74 -2
- data/source/bzs/test/transactdBench/scaling_bench.cpp +1 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +45 -20
- data/source/global/tdclatl/Bookmark.cpp +28 -0
- data/source/global/tdclatl/Bookmark.h +65 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -3
- data/source/global/tdclatl/DbDef.cpp +6 -0
- data/source/global/tdclatl/DbDef.h +1 -0
- data/source/global/tdclatl/QueryBase.cpp +29 -0
- data/source/global/tdclatl/QueryBase.h +4 -0
- data/source/global/tdclatl/Record.cpp +14 -2
- data/source/global/tdclatl/Record.h +1 -1
- data/source/global/tdclatl/Table.cpp +80 -16
- data/source/global/tdclatl/Table.h +23 -8
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +39 -0
- data/source/global/tdclatl/activeTable.cpp +2 -2
- data/source/global/tdclatl/activeTable.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +64 -14
- metadata +12 -12
- data/bin/common/tdclc_32_2_3.dll +0 -0
- data/bin/common/tdclc_64_2_3.dll +0 -0
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- /data/{BUILD_WIN-JA → BUILD_WIN-JA.md} +0 -0
- /data/{README_ORMSRCGEN-JA → README_ORMSRCGEN-JA.md} +0 -0
- /data/{README_ORMSRCGEN → README_ORMSRCGEN.md} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
/*=================================================================
|
|
3
|
+
Copyright (C) 2015 BizStation Corp All rights reserved.
|
|
4
|
+
|
|
5
|
+
This program is free software; you can redistribute it and/or
|
|
6
|
+
modify it under the terms of the GNU General Public License
|
|
7
|
+
as published by the Free Software Foundation; either version 2
|
|
8
|
+
of the License, or (at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU General Public License
|
|
16
|
+
along with this program; if not, write to the Free Software
|
|
17
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
18
|
+
02111-1307, USA.
|
|
19
|
+
=================================================================*/
|
|
20
|
+
#include "resource.h"
|
|
21
|
+
#include "tdclatl_i.h"
|
|
22
|
+
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
|
23
|
+
|
|
24
|
+
using namespace ATL;
|
|
25
|
+
|
|
26
|
+
class ATL_NO_VTABLE CBookmark
|
|
27
|
+
: public CComObjectRootEx<CComSingleThreadModel>,
|
|
28
|
+
public CComCoClass<CBookmark, &CLSID_Bookmark>,
|
|
29
|
+
public IDispatchImpl<IBookmark, &IID_IBookmark,
|
|
30
|
+
&LIBID_transactd, /* wMajor = */ 1, /* wMinor = */ 0>
|
|
31
|
+
{
|
|
32
|
+
|
|
33
|
+
bookmark_td m_bm;
|
|
34
|
+
short m_len;
|
|
35
|
+
public:
|
|
36
|
+
CBookmark(){}
|
|
37
|
+
|
|
38
|
+
void set(bookmark_td& b, short len){ m_bm = b; m_len = len;}
|
|
39
|
+
|
|
40
|
+
bookmark_td& internalBookmark()
|
|
41
|
+
{
|
|
42
|
+
return m_bm;
|
|
43
|
+
}
|
|
44
|
+
short bookmarkLen()
|
|
45
|
+
{
|
|
46
|
+
return m_len;
|
|
47
|
+
}
|
|
48
|
+
//DECLARE_REGISTRY_RESOURCEID(IDR_CONNECTPARAM)
|
|
49
|
+
|
|
50
|
+
BEGIN_COM_MAP(CBookmark)
|
|
51
|
+
COM_INTERFACE_ENTRY(IBookmark)
|
|
52
|
+
COM_INTERFACE_ENTRY(IDispatch)
|
|
53
|
+
END_COM_MAP()
|
|
54
|
+
|
|
55
|
+
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
56
|
+
|
|
57
|
+
HRESULT FinalConstruct(){ return S_OK;}
|
|
58
|
+
|
|
59
|
+
void FinalRelease(){};
|
|
60
|
+
|
|
61
|
+
public:
|
|
62
|
+
STDMETHOD(get_IsEmpty)(VARIANT_BOOL* retVal);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
//OBJECT_ENTRY_AUTO(__uuidof(Bookmark), CBookmark)
|
|
@@ -193,9 +193,9 @@ STDMETHODIMP CDatabase::Create(BSTR URI, int type)
|
|
|
193
193
|
return S_OK;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
STDMETHODIMP CDatabase::Close()
|
|
196
|
+
STDMETHODIMP CDatabase::Close(VARIANT_BOOL withDropDefaultSchema)
|
|
197
197
|
{
|
|
198
|
-
m_db->close();
|
|
198
|
+
m_db->close(withDropDefaultSchema == -1);
|
|
199
199
|
return S_OK;
|
|
200
200
|
}
|
|
201
201
|
|
|
@@ -101,7 +101,7 @@ public:
|
|
|
101
101
|
STDMETHOD(Drop)();
|
|
102
102
|
STDMETHOD(DropTable)(BSTR TableName);
|
|
103
103
|
STDMETHOD(Create)(BSTR URI, int type);
|
|
104
|
-
STDMETHOD(Close)();
|
|
104
|
+
STDMETHOD(Close)(VARIANT_BOOL withDropDefaultSchema = 0);
|
|
105
105
|
STDMETHOD(Connect)(BSTR URI, VARIANT_BOOL newConnection,
|
|
106
106
|
VARIANT_BOOL* Value);
|
|
107
107
|
STDMETHOD(Disconnect)(BSTR URI, VARIANT_BOOL* Param2);
|
|
@@ -152,8 +152,6 @@ public:
|
|
|
152
152
|
STDMETHOD(get_MaxTables)(int* Value);
|
|
153
153
|
STDMETHOD(get_TrxIsolationServer)(eSrvIsorationType* Value);
|
|
154
154
|
STDMETHOD(get_TrxLockWaitTimeoutServer)(int* Value);
|
|
155
|
-
|
|
156
|
-
|
|
157
155
|
};
|
|
158
156
|
|
|
159
157
|
OBJECT_ENTRY_AUTO(__uuidof(Database), CDatabase)
|
|
@@ -244,3 +244,9 @@ STDMETHODIMP CDbDef::TdapErr(OLE_HANDLE hWnd, BSTR* Value)
|
|
|
244
244
|
m_dbDef->tdapErr((HWND)hWnd);
|
|
245
245
|
return S_OK;
|
|
246
246
|
}
|
|
247
|
+
|
|
248
|
+
STDMETHODIMP CDbDef::ValidateTableDef(short TableIndex, short* Value)
|
|
249
|
+
{
|
|
250
|
+
*Value = m_dbDef->validateTableDef(TableIndex);
|
|
251
|
+
return S_OK;
|
|
252
|
+
}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "stdafx.h"
|
|
20
20
|
#include "QueryBase.h"
|
|
21
21
|
#include "Table.h"
|
|
22
|
+
#include "Bookmark.h"
|
|
22
23
|
|
|
23
24
|
STDMETHODIMP CQueryBase::Reset(IQueryBase** retVal)
|
|
24
25
|
{
|
|
@@ -101,6 +102,11 @@ STDMETHODIMP CQueryBase::Or(BSTR Name, BSTR Logic, VARIANT Value,
|
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
STDMETHODIMP CQueryBase::AddInValue(VARIANT Value, VARIANT_BOOL Reset)
|
|
105
|
+
{
|
|
106
|
+
return AddSeekKeyValue(Value, Reset);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
STDMETHODIMP CQueryBase::AddSeekKeyValue(VARIANT Value, VARIANT_BOOL Reset)
|
|
104
110
|
{
|
|
105
111
|
if (Value.vt != VT_BSTR)
|
|
106
112
|
VariantChangeType(&Value, &Value, 0, VT_BSTR);
|
|
@@ -108,6 +114,24 @@ STDMETHODIMP CQueryBase::AddInValue(VARIANT Value, VARIANT_BOOL Reset)
|
|
|
108
114
|
return S_OK;
|
|
109
115
|
}
|
|
110
116
|
|
|
117
|
+
STDMETHODIMP CQueryBase::AddSeekBookmark(VARIANT Value, VARIANT_BOOL Reset)
|
|
118
|
+
{
|
|
119
|
+
if ((Value.vt == VT_DISPATCH) && Value.pdispVal)
|
|
120
|
+
{
|
|
121
|
+
CBookmark* bm = dynamic_cast<CBookmark*>(Value.pdispVal);
|
|
122
|
+
if (bm)
|
|
123
|
+
{
|
|
124
|
+
if(!bm->internalBookmark().empty)
|
|
125
|
+
m_qb.addSeekBookmark(bm->internalBookmark(), bm->bookmarkLen(), (Reset == -1));
|
|
126
|
+
else
|
|
127
|
+
return Error("Bookmark is empty", IID_IQueryBase);
|
|
128
|
+
}
|
|
129
|
+
else
|
|
130
|
+
return Error("Invalid param 1 not IBookmark", IID_IQueryBase);
|
|
131
|
+
}
|
|
132
|
+
return S_OK;
|
|
133
|
+
}
|
|
134
|
+
|
|
111
135
|
STDMETHODIMP CQueryBase::In(VARIANT Value, VARIANT Value1, VARIANT Value2,
|
|
112
136
|
VARIANT Value3, VARIANT Value4, VARIANT Value5,
|
|
113
137
|
VARIANT Value6, VARIANT Value7, VARIANT Value8,
|
|
@@ -323,3 +347,8 @@ STDMETHODIMP CQueryBase::IsStopAtLimit(VARIANT_BOOL* retVal)
|
|
|
323
347
|
return S_OK;
|
|
324
348
|
}
|
|
325
349
|
|
|
350
|
+
STDMETHODIMP CQueryBase::IsSeekByBookmarks(VARIANT_BOOL* retVal)
|
|
351
|
+
{
|
|
352
|
+
*retVal = m_qb.isSeekByBookmarks();
|
|
353
|
+
return S_OK;
|
|
354
|
+
}
|
|
@@ -89,6 +89,10 @@ public:
|
|
|
89
89
|
STDMETHOD(IsBookmarkAlso)(VARIANT_BOOL* retVal);
|
|
90
90
|
STDMETHOD(StopAtLimit)(VARIANT_BOOL Value, IQueryBase** retVal);
|
|
91
91
|
STDMETHOD(IsStopAtLimit)(VARIANT_BOOL* retVal);
|
|
92
|
+
STDMETHOD(IsSeekByBookmarks)(VARIANT_BOOL* retVal);
|
|
93
|
+
STDMETHOD(AddSeekKeyValue)(VARIANT Value, VARIANT_BOOL Reset);
|
|
94
|
+
STDMETHOD(AddSeekBookmark)(VARIANT Value, VARIANT_BOOL Reset);
|
|
95
|
+
|
|
92
96
|
};
|
|
93
97
|
|
|
94
98
|
OBJECT_ENTRY_AUTO(__uuidof(QueryBase), CQueryBase)
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "Record.h"
|
|
21
21
|
#include "Field.h"
|
|
22
22
|
#include "FieldDefs.h"
|
|
23
|
+
#include "Bookmark.h"
|
|
23
24
|
|
|
24
25
|
void CRecord::FinalRelease()
|
|
25
26
|
{
|
|
@@ -188,12 +189,23 @@ STDMETHODIMP CWritableRecord::Update()
|
|
|
188
189
|
}
|
|
189
190
|
}
|
|
190
191
|
|
|
191
|
-
STDMETHODIMP CWritableRecord::Read(
|
|
192
|
+
STDMETHODIMP CWritableRecord::Read(VARIANT param,
|
|
192
193
|
VARIANT_BOOL* retVal)
|
|
193
194
|
{
|
|
194
195
|
try
|
|
195
196
|
{
|
|
196
|
-
|
|
197
|
+
if ((param.vt == VT_DISPATCH) && param.pdispVal)
|
|
198
|
+
{
|
|
199
|
+
CBookmark* bm = dynamic_cast<CBookmark*>(param.pdispVal);
|
|
200
|
+
if (bm)
|
|
201
|
+
m_rec->read(bm->internalBookmark());
|
|
202
|
+
else
|
|
203
|
+
return Error("Invalid param 1 not IBookmark", IID_IWritableRecord);
|
|
204
|
+
}
|
|
205
|
+
else if (param.vt == VT_BOOL)
|
|
206
|
+
*retVal = m_rec->read(param.boolVal);
|
|
207
|
+
else
|
|
208
|
+
*retVal = m_rec->read();
|
|
197
209
|
return S_OK;
|
|
198
210
|
}
|
|
199
211
|
catch (bzs::rtl::exception& e)
|
|
@@ -90,7 +90,7 @@ public:
|
|
|
90
90
|
STDMETHOD(Insert)();
|
|
91
91
|
STDMETHOD(Del)(VARIANT_BOOL KeysetAlrady);
|
|
92
92
|
STDMETHOD(Update)();
|
|
93
|
-
STDMETHOD(Read)(
|
|
93
|
+
STDMETHOD(Read)(VARIANT KeysetAlradyOrBookmark, VARIANT_BOOL* retVal);
|
|
94
94
|
STDMETHOD(get_FieldDefs)(IFieldDefs** retVal);
|
|
95
95
|
STDMETHOD(get_IsInvalidRecord)(VARIANT_BOOL* retVal);
|
|
96
96
|
};
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include "QueryBase.h"
|
|
25
25
|
#include "PreparedQuery.h"
|
|
26
26
|
#include <bzs/db/protocol/tdap/client/fields.h>
|
|
27
|
+
#include "Bookmark.h"
|
|
27
28
|
|
|
28
29
|
using namespace bzs::db::protocol::tdap;
|
|
29
30
|
|
|
@@ -220,21 +221,42 @@ STDMETHODIMP CTableTd::SeekLessThan(VARIANT_BOOL orEqual, eLockType lockBias)
|
|
|
220
221
|
return S_OK;
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
STDMETHODIMP CTableTd::
|
|
224
|
+
STDMETHODIMP CTableTd::get_Bookmark(IBookmark** retVal)
|
|
224
225
|
{
|
|
225
|
-
|
|
226
|
+
CComObject<CBookmark>* bm;
|
|
227
|
+
CComObject<CBookmark>::CreateInstance(&bm);
|
|
228
|
+
if (!bm)
|
|
229
|
+
return Error("CreateInstance Bookmark", IID_ITable);
|
|
230
|
+
bm->set(m_tb->bookmark(), m_tb->bookmarkLen());
|
|
231
|
+
IBookmark* b;
|
|
232
|
+
bm->QueryInterface(IID_IBookmark, (void**)&b);
|
|
233
|
+
_ASSERTE(b);
|
|
234
|
+
*retVal = b;
|
|
226
235
|
return S_OK;
|
|
227
236
|
}
|
|
228
237
|
|
|
229
|
-
STDMETHODIMP CTableTd::
|
|
238
|
+
STDMETHODIMP CTableTd::SeekByBookmark(IBookmark* bm, eLockType lockBias)
|
|
230
239
|
{
|
|
231
|
-
|
|
232
|
-
|
|
240
|
+
CBookmark* cb = dynamic_cast<CBookmark*>(bm);
|
|
241
|
+
if (cb)
|
|
242
|
+
{
|
|
243
|
+
m_tb->seekByBookmark(cb->internalBookmark(), (ushort_td)lockBias);
|
|
244
|
+
return S_OK;
|
|
245
|
+
}
|
|
246
|
+
return Error("Invalid param bookmark", IID_ITable);
|
|
233
247
|
}
|
|
234
248
|
|
|
235
|
-
STDMETHODIMP CTableTd::get_Percentage(long* Value)
|
|
249
|
+
STDMETHODIMP CTableTd::get_Percentage(VARIANT param, long* Value)
|
|
236
250
|
{
|
|
237
|
-
|
|
251
|
+
if ((param.vt == VT_DISPATCH) && param.pdispVal)
|
|
252
|
+
{
|
|
253
|
+
CBookmark* bm = dynamic_cast<CBookmark*>(param.pdispVal);
|
|
254
|
+
if (bm)
|
|
255
|
+
*Value = m_tb->getPercentage(bm->internalBookmark());
|
|
256
|
+
else
|
|
257
|
+
return Error("Invalid param 1 not IBookmark", IID_ITable);
|
|
258
|
+
}else
|
|
259
|
+
*Value = m_tb->getPercentage();
|
|
238
260
|
return S_OK;
|
|
239
261
|
}
|
|
240
262
|
|
|
@@ -247,6 +269,9 @@ STDMETHODIMP CTableTd::get_RecordLength(long* Value)
|
|
|
247
269
|
STDMETHODIMP CTableTd::RecordCount(VARIANT_BOOL estimate,
|
|
248
270
|
VARIANT_BOOL fromCurrent, long* Value)
|
|
249
271
|
{
|
|
272
|
+
m_tb->setOnRecordCount(onRecordCount);
|
|
273
|
+
m_tb->setOptionalData(this);
|
|
274
|
+
|
|
250
275
|
*Value = m_tb->recordCount((estimate == -1), (fromCurrent == -1));
|
|
251
276
|
return S_OK;
|
|
252
277
|
}
|
|
@@ -497,9 +522,9 @@ STDMETHODIMP CTableTd::TdapErr(OLE_HANDLE hWnd, BSTR* Value)
|
|
|
497
522
|
return S_OK;
|
|
498
523
|
}
|
|
499
524
|
|
|
500
|
-
STDMETHODIMP CTableTd::Unlock_(
|
|
525
|
+
STDMETHODIMP CTableTd::Unlock_()
|
|
501
526
|
{
|
|
502
|
-
m_tb->unlock(
|
|
527
|
+
m_tb->unlock();
|
|
503
528
|
return S_OK;
|
|
504
529
|
}
|
|
505
530
|
|
|
@@ -509,17 +534,24 @@ STDMETHODIMP CTableTd::get_BlobFieldUsed(VARIANT_BOOL* Value)
|
|
|
509
534
|
return S_OK;
|
|
510
535
|
}
|
|
511
536
|
|
|
512
|
-
STDMETHODIMP CTableTd::get_BookmarkFindCurrent(
|
|
537
|
+
STDMETHODIMP CTableTd::get_BookmarkFindCurrent(IBookmark** retVal)
|
|
513
538
|
{
|
|
514
|
-
|
|
515
|
-
|
|
539
|
+
CComObject<CBookmark>* bm;
|
|
540
|
+
CComObject<CBookmark>::CreateInstance(&bm);
|
|
541
|
+
if (!bm)
|
|
542
|
+
return Error("CreateInstance Bookmark", IID_ITable);
|
|
543
|
+
bm->set(m_tb->bookmarkFindCurrent(), m_tb->bookmarkLen());
|
|
544
|
+
IBookmark* b;
|
|
545
|
+
bm->QueryInterface(IID_IBookmark, (void**)&b);
|
|
546
|
+
_ASSERTE(b);
|
|
547
|
+
*retVal = b;
|
|
516
548
|
return S_OK;
|
|
517
549
|
}
|
|
518
550
|
|
|
519
|
-
STDMETHODIMP CTableTd::
|
|
551
|
+
STDMETHODIMP CTableTd::get_BookmarksCount(int* Value)
|
|
520
552
|
{
|
|
521
553
|
|
|
522
|
-
*Value = m_tb->
|
|
554
|
+
*Value = m_tb->bookmarksCount();
|
|
523
555
|
return S_OK;
|
|
524
556
|
}
|
|
525
557
|
|
|
@@ -549,9 +581,9 @@ STDMETHODIMP CTableTd::put_LogicalToString(VARIANT_BOOL Value)
|
|
|
549
581
|
return S_OK;
|
|
550
582
|
}
|
|
551
583
|
|
|
552
|
-
STDMETHODIMP CTableTd::
|
|
584
|
+
STDMETHODIMP CTableTd::MoveBookmarks(long Value)
|
|
553
585
|
{
|
|
554
|
-
m_tb->
|
|
586
|
+
m_tb->moveBookmarks(Value);
|
|
555
587
|
return S_OK;
|
|
556
588
|
}
|
|
557
589
|
|
|
@@ -650,3 +682,35 @@ STDMETHODIMP CTableTd::get_LastFindDirection(short* Value)
|
|
|
650
682
|
return S_FALSE;
|
|
651
683
|
}
|
|
652
684
|
|
|
685
|
+
STDMETHODIMP CTableTd::get_BookmarkLen(unsigned short* Value)
|
|
686
|
+
{
|
|
687
|
+
*Value = m_tb->bookmarkLen();
|
|
688
|
+
return S_FALSE;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
STDMETHODIMP CTableTd::get_Bookmarks(long index, IBookmark** retVal)
|
|
692
|
+
{
|
|
693
|
+
CComObject<CBookmark>* bm;
|
|
694
|
+
CComObject<CBookmark>::CreateInstance(&bm);
|
|
695
|
+
if (!bm)
|
|
696
|
+
return Error("CreateInstance Bookmark", IID_ITable);
|
|
697
|
+
bm->set(m_tb->bookmarks((unsigned int)index), m_tb->bookmarkLen());
|
|
698
|
+
IBookmark* b;
|
|
699
|
+
bm->QueryInterface(IID_IBookmark, (void**)&b);
|
|
700
|
+
_ASSERTE(b);
|
|
701
|
+
*retVal = b;
|
|
702
|
+
return S_OK;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
void __stdcall onRecordCount(bzs::db::protocol::tdap::client::table* tb,
|
|
706
|
+
int count, bool& cancel)
|
|
707
|
+
{
|
|
708
|
+
CTableTd* ctb = reinterpret_cast<CTableTd*>(tb->optionalData());
|
|
709
|
+
ITable* tbPtr = dynamic_cast<ITable*>(ctb);
|
|
710
|
+
_ASSERTE(tbPtr);
|
|
711
|
+
VARIANT_BOOL tmp = 0;
|
|
712
|
+
ctb->Fire_OnRecordCount(tbPtr, count, &tmp);
|
|
713
|
+
if (tmp)
|
|
714
|
+
cancel = true;
|
|
715
|
+
}
|
|
716
|
+
|
|
@@ -22,13 +22,20 @@
|
|
|
22
22
|
#include "tdclatl_i.h"
|
|
23
23
|
#include "Field.h"
|
|
24
24
|
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
25
|
+
#include "_IDatabaseEvents_CP.H"
|
|
26
|
+
|
|
25
27
|
using namespace ATL;
|
|
28
|
+
void __stdcall onRecordCount(bzs::db::protocol::tdap::client::table* tb,
|
|
29
|
+
int count, bool& cancel);
|
|
26
30
|
|
|
27
31
|
class ATL_NO_VTABLE CTableTd
|
|
28
32
|
: public CComObjectRootEx<CComSingleThreadModel>,
|
|
29
33
|
public CComCoClass<CTableTd, &CLSID_Table>,
|
|
30
34
|
public IDispatchImpl<ITable, &IID_ITable, &LIBID_transactd,
|
|
31
|
-
/* wMajor = */ 1, /* wMinor = */ 0
|
|
35
|
+
/* wMajor = */ 1, /* wMinor = */ 0>,
|
|
36
|
+
public IConnectionPointContainerImpl<CTableTd>,
|
|
37
|
+
public CProxy_ITableEvents<CTableTd>
|
|
38
|
+
|
|
32
39
|
{
|
|
33
40
|
|
|
34
41
|
int m_filterRejectCount;
|
|
@@ -48,8 +55,14 @@ public:
|
|
|
48
55
|
BEGIN_COM_MAP(CTableTd)
|
|
49
56
|
COM_INTERFACE_ENTRY(ITable)
|
|
50
57
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
58
|
+
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
51
59
|
END_COM_MAP()
|
|
52
60
|
|
|
61
|
+
BEGIN_CONNECTION_POINT_MAP(CTableTd)
|
|
62
|
+
CONNECTION_POINT_ENTRY(__uuidof(_ITableEvents))
|
|
63
|
+
END_CONNECTION_POINT_MAP()
|
|
64
|
+
|
|
65
|
+
|
|
53
66
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
54
67
|
|
|
55
68
|
HRESULT FinalConstruct() { return S_OK; }
|
|
@@ -77,9 +90,9 @@ public:
|
|
|
77
90
|
STDMETHOD(Seek)(eLockType lockBias);
|
|
78
91
|
STDMETHOD(SeekGreater)(VARIANT_BOOL orEqual, eLockType lockBias);
|
|
79
92
|
STDMETHOD(SeekLessThan)(VARIANT_BOOL orEqual, eLockType lockBias);
|
|
80
|
-
STDMETHOD(
|
|
81
|
-
STDMETHOD(
|
|
82
|
-
STDMETHOD(get_Percentage)(long* Value);
|
|
93
|
+
STDMETHOD(get_Bookmark)(IBookmark** Value);
|
|
94
|
+
STDMETHOD(SeekByBookmark)(IBookmark* bm, eLockType lockBias);
|
|
95
|
+
STDMETHOD(get_Percentage)(VARIANT param, long* Value);
|
|
83
96
|
STDMETHOD(get_RecordLength)(long* Value);
|
|
84
97
|
STDMETHOD(RecordCount)(VARIANT_BOOL estimate, VARIANT_BOOL fromCurrent,
|
|
85
98
|
long* Value);
|
|
@@ -126,15 +139,15 @@ public:
|
|
|
126
139
|
STDMETHOD(SetAccessRights)(unsigned char curd);
|
|
127
140
|
STDMETHOD(SetOwnerName)(BSTR* name, short enctype);
|
|
128
141
|
STDMETHOD(TdapErr)(OLE_HANDLE hWnd, BSTR* Value);
|
|
129
|
-
STDMETHOD(Unlock_)(
|
|
142
|
+
STDMETHOD(Unlock_)();
|
|
130
143
|
STDMETHOD(get_BlobFieldUsed)(VARIANT_BOOL* Value);
|
|
131
|
-
STDMETHOD(get_BookmarkFindCurrent)(
|
|
132
|
-
STDMETHOD(
|
|
144
|
+
STDMETHOD(get_BookmarkFindCurrent)(IBookmark** Value);
|
|
145
|
+
STDMETHOD(get_BookmarksCount)(int* Value);
|
|
133
146
|
STDMETHOD(Find)(eFindType FindType);
|
|
134
147
|
STDMETHOD(get_RecordHash)(unsigned int* Value);
|
|
135
148
|
STDMETHOD(get_LogicalToString)(VARIANT_BOOL* Value);
|
|
136
149
|
STDMETHOD(put_LogicalToString)(VARIANT_BOOL Value);
|
|
137
|
-
STDMETHOD(
|
|
150
|
+
STDMETHOD(MoveBookmarks)(long Value);
|
|
138
151
|
STDMETHOD(get_MyDateTimeValueByBtrv)(VARIANT_BOOL* Value);
|
|
139
152
|
STDMETHOD(get_ValiableFormatType)(VARIANT_BOOL* Value);
|
|
140
153
|
STDMETHOD(SmartUpdate)(void);
|
|
@@ -145,5 +158,7 @@ public:
|
|
|
145
158
|
STDMETHOD(FieldNumByName)(BSTR Name, short* Value);
|
|
146
159
|
STDMETHOD(get_StatReasonOfFind)(short* Value);
|
|
147
160
|
STDMETHOD(get_LastFindDirection)(short* Value);
|
|
161
|
+
STDMETHOD(get_BookmarkLen)(unsigned short* Value);
|
|
162
|
+
STDMETHOD(get_Bookmarks)(long index, IBookmark** Value);
|
|
148
163
|
|
|
149
164
|
};
|
|
@@ -118,3 +118,42 @@ public:
|
|
|
118
118
|
return hr;
|
|
119
119
|
}
|
|
120
120
|
};
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
template <class T>
|
|
124
|
+
class CProxy_ITableEvents
|
|
125
|
+
: public ATL::IConnectionPointImpl<T, &__uuidof(_ITableEvents)>
|
|
126
|
+
{
|
|
127
|
+
public:
|
|
128
|
+
HRESULT Fire_OnRecordCount(ITable* tb, int count, VARIANT_BOOL* cancel)
|
|
129
|
+
{
|
|
130
|
+
HRESULT hr = S_OK;
|
|
131
|
+
T* pThis = static_cast<T*>(this);
|
|
132
|
+
int cConnections = m_vec.GetSize();
|
|
133
|
+
|
|
134
|
+
for (int iConnection = 0; iConnection < cConnections; iConnection++)
|
|
135
|
+
{
|
|
136
|
+
pThis->Lock();
|
|
137
|
+
CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
|
|
138
|
+
pThis->Unlock();
|
|
139
|
+
|
|
140
|
+
IDispatch* pConnection = static_cast<IDispatch*>(punkConnection.p);
|
|
141
|
+
|
|
142
|
+
if (pConnection)
|
|
143
|
+
{
|
|
144
|
+
CComVariant avarParams[3];
|
|
145
|
+
avarParams[2] = tb;
|
|
146
|
+
avarParams[1] = count;
|
|
147
|
+
avarParams[0].byref = cancel;
|
|
148
|
+
avarParams[0].vt = VT_BOOL | VT_BYREF;
|
|
149
|
+
CComVariant varResult;
|
|
150
|
+
|
|
151
|
+
DISPPARAMS params = { avarParams, NULL, 3, 0 };
|
|
152
|
+
hr = pConnection->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT,
|
|
153
|
+
DISPATCH_METHOD, ¶ms, &varResult,
|
|
154
|
+
NULL, NULL);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return hr;
|
|
158
|
+
}
|
|
159
|
+
};
|
|
@@ -43,7 +43,7 @@ void CActiveTable::FinalRelease()
|
|
|
43
43
|
m_at->release();
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
STDMETHODIMP CActiveTable::SetDatabase(VARIANT Value, BSTR tableName)
|
|
46
|
+
STDMETHODIMP CActiveTable::SetDatabase(VARIANT Value, BSTR tableName, short mode)
|
|
47
47
|
{
|
|
48
48
|
try
|
|
49
49
|
{
|
|
@@ -64,7 +64,7 @@ STDMETHODIMP CActiveTable::SetDatabase(VARIANT Value, BSTR tableName)
|
|
|
64
64
|
CDatabase* p = dynamic_cast<CDatabase*>(Value.pdispVal);
|
|
65
65
|
if (p)
|
|
66
66
|
{
|
|
67
|
-
m_at = activeTable::create(p->database(), tableName);
|
|
67
|
+
m_at = activeTable::create(p->database(), tableName, mode);
|
|
68
68
|
m_at->table()->setOptionalData((void*)p->database());
|
|
69
69
|
return S_OK;
|
|
70
70
|
}
|
|
@@ -54,7 +54,7 @@ public:
|
|
|
54
54
|
void FinalRelease();
|
|
55
55
|
|
|
56
56
|
public:
|
|
57
|
-
STDMETHOD(SetDatabase)(VARIANT Value, BSTR tableName);
|
|
57
|
+
STDMETHOD(SetDatabase)(VARIANT Value, BSTR tableName, short mode);
|
|
58
58
|
|
|
59
59
|
STDMETHOD(Index)(short Value, IActiveTable** retVal);
|
|
60
60
|
STDMETHOD(KeyValue)(VARIANT Value0, VARIANT Value1, VARIANT Value2,
|