//-----------------------------------------------------------------------------
// File:		adomd.idl
//
// Copyright:	Copyright (c) Microsoft Corporation           
//
// Contents:	
//			
// 
// Comments:	IDL source for adomd.dll
//
//-----------------------------------------------------------------------------

#include "adomd.hh"
#include "adords.hh"
#include "adodef.h"

// Forwards
interface       ICatalog;
coclass         Catalog;

interface       ICellset;
coclass			Cellset;

interface       Cell;
interface       Axis;
interface       Position;
interface       Member;
interface       Level;
interface       CubeDef;
interface       Dimension;
interface       Hierarchy;
interface       Axes;
interface       Positions;
interface       Members;
interface       CubeDefs;
interface       Dimensions;
interface       Hierarchies;
interface       Levels;

#define UUIID_EnumMemberType uuid(000002AE-0000-0010-8000-00AA006D2EA4)
#define UUIID_EnumObjectType uuid(C23BBD43-E494-4d00-B4D1-6C9A2CE17CE3)

#define DISPID_COLLECT  ( -8 )
#define DEFAULT_METHOD id(0)
#define CONNECTION_BASEDISPID   1
cpp_quote("#define TARGET_IS_NT40_OR_LATER   1")


[
	ADOMD_TYPELIB_UUID,
	version(ADOMD_VERSION),
	helpfile(ADOMD_HELPFILE),
	helpstring(ADOMD_LIBRARYNAME)
]
library ADOMD
{
	importlib("stdole32.tlb");
	importlib("ado10.tlb");

	/************************************ Enums **********************************************/

	typedef [
		helpcontext(amMemberTypeEnum),
		UUIID_EnumMemberType
		]
	enum MemberTypeEnum {
		[helpcontext(amMemberUnknown)]	adMemberUnknown	= 0x0000,
		[helpcontext(amMemberRegular)]	adMemberRegular	= 0x0001,
		[helpcontext(amMemberAll)]		adMemberAll		= 0x0002,
		[helpcontext(amMemberMeasure)]	adMemberMeasure	= 0x0003,
		[helpcontext(amMemberFormula)]	adMemberFormula	= 0x0004
	} MemberTypeEnum;

	typedef [
		helpcontext(amSchemaObjectTypeEnum),
		UUIID_EnumObjectType
		]
	enum SchemaObjectTypeEnum
	{
		[helpcontext(amObjectTypeDimension)]	adObjectTypeDimension=1,
		[helpcontext(amObjectTypeHierarchy)]	adObjectTypeHierarchy=2,
		[helpcontext(amObjectTypeLevel)]		adObjectTypeLevel=3,
		[helpcontext(amObjectTypeMember)]		adObjectTypeMember=4
	} SchemaObjectTypeEnum;


	/******************************* Interfaces **********************************************/

	[
		object,
		uuid(228136B1-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Catalog Interface"),
		helpcontext(ammthCatalog),
		pointer_default(unique)
	]
	interface ICatalog : IDispatch
	{
		import "oaidl.idl";

 		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

		[
			propputref,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[in] IDispatch *pconn	);
  
		[
			propput,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[in] BSTR bstrConn	);

		[
			propget,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[out, retval] IDispatch **ppConn	);

 		[
			propget,
			DEFAULT_METHOD,
			helpcontext(amproCubeDefs)
		]
		HRESULT CubeDefs( [out, retval] CubeDefs **ppvObject );
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281372A-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Cellset Interface"),
		helpcontext(ammthCellset),
		pointer_default(unique)
	]
	interface ICellset : IDispatch
	{
		import "oaidl.idl";

		[
			propget, 
			vararg,
			DEFAULT_METHOD,
			helpcontext(ammthItem)
		]
		HRESULT Item(	[in] SAFEARRAY(VARIANT)* idx, 
						[out, retval] Cell **ppvObject	);

		[
			helpcontext(ammthOpen)
		]
		HRESULT Open(	[in, optional] VARIANT DataSource,
						[in, optional] VARIANT ActiveConnection	);
		[
			helpcontext(ammthClose)
		]
		HRESULT Close();

 		[
			propputref,
			helpcontext(amproSource)
		]
		HRESULT Source([in] IDispatch *pcmd);

 		[
			propput,
			helpcontext(amproSource)
		]
		HRESULT Source(	[in] BSTR bstrCmd	);

		[
			propget,
			helpcontext(amproSource)
		]
		HRESULT Source(	[out, retval] VARIANT *pvSource	);


		[
			propputref,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[in] IDispatch *pconn	);
  
		[
			propput,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[in] BSTR bstrConn	);

		[
			propget,
			helpcontext(amproActiveConnection)
		]
		HRESULT ActiveConnection(	[out, retval] IDispatch **ppConn	);

		[
			propget,
			helpcontext(amproState)
		]
		HRESULT State([out, retval] LONG *plState); 

 		[
			propget,
			helpcontext(amproAxes)
		]
		HRESULT Axes( [out, retval] Axes **ppvObject );

 		[
			propget,
			helpcontext(amproFilterAxis)
		]
		HRESULT FilterAxis( [out, retval] Axis **ppvObject );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281372E-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Cell Interface"),
		helpcontext(ammthCell),
		pointer_default(unique)
	]
	interface Cell : IDispatch
	{
		import "oaidl.idl";


		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(amproValue)
		]
		HRESULT Value( [out, retval] VARIANT *pvar );

 		[
			propput,
			helpcontext(amproValue)
		]
		HRESULT Value(	[in] VARIANT var	);

 		[
			propget,
			helpcontext(amcolPositions)
		]
		HRESULT Positions( [out, retval] Positions **ppvObject );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

 		[
			propget,
			helpcontext(amproFormattedValue)
		]
		HRESULT FormattedValue( [out, retval] BSTR *pbstr );

 		[
			propput,
			helpcontext(amproFormattedValue)
		]
		HRESULT FormattedValue(	[in] BSTR bstr	);

		[
			propget,
			helpcontext(amproOrdinalCell)
		]
		HRESULT Ordinal(	[out, retval] long *pl	);

	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813732-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Axis Interface"),
		helpcontext(ammthAxis),
		pointer_default(unique)
	]
	interface Axis : IDispatch
	{
		import "oaidl.idl";

 		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproDimensionCount)
		]
		HRESULT DimensionCount(	[out, retval] long *pl	);

 		[
			propget,,
			helpcontext(amcolPositions),
			DEFAULT_METHOD
		]
		HRESULT Positions( [out, retval] Positions **ppvObject );
 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813734-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Position Interface"),
		helpcontext(ammthPosition),
		pointer_default(unique)
	]
	interface Position : IDispatch
	{
		import "oaidl.idl";

 		[
			propget,
			helpcontext(amproOrdinalPosition)
		]
		HRESULT Ordinal(	[out, retval] long *pl	);

		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(amproMembers)
		]
		HRESULT Members( [out, retval] Members **ppvObject );
	};


