transactd 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|