[PATCH] msdasql: Add ITransactionJoin to session interface

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Wed Jan 26 04:55:02 CST 2022


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/msdasql/session.c        | 58 +++++++++++++++++++++++++++++++++++
 dlls/msdasql/tests/provider.c |  5 ++-
 2 files changed, 60 insertions(+), 3 deletions(-)

diff --git a/dlls/msdasql/session.c b/dlls/msdasql/session.c
index f0e915ca710..e58d152a418 100644
--- a/dlls/msdasql/session.c
+++ b/dlls/msdasql/session.c
@@ -43,6 +43,7 @@ struct msdasql_session
     IOpenRowset    IOpenRowset_iface;
     ISessionProperties ISessionProperties_iface;
     IDBCreateCommand IDBCreateCommand_iface;
+    ITransactionJoin ITransactionJoin_iface;
     LONG refs;
 
     IUnknown *datasource;
@@ -75,6 +76,11 @@ static inline struct msdasql_session *impl_from_IDBCreateCommand( IDBCreateComma
     return CONTAINING_RECORD( iface, struct msdasql_session, IDBCreateCommand_iface );
 }
 
+static inline struct msdasql_session *impl_from_ITransactionJoin( ITransactionJoin *iface )
+{
+    return CONTAINING_RECORD( iface, struct msdasql_session, ITransactionJoin_iface );
+}
+
 static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     struct msdasql_session *session = impl_from_IUnknown( iface );
@@ -107,6 +113,11 @@ static HRESULT WINAPI session_QueryInterface(IUnknown *iface, REFIID riid, void
         TRACE("(%p)->(IDBCreateCommand_iface %p)\n", iface, ppv);
         *ppv = &session->IDBCreateCommand_iface;
     }
+    else if(IsEqualGUID(&IID_ITransactionJoin, riid))
+    {
+        TRACE("(%p)->(ITransactionJoin %p)\n", iface, ppv);
+        *ppv = &session->ITransactionJoin_iface;
+    }
     else if(IsEqualGUID(&IID_IBindResource, riid))
     {
         TRACE("(%p)->(IID_IBindResource not support)\n", iface);
@@ -1191,6 +1202,52 @@ static const IDBCreateCommandVtbl createcommandVtbl =
     createcommand_CreateCommand
 };
 
+static HRESULT WINAPI transjoin_QueryInterface(ITransactionJoin *iface, REFIID riid, void **out)
+{
+    struct msdasql_session *session = impl_from_ITransactionJoin( iface );
+    return IUnknown_QueryInterface(&session->session_iface, riid, out);
+}
+
+static ULONG WINAPI transjoin_AddRef(ITransactionJoin *iface)
+{
+    struct msdasql_session *session = impl_from_ITransactionJoin( iface );
+    return IUnknown_AddRef(&session->session_iface);
+}
+
+static ULONG WINAPI transjoin_Release(ITransactionJoin *iface)
+{
+    struct msdasql_session *session = impl_from_ITransactionJoin( iface );
+    return IUnknown_Release(&session->session_iface);
+}
+
+static HRESULT WINAPI transjoin_GetOptionsObject(ITransactionJoin *iface, ITransactionOptions **options)
+{
+    struct msdasql_session *session = impl_from_ITransactionJoin( iface );
+
+    FIXME("%p, %p\n", session, options);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI transjoin_JoinTransaction(ITransactionJoin *iface, IUnknown *unk, ISOLEVEL level,
+    ULONG flags, ITransactionOptions *options)
+{
+    struct msdasql_session *session = impl_from_ITransactionJoin( iface );
+
+    FIXME("%p, %p, %d, 0x%08x, %p\n", session, unk, level, flags, options);
+
+    return E_NOTIMPL;
+}
+
+static const ITransactionJoinVtbl transactionjoinVtbl =
+{
+    transjoin_QueryInterface,
+    transjoin_AddRef,
+    transjoin_Release,
+    transjoin_GetOptionsObject,
+    transjoin_JoinTransaction
+};
+
 HRESULT create_db_session(REFIID riid, IUnknown *datasource, HDBC hdbc, void **unk)
 {
     struct msdasql_session *session;
@@ -1205,6 +1262,7 @@ HRESULT create_db_session(REFIID riid, IUnknown *datasource, HDBC hdbc, void **u
     session->IOpenRowset_iface.lpVtbl = &openrowsetVtbl;
     session->ISessionProperties_iface.lpVtbl = &propertiesVtbl;
     session->IDBCreateCommand_iface.lpVtbl = &createcommandVtbl;
+    session->ITransactionJoin_iface.lpVtbl = &transactionjoinVtbl;
     IUnknown_QueryInterface(datasource, &IID_IUnknown, (void**)&session->datasource);
     session->refs = 1;
     session->hdbc = hdbc;
diff --git a/dlls/msdasql/tests/provider.c b/dlls/msdasql/tests/provider.c
index eefddbf6dcb..ee81ad1d311 100644
--- a/dlls/msdasql/tests/provider.c
+++ b/dlls/msdasql/tests/provider.c
@@ -494,9 +494,8 @@ static void test_sessions(void)
     ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
 
     hr = IUnknown_QueryInterface(session, &IID_ITransactionJoin, (void**)&join);
-    todo_wine ok(hr == S_OK, "got 0x%08x\n", hr);
-    if(hr == S_OK)
-        ITransactionJoin_Release(join);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ITransactionJoin_Release(join);
 
     hr = IUnknown_QueryInterface(session, &IID_IBindResource, (void**)&unimplemented);
     ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
-- 
2.34.1




More information about the wine-devel mailing list