//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813736-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Member Interface"),
		helpcontext(ammthMember),
		pointer_default(unique)
	]
	interface Member : IDispatch
	{
		import "oaidl.idl";

 		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproUniqueName)
		]
		HRESULT UniqueName( [out, retval] BSTR *pbstr );

 		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(amproCaption)
		]
		HRESULT Caption( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproDescription)
		]
		HRESULT Description( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproParent)
		]
		HRESULT Parent(	[out, retval] Member **ppvObject	);

		[
			propget,
			helpcontext(amproLevelDepth)
		]
		HRESULT LevelDepth(	[out, retval] long *pl	);

 		[
			propget,
			helpcontext(amproLevelName)
		]
		HRESULT LevelName( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

		[
			propget,
			helpcontext(amproType)
		]
		HRESULT Type( [out, retval] MemberTypeEnum  *ptype );

		[
			propget,
			helpcontext(amproChildCount)
		]
		HRESULT ChildCount(	[out, retval] long *pl	);

		[
			propget,
			helpcontext(amproDrilledDown)
		]
		HRESULT DrilledDown( [out, retval] VARIANT_BOOL *pf	);

		[
			propget,
			helpcontext(amproParentSameAsPrev)
		]
		HRESULT ParentSameAsPrev( [out, retval] VARIANT_BOOL *pf	);

 		[
			propget,
			helpcontext(amproChildren)
		]
		HRESULT Children( [out, retval] Members **ppvObject );
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281373A-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Level Interface"),
		helpcontext(ammthLevel),
		pointer_default(unique)
	]
	interface Level : IDispatch
	{
		import "oaidl.idl";

		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproUniqueName)
		]
		HRESULT UniqueName( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproCaption)
		]
		HRESULT Caption( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproDescription)
		]
		HRESULT Description( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproDepth)
		]
		HRESULT Depth([out, retval] short *pw); 

		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

 		[
			propget,
			DEFAULT_METHOD,
			helpcontext(amproMembers)
		]
		HRESULT Members( [out, retval] Members **ppvObject );
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281373E-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("CubeDef25 Interface"),
		helpcontext(ammthCubeDef25),
		pointer_default(unique)
	]
	interface CubeDef25 : IDispatch
	{
		import "oaidl.idl";
	
		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproDescription)
		]
		HRESULT Description( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

 		[
			propget,
			DEFAULT_METHOD,
			helpcontext(amproDimensions)
		]
		HRESULT Dimensions( [out, retval] Dimensions **ppvObject );
		
	};

	[
		object,
		uuid(DA16A34A-7B7A-46fd-AD9D-66DF1E699FA1),
		dual,
		helpstring("CubeDef Interface"),
		helpcontext(ammthCubeDef),
		pointer_default(unique)
	]
	interface CubeDef : CubeDef25
	{
		[
			helpcontext(ammthGetSchemaObject)
		]
		HRESULT GetSchemaObject([in]SchemaObjectTypeEnum eObjType,[in]BSTR bsUniqueName,[out,retval]IDispatch **ppObj);
	};
