From 7cbf164fe3811ed3d05f3b99c191d011d3094801 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 4 Feb 2010 12:33:06 +0000 Subject: [PATCH] msdaps: Expose IRowsetLocate, IRowsetInfo and IAccessor on the client side. --- dlls/msdaps/row_server.c | 245 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) diff --git a/dlls/msdaps/row_server.c b/dlls/msdaps/row_server.c index 6c3527040fc..849ee788c5e 100644 --- a/dlls/msdaps/row_server.c +++ b/dlls/msdaps/row_server.c @@ -667,6 +667,9 @@ static HRESULT create_row_proxy(IWineRowServer *server, IUnknown **obj) typedef struct { const IRowsetVtbl *rowset_vtbl; + const IRowsetLocateVtbl *rowsetlocate_vtbl; + const IRowsetInfoVtbl *rowsetinfo_vtbl; + const IAccessorVtbl *accessor_vtbl; LONG ref; @@ -678,6 +681,21 @@ static inline rowset_proxy *impl_from_IRowset(IRowset *iface) return (rowset_proxy *)((char*)iface - FIELD_OFFSET(rowset_proxy, rowset_vtbl)); } +static inline rowset_proxy *impl_from_IRowsetLocate(IRowsetLocate *iface) +{ + return (rowset_proxy *)((char*)iface - FIELD_OFFSET(rowset_proxy, rowsetlocate_vtbl)); +} + +static inline rowset_proxy *impl_from_IRowsetInfo(IRowsetInfo *iface) +{ + return (rowset_proxy *)((char*)iface - FIELD_OFFSET(rowset_proxy, rowsetinfo_vtbl)); +} + +static inline rowset_proxy *impl_from_IAccessor(IAccessor *iface) +{ + return (rowset_proxy *)((char*)iface - FIELD_OFFSET(rowset_proxy, accessor_vtbl)); +} + static HRESULT WINAPI rowset_QueryInterface(IRowset *iface, REFIID iid, void **obj) { rowset_proxy *This = impl_from_IRowset(iface); @@ -690,6 +708,18 @@ static HRESULT WINAPI rowset_QueryInterface(IRowset *iface, REFIID iid, void **o { *obj = &This->rowset_vtbl; } + else if(IsEqualIID(iid, &IID_IRowsetLocate)) + { + *obj = &This->rowsetlocate_vtbl; + } + else if(IsEqualIID(iid, &IID_IRowsetInfo)) + { + *obj = &This->rowsetinfo_vtbl; + } + else if(IsEqualIID(iid, &IID_IAccessor)) + { + *obj = &This->accessor_vtbl; + } else { FIXME("interface %s not implemented\n", debugstr_guid(iid)); @@ -825,6 +855,218 @@ static const IRowsetVtbl rowset_vtbl = rowset_RestartPosition }; +static HRESULT WINAPI rowsetlocate_QueryInterface(IRowsetLocate *iface, REFIID iid, void **obj) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IUnknown_QueryInterface((IUnknown *)This, iid, obj); +} + +static ULONG WINAPI rowsetlocate_AddRef(IRowsetLocate *iface) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IUnknown_AddRef((IUnknown *)This); +} + +static ULONG WINAPI rowsetlocate_Release(IRowsetLocate *iface) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IUnknown_Release((IUnknown *)This); +} + +static HRESULT WINAPI rowsetlocate_AddRefRows(IRowsetLocate *iface, DBCOUNTITEM cRows, const HROW rghRows[], + DBREFCOUNT rgRefCounts[], DBROWSTATUS rgRowStatus[]) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IRowset_AddRefRows((IRowset*)This, cRows, rghRows, rgRefCounts, rgRowStatus); +} + +static HRESULT WINAPI rowsetlocate_GetData(IRowsetLocate *iface, HROW hRow, HACCESSOR hAccessor, void *pData) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IRowset_GetData((IRowset*)This, hRow, hAccessor, pData); +} + +static HRESULT WINAPI rowsetlocate_GetNextRows(IRowsetLocate *iface, HCHAPTER hReserved, DBROWOFFSET lRowsOffset, + DBROWCOUNT cRows, DBCOUNTITEM *pcRowObtained, HROW **prghRows) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IRowset_GetNextRows((IRowset*)This, hReserved, lRowsOffset, cRows, pcRowObtained, prghRows); +} + +static HRESULT WINAPI rowsetlocate_ReleaseRows(IRowsetLocate *iface, DBCOUNTITEM cRows, const HROW rghRows[], + DBROWOPTIONS rgRowOptions[], DBREFCOUNT rgRefCounts[], DBROWSTATUS rgRowStatus[]) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IRowset_ReleaseRows((IRowset*)This, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus); +} + +static HRESULT WINAPI rowsetlocate_RestartPosition(IRowsetLocate *iface, HCHAPTER hReserved) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + return IRowset_RestartPosition((IRowset*)This, hReserved); +} + +static HRESULT WINAPI rowsetlocate_Compare(IRowsetLocate *iface, HCHAPTER hReserved, DBBKMARK cbBookmark1, const BYTE *pBookmark1, + DBBKMARK cbBookmark2, const BYTE *pBookmark2, DBCOMPARE *pComparison) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI rowsetlocate_GetRowsAt(IRowsetLocate *iface, HWATCHREGION hReserved1, HCHAPTER hReserved2, DBBKMARK cbBookmark, + const BYTE *pBookmark, DBROWOFFSET lRowsOffset, DBROWCOUNT cRows, DBCOUNTITEM *pcRowsObtained, + HROW **prghRows) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI rowsetlocate_GetRowsByBookmark(IRowsetLocate *iface, HCHAPTER hReserved, DBCOUNTITEM cRows, const DBBKMARK rgcbBookmarks[], + const BYTE * rgpBookmarks[], HROW rghRows[], DBROWSTATUS rgRowStatus[]) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI rowsetlocate_Hash(IRowsetLocate *iface, HCHAPTER hReserved, DBBKMARK cBookmarks, const DBBKMARK rgcbBookmarks[], + const BYTE * rgpBookmarks[], DBHASHVALUE rgHashedValues[], DBROWSTATUS rgBookmarkStatus[]) +{ + rowset_proxy *This = impl_from_IRowsetLocate(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IRowsetLocateVtbl rowsetlocate_vtbl = +{ + rowsetlocate_QueryInterface, + rowsetlocate_AddRef, + rowsetlocate_Release, + rowsetlocate_AddRefRows, + rowsetlocate_GetData, + rowsetlocate_GetNextRows, + rowsetlocate_ReleaseRows, + rowsetlocate_RestartPosition, + rowsetlocate_Compare, + rowsetlocate_GetRowsAt, + rowsetlocate_GetRowsByBookmark, + rowsetlocate_Hash +}; + +static HRESULT WINAPI rowsetinfo_QueryInterface(IRowsetInfo *iface, REFIID iid, void **obj) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + return IUnknown_QueryInterface((IUnknown *)This, iid, obj); +} + +static ULONG WINAPI rowsetinfo_AddRef(IRowsetInfo *iface) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + return IUnknown_AddRef((IUnknown *)This); +} + +static ULONG WINAPI rowsetinfo_Release(IRowsetInfo *iface) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + return IUnknown_Release((IUnknown *)This); +} + +static HRESULT WINAPI rowsetinfo_GetProperties(IRowsetInfo *iface, const ULONG cPropertyIDSets, + const DBPROPIDSET rgPropertyIDSets[], ULONG *pcPropertySets, + DBPROPSET **prgPropertySets) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI rowsetinfo_GetReferencedRowset(IRowsetInfo *iface, DBORDINAL iOrdinal, REFIID riid, + IUnknown **ppReferencedRowset) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI rowsetinfo_GetSpecification(IRowsetInfo *iface, REFIID riid, IUnknown **ppSpecification) +{ + rowset_proxy *This = impl_from_IRowsetInfo(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IRowsetInfoVtbl rowsetinfo_vtbl = +{ + rowsetinfo_QueryInterface, + rowsetinfo_AddRef, + rowsetinfo_Release, + rowsetinfo_GetProperties, + rowsetinfo_GetReferencedRowset, + rowsetinfo_GetSpecification +}; + +static HRESULT WINAPI accessor_QueryInterface(IAccessor *iface, REFIID iid, void **obj) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + return IUnknown_QueryInterface((IUnknown *)This, iid, obj); +} + +static ULONG WINAPI accessor_AddRef(IAccessor *iface) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + return IUnknown_AddRef((IUnknown *)This); +} + +static ULONG WINAPI accessor_Release(IAccessor *iface) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + return IUnknown_Release((IUnknown *)This); +} + +static HRESULT WINAPI accessor_AddRefAccessor(IAccessor *iface, HACCESSOR hAccessor, DBREFCOUNT *pcRefCount) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI accessor_CreateAccessor(IAccessor *iface, DBACCESSORFLAGS dwAccessorFlags, DBCOUNTITEM cBindings, + const DBBINDING rgBindings[], DBLENGTH cbRowSize, HACCESSOR *phAccessor, + DBBINDSTATUS rgStatus[]) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI accessor_GetBindings(IAccessor *iface, HACCESSOR hAccessor, DBACCESSORFLAGS *pdwAccessorFlags, + DBCOUNTITEM *pcBindings, DBBINDING **prgBindings) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI accessor_ReleaseAccessor(IAccessor *iface, HACCESSOR hAccessor, DBREFCOUNT *pcRefCount) +{ + rowset_proxy *This = impl_from_IAccessor(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IAccessorVtbl accessor_vtbl = +{ + accessor_QueryInterface, + accessor_AddRef, + accessor_Release, + accessor_AddRefAccessor, + accessor_CreateAccessor, + accessor_GetBindings, + accessor_ReleaseAccessor +}; + HRESULT create_rowset_proxy(IWineRowServer *server, IUnknown **obj) { rowset_proxy *proxy; @@ -836,6 +1078,9 @@ HRESULT create_rowset_proxy(IWineRowServer *server, IUnknown **obj) if(!proxy) return E_OUTOFMEMORY; proxy->rowset_vtbl = &rowset_vtbl; + proxy->rowsetlocate_vtbl = &rowsetlocate_vtbl; + proxy->rowsetinfo_vtbl = &rowsetinfo_vtbl; + proxy->accessor_vtbl = &accessor_vtbl; proxy->ref = 1; IWineRowServer_AddRef(server); proxy->server = server;