#ifndef SQLNS_DEF_H_

#ifdef  DO_SQLNS_ODL_CONSTANTS_
#define DONE_SQLNS_ODL_CONSTANTS_

#ifndef SQLNSVersion_Major
	#define SQLNSVersion_Major 7
	#define SQLNSVersion_Minor 0
#endif // SQLNSVersion_Major

/////////////////////////////////////////////////////////////////////////////////////////
// Constant enumerations.
/////////////////////////////////////////////////////////////////////////////////////////

#define IID_ISQLNamespace 00026f20-EB1C-11cf-AE6E-00AA004A34D5
#define IID_ISQLNamespaceObject 00026f21-EB1C-11cf-AE6E-00AA004A34D5
#define IID_ISQLNamespaceCommand 00026f22-EB1C-11cf-AE6E-00AA004A34D5
#define IID_ISQLNamespaceCommands 00026f23-EB1C-11cf-AE6E-00AA004A34D5
#define IID_IReplicationCustomization 00026f24-EB1C-11cf-AE6E-00AA004A34D5

#define LIBID_SQLNamespace 00026f30-EB1C-11cf-AE6E-00AA004A34D5
#define CLSID_SQLNamespace 00026f00-EB1C-11cf-AE6E-00AA004A34D5
#define CLSID_SQLNamespaceInternal 00026f10-EB1C-11cf-AE6E-00AA004A34D5


#endif //DO_SQLNS_ODL_CONSTANTS_


#ifdef DO_HELP_CONSTANTS_

//interfaces
#define H_NamespaceLibrary		100
#define H_Namespace				200
#define H_NamespaceObject		400
#define H_NamespaceCommand		600
#define H_NamespaceCommands		800

//enums
#define H_SQLNSRootType			2000
#define H_SQLNSObjectType		2200
#define H_SQLNSModality			2400
#define H_SQLNSCommandID		2600
#define H_SQLNSErrors			2800

#endif //DO_HELP_CONSTANTS_



#ifdef DO_ODL_TYPDEFS_


// To avoid the need to cast on bitwise operations (which defeats typesafety anyway),
// define the datatype as DWORD for C/CPP.  OleAut languages don't do typechecking
// and organize by the enum name.
#ifdef SQLNS_ODL_
	#define SQLNS_ENUM_BEGIN(tdef, hstring)	[helpcontext(H_##tdef), helpstring(hstring)] enum
		// item = value, ...
	#define SQLNS_ENUM_END(tdef)				tdef, *LP##tdef
#else
	#define SQLNS_ENUM_BEGIN(tdef, hstring)	DWORD tdef, *LP##tdef; enum tag##tdef
		// item = value, ...
	#define SQLNS_ENUM_END(tdef)				
#endif


typedef SQLNS_ENUM_BEGIN(SQLNSRootType, "The type of object to set as root")
{
	SQLNSRootType_DefaultRoot		= 0x0000,
	SQLNSRootType_ServerGroup		= 0x0001,
	SQLNSRootType_Server			= 0x0002,
	SQLNSRootType_Database			= 0x0003
} SQLNS_ENUM_END(SQLNSRootType);