//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813742-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Dimension Interface"),
		helpcontext(ammthDimension),
		pointer_default(unique)
	]
	interface Dimension : IDispatch
	{
		import "oaidl.idl";

		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproUniqueName)
		]
		HRESULT UniqueName( [out, retval] BSTR *pbstr );

		[
			propget,
			helpcontext(amproDescription)
		]
		HRESULT Description( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );

 		[
			propget,
			DEFAULT_METHOD,
			helpcontext(amproHierarchies)
		]
		HRESULT Hierarchies( [out, retval] Hierarchies **ppvObject );
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813746-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Hierarchy Interface"),
		helpcontext(ammthHierarchy),
		pointer_default(unique)
	]
	interface Hierarchy : IDispatch
	{
		import "oaidl.idl";

		[
			propget,
			helpcontext(amproName)
		]
		HRESULT Name( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(amproUniqueName)
		]
		HRESULT UniqueName( [out, retval] BSTR *pbstr );


		[
			propget,
			helpcontext(amproDescription)
		]
		HRESULT Description( [out, retval] BSTR *pbstr );

 		[
			propget,
			helpcontext(mdcolProperties)
		]
		HRESULT Properties( [out, retval] ADODB.Properties **ppvObject );
		

 		[
			propget,
			DEFAULT_METHOD,
			helpcontext(amcolLevels)
		]
		HRESULT Levels( [out, retval] Levels **ppvObject );
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813751-8BD3-11D0-B4EF-00A0C9138CA4),
		dual,
		helpstring("Collection Interface"),
		pointer_default(unique)
	]
	interface MD_Collection : IDispatch
	{
		[
			helpcontext(ammthRefresh)
		]
		HRESULT Refresh();

		[
			restricted, 
			id(-4)
		]
		HRESULT _NewEnum( [out, retval] IUnknown **ppvObject );

		[
			propget,
			helpcontext(amproCount)
		]
		HRESULT Count( [out, retval]long *c );
	}


//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813757-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Members collection"),
		helpcontext(amcolMembers),
		pointer_default(unique)
	]
	interface Members : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Member **ppvObject
			);
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813758-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Levels collection"),
		helpcontext(ammthLevels),
		pointer_default(unique)
	]
	interface Levels : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Level **ppvObject
			);
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(22813759-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Axes collection"),
		helpcontext(amcolAxes),
		pointer_default(unique)
	]
	interface Axes : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Axis **ppvObject
			);
	}


//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281375A-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Positions collection"),
		helpcontext(ammthPositions),
		pointer_default(unique)
	]
	interface Positions : MD_Collection
	{
		import "oaidl.idl";	   //..

		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Position **ppvObject
			);
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281375B-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Hierarchies collection"),
		helpcontext(amcolHierarchies),
		pointer_default(unique)
	]
	interface Hierarchies : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Hierarchy **ppvObject
			);
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281375C-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("Dimensions collection"),
		helpcontext(amcolDimensions),
		pointer_default(unique)
	]
	interface Dimensions : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Dimension **ppvObject
			);
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(2281375D-8BD3-11D0-B4EF-00A0C9138CA4),
		dual, 
	    helpstring("CubeDefs collection"),
		helpcontext(amcolCubeDefs),
		pointer_default(unique)
	]
	interface CubeDefs : MD_Collection
	{
		import "oaidl.idl";	   //..
		[
			propget, 
			DEFAULT_METHOD,
			helpcontext(ammthItemCol)
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] CubeDef **ppvObject
			);
	}
	

	/******************************* Coclasses **********************************************/

	[
		uuid(228136B0-8BD3-11D0-B4EF-00A0C9138CA4),
		helpstring("ADOMD Catalog Class"),
		helpcontext(ammthCatalog)
	]
	coclass Catalog
	{
		[default] interface ICatalog;
	};

//---------------------------------------------------------------------------------------------

	[
		uuid(228136B8-8BD3-11D0-B4EF-00A0C9138CA4),
		helpstring("ADOMD Cellset Class"),
		helpcontext(ammthCellset)
	]
	coclass Cellset
	{
		[default] interface ICellset;
	};
};

