Alistair Leslie-Hughes : msdasql: Add ISessionProperties to session.

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


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

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

msdasql: Add ISessionProperties 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        | 58 +++++++++++++++++++++++++++++++++++++++++++
 dlls/msdasql/tests/provider.c |  5 ++++
 2 files changed, 63 insertions(+)

diff --git a/dlls/msdasql/session.c b/dlls/msdasql/session.c
index 465a89d199a..d4d55f76c3c 100644
--- a/dlls/msdasql/session.c
+++ b/dlls/msdasql/session.c
@@ -39,6 +39,7 @@ struct msdasql_session
     IUnknown session_iface;
     IGetDataSource IGetDataSource_iface;
     IOpenRowset    IOpenRowset_iface;
+    ISessionProperties ISessionProperties_iface;
     LONG refs;
 };
 
@@ -57,6 +58,11 @@ static inline struct msdasql_session *impl_from_IOpenRowset( IOpenRowset *iface
     return CONTAINING_RECORD( iface, struct msdasql_session, IOpenRowset_iface );
 }
 
+static inline struct msdasql_session *impl_from_ISessionProperties( ISessionProperties *iface )
+{
+    return CONTAINING_RECORD( iface, struct msdasql_session, ISessionProperties_iface );
+}
+
 static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     struct msdasql_session *session = impl_from_IUnknown( iface );
@@ -79,6 +85,11 @@ static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void
         TRACE("(%p)->(IID_IOpenRowset %p)\n", iface, ppv);
         *ppv = &session->IOpenRowset_iface;
     }
+    else if(IsEqualGUID(&IID_ISessionProperties, riid))
+    {
+        TRACE("(%p)->(IID_ISessionProperties %p)\n", iface, ppv);
+        *ppv = &session->ISessionProperties_iface;
+    }
 
     if(*ppv)
     {
@@ -189,6 +200,52 @@ static const IOpenRowsetVtbl openrowsetVtbl =
     openrowset_OpenRowset
 };
 
+static HRESULT WINAPI properties_QueryInterface(ISessionProperties *iface, REFIID riid, void **out)
+{
+    struct msdasql_session *session = impl_from_ISessionProperties( iface );
+    return IUnknown_QueryInterface(&session->session_iface, riid, out);
+}
+
+static ULONG WINAPI properties_AddRef(ISessionProperties *iface)
+{
+    struct msdasql_session *session = impl_from_ISessionProperties( iface );
+    return IUnknown_AddRef(&session->session_iface);
+}
+
+static ULONG WINAPI properties_Release(ISessionProperties *iface)
+{
+    struct msdasql_session *session = impl_from_ISessionProperties( iface );
+    return IUnknown_Release(&session->session_iface);
+}
+
+
+static HRESULT WINAPI properties_GetProperties(ISessionProperties *iface, ULONG set_count,
+    const DBPROPIDSET id_sets[], ULONG *count, DBPROPSET **sets)
+{
+    struct msdasql_session *session = impl_from_ISessionProperties( iface );
+    FIXME("%p %d %p %p %p\n", session, set_count, id_sets, count, sets);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI properties_SetProperties(ISessionProperties *iface, ULONG count,
+    DBPROPSET sets[])
+{
+    struct msdasql_session *session = impl_from_ISessionProperties( iface );
+    FIXME("%p %d %p\n", session, count, sets);
+
+    return S_OK;
+}
+
+static const ISessionPropertiesVtbl propertiesVtbl =
+{
+    properties_QueryInterface,
+    properties_AddRef,
+    properties_Release,
+    properties_GetProperties,
+    properties_SetProperties
+};
+
 HRESULT create_db_session(REFIID riid, void **unk)
 {
     struct msdasql_session *session;
@@ -201,6 +258,7 @@ HRESULT create_db_session(REFIID riid, void **unk)
     session->session_iface.lpVtbl = &unkfactoryVtbl;
     session->IGetDataSource_iface.lpVtbl = &datasourceVtbl;
     session->IOpenRowset_iface.lpVtbl = &openrowsetVtbl;
+    session->ISessionProperties_iface.lpVtbl = &propertiesVtbl;
     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 4eaf6c07355..0d9630070b3 100644
--- a/dlls/msdasql/tests/provider.c
+++ b/dlls/msdasql/tests/provider.c
@@ -160,6 +160,7 @@ static void test_sessions(void)
     IOpenRowset *openrowset = NULL;
     IDBCreateCommand *create_command = NULL;
     IGetDataSource *datasource = NULL;
+    ISessionProperties *session_props = NULL;
     IUnknown *cmd = NULL;
     HRESULT hr;
     BSTR connect_str;
@@ -208,6 +209,10 @@ static void test_sessions(void)
     ok(hr == S_OK, "got 0x%08x\n", hr);
     IGetDataSource_Release(datasource);
 
+    hr = IUnknown_QueryInterface(session, &IID_ISessionProperties, (void**)&session_props);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ISessionProperties_Release(session_props);
+
     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