typedef SQLNS_ENUM_BEGIN(SQLNSObjectType, "The type of object")
{
	SQLNSOBJECTTYPE_ROOT				= 0x0000,
	SQLNSOBJECTTYPE_EMPTY,
	SQLNSOBJECTTYPE_SERVER_GROUP,
	SQLNSOBJECTTYPE_SERVER,
	SQLNSOBJECTTYPE_DATABASES,
	SQLNSOBJECTTYPE_DATABASE,
    SQLNSOBJECTTYPE_MANAGEMENT,
    SQLNSOBJECTTYPE_SECURITY,
    SQLNSOBJECTTYPE_SERVICES,
	SQLNSOBJECTTYPE_LOGINS,
	SQLNSOBJECTTYPE_LOGIN,
	SQLNSOBJECTTYPE_BACKUPDEVICES,
	SQLNSOBJECTTYPE_BACKUPDEVICE,
	SQLNSOBJECTTYPE_DATABASE_PUBLICATIONS,
	SQLNSOBJECTTYPE_DATABASE_PUBLICATION,
	SQLNSOBJECTTYPE_DATABASE_PUB_SUBSCRIPTION,
	SQLNSOBJECTTYPE_DATABASE_PULL_SUBSCRIPTIONS,
	SQLNSOBJECTTYPE_DATABASE_PULL_SUBSCRIPTION,
	SQLNSOBJECTTYPE_DATABASE_USERS,
	SQLNSOBJECTTYPE_DATABASE_USER,
	SQLNSOBJECTTYPE_DATABASE_ROLES,
	SQLNSOBJECTTYPE_DATABASE_ROLE,
	SQLNSOBJECTTYPE_DATABASE_DIAGRAMS,
	SQLNSOBJECTTYPE_DATABASE_DIAGRAM,
	SQLNSOBJECTTYPE_DATABASE_TABLES,
	SQLNSOBJECTTYPE_DATABASE_TABLE,
	SQLNSOBJECTTYPE_DATABASE_VIEWS,
	SQLNSOBJECTTYPE_DATABASE_VIEW,
	SQLNSOBJECTTYPE_DATABASE_SPS,
	SQLNSOBJECTTYPE_DATABASE_SP,
	SQLNSOBJECTTYPE_DATABASE_EXTENDED_SPS,
	SQLNSOBJECTTYPE_DATABASE_EXTENDED_SP,
	SQLNSOBJECTTYPE_DATABASE_RULES,
	SQLNSOBJECTTYPE_DATABASE_RULE,
	SQLNSOBJECTTYPE_DATABASE_DEFAULTS,
	SQLNSOBJECTTYPE_DATABASE_DEFAULT,
	SQLNSOBJECTTYPE_DATABASE_UDDTS,								
	SQLNSOBJECTTYPE_DATABASE_UDDT,
	SQLNSOBJECTTYPE_JOBSERVER,
	SQLNSOBJECTTYPE_SQLMAIL,
	SQLNSOBJECTTYPE_DTC,
    SQLNSOBJECTTYPE_INDEXSERVER,
    SQLNSOBJECTTYPE_INDEXSERVER_CATALOGS,
    SQLNSOBJECTTYPE_INDEXSERVER_CATALOG,
	SQLNSOBJECTTYPE_ERRORLOGS,
	SQLNSOBJECTTYPE_ERRORLOG,
	SQLNSOBJECTTYPE_ERRORLOGENTRY,
	SQLNSOBJECTTYPE_ALERTS,
	SQLNSOBJECTTYPE_OPERATORS,
	SQLNSOBJECTTYPE_MSX_JOBS,
	SQLNSOBJECTTYPE_LOCAL_JOBS,
	SQLNSOBJECTTYPE_MULTI_JOBS,
	SQLNSOBJECTTYPE_LOCAL_JOB,
	SQLNSOBJECTTYPE_MULTI_JOB,
	SQLNSOBJECTTYPE_REMOTESERVERS,
	SQLNSOBJECTTYPE_LINKEDSERVERS,
	SQLNSOBJECTTYPE_SERVERROLES,
	SQLNSOBJECTTYPE_SERVERROLE,
	SQLNSOBJECTTYPE_ALERT,
	SQLNSOBJECTTYPE_OPERATOR,
	SQLNSOBJECTTYPE_REMOTESERVER,
	SQLNSOBJECTTYPE_LINKEDSERVER,
	SQLNSOBJECTTYPE_LINKEDSERVER_TABLES,
	SQLNSOBJECTTYPE_LINKEDSERVER_TABLE,
	SQLNSOBJECTTYPE_REPLICATION,
	SQLNSOBJECTTYPE_REPLICATION_PUBLISHERS,
	SQLNSOBJECTTYPE_REPLICATION_PUBLISHER,
	SQLNSOBJECTTYPE_REPLICATION_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_REPORTS,
	SQLNSOBJECTTYPE_REPLICATION_ALERTS,
	SQLNSOBJECTTYPE_REPLICATION_SUBSCRIPTION,
	// do not add between here and SQLNSOBJECTTYPE_REPLICATION_MERGE_AGENTS
	SQLNSOBJECTTYPE_REPLICATION_PUBLICATION,
	SQLNSOBJECTTYPE_REPLICATION_SNAPSHOT_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_LOGREADER_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_DISTRIBUTION_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_MERGE_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_MISC_AGENTS,
	//
	SQLNSOBJECTTYPE_REPLICATION_SNAPSHOT_AGENT,
	SQLNSOBJECTTYPE_REPLICATION_LOGREADER_AGENT,
	SQLNSOBJECTTYPE_REPLICATION_DISTRIBUTION_AGENT,
	SQLNSOBJECTTYPE_REPLICATION_MERGE_AGENT,
	SQLNSOBJECTTYPE_REPLICATION_MISC_AGENT,
	SQLNSOBJECTTYPE_REPLICATION_REPORT,
	SQLNSOBJECTTYPE_DTSPKGS,
	SQLNSOBJECTTYPE_DTS_LOCALPKGS,
	SQLNSOBJECTTYPE_DTS_REPOSPKGS,
	SQLNSOBJECTTYPE_DTS_METADATA,
	SQLNSOBJECTTYPE_DTSPKG,
	SQLNSOBJECTTYPE_DB_MAINT_PLANS,
	SQLNSOBJECTTYPE_DB_MAINT_PLAN,
  SQLNSOBJECTTYPE_WEBASSISTANTJOBS,
  SQLNSOBJECTTYPE_WEBASSISTANTJOB,
    SQLNSOBJECTTYPE_CURRENTACTIVITY,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_PROCESSINFO,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_PROCESSINFO_INFO,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_LOCKEDPROCESSES,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_SPID,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_SPID_INFO,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_LOCKEDOBJECTS,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_LOCKEDOBJECT,
    SQLNSOBJECTTYPE_CURRENTACTIVITY_LOCKEDOBJECT_INFO,
	SQLNSOBJECTTYPE_DATABASE_UDFS,
	SQLNSOBJECTTYPE_DATABASE_UDF,
    SQLNSOBJECTTYPE_PROFILER,
    SQLNSOBJECTTYPE_PROFILER_TRACE,
	SQLNSOBJECTTYPE_REPLICATION_MONITOR_GROUP,
	SQLNSOBJECTTYPE_REPLICATION_QUEUEREADER_AGENTS,
	SQLNSOBJECTTYPE_REPLICATION_QUEUEREADER_AGENT,
  SQLNSOBJECTTYPE_LOGSHIPPING_MONITORS,
  SQLNSOBJECTTYPE_LOGSHIPPING_MONITOR,
	SQLNSOBJECTTYPE_REPLICATION_FOLDER,
    SQLNSOBJECTTYPE_PUBLICATIONS_FOLDER,
    SQLNSOBJECTTYPE_SUBSCRIPTIONS_FOLDER,
	SQLNSOBJECTTYPE_REPLICATION_FOLDER_PUBLICATION,
    SQLNSOBJECTTYPE_REPLICATION_FOLDER_PUB_SUBSCRIPTION,
    SQLNSOBJECTTYPE_REPLICATION_FOLDER_SUBSCRIPTION,
    SQLNSOBJECTTYPE_REPLICATION_FOLDER_PUSH_SUBSCRIPTION,
    SQLNSOBJECTTYPE_HETEROGENEOUS_PUBLICATIONS_FOLDER,
    SQLNSOBJECTTYPE_HETEROGENEOUS_PUBLICATION,
    SQLNSOBJECTTYPE_HETEROGENEOUS_PUB_SUBSCRIPTION,
    SQLNSOBJECTTYPE_HETEROGENEOUS_VENDOR_FOLDER,
	SQLNSOBJECTTYPE_LINKEDSERVER_VIEWS,
	SQLNSOBJECTTYPE_LINKEDSERVER_VIEW

	//update SQLNSOBJECTTYPE_LAST is you add items at end

} SQLNS_ENUM_END(SQLNSObjectType);

