//-----------------------------------------------------------------------------
// File:			cmdbas.idl
//
// Copyright:		Copyright (c) Microsoft Corporation          
//
// Contents: 		OLE DB interface definition
//
// Comments: 		
//
//-----------------------------------------------------------------------------

#include "idlmulti.h"
//

    REMOTED_INTERFACE(0c733a63-2a1c-11ce-ade5-00aa0044773d)


interface ICommand : IUnknown {

	[local]
	HRESULT Cancel(
	);

	[call_as(Cancel)]
	HRESULT RemoteCancel(
		[out] IErrorInfo ** ppErrorInfoRem
	);

	[local]
	HRESULT Execute(
		[in, annotation("__in_opt")] IUnknown * pUnkOuter,
		[in] REFIID riid,
		[in, out, annotation("__inout_opt")] DBPARAMS * pParams,
		[out, annotation("__out_opt")] DBROWCOUNT * pcRowsAffected,
		[out, iid_is(riid), annotation("__deref_opt_out")] IUnknown ** ppRowset
	);

#ifndef NO_REMOTE

#ifdef _WIN64  //Use casting by ULONG in attribute size_is under 64-bit environment.
	[call_as(Execute)]
	HRESULT RemoteExecute( 
		[in] IUnknown * pUnkOuter,
		[in] REFIID riid,
		[in] HACCESSOR hAccessor,
		[in] DB_UPARAMS cParamSets,
		[in, unique] GUID * pGuid,
		[in] ULONG ulGuidOffset,
		[in, unique] RMTPACK * pInputParams,
		[in, out, unique] RMTPACK * pOutputParams,
		[in] DBCOUNTITEM cBindings,
		[in, unique, size_is((ULONG)cBindings)] DBBINDING * rgBindings,
		[in, out, unique, size_is((ULONG)cBindings)] DBSTATUS * rgStatus,
		[in, out, unique] DBROWCOUNT * pcRowsAffected,
		[in, out, unique, iid_is(riid)] IUnknown ** ppRowset
	);

#else  //No casting by ULONG for 32-bit.

	[call_as(Execute)]
	HRESULT RemoteExecute( 
		[in] IUnknown * pUnkOuter,
		[in] REFIID riid,
		[in] HACCESSOR hAccessor,
		[in] DB_UPARAMS cParamSets,
		[in, unique] GUID * pGuid,
		[in] ULONG ulGuidOffset,
		[in, unique] RMTPACK * pInputParams,
		[in, out, unique] RMTPACK * pOutputParams,
		[in] DBCOUNTITEM cBindings,
		[in, unique, size_is(cBindings)] DBBINDING * rgBindings,
		[in, out, unique, size_is(cBindings)] DBSTATUS * rgStatus,
		[in, out, unique] DBROWCOUNT * pcRowsAffected,
		[in, out, unique, iid_is(riid)] IUnknown ** ppRowset
	);
#endif

#endif

	[local]
	HRESULT GetDBSession(
		[in] REFIID riid,
		[out, iid_is(riid), annotation("__deref_out_opt")] IUnknown ** ppSession
	);

	[call_as(GetDBSession)]
	HRESULT RemoteGetDBSession(
		[in] REFIID riid,
		[out, iid_is(riid)] IUnknown ** ppSession,
		[out] IErrorInfo ** ppErrorInfoRem
	);

}

