2 * Copyright (C) 2012 Alistair Leslie-Hughes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #define NONAMELESSUNION
22 #define NONAMELESSSTRUCT
31 #include "oledb_private.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(oledb
);
38 typedef struct datainit
40 IDataInitialize IDataInitialize_iface
;
45 static inline datainit
*impl_from_IDataInitialize(IDataInitialize
*iface
)
47 return CONTAINING_RECORD(iface
, datainit
, IDataInitialize_iface
);
52 IDBInitialize IDBInitialize_iface
;
53 IDBProperties IDBProperties_iface
;
58 static inline dbinit
*impl_from_IDBInitialize(IDBInitialize
*iface
)
60 return CONTAINING_RECORD(iface
, dbinit
, IDBInitialize_iface
);
63 static inline dbinit
*impl_from_IDBProperties(IDBProperties
*iface
)
65 return CONTAINING_RECORD(iface
, dbinit
, IDBProperties_iface
);
68 static HRESULT WINAPI
dbprops_QueryInterface(IDBProperties
*iface
, REFIID riid
, void **ppvObject
)
70 dbinit
*This
= impl_from_IDBProperties(iface
);
72 return IDBInitialize_QueryInterface(&This
->IDBInitialize_iface
, riid
, ppvObject
);
75 static ULONG WINAPI
dbprops_AddRef(IDBProperties
*iface
)
77 dbinit
*This
= impl_from_IDBProperties(iface
);
79 return IDBInitialize_AddRef(&This
->IDBInitialize_iface
);
82 static ULONG WINAPI
dbprops_Release(IDBProperties
*iface
)
84 dbinit
*This
= impl_from_IDBProperties(iface
);
86 return IDBInitialize_Release(&This
->IDBInitialize_iface
);
89 static HRESULT WINAPI
dbprops_GetProperties(IDBProperties
*iface
, ULONG cPropertyIDSets
,
90 const DBPROPIDSET rgPropertyIDSets
[], ULONG
*pcPropertySets
, DBPROPSET
**prgPropertySets
)
92 dbinit
*This
= impl_from_IDBProperties(iface
);
94 FIXME("(%p)->(%d %p %p %p)\n", This
, cPropertyIDSets
, rgPropertyIDSets
, pcPropertySets
, prgPropertySets
);
99 static HRESULT WINAPI
dbprops_GetPropertyInfo(IDBProperties
*iface
, ULONG cPropertyIDSets
,
100 const DBPROPIDSET rgPropertyIDSets
[], ULONG
*pcPropertyInfoSets
,
101 DBPROPINFOSET
**prgPropertyInfoSets
, OLECHAR
**ppDescBuffer
)
103 dbinit
*This
= impl_from_IDBProperties(iface
);
105 FIXME("(%p)->(%d %p %p %p %p)\n", This
, cPropertyIDSets
, rgPropertyIDSets
, pcPropertyInfoSets
,
106 prgPropertyInfoSets
, ppDescBuffer
);
111 static HRESULT WINAPI
dbprops_SetProperties(IDBProperties
*iface
, ULONG cPropertySets
,
112 DBPROPSET rgPropertySets
[])
114 dbinit
*This
= impl_from_IDBProperties(iface
);
116 FIXME("(%p)->(%d %p)\n", This
, cPropertySets
, rgPropertySets
);
121 static const struct IDBPropertiesVtbl dbprops_vtbl
=
123 dbprops_QueryInterface
,
126 dbprops_GetProperties
,
127 dbprops_GetPropertyInfo
,
128 dbprops_SetProperties
131 static HRESULT WINAPI
dbinit_QueryInterface(IDBInitialize
*iface
, REFIID riid
, void **obj
)
133 dbinit
*This
= impl_from_IDBInitialize(iface
);
134 TRACE("(%p)->(%s, %p)\n", This
, debugstr_guid(riid
), obj
);
138 if(IsEqualIID(riid
, &IID_IUnknown
) ||
139 IsEqualIID(riid
, &IID_IDBInitialize
))
143 else if(IsEqualIID(riid
, &IID_IDBProperties
))
145 *obj
= &This
->IDBProperties_iface
;
149 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
150 return E_NOINTERFACE
;
153 IDBInitialize_AddRef(iface
);
157 static ULONG WINAPI
dbinit_AddRef(IDBInitialize
*iface
)
159 dbinit
*This
= impl_from_IDBInitialize(iface
);
160 TRACE("(%p)\n", This
);
162 return InterlockedIncrement(&This
->ref
);
165 static ULONG WINAPI
dbinit_Release(IDBInitialize
*iface
)
167 dbinit
*This
= impl_from_IDBInitialize(iface
);
170 TRACE("(%p)\n", This
);
172 ref
= InterlockedDecrement(&This
->ref
);
175 HeapFree(GetProcessHeap(), 0, This
);
181 static HRESULT WINAPI
dbinit_Initialize(IDBInitialize
*iface
)
183 dbinit
*This
= impl_from_IDBInitialize(iface
);
185 FIXME("(%p) stub\n", This
);
190 static HRESULT WINAPI
dbinit_Uninitialize(IDBInitialize
*iface
)
192 dbinit
*This
= impl_from_IDBInitialize(iface
);
194 FIXME("(%p) stub\n", This
);
199 static const IDBInitializeVtbl dbinit_vtbl
=
201 dbinit_QueryInterface
,
208 static HRESULT
create_db_init(void **obj
)
216 This
= HeapAlloc(GetProcessHeap(), 0, sizeof(*This
));
217 if(!This
) return E_OUTOFMEMORY
;
219 This
->IDBInitialize_iface
.lpVtbl
= &dbinit_vtbl
;
220 This
->IDBProperties_iface
.lpVtbl
= &dbprops_vtbl
;
223 *obj
= &This
->IDBInitialize_iface
;
228 static HRESULT WINAPI
datainit_QueryInterface(IDataInitialize
*iface
, REFIID riid
, void **obj
)
230 datainit
*This
= impl_from_IDataInitialize(iface
);
231 TRACE("(%p)->(%s, %p)\n", This
, debugstr_guid(riid
), obj
);
235 if(IsEqualIID(riid
, &IID_IUnknown
) ||
236 IsEqualIID(riid
, &IID_IDataInitialize
))
238 *obj
= &This
->IDataInitialize_iface
;
242 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
243 return E_NOINTERFACE
;
246 IDataInitialize_AddRef(iface
);
250 static ULONG WINAPI
datainit_AddRef(IDataInitialize
*iface
)
252 datainit
*This
= impl_from_IDataInitialize(iface
);
253 TRACE("(%p)\n", This
);
255 return InterlockedIncrement(&This
->ref
);
258 static ULONG WINAPI
datainit_Release(IDataInitialize
*iface
)
260 datainit
*This
= impl_from_IDataInitialize(iface
);
263 TRACE("(%p)\n", This
);
265 ref
= InterlockedDecrement(&This
->ref
);
268 HeapFree(GetProcessHeap(), 0, This
);
274 /*** IDataInitialize methods ***/
275 static HRESULT WINAPI
datainit_GetDataSource(IDataInitialize
*iface
, IUnknown
*pUnkOuter
, DWORD dwClsCtx
,
276 LPWSTR pwszInitializationString
, REFIID riid
, IUnknown
**ppDataSource
)
278 datainit
*This
= impl_from_IDataInitialize(iface
);
280 FIXME("(%p)->(%p %d %s %s %p)\n", This
, pUnkOuter
, dwClsCtx
, debugstr_w(pwszInitializationString
),
281 debugstr_guid(riid
), ppDataSource
);
283 if(IsEqualIID(riid
, &IID_IDBInitialize
))
285 return create_db_init( (LPVOID
*)ppDataSource
);
291 static HRESULT WINAPI
datainit_GetInitializationString(IDataInitialize
*iface
, IUnknown
*pDataSource
,
292 boolean fIncludePassword
, LPWSTR
*ppwszInitString
)
294 datainit
*This
= impl_from_IDataInitialize(iface
);
296 FIXME("(%p)->(%p %d %p)\n", This
, pDataSource
, fIncludePassword
, ppwszInitString
);
301 static HRESULT WINAPI
datainit_CreateDBInstance(IDataInitialize
*iface
, REFCLSID clsidProvider
,
302 IUnknown
*pUnkOuter
, DWORD dwClsCtx
, LPWSTR pwszReserved
, REFIID riid
,
303 IUnknown
**ppDataSource
)
305 datainit
*This
= impl_from_IDataInitialize(iface
);
307 FIXME("(%p)->()\n", This
);
312 static HRESULT WINAPI
datainit_RemoteCreateDBInstanceEx(IDataInitialize
*iface
, REFCLSID clsidProvider
,
313 IUnknown
*pUnkOuter
, DWORD dwClsCtx
, LPWSTR pwszReserved
, COSERVERINFO
*pServerInfo
,
314 DWORD cmq
, GUID
**rgpIID
, IUnknown
**rgpItf
, HRESULT
*rghr
)
316 datainit
*This
= impl_from_IDataInitialize(iface
);
318 FIXME("(%p)->()\n", This
);
323 static HRESULT WINAPI
datainit_LoadStringFromStorage(IDataInitialize
*iface
, LPWSTR pwszFileName
,
324 LPWSTR
*ppwszInitializationString
)
326 datainit
*This
= impl_from_IDataInitialize(iface
);
328 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(pwszFileName
), ppwszInitializationString
);
333 static HRESULT WINAPI
datainit_WriteStringToStorage(IDataInitialize
*iface
, LPWSTR pwszFileName
,
334 LPWSTR pwszInitializationString
, DWORD dwCreationDisposition
)
336 datainit
*This
= impl_from_IDataInitialize(iface
);
338 FIXME("(%p)->(%s %s %d)\n", This
, debugstr_w(pwszFileName
), debugstr_w(pwszInitializationString
), dwCreationDisposition
);
344 static const struct IDataInitializeVtbl datainit_vtbl
=
346 datainit_QueryInterface
,
349 datainit_GetDataSource
,
350 datainit_GetInitializationString
,
351 datainit_CreateDBInstance
,
352 datainit_RemoteCreateDBInstanceEx
,
353 datainit_LoadStringFromStorage
,
354 datainit_WriteStringToStorage
357 HRESULT
create_data_init(IUnknown
*outer
, void **obj
)
361 TRACE("(%p)\n", obj
);
363 if(outer
) return CLASS_E_NOAGGREGATION
;
367 This
= HeapAlloc(GetProcessHeap(), 0, sizeof(*This
));
368 if(!This
) return E_OUTOFMEMORY
;
370 This
->IDataInitialize_iface
.lpVtbl
= &datainit_vtbl
;
373 *obj
= &This
->IDataInitialize_iface
;