#define SQLNSOBJECTTYPE_LAST SQLNSOBJECTTYPE_LINKEDSERVER_VIEW

typedef SQLNS_ENUM_BEGIN(SQLNSModality, "Suggests the modality of the UI displayed")
{
	SQLNamespace_DontCare   = 0x0000,
	SQLNamespace_PreferModal	= 0x0001,
	SQLNamespace_PreferModeless	= 0x0002
} SQLNS_ENUM_END(SQLNSModality);







typedef SQLNS_ENUM_BEGIN(SQLNSCommandID, "Command IDs available in the SQLNamespace")
{
	SQLNS_CmdID_WIZARD_CREATEDB             =		1,
	SQLNS_CmdID_WIZARD_CREATEINDEX          ,
	SQLNS_CmdID_WIZARD_DTSIMPORT            ,
	SQLNS_CmdID_WIZARD_DTSEXPORT            ,
	SQLNS_CmdID_WIZARD_CREATEJOB            ,
	SQLNS_CmdID_WIZARD_SECURITY             ,
	SQLNS_CmdID_WIZARD_SP                   ,
	SQLNS_CmdID_WIZARD_VIEW                 ,
	SQLNS_CmdID_WIZARD_INDEXTUNING          ,
	SQLNS_CmdID_WIZARD_ALERT                ,
	SQLNS_CmdID_WIZARD_MAINTPLAN            ,
	SQLNS_CmdID_WIZARD_WEBASST              ,
	SQLNS_CmdID_WIZARD_BACKUP				,
	SQLNS_CmdID_WIZARD_CREATETRACE          ,
	SQLNS_CmdID_WIZARDS                     ,
	SQLNS_CmdID_PROPERTIES                  ,
	SQLNS_CmdID_DELETE                      ,
	SQLNS_CmdID_NEW_SERVER                  ,
	SQLNS_CmdID_NEW_JOB                     ,
	SQLNS_CmdID_NEW_ALERT                   ,
	SQLNS_CmdID_NEW_OPERATOR                ,
	SQLNS_CmdID_NEW_REMOTE_SERVER           ,
	SQLNS_CmdID_NEW_DATABASE                ,
	SQLNS_CmdID_NEW_TABLE                   ,
	SQLNS_CmdID_NEW_VIEW                    ,
	SQLNS_CmdID_NEW_STORED_PROCEDURE        ,
	SQLNS_CmdID_NEW_EXTENDED_STORED_PROCEDURE,
	SQLNS_CmdID_NEW_RULE                    ,
	SQLNS_CmdID_NEW_DEFAULT                 ,
	SQLNS_CmdID_NEW_UDDT                    ,
	SQLNS_CmdID_NEW_SERVER_GROUP            ,
	SQLNS_CmdID_NEW_DIAGRAM					,
	SQLNS_CmdID_NEW_DATABASE_ROLE			,
	SQLNS_CmdID_NEW_LOGIN                   ,
	SQLNS_CmdID_NEW_DBUSER                  ,
	SQLNS_CmdID_NEW_BACKUPDEVICE            ,
	SQLNS_CmdID_OPEN                        ,
	SQLNS_CmdID_JOBSERVER_ERRORLOG			,
	SQLNS_CmdID_JOB_START					,
	SQLNS_CmdID_JOB_HISTORY					,
	SQLNS_CmdID_JOB_STOP					,
	SQLNS_CmdID_JOBSERVER_TARGET_SERVERS    ,
	SQLNS_CmdID_EDIT_SERVER                 ,
	SQLNS_CmdID_OBJECT_PERMISSIONS          ,
	SQLNS_CmdID_OBJECT_DEPENDENCIES         ,
	SQLNS_CmdID_TABLE_INDEXES               ,
	SQLNS_CmdID_TABLE_TRIGGERS              ,
	//SQLNS_CmdID_JOB_STEPS					,
	SQLNS_CmdID_SVC_STOP					=		49,
	SQLNS_CmdID_SVC_PAUSE                   ,
	SQLNS_CmdID_SVC_START                   ,
	SQLNS_CmdID_SERVER_SECURITY             ,
	//SQLNS_CmdID_CONNECT					,
	//SQLNS_CmdID_SERVER_CONFIGURATION		,
	SQLNS_CmdID_ENLIST                      =		55,
	SQLNS_CmdID_DEFECT                      ,
	SQLNS_CmdID_EXPORT_JOB                  ,
	//SQLNS_CmdID_MULTI_SERVER_JOB_STATUS   ,
	SQLNS_CmdID_DTS_IMPORT					=		59,
	SQLNS_CmdID_DTS_EXPORT					,
	SQLNS_CmdID_DTS_RUN						,
	SQLNS_CmdID_ENLIST_REG_SERVERS          ,
	SQLNS_CmdID_TOOLS_MAINT_PLAN            ,
	SQLNS_CmdID_REPLICATION_PUBLISH         ,
	SQLNS_CmdID_REPLICATION_CONFIGURE       ,
	SQLNS_CmdID_REPLICATION_SUBSCRIBE       ,
	SQLNS_CmdID_REPLICATION_SCRIPT          ,
	SQLNS_CmdID_REPLICATION_UNINSTALL       ,
	SQLNS_CmdID_NEW_PUBLICATION             ,
	SQLNS_CmdID_PUSH_NEW_SUBSCRIPTION       ,
	SQLNS_CmdID_REPLICATION_RESOLVE_CONFLICTS,
	SQLNS_CmdID_NEW_SUBSCRIPTION            ,
	SQLNS_CmdID_REINIT_SUBSCRIPTION			,
	SQLNS_CmdID_SYNCHRONIZE_NOW			    ,
	SQLNS_CmdID_STOP_SYNCHRONIZING          ,
	SQLNS_CmdID_AGENT_ERROR_DETAILS			,
	SQLNS_CmdID_AGENT_HISTORY				,
	SQLNS_CmdID_SECURITY_LIST				,
	SQLNS_CmdID_GENERATE_SCRIPTS			,
	SQLNS_CmdID_DATABASE_BACKUP				,
	SQLNS_CmdID_DATABASE_RESTORE			,
	SQLNS_CmdID_DATABASE_SHRINKDB			,
	SQLNS_CmdID_PUBLISHING_PROPERTIES		,
	SQLNS_CmdID_NEW_LINKED_SERVER			,
    SQLNS_CmdID_NEW_UDF                     ,
    SQLNS_CmdID_NEW_TRACE,
  //more to come
} SQLNS_ENUM_END(SQLNSCommandID);

