[PATCH 4/4] msdasql: Add IPersist interface support
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Tue Oct 26 03:25:28 CDT 2021
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/msdasql/msdasql_main.c | 50 +++++++++++++++++++++++++++++++++++
dlls/msdasql/tests/provider.c | 27 +++++++++++++++++++
2 files changed, 77 insertions(+)
diff --git a/dlls/msdasql/msdasql_main.c b/dlls/msdasql/msdasql_main.c
index 38cec9e88e1..d9aaf491d3c 100644
--- a/dlls/msdasql/msdasql_main.c
+++ b/dlls/msdasql/msdasql_main.c
@@ -180,6 +180,7 @@ struct msdasql
IDBProperties IDBProperties_iface;
IDBInitialize IDBInitialize_iface;
IDBCreateSession IDBCreateSession_iface;
+ IPersist IPersist_iface;
LONG ref;
};
@@ -204,6 +205,11 @@ static inline struct msdasql *impl_from_IDBCreateSession(IDBCreateSession *iface
return CONTAINING_RECORD(iface, struct msdasql, IDBCreateSession_iface);
}
+static inline struct msdasql *impl_from_IPersist( IPersist *iface )
+{
+ return CONTAINING_RECORD( iface, struct msdasql, IPersist_iface );
+}
+
static HRESULT WINAPI msdsql_QueryInterface(IUnknown *iface, REFIID riid, void **out)
{
struct msdasql *provider = impl_from_IUnknown(iface);
@@ -227,6 +233,10 @@ static HRESULT WINAPI msdsql_QueryInterface(IUnknown *iface, REFIID riid, void *
{
*out = &provider->IDBCreateSession_iface;
}
+ else if(IsEqualGUID(&IID_IPersist, riid))
+ {
+ *out = &provider->IPersist_iface;
+ }
else
{
FIXME("(%s, %p)\n", debugstr_guid(riid), out);
@@ -459,6 +469,45 @@ static const struct IDBCreateSessionVtbl dbsess_vtbl =
dbsess_CreateSession
};
+static HRESULT WINAPI persist_QueryInterface(IPersist *iface, REFIID riid, void **ppv)
+{
+ struct msdasql *provider = impl_from_IPersist( iface );
+ return IUnknown_QueryInterface(&provider->MSDASQL_iface, riid, ppv);
+}
+
+static ULONG WINAPI persist_AddRef(IPersist *iface)
+{
+ struct msdasql *provider = impl_from_IPersist( iface );
+ return IUnknown_AddRef(&provider->MSDASQL_iface);
+}
+
+static ULONG WINAPI persist_Release(IPersist *iface)
+{
+ struct msdasql *provider = impl_from_IPersist( iface );
+ return IUnknown_Release(&provider->MSDASQL_iface);
+}
+
+static HRESULT WINAPI persist_GetClassID(IPersist *iface, CLSID *classid)
+{
+ struct msdasql *provider = impl_from_IPersist( iface );
+
+ TRACE("(%p)->(%p)\n", provider, classid);
+
+ if(!classid)
+ return E_INVALIDARG;
+
+ *classid = CLSID_MSDASQL;
+ return S_OK;
+
+}
+
+static const IPersistVtbl persistVtbl = {
+ persist_QueryInterface,
+ persist_AddRef,
+ persist_Release,
+ persist_GetClassID
+};
+
static HRESULT create_msdasql_provider(REFIID riid, void **ppv)
{
struct msdasql *provider;
@@ -472,6 +521,7 @@ static HRESULT create_msdasql_provider(REFIID riid, void **ppv)
provider->IDBProperties_iface.lpVtbl = &dbprops_vtbl;
provider->IDBInitialize_iface.lpVtbl = &dbinit_vtbl;
provider->IDBCreateSession_iface.lpVtbl = &dbsess_vtbl;
+ provider->IPersist_iface.lpVtbl = &persistVtbl;
provider->ref = 1;
hr = IUnknown_QueryInterface(&provider->MSDASQL_iface, riid, ppv);
diff --git a/dlls/msdasql/tests/provider.c b/dlls/msdasql/tests/provider.c
index ff4757eb236..16d6de6cd9a 100644
--- a/dlls/msdasql/tests/provider.c
+++ b/dlls/msdasql/tests/provider.c
@@ -36,6 +36,32 @@ DEFINE_GUID(DBPROPSET_DBINIT, 0xc8b522bc, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0
static BOOL db_created;
static char mdbpath[MAX_PATH];
+static test_msdasql(void)
+{
+ HRESULT hr;
+ IUnknown *unk;
+ IPersist *persist;
+ CLSID classid;
+
+ hr = CoCreateInstance( &CLSID_MSDASQL, NULL, CLSCTX_ALL, &IID_IUnknown, (void **)&unk);
+ ok(hr == S_OK, "Failed to create object 0x%08x\n", hr);
+ if (FAILED(hr))
+ {
+ return;
+ }
+
+ hr = IUnknown_QueryInterface(unk, &IID_IPersist, (void**)&persist);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IPersist_GetClassID(persist, &classid);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(IsEqualGUID(&classid, &CLSID_MSDASQL), "got %s\n", debugstr_guid(&classid));
+
+ IPersist_Release(persist);
+
+ IUnknown_Release(unk);
+}
+
static void test_Properties(void)
{
HRESULT hr;
@@ -264,6 +290,7 @@ START_TEST(provider)
setup_database();
+ test_msdasql();
test_Properties();
test_sessions();
--
2.33.0
More information about the wine-devel
mailing list