Huw Davies : msdaps: Make use of the row server in ICommand_Execute.

Alexandre Julliard julliard at winehq.org
Fri Feb 5 08:42:33 CST 2010


Module: wine
Branch: master
Commit: 06abf0006c7e4dfc41b4b3f76a97add655178b2e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=06abf0006c7e4dfc41b4b3f76a97add655178b2e

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Feb  4 19:22:21 2010 +0000

msdaps: Make use of the row server in ICommand_Execute.

---

 dlls/msdaps/usrmarshal.c |   60 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 55 insertions(+), 5 deletions(-)

diff --git a/dlls/msdaps/usrmarshal.c b/dlls/msdaps/usrmarshal.c
index f889097..f08f9fc 100644
--- a/dlls/msdaps/usrmarshal.c
+++ b/dlls/msdaps/usrmarshal.c
@@ -766,11 +766,34 @@ HRESULT __RPC_STUB ICommand_Cancel_Stub(ICommand* This, IErrorInfo **ppErrorInfo
 HRESULT CALLBACK ICommand_Execute_Proxy(ICommand* This, IUnknown *pUnkOuter, REFIID riid,
                                         DBPARAMS *pParams, DBROWCOUNT *pcRowsAffected, IUnknown **ppRowset)
 {
-    FIXME("(%p)->(%p, %s, %p, %p, %p): stub\n", This, pUnkOuter, debugstr_guid(riid), pParams,
+    HRESULT hr;
+    DBROWCOUNT affected;
+
+    *ppRowset = NULL;
+
+    TRACE("(%p)->(%p, %s, %p, %p, %p)\n", This, pUnkOuter, debugstr_guid(riid), pParams,
           pcRowsAffected, ppRowset);
-    if(pParams) TRACE("params {%p, %d, %08lx}\n", pParams->pData, pParams->cParamSets, pParams->hAccessor);
 
-    return E_NOTIMPL;
+    if(pParams)
+    {
+        FIXME("Unhandled params {%p, %d, %08lx}\n", pParams->pData, pParams->cParamSets, pParams->hAccessor);
+        return E_NOTIMPL;
+    }
+
+    if(pUnkOuter)
+    {
+        FIXME("Aggregation not supported\n");
+        return CLASS_E_NOAGGREGATION;
+    }
+
+    hr = ICommand_RemoteExecute_Proxy(This, pUnkOuter, riid, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, &affected,
+                                      ppRowset);
+
+    TRACE("Execute returns %08x\n", hr);
+
+    if(pcRowsAffected) *pcRowsAffected = affected;
+
+    return hr;
 }
 
 HRESULT __RPC_STUB ICommand_Execute_Stub(ICommand* This, IUnknown *pUnkOuter, REFIID riid, HACCESSOR hAccessor,
@@ -778,10 +801,37 @@ HRESULT __RPC_STUB ICommand_Execute_Stub(ICommand* This, IUnknown *pUnkOuter, RE
                                          RMTPACK *pOutputParams, DBCOUNTITEM cBindings, DBBINDING *rgBindings,
                                          DBSTATUS *rgStatus, DBROWCOUNT *pcRowsAffected, IUnknown **ppRowset)
 {
-    FIXME("(%p)->(%p, %s, %08lx, %d, %p, %d, %p, %p, %d, %p, %p, %p, %p): stub\n", This, pUnkOuter, debugstr_guid(riid),
+    IWineRowServer *rowset_server;
+    IMarshal *marshal;
+    IUnknown *obj = NULL;
+    HRESULT hr;
+
+    TRACE("(%p)->(%p, %s, %08lx, %d, %p, %d, %p, %p, %d, %p, %p, %p, %p): stub\n", This, pUnkOuter, debugstr_guid(riid),
           hAccessor, cParamSets, pGuid, ulGuidOffset, pInputParams, pOutputParams, cBindings, rgBindings, rgStatus,
           pcRowsAffected, ppRowset);
-    return E_NOTIMPL;
+
+    *ppRowset = NULL;
+
+    hr = CoCreateInstance(&CLSID_wine_rowset_server, NULL, CLSCTX_INPROC_SERVER, &IID_IWineRowServer, (void**)&rowset_server);
+    if(FAILED(hr)) return hr;
+
+    IWineRowServer_GetMarshal(rowset_server, &marshal);
+
+    hr = ICommand_Execute(This, (IUnknown*)marshal, &IID_IUnknown, NULL, pcRowsAffected, &obj);
+
+    IMarshal_Release(marshal);
+
+    if(FAILED(hr))
+    {
+        IWineRowServer_Release(rowset_server);
+        return hr;
+    }
+
+    IWineRowServer_SetInnerUnk(rowset_server, obj);
+    hr = IUnknown_QueryInterface(obj, riid, (void**)ppRowset);
+    IUnknown_Release(obj);
+
+    return hr;
 }
 
 HRESULT CALLBACK ICommand_GetDBSession_Proxy(ICommand* This, REFIID riid, IUnknown **ppSession)




More information about the wine-cvs mailing list