typedef SQLNS_ENUM_BEGIN(SQLNSErrors, "Error ranges available in the SQLNamespace")
{
	SQLNS_E_NotImplemented						= 1001,
	SQLNS_E_OrdOutOfRange						= 1002,
	SQLNS_E_NameNotFound						= 1003,
	SQLNS_E_NameDup								= 1004,
	SQLNS_E_Already_Initialized					= 1005,
	SQLNS_E_InvalidRootType						= 1006,
	SQLNS_E_RequireAppName						= 1007,
	SQLNS_E_InvalidObjectHandle					= 1008,
	SQLNS_E_NoDMOObject							= 1009,
	SQLNS_E_InvalidCommandName					= 1010,
	SQLNS_E_InvalidCommandID					= 1011,
	SQLNS_E_InvalidRootInfo						= 1012,
	SQLNS_E_InvalidServerName					= 1013,
	SQLNS_E_InvalidLoginInfo					= 1014,
	SQLNS_E_InvalidDBName						= 1015,
	SQLNS_E_InvalidConnectString				= 1016,
	SQLNS_E_SrvGrpNotFound						= 1017,
	SQLNS_E_ServerNotFound						= 1018,
	SQLNS_E_DatabaseNotFound					= 1019,
	SQLNS_E_InvalidServerVersion				= 1020,
	SQLNS_E_ExternalError						= 1100			//General, external error..we don't have a description for this error
	//more to come
} SQLNS_ENUM_END(SQLNSErrors);

