Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/msdasql/session.c | 52 +++++++++++++++++++++++++++++++++++ dlls/msdasql/tests/provider.c | 5 ++-- 2 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/dlls/msdasql/session.c b/dlls/msdasql/session.c index 3ee4b72a1d1..da148fd7ca6 100644 --- a/dlls/msdasql/session.c +++ b/dlls/msdasql/session.c @@ -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); diff --git a/dlls/msdasql/tests/provider.c b/dlls/msdasql/tests/provider.c index 7d14928e50b..bb624bd9848 100644 --- a/dlls/msdasql/tests/provider.c +++ b/dlls/msdasql/tests/provider.c @@ -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);