From 06abf0006c7e4dfc41b4b3f76a97add655178b2e Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 4 Feb 2010 19:22:21 +0000 Subject: [PATCH] msdaps: Make use of the row server in ICommand_Execute. --- dlls/msdaps/usrmarshal.c | 60 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/dlls/msdaps/usrmarshal.c b/dlls/msdaps/usrmarshal.c index f889097eb21..f08f9fcd683 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) -- 2.11.4.GIT