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

#include "idlmulti.h"


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


interface IScopedOperations : IBindResource
{

    typedef DWORD DBCOPYFLAGS;

    enum DBCOPYFLAGSENUM {
        DBCOPY_ASYNC                = 0x00000100,
        DBCOPY_REPLACE_EXISTING     = 0x00000200,
	    DBCOPY_ALLOW_EMULATION      = 0x00000400,
        DBCOPY_NON_RECURSIVE        = 0x00000800,
        DBCOPY_ATOMIC               = 0x00001000
        };

    typedef DWORD DBMOVEFLAGS;

    enum DBMOVEFLAGSENUM {
        DBMOVE_REPLACE_EXISTING     = 0x00000001,
        DBMOVE_ASYNC                = 0x00000100,
	    DBMOVE_DONT_UPDATE_LINKS    = 0x00000200,
	    DBMOVE_ALLOW_EMULATION	    = 0x00000400,
        DBMOVE_ATOMIC               = 0x00001000
        };

    typedef DWORD DBDELETEFLAGS;

    enum DBDELETEFLAGSENUM {
        DBDELETE_ASYNC              = 0x00000100,
        DBDELETE_ATOMIC             = 0x00001000
        };

	[local]
	HRESULT Copy(
    [in]                            DBCOUNTITEM     cRows,
    [in, size_is((ULONG)cRows)]            LPCOLESTR       rgpwszSourceURLs[],
    [in, size_is((ULONG)cRows)]            LPCOLESTR       rgpwszDestURLs[],
    [in]                            DWORD           dwCopyFlags,
	[in, unique]                    IAuthenticate*  pAuthenticate,
    [in, out, size_is((ULONG)cRows)]       DBSTATUS        rgdwStatus[],
	[out, size_is((ULONG)cRows)]			LPOLESTR		rgpwszNewURLs[],
	[out]							OLECHAR			**ppStringsBuffer
    );

#ifndef NO_REMOTE

	[call_as(Copy)]
	HRESULT RemoteCopy(
		[in] DBCOUNTITEM cRows,
		[in, size_is((ULONG)cRows)] LPCOLESTR * rgpwszSourceURLs,
		[in, size_is((ULONG)cRows)] LPCOLESTR * rgpwszDestURLs,
		[in] DWORD dwCopyFlags,
		[in] IAuthenticate * pAuthenticate,
		[out, size_is((ULONG)cRows)] DBSTATUS * rgdwStatus,
		[out, size_is(,(ULONG)cRows)] DBBYTEOFFSET ** prgulNewURLOffsets,
		[in, out] ULONG * pcbStringsBuffer,
		[in, out, unique, size_is(,*pcbStringsBuffer)] OLECHAR ** ppStringsBuffer
	);

#endif

	[local]
	HRESULT Move(
    [in]                            DBCOUNTITEM     cRows,
    [in, size_is((ULONG)cRows)]            LPCOLESTR       rgpwszSourceURLs[],
    [in, size_is((ULONG)cRows)]            LPCOLESTR       rgpwszDestURLs[],
    [in]                            DWORD           dwMoveFlags,
	[in, unique]                    IAuthenticate*  pAuthenticate,
    [in, out, size_is((ULONG)cRows)]       DBSTATUS        rgdwStatus[],
	[out, size_is((ULONG)cRows)]			LPOLESTR		rgpwszNewURLs[],
	[out]							OLECHAR			**ppStringsBuffer
    );

#ifndef NO_REMOTE

	[call_as(Move)]
	HRESULT RemoteMove(
		[in] DBCOUNTITEM cRows,
		[in, size_is((ULONG)cRows)] LPCOLESTR * rgpwszSourceURLs,
		[in, size_is((ULONG)cRows)] LPCOLESTR * rgpwszDestURLs,
		[in] DWORD dwMoveFlags,
		[in] IAuthenticate * pAuthenticate,
		[out, size_is((ULONG)cRows)] DBSTATUS * rgdwStatus,
		[out, size_is(,(ULONG)cRows)] DBBYTEOFFSET ** prgulNewURLOffsets,
		[in, out] ULONG * pcbStringsBuffer,
		[in, out, unique, size_is(,*pcbStringsBuffer)] OLECHAR ** ppStringsBuffer
	);

#endif

	[local]
	HRESULT Delete (
    [in]                            DBCOUNTITEM           cRows,
    [in, size_is((ULONG)cRows)]            LPCOLESTR       rgpwszURLs[],
    [in]                            DWORD           dwDeleteFlags,
    [in, out, size_is((ULONG)cRows)]       DBSTATUS        rgdwStatus[]
    );

#ifndef NO_REMOTE

	[call_as(Delete)]
	HRESULT RemoteDelete(
		[in] DBCOUNTITEM cRows,
		[in, size_is((ULONG)cRows)] LPCOLESTR * rgpwszURLs,
		[in] DWORD dwDeleteFlags,
		[out, size_is((ULONG)cRows)] DBSTATUS * rgdwStatus
		);

#endif

	[local]
	HRESULT OpenRowset(
	[in]							IUnknown		*pUnkOuter,
	[in, unique]					DBID			*pTableID,
	[in, unique]					DBID			*pIndexID,
	[in]							REFIID			riid,
	[in]							ULONG			cPropertySets,
	[in, out, size_is(cPropertySets)] DBPROPSET		rgPropertySets[],
	[out, iid_is(riid)]				IUnknown		**ppRowset
	);

#ifndef NO_REMOTE

	[call_as(OpenRowset)]
	HRESULT RemoteOpenRowset(
		[in] IUnknown * pUnkOuter,
		[in, unique] DBID * pTableID,
		[in, unique] DBID * pIndexID,
		[in] REFIID riid,
		[in] ULONG cPropertySets,
		[in, unique, size_is(cPropertySets)] DBPROPSET * rgPropertySets,
		[in, out, unique, iid_is(riid)] IUnknown ** ppRowset,
		[in] ULONG cTotalProps,
		[out, size_is(cTotalProps)] DBPROPSTATUS * rgPropStatus
	);
#endif

};