import "wtypes.idl";
import "oaidl.idl";
import "oledb.idl";
#include "idlmulti.h"

typedef DWORD DBOBJTYPE;
enum DBTYPE_ENUM {
	DBJETOBJECT_TABLE = 0x0001,
	DBJETOBJECT_INDEX = 0x0002,
	DBJETOBJECT_VIEWS = 0x0004
	};

typedef DWORD USERATTRIBUTESFLAGS;

enum USERATTRIBUTESFLAGS_ENUM {
	DBJETOLEDB_USERATTRIBUTES_ALLCOLLECTIONS = 1,
	DBJETOLEDB_USERATTRIBUTES_INHERITED = 2,
	};


// IDBUserAttributes:
// This interface exposes the ability to talk to the Jet Properties interface
REMOTED_INTERFACE(cb9497b0-20b8-11d2-a4dc-00c04f991c78)

interface IDBUserAttributes : IUnknown {

	HRESULT CreateObject( 
			[in]	DBID*           pParentID,
			[in]   DBID*           pObjectID,
			[in]   DBOBJTYPE       dwType);

		HRESULT DeleteObject( 
		     [in]   DBID*           pParentID,
			 [in]   DBID*           pObjectID);

		 HRESULT RenameObject( 
	     [in]       DBID*           pParentID,
			 [in]   DBID*           pObjectID,
			 [in]   LPWSTR          pwszNewName);

		 HRESULT DeleteAttribute( 
	     [in]       DBID*           pParentID,
			 [in]   DBID*           pObjectID,
			 [in]   DBID*           pSubObjectID,
			 [in]   DBID*           pAttributeID);
	
		 HRESULT SetAttributeValue( 
	     [in]       DBID*           pParentID,
			 [in]   DBID*           pObjectID,
			 [in]   DBID*           pSubObjectID,
			 [in]	DBID*           pAttributeID,
			 [in]   VARIANT         vValue,
			 [in]	ULONG			grbit);

		 HRESULT GetAttributeValue( 
			[in]		DBID*           pParentID,
			[in]		DBID*           pObjectID,
			[in]		DBID*           pSubObjectID,
			[in]		DBID*           pAttributeID,
			[in, out]	VARIANT*        pvValue,
			[in]		ULONG			grbit);

		 HRESULT GetAttributeRowset( 
			[in]								IUnknown		*pUnkOuter,
			[in]								WCHAR			*pwszParentID,
			[in]								WCHAR			*pwszObjectID,
			[in]								WCHAR			*pwszSubObjectID,
			[in]								WCHAR			*pwszAttributeID,
			[in]								ULONG			dwFlags,
			[in]								ULONG			cPropertySets, 
			[in, out, size_is(cPropertySets)]	DBPROPSET		*rgPropertySets,
			[in]								REFIID			riid,
			[out, iid_is(riid)]					IUnknown		**ppRowset);
    }




// IDBUtility:
// This routine exposes compaction and repair routines from the
// DSO level.  Users must have set a valid Userid/pw in their
// properties, just as in IDBDataSourceAdmin, to make this 
// function properly.  

// There is no Callback support in these routines, nor is 
// there an exposed way to pass grbits - if you really need these,
// email <conorc> and plead your case
REMOTED_INTERFACE(2a4b6284-eeb4-11d1-a4d9-00c04f991c78)
interface IJetCompact : IUnknown {

		HRESULT Compact
			( 
			[in] ULONG cPropertySets,
			[in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[]
			);
    }


// IIdle - used to expose the JetIdle inteface
// Appears off the session object in OLEDB
REMOTED_INTERFACE(f497cfc8-8ed8-11d1-9f09-00c04fc2c2e0)
interface IIdle : IUnknown 
	{
		HRESULT Idle(
			[in]	ULONG		dwFlags
			);
	}