#ifndef SQLNS_ODL_

#define SIZE_SQLOBJ_NAMELEN 128
typedef struct
  {
  DWORD						dwStructSize; // in Bytes
  DWORD						dwCreatePubAllowTypes;
  DWORD						dwPubPropPages;
  DWORD						dwConfigurePropPages;
  TCHAR						szDatabaseName[SIZE_SQLOBJ_NAMELEN + 2]; // database name should not be more than 128 TCHARs.
  } REPLICATION_CUSTOMIZE_INFO, *PREPLICATION_CUSTOMIZE_INFO;

#endif

// These flag groups are used to control the Create Publication wizard, 
// the publication property sheet, and Configure Publishing and 
// Distribution property sheet
//
// the caller may not want to allow all types of publications to be created
const long fAllowSnapshotPubs				= 0x01;
const long fAllowTransPubs					= 0x02;
const long fAllowMergePubs					= 0x04;
const long grfAllowAllPubTypes				= 0x07;

// You can select which property pages to display in the publication property
// sheet.  Note that some pages are dependent on the General page being displayed. 
// General page is always displayed.
const long fPubPropArticles					= 0x0002;
const long fPubPropFilters					= 0x0004;	// controls both Columns & Rows
const long fPubPropSubs						= 0x0008;
const long fPubPropSubOptions				= 0x0010;
const long fPubPropStatus					= 0x0020;
const long fPubPropScript					= 0x0040;
const long fPubPropACL						= 0x0080;
const long fPubPropSnapshot					= 0x0100;
const long fPubPropSnapshotLocation			= 0x0200;
const long fPubPropUpdatable			    = 0x0400;
const long fPubPropAltSyncPartners			= 0x0800;
const long grfPubPropAllPages				= 0xFFFF;
	
// You can select which property pages to display in the Configure Publishing
// and Distribution property sheet.
const long fConfigurePropDist				= 0x01;
const long fConfigurePropDBs				= 0x02;
const long fConfigurePropSubscribers		= 0x04;
const long fConfigurePropPublishers			= 0x08;
const long fConfigurePropAccessList			= 0x10;		// UNDONE: This page has been removed
const long grfConfigurePropAllPages			= 0x1F;

#ifdef SQLNS_ODL_
typedef long HSQLNSITEM, *PHSQLNSITEM;	//handle to a namespace item
#else
typedef DWORD HSQLNSITEM, *PHSQLNSITEM;	//handle to a namespace item
#endif





#endif //DO_ODL_TYPDEFS_

#define SQLNS_DEF_H_
#endif //SQLNS_DEF_H_
