Alistair Leslie-Hughes : msdasql: Add IGetDataSource support to session.

Alexandre Julliard julliard at winehq.org
Thu Oct 28 16:07:45 CDT 2021


Module: wine
Branch: master
Commit: 33563cf16f5e122a1800612ddc214aee3da30d6d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=33563cf16f5e122a1800612ddc214aee3da30d6d

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Thu Oct 28 16:27:34 2021 +1100

msdasql: Add IGetDataSource support to session.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msdasql/session.c        | 47 +++++++++++++++++++++++++++++++++++++++++++
 dlls/msdasql/tests/provider.c |  5 +++++
 2 files changed, 52 insertions(+)

diff --git a/dlls/msdasql/session.c b/dlls/msdasql/session.c
index 57174be40f8..b79a80389ff 100644
--- a/dlls/msdasql/session.c
+++ b/dlls/msdasql/session.c
@@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msdasql);
 struct msdasql_session
 {
     IUnknown session_iface;
+    IGetDataSource IGetDataSource_iface;
     LONG refs;
 };
 
@@ -45,6 +46,11 @@ static inline struct msdasql_session *impl_from_IUnknown( IUnknown *iface )
     return CONTAINING_RECORD( iface, struct msdasql_session, session_iface );
 }
 
+static inline struct msdasql_session *impl_from_IGetDataSource( IGetDataSource *iface )
+{
+    return CONTAINING_RECORD( iface, struct msdasql_session, IGetDataSource_iface );
+}
+
 static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     struct msdasql_session *session = impl_from_IUnknown( iface );
@@ -57,6 +63,11 @@ static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void
         TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
         *ppv = &session->session_iface;
     }
+    else if(IsEqualGUID(&IID_IGetDataSource, riid))
+    {
+        TRACE("(%p)->(IID_IGetDataSource %p)\n", iface, ppv);
+        *ppv = &session->IGetDataSource_iface;
+    }
 
     if(*ppv)
     {
@@ -96,6 +107,41 @@ static const IUnknownVtbl unkfactoryVtbl =
     session_Release,
 };
 
+
+HRESULT WINAPI datasource_QueryInterface(IGetDataSource *iface, REFIID riid, void **out)
+{
+    struct msdasql_session *session = impl_from_IGetDataSource( iface );
+    return IUnknown_QueryInterface(&session->session_iface, riid, out);
+}
+
+ULONG WINAPI datasource_AddRef(IGetDataSource *iface)
+{
+    struct msdasql_session *session = impl_from_IGetDataSource( iface );
+    return IUnknown_AddRef(&session->session_iface);
+}
+
+ULONG WINAPI datasource_Release(IGetDataSource *iface)
+{
+    struct msdasql_session *session = impl_from_IGetDataSource( iface );
+    return IUnknown_Release(&session->session_iface);
+}
+
+HRESULT WINAPI datasource_GetDataSource(IGetDataSource *iface, REFIID riid, IUnknown **datasource)
+{
+    struct msdasql_session *session = impl_from_IGetDataSource( iface );
+    FIXME("%p, %s, %p stub\n", session, debugstr_guid(riid), datasource);
+
+    return E_NOTIMPL;
+}
+
+static const IGetDataSourceVtbl datasourceVtbl =
+{
+    datasource_QueryInterface,
+    datasource_AddRef,
+    datasource_Release,
+    datasource_GetDataSource
+};
+
 HRESULT create_db_session(REFIID riid, void **unk)
 {
     struct msdasql_session *session;
@@ -106,6 +152,7 @@ HRESULT create_db_session(REFIID riid, void **unk)
         return E_OUTOFMEMORY;
 
     session->session_iface.lpVtbl = &unkfactoryVtbl;
+    session->IGetDataSource_iface.lpVtbl = &datasourceVtbl;
     session->refs = 1;
 
     hr = IUnknown_QueryInterface(&session->session_iface, riid, unk);
diff --git a/dlls/msdasql/tests/provider.c b/dlls/msdasql/tests/provider.c
index 4cab6a24daf..4eaf6c07355 100644
--- a/dlls/msdasql/tests/provider.c
+++ b/dlls/msdasql/tests/provider.c
@@ -159,6 +159,7 @@ static void test_sessions(void)
     IUnknown *session = NULL;
     IOpenRowset *openrowset = NULL;
     IDBCreateCommand *create_command = NULL;
+    IGetDataSource *datasource = NULL;
     IUnknown *cmd = NULL;
     HRESULT hr;
     BSTR connect_str;
@@ -203,6 +204,10 @@ static void test_sessions(void)
     hr = IDBCreateSession_CreateSession( dbsession, NULL, &IID_IUnknown, &session );
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
+    hr = IUnknown_QueryInterface(session, &IID_IGetDataSource, (void**)&datasource);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    IGetDataSource_Release(datasource);
+
     hr = IUnknown_QueryInterface(session, &IID_IOpenRowset, (void**)&openrowset);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 




More information about the wine-cvs mailing list