[PATCH 2/3] msado15: Support ADORecordsetConstruction in _Recordset
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Fri Oct 30 02:50:57 CDT 2020
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/msado15/recordset.c | 123 +++++++++++++++++++++++++++++++++++
dlls/msado15/tests/msado15.c | 5 ++
2 files changed, 128 insertions(+)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index e3dd83a4309..5ad593dce5c 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -35,6 +35,7 @@ struct fields;
struct recordset
{
_Recordset Recordset_iface;
+ ADORecordsetConstruction ADORecordsetConstruction_iface;
ISupportErrorInfo ISupportErrorInfo_iface;
LONG refs;
LONG state;
@@ -739,6 +740,11 @@ static inline struct recordset *impl_from_Recordset( _Recordset *iface )
return CONTAINING_RECORD( iface, struct recordset, Recordset_iface );
}
+static inline struct recordset *impl_from_ADORecordsetConstruction( ADORecordsetConstruction *iface )
+{
+ return CONTAINING_RECORD( iface, struct recordset, ADORecordsetConstruction_iface );
+}
+
static ULONG WINAPI recordset_AddRef( _Recordset *iface )
{
struct recordset *recordset = impl_from_Recordset( iface );
@@ -798,6 +804,10 @@ static HRESULT WINAPI recordset_QueryInterface( _Recordset *iface, REFIID riid,
{
*obj = &recordset->ISupportErrorInfo_iface;
}
+ else if (IsEqualGUID( riid, &IID_ADORecordsetConstruction ))
+ {
+ *obj = &recordset->ADORecordsetConstruction_iface;
+ }
else if (IsEqualGUID( riid, &IID_IRunnableObject ))
{
TRACE("IID_IRunnableObject not supported returning NULL\n");
@@ -1545,6 +1555,118 @@ static const ISupportErrorInfoVtbl recordset_supporterrorinfo_vtbl =
recordset_supporterrorinfo_InterfaceSupportsErrorInfo
};
+static HRESULT WINAPI rsconstruction_QueryInterface(ADORecordsetConstruction *iface,
+ REFIID riid, void **obj)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_QueryInterface( &recordset->Recordset_iface, riid, obj );
+}
+
+static ULONG WINAPI rsconstruction_AddRef(ADORecordsetConstruction *iface)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_AddRef( &recordset->Recordset_iface );
+}
+
+static ULONG WINAPI rsconstruction_Release(ADORecordsetConstruction *iface)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_Release( &recordset->Recordset_iface );
+}
+
+static HRESULT WINAPI rsconstruction_GetTypeInfoCount(ADORecordsetConstruction *iface, UINT *pctinfo)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ TRACE("%p, %p\n", recordset, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI rsconstruction_GetTypeInfo(ADORecordsetConstruction *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %u %u %p\n", recordset, iTInfo, lcid, ppTInfo);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_GetIDsOfNames(ADORecordsetConstruction *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %s %p %u %u %p\n", recordset, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_Invoke(ADORecordsetConstruction *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %d %s %d %d %p %p %p %p\n", recordset, dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_Rowset(ADORecordsetConstruction *iface, IUnknown **row_set)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_set);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, IUnknown *row_set)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_set);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_Chapter(ADORecordsetConstruction *iface, LONG *chapter)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, chapter);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_Chapter(ADORecordsetConstruction *iface, LONG chapter)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %d\n", recordset, chapter);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_RowPosition(ADORecordsetConstruction *iface, IUnknown **row_pos)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_pos);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_RowPosition(ADORecordsetConstruction *iface, IUnknown *row_pos)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_pos);
+ return E_NOTIMPL;
+}
+
+static const ADORecordsetConstructionVtbl rsconstruction_vtbl =
+{
+ rsconstruction_QueryInterface,
+ rsconstruction_AddRef,
+ rsconstruction_Release,
+ rsconstruction_GetTypeInfoCount,
+ rsconstruction_GetTypeInfo,
+ rsconstruction_GetIDsOfNames,
+ rsconstruction_Invoke,
+ rsconstruction_get_Rowset,
+ rsconstruction_put_Rowset,
+ rsconstruction_get_Chapter,
+ rsconstruction_put_Chapter,
+ rsconstruction_get_RowPosition,
+ rsconstruction_put_RowPosition
+};
+
HRESULT Recordset_create( void **obj )
{
struct recordset *recordset;
@@ -1552,6 +1674,7 @@ HRESULT Recordset_create( void **obj )
if (!(recordset = heap_alloc_zero( sizeof(*recordset) ))) return E_OUTOFMEMORY;
recordset->Recordset_iface.lpVtbl = &recordset_vtbl;
recordset->ISupportErrorInfo_iface.lpVtbl = &recordset_supporterrorinfo_vtbl;
+ recordset->ADORecordsetConstruction_iface.lpVtbl = &rsconstruction_vtbl;
recordset->refs = 1;
recordset->index = -1;
recordset->cursor_location = adUseServer;
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index e95df49c2c2..723c452fd88 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -61,6 +61,7 @@ static LONG get_refs_recordset( _Recordset *recordset )
static void test_Recordset(void)
{
_Recordset *recordset;
+ ADORecordsetConstruction *construct;
IRunnableObject *runtime;
ISupportErrorInfo *errorinfo;
Fields *fields, *fields2;
@@ -79,6 +80,10 @@ static void test_Recordset(void)
ok(hr == E_NOINTERFACE, "Unexpected IRunnableObject interface\n");
ok(runtime == NULL, "expected NULL\n");
+ hr = _Recordset_QueryInterface(recordset, &IID_ADORecordsetConstruction, (void**)&construct);
+ ok( hr == S_OK, "got %08x\n", hr );
+ ADORecordsetConstruction_Release(construct);
+
/* _Recordset object supports ISupportErrorInfo */
errorinfo = NULL;
hr = _Recordset_QueryInterface( recordset, &IID_ISupportErrorInfo, (void **)&errorinfo );
--
2.28.0
More information about the wine-devel
mailing list