msdasql: Add ICommandPrepare interface for ICommandText.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alistair Leslie-Hughes 2021-10-31 19:51:15 +11:00 committed by Alexandre Julliard
parent 9bdcf44439
commit 22689f6f8a
2 changed files with 54 additions and 3 deletions

View file

@ -281,6 +281,7 @@ struct command
ICommandProperties ICommandProperties_iface;
IColumnsInfo IColumnsInfo_iface;
IConvertType IConvertType_iface;
ICommandPrepare ICommandPrepare_iface;
LONG refs;
};
@ -304,6 +305,11 @@ static inline struct command *impl_from_IConvertType( IConvertType *iface )
return CONTAINING_RECORD( iface, struct command, IConvertType_iface );
}
static inline struct command *impl_from_ICommandPrepare( ICommandPrepare *iface )
{
return CONTAINING_RECORD( iface, struct command, ICommandPrepare_iface );
}
static HRESULT WINAPI command_QueryInterface(ICommandText *iface, REFIID riid, void **ppv)
{
struct command *command = impl_from_ICommandText( iface );
@ -329,6 +335,10 @@ static HRESULT WINAPI command_QueryInterface(ICommandText *iface, REFIID riid, v
{
*ppv = &command->IConvertType_iface;
}
else if(IsEqualGUID(&IID_ICommandPrepare, riid))
{
*ppv = &command->ICommandPrepare_iface;
}
if(*ppv)
{
@ -553,6 +563,47 @@ static struct IConvertTypeVtbl converttypeVtbl =
converttype_CanConvert
};
static HRESULT WINAPI commandprepare_QueryInterface(ICommandPrepare *iface, REFIID riid, void **out)
{
struct command *command = impl_from_ICommandPrepare( iface );
return ICommandText_QueryInterface(&command->ICommandText_iface, riid, out);
}
static ULONG WINAPI commandprepare_AddRef(ICommandPrepare *iface)
{
struct command *command = impl_from_ICommandPrepare( iface );
return ICommandText_AddRef(&command->ICommandText_iface);
}
static ULONG WINAPI commandprepare_Release(ICommandPrepare *iface)
{
struct command *command = impl_from_ICommandPrepare( iface );
return ICommandText_Release(&command->ICommandText_iface);
}
static HRESULT WINAPI commandprepare_Prepare(ICommandPrepare *iface, ULONG runs)
{
struct command *command = impl_from_ICommandPrepare( iface );
FIXME("%p, %u\n", command, runs);
return E_NOTIMPL;
}
static HRESULT WINAPI commandprepare_Unprepare(ICommandPrepare *iface)
{
struct command *command = impl_from_ICommandPrepare( iface );
FIXME("%p\n", command);
return E_NOTIMPL;
}
struct ICommandPrepareVtbl commandprepareVtbl =
{
commandprepare_QueryInterface,
commandprepare_AddRef,
commandprepare_Release,
commandprepare_Prepare,
commandprepare_Unprepare
};
static HRESULT WINAPI createcommand_CreateCommand(IDBCreateCommand *iface, IUnknown *outer, REFIID riid,
IUnknown **out)
{
@ -573,6 +624,7 @@ static HRESULT WINAPI createcommand_CreateCommand(IDBCreateCommand *iface, IUnkn
command->ICommandProperties_iface.lpVtbl = &commonpropsVtbl;
command->IColumnsInfo_iface.lpVtbl = &columninfoVtbl;
command->IConvertType_iface.lpVtbl = &converttypeVtbl;
command->ICommandPrepare_iface.lpVtbl = &commandprepareVtbl;
command->refs = 1;
hr = ICommandText_QueryInterface(&command->ICommandText_iface, riid, (void**)out);

View file

@ -134,9 +134,8 @@ static void test_command_interfaces(IUnknown *cmd)
IConvertType_Release(convertype);
hr = IUnknown_QueryInterface(cmd, &IID_ICommandPrepare, (void**)&commandprepare);
todo_wine ok(hr == S_OK, "got 0x%08x\n", hr);
if (hr == S_OK)
ICommandPrepare_Release(commandprepare);
ok(hr == S_OK, "got 0x%08x\n", hr);
ICommandPrepare_Release(commandprepare);
hr = IUnknown_QueryInterface(cmd, &IID_IColumnsInfo, (void**)&colinfo);
ok(hr == S_OK, "got 0x%08x\n", hr);