/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM nsIMsgDatabase.idl
 */

#ifndef __gen_nsIMsgDatabase_h__
#define __gen_nsIMsgDatabase_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_MailNewsTypes2_h__
#include "MailNewsTypes2.h"
#endif

#ifndef __gen_nsIDBChangeAnnouncer_h__
#include "nsIDBChangeAnnouncer.h"
#endif

#ifndef __gen_nsIMsgDBView_h__
#include "nsIMsgDBView.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
#include "nsMsgKeyArray.h"
class nsIFileSpec; /* forward declaration */

class nsIDBChangeListener; /* forward declaration */

class nsIMsgDBHdr; /* forward declaration */

class nsISimpleEnumerator; /* forward declaration */

class nsIMsgThread; /* forward declaration */

class nsIDBFolderInfo; /* forward declaration */

class nsIMsgOfflineImapOperation; /* forward declaration */

class nsIMsgFolder; /* forward declaration */

class nsIOFileStream; /* forward declaration */

typedef PRUint32 nsMsgRetainByPreference;


/* starting interface:    nsIMsgRetentionSettings */
#define NS_IMSGRETENTIONSETTINGS_IID_STR "063bd2ac-de85-11d4-a5b6-0060b0fc04b7"

#define NS_IMSGRETENTIONSETTINGS_IID \
  {0x063bd2ac, 0xde85, 0x11d4, \
    { 0xa5, 0xb6, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsIMsgRetentionSettings : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGRETENTIONSETTINGS_IID)

  enum { nsMsgRetainAll = 1U };

  enum { nsMsgRetainByAge = 2U };

  enum { nsMsgRetainByNumHeaders = 3U };

  /* attribute boolean useServerDefaults; */
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) = 0;
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) = 0;

  /* attribute nsMsgRetainByPreference retainByPreference; */
  NS_IMETHOD GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference) = 0;
  NS_IMETHOD SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference) = 0;

  /* attribute unsigned long daysToKeepHdrs; */
  NS_IMETHOD GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs) = 0;
  NS_IMETHOD SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs) = 0;

  /* attribute unsigned long numHeadersToKeep; */
  NS_IMETHOD GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep) = 0;
  NS_IMETHOD SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep) = 0;

  /* attribute boolean keepUnreadMessagesOnly; */
  NS_IMETHOD GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly) = 0;
  NS_IMETHOD SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly) = 0;

  /* attribute boolean cleanupBodiesByDays; */
  NS_IMETHOD GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays) = 0;
  NS_IMETHOD SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays) = 0;

  /* attribute unsigned long daysToKeepBodies; */
  NS_IMETHOD GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies) = 0;
  NS_IMETHOD SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGRETENTIONSETTINGS \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults); \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults); \
  NS_IMETHOD GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference); \
  NS_IMETHOD SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference); \
  NS_IMETHOD GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs); \
  NS_IMETHOD SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs); \
  NS_IMETHOD GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep); \
  NS_IMETHOD SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep); \
  NS_IMETHOD GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly); \
  NS_IMETHOD SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly); \
  NS_IMETHOD GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays); \
  NS_IMETHOD SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays); \
  NS_IMETHOD GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies); \
  NS_IMETHOD SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGRETENTIONSETTINGS(_to) \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return _to GetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return _to SetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference) { return _to GetRetainByPreference(aRetainByPreference); } \
  NS_IMETHOD SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference) { return _to SetRetainByPreference(aRetainByPreference); } \
  NS_IMETHOD GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs) { return _to GetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_IMETHOD SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs) { return _to SetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_IMETHOD GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep) { return _to GetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_IMETHOD SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep) { return _to SetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_IMETHOD GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly) { return _to GetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_IMETHOD SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly) { return _to SetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_IMETHOD GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays) { return _to GetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_IMETHOD SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays) { return _to SetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_IMETHOD GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies) { return _to GetDaysToKeepBodies(aDaysToKeepBodies); } \
  NS_IMETHOD SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies) { return _to SetDaysToKeepBodies(aDaysToKeepBodies); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGRETENTIONSETTINGS(_to) \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRetainByPreference(aRetainByPreference); } \
  NS_IMETHOD SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRetainByPreference(aRetainByPreference); } \
  NS_IMETHOD GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_IMETHOD SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_IMETHOD GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_IMETHOD SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_IMETHOD GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_IMETHOD SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_IMETHOD GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_IMETHOD SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_IMETHOD GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDaysToKeepBodies(aDaysToKeepBodies); } \
  NS_IMETHOD SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDaysToKeepBodies(aDaysToKeepBodies); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgRetentionSettings : public nsIMsgRetentionSettings
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGRETENTIONSETTINGS

  nsMsgRetentionSettings();
  virtual ~nsMsgRetentionSettings();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgRetentionSettings, nsIMsgRetentionSettings)

nsMsgRetentionSettings::nsMsgRetentionSettings()
{
  /* member initializers and constructor code */
}

nsMsgRetentionSettings::~nsMsgRetentionSettings()
{
  /* destructor code */
}

/* attribute boolean useServerDefaults; */
NS_IMETHODIMP nsMsgRetentionSettings::GetUseServerDefaults(PRBool *aUseServerDefaults)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetUseServerDefaults(PRBool aUseServerDefaults)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgRetainByPreference retainByPreference; */
NS_IMETHODIMP nsMsgRetentionSettings::GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long daysToKeepHdrs; */
NS_IMETHODIMP nsMsgRetentionSettings::GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long numHeadersToKeep; */
NS_IMETHODIMP nsMsgRetentionSettings::GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean keepUnreadMessagesOnly; */
NS_IMETHODIMP nsMsgRetentionSettings::GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean cleanupBodiesByDays; */
NS_IMETHODIMP nsMsgRetentionSettings::GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long daysToKeepBodies; */
NS_IMETHODIMP nsMsgRetentionSettings::GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgDownloadSettings */
#define NS_IMSGDOWNLOADSETTINGS_IID_STR "86a9da90-14f1-11d5-a5c0-0060b0fc04b7"

#define NS_IMSGDOWNLOADSETTINGS_IID \
  {0x86a9da90, 0x14f1, 0x11d5, \
    { 0xa5, 0xc0, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsIMsgDownloadSettings : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGDOWNLOADSETTINGS_IID)

  /* attribute boolean useServerDefaults; */
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) = 0;
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) = 0;

  /* attribute boolean downloadByDate; */
  NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate) = 0;
  NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate) = 0;

  /* attribute boolean downloadUnreadOnly; */
  NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly) = 0;
  NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly) = 0;

  /* attribute unsigned long ageLimitOfMsgsToDownload; */
  NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload) = 0;
  NS_IMETHOD SetAgeLimitOfMsgsToDownload(PRUint32 aAgeLimitOfMsgsToDownload) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDOWNLOADSETTINGS \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults); \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults); \
  NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate); \
  NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate); \
  NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly); \
  NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly); \
  NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload); \
  NS_IMETHOD SetAgeLimitOfMsgsToDownload(PRUint32 aAgeLimitOfMsgsToDownload); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDOWNLOADSETTINGS(_to) \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return _to GetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return _to SetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate) { return _to GetDownloadByDate(aDownloadByDate); } \
  NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate) { return _to SetDownloadByDate(aDownloadByDate); } \
  NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly) { return _to GetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly) { return _to SetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload) { return _to GetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } \
  NS_IMETHOD SetAgeLimitOfMsgsToDownload(PRUint32 aAgeLimitOfMsgsToDownload) { return _to SetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGDOWNLOADSETTINGS(_to) \
  NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUseServerDefaults(aUseServerDefaults); } \
  NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDownloadByDate(aDownloadByDate); } \
  NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDownloadByDate(aDownloadByDate); } \
  NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } \
  NS_IMETHOD SetAgeLimitOfMsgsToDownload(PRUint32 aAgeLimitOfMsgsToDownload) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgDownloadSettings : public nsIMsgDownloadSettings
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGDOWNLOADSETTINGS

  nsMsgDownloadSettings();
  virtual ~nsMsgDownloadSettings();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgDownloadSettings, nsIMsgDownloadSettings)

nsMsgDownloadSettings::nsMsgDownloadSettings()
{
  /* member initializers and constructor code */
}

nsMsgDownloadSettings::~nsMsgDownloadSettings()
{
  /* destructor code */
}

/* attribute boolean useServerDefaults; */
NS_IMETHODIMP nsMsgDownloadSettings::GetUseServerDefaults(PRBool *aUseServerDefaults)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDownloadSettings::SetUseServerDefaults(PRBool aUseServerDefaults)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean downloadByDate; */
NS_IMETHODIMP nsMsgDownloadSettings::GetDownloadByDate(PRBool *aDownloadByDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDownloadSettings::SetDownloadByDate(PRBool aDownloadByDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean downloadUnreadOnly; */
NS_IMETHODIMP nsMsgDownloadSettings::GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDownloadSettings::SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long ageLimitOfMsgsToDownload; */
NS_IMETHODIMP nsMsgDownloadSettings::GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDownloadSettings::SetAgeLimitOfMsgsToDownload(PRUint32 aAgeLimitOfMsgsToDownload)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif

typedef PRInt32 nsMsgDBCommit;


/* starting interface:    nsMsgDBCommitType */
#define NS_MSGDBCOMMITTYPE_IID_STR "aa4d45d0-3956-11d3-8d76-00805f8a6617"

#define NS_MSGDBCOMMITTYPE_IID \
  {0xaa4d45d0, 0x3956, 0x11d3, \
    { 0x8d, 0x76, 0x00, 0x80, 0x5f, 0x8a, 0x66, 0x17 }}

class NS_NO_VTABLE nsMsgDBCommitType {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_MSGDBCOMMITTYPE_IID)

  enum { kSmallCommit = 0 };

  enum { kLargeCommit = 1 };

  enum { kSessionCommit = 2 };

  enum { kCompressCommit = 3 };

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGDBCOMMITTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGDBCOMMITTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGDBCOMMITTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgDBCommitType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGDBCOMMITTYPE

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, nsMsgDBCommitType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgDatabase */
#define NS_IMSGDATABASE_IID_STR "9188bc83-f92e-11d2-81ef-0060083a0bcf"

#define NS_IMSGDATABASE_IID \
  {0x9188bc83, 0xf92e, 0x11d2, \
    { 0x81, 0xef, 0x00, 0x60, 0x08, 0x3a, 0x0b, 0xcf }}

class NS_NO_VTABLE nsIMsgDatabase : public nsIDBChangeAnnouncer {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGDATABASE_IID)

  /* nsIMsgDatabase Open (in nsIFileSpec folderName, in boolean create, in boolean upgrading); */
  NS_IMETHOD Open(nsIFileSpec *folderName, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) = 0;

  /* nsIMsgDatabase OpenFolderDB (in nsIMsgFolder folder, in boolean create, in boolean upgrading); */
  NS_IMETHOD OpenFolderDB(nsIMsgFolder *folder, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) = 0;

  /* void Close (in boolean forceCommit); */
  NS_IMETHOD Close(PRBool forceCommit) = 0;

  /* void Commit (in nsMsgDBCommit commitType); */
  NS_IMETHOD Commit(nsMsgDBCommit commitType) = 0;

  /* void ForceClosed (); */
  NS_IMETHOD ForceClosed(void) = 0;

  /* void clearCachedHdrs (); */
  NS_IMETHOD ClearCachedHdrs(void) = 0;

  /* void resetHdrCacheSize (in unsigned long size); */
  NS_IMETHOD ResetHdrCacheSize(PRUint32 size) = 0;

  /* readonly attribute nsIDBFolderInfo dBFolderInfo; */
  NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo * *aDBFolderInfo) = 0;

  /* nsIMsgDBHdr GetMsgHdrForKey (in nsMsgKey key); */
  NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval) = 0;

  /* nsIMsgDBHdr getMsgHdrForMessageID (in string messageID); */
  NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval) = 0;

  /* boolean ContainsKey (in nsMsgKey key); */
  NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval) = 0;

  /* nsIMsgDBHdr CreateNewHdr (in nsMsgKey key); */
  NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval) = 0;

  /* void AddNewHdrToDB (in nsIMsgDBHdr newHdr, in boolean notify); */
  NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify) = 0;

  /* nsIMsgDBHdr CopyHdrFromExistingHdr (in nsMsgKey key, in nsIMsgDBHdr existingHdr, in boolean addHdrToDB); */
  NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval) = 0;

  /* [noscript] void ListAllKeys (in nsMsgKeyArrayRef outputKeys); */
  NS_IMETHOD ListAllKeys(nsMsgKeyArray & outputKeys) = 0;

  /* nsISimpleEnumerator EnumerateMessages (); */
  NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval) = 0;

  /* nsISimpleEnumerator EnumerateThreads (); */
  NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval) = 0;

  /* boolean hasThreads (); */
  NS_IMETHOD HasThreads(PRBool *_retval) = 0;

  /* nsIMsgThread GetThreadContainingMsgHdr (in nsIMsgDBHdr msgHdr); */
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval) = 0;

  /* void MarkHdrRead (in nsIMsgDBHdr msgHdr, in boolean bRead, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator) = 0;

  /* void MarkHdrReplied (in nsIMsgDBHdr msgHdr, in boolean bReplied, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator) = 0;

  /* void MarkHdrMarked (in nsIMsgDBHdr msgHdr, in boolean mark, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator) = 0;

  /* void MarkMDNNeeded (in nsMsgKey key, in boolean bNeeded, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) = 0;

  /* boolean IsMDNNeeded (in nsMsgKey key); */
  NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval) = 0;

  /* void MarkMDNSent (in nsMsgKey key, in boolean bNeeded, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) = 0;

  /* boolean IsMDNSent (in nsMsgKey key); */
  NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval) = 0;

  /* void MarkRead (in nsMsgKey key, in boolean bRead, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator) = 0;

  /* void MarkReplied (in nsMsgKey key, in boolean bReplied, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator) = 0;

  /* void MarkForwarded (in nsMsgKey key, in boolean bForwarded, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator) = 0;

  /* void MarkHasAttachments (in nsMsgKey key, in boolean bHasAttachments, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator) = 0;

  /* [noscript] void MarkThreadRead (in nsIMsgThread thread, in nsIDBChangeListener instigator, in nsMsgKeyArrayPtr thoseMarked); */
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray * thoseMarked) = 0;

  /* void MarkThreadIgnored (in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bIgnored, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator) = 0;

  /* void MarkThreadWatched (in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bWatched, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) = 0;

  /* boolean IsRead (in nsMsgKey key); */
  NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval) = 0;

  /* boolean IsIgnored (in nsMsgKey key); */
  NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval) = 0;

  /* boolean IsMarked (in nsMsgKey key); */
  NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval) = 0;

  /* boolean HasAttachments (in nsMsgKey key); */
  NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval) = 0;

  /* [noscript] void MarkAllRead (in nsMsgKeyArrayPtr thoseMarked); */
  NS_IMETHOD MarkAllRead(nsMsgKeyArray * thoseMarked) = 0;

  /* [noscript] void MarkReadByDate (in PRTime startDate, in PRTime endDate, in nsMsgKeyArrayPtr markedIds); */
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsMsgKeyArray * markedIds) = 0;

  /* [noscript] void DeleteMessages (in nsMsgKeyArrayPtr nsMsgKeys, in nsIDBChangeListener instigator); */
  NS_IMETHOD DeleteMessages(nsMsgKeyArray * nsMsgKeys, nsIDBChangeListener *instigator) = 0;

  /* void DeleteMessage (in nsMsgKey key, in nsIDBChangeListener instigator, in boolean commit); */
  NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit) = 0;

  /* void DeleteHeader (in nsIMsgDBHdr msgHdr, in nsIDBChangeListener instigator, in boolean commit, in boolean notify); */
  NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) = 0;

  /* void RemoveHeaderMdbRow (in nsIMsgDBHdr msgHdr); */
  NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr) = 0;

  /* void UndoDelete (in nsIMsgDBHdr msgHdr); */
  NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr) = 0;

  /* void MarkLater (in nsMsgKey key, in PRTime until); */
  NS_IMETHOD MarkLater(nsMsgKey key, PRTime until) = 0;

  /* void MarkMarked (in nsMsgKey key, in boolean mark, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator) = 0;

  /* void MarkOffline (in nsMsgKey key, in boolean offline, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator) = 0;

  /* void SetLabel (in nsMsgKey key, in nsMsgLabelValue label); */
  NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label) = 0;

  /* void setStringProperty (in nsMsgKey aKey, in string aProperty, in string aValue); */
  NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue) = 0;

  /* [noscript] void AllMsgKeysImapDeleted (in nsMsgKeyArrayPtr keys, out boolean allDeleted); */
  NS_IMETHOD AllMsgKeysImapDeleted(nsMsgKeyArray * keys, PRBool *allDeleted) = 0;

  /* void MarkImapDeleted (in nsMsgKey key, in boolean deleted, in nsIDBChangeListener instigator); */
  NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator) = 0;

  /* readonly attribute nsMsgKey FirstNew; */
  NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew) = 0;

  /* attribute nsIMsgRetentionSettings msgRetentionSettings; */
  NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings * *aMsgRetentionSettings) = 0;
  NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings * aMsgRetentionSettings) = 0;

  /* void ApplyRetentionSettings (in nsIMsgRetentionSettings msgRetentionSettings); */
  NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *msgRetentionSettings) = 0;

  /* attribute nsIMsgDownloadSettings msgDownloadSettings; */
  NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings * *aMsgDownloadSettings) = 0;
  NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings * aMsgDownloadSettings) = 0;

  /* boolean HasNew (); */
  NS_IMETHOD HasNew(PRBool *_retval) = 0;

  /* void ClearNewList (in boolean notify); */
  NS_IMETHOD ClearNewList(PRBool notify) = 0;

  /* void AddToNewList (in nsMsgKey key); */
  NS_IMETHOD AddToNewList(nsMsgKey key) = 0;

  /* attribute boolean summaryValid; */
  NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid) = 0;
  NS_IMETHOD SetSummaryValid(PRBool aSummaryValid) = 0;

  /* void StartBatch (); */
  NS_IMETHOD StartBatch(void) = 0;

  /* void EndBatch (); */
  NS_IMETHOD EndBatch(void) = 0;

  /* nsIMsgOfflineImapOperation GetOfflineOpForKey (in nsMsgKey messageKey, in boolean create); */
  NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval) = 0;

  /* void RemoveOfflineOp (in nsIMsgOfflineImapOperation op); */
  NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op) = 0;

  /* nsISimpleEnumerator EnumerateOfflineOps (); */
  NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval) = 0;

  /* [noscript] void ListAllOfflineOpIds (in nsMsgKeyArrayPtr offlineOpIds); */
  NS_IMETHOD ListAllOfflineOpIds(nsMsgKeyArray * offlineOpIds) = 0;

  /* [noscript] void ListAllOfflineDeletes (in nsMsgKeyArrayPtr offlineDeletes); */
  NS_IMETHOD ListAllOfflineDeletes(nsMsgKeyArray * offlineDeletes) = 0;

  /* [noscript] void ListAllOfflineMsgs (in nsMsgKeyArrayPtr offlineMsgs); */
  NS_IMETHOD ListAllOfflineMsgs(nsMsgKeyArray * offlineMsgs) = 0;

  /* readonly attribute nsMsgKey lowWaterArticleNum; */
  NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum) = 0;

  /* readonly attribute nsMsgKey highWaterArticleNum; */
  NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum) = 0;

  /* attribute nsMsgKey nextPseudoMsgKey; */
  NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey) = 0;
  NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey) = 0;

  /* readonly attribute nsMsgKey nextFakeOfflineMsgKey; */
  NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey) = 0;

  /* [noscript] void createCollationKey (in wstring sourceString, out octetPtr key, out unsigned long len); */
  NS_IMETHOD CreateCollationKey(const PRUnichar *sourceString, PRUint8 * *key, PRUint32 *len) = 0;

  /* [noscript] long compareCollationKeys (out octet key1, in unsigned long len1, out octet key2, in unsigned long len2); */
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval) = 0;

  /* readonly attribute nsMsgViewFlagsTypeValue defaultViewFlags; */
  NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags) = 0;

  /* readonly attribute nsMsgViewSortTypeValue defaultSortType; */
  NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType) = 0;

  /* attribute unsigned long msgHdrCacheSize; */
  NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize) = 0;
  NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize) = 0;

  /* void setFolderStream (in nsIOFileStream aFileStream); */
  NS_IMETHOD SetFolderStream(nsIOFileStream *aFileStream) = 0;

  /**
   * The list of messages currently in the NEW state.
   * 
   * If there are no such messages, a null pointer may be returned.
   * Note that the since the structure itself is not refcounted, 
   * the caller should free when done using NS_DELETEXPCOM().
   */
  /* [noscript] readonly attribute nsMsgKeyArrayPtr newList; */
  NS_IMETHOD GetNewList(nsMsgKeyArray * *aNewList) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDATABASE \
  NS_IMETHOD Open(nsIFileSpec *folderName, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval); \
  NS_IMETHOD OpenFolderDB(nsIMsgFolder *folder, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval); \
  NS_IMETHOD Close(PRBool forceCommit); \
  NS_IMETHOD Commit(nsMsgDBCommit commitType); \
  NS_IMETHOD ForceClosed(void); \
  NS_IMETHOD ClearCachedHdrs(void); \
  NS_IMETHOD ResetHdrCacheSize(PRUint32 size); \
  NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo * *aDBFolderInfo); \
  NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval); \
  NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval); \
  NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval); \
  NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify); \
  NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval); \
  NS_IMETHOD ListAllKeys(nsMsgKeyArray & outputKeys); \
  NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval); \
  NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval); \
  NS_IMETHOD HasThreads(PRBool *_retval); \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval); \
  NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator); \
  NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator); \
  NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray * thoseMarked); \
  NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator); \
  NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval); \
  NS_IMETHOD MarkAllRead(nsMsgKeyArray * thoseMarked); \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsMsgKeyArray * markedIds); \
  NS_IMETHOD DeleteMessages(nsMsgKeyArray * nsMsgKeys, nsIDBChangeListener *instigator); \
  NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit); \
  NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify); \
  NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr); \
  NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr); \
  NS_IMETHOD MarkLater(nsMsgKey key, PRTime until); \
  NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator); \
  NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label); \
  NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue); \
  NS_IMETHOD AllMsgKeysImapDeleted(nsMsgKeyArray * keys, PRBool *allDeleted); \
  NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator); \
  NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew); \
  NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings * *aMsgRetentionSettings); \
  NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings * aMsgRetentionSettings); \
  NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *msgRetentionSettings); \
  NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings * *aMsgDownloadSettings); \
  NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings * aMsgDownloadSettings); \
  NS_IMETHOD HasNew(PRBool *_retval); \
  NS_IMETHOD ClearNewList(PRBool notify); \
  NS_IMETHOD AddToNewList(nsMsgKey key); \
  NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid); \
  NS_IMETHOD SetSummaryValid(PRBool aSummaryValid); \
  NS_IMETHOD StartBatch(void); \
  NS_IMETHOD EndBatch(void); \
  NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval); \
  NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op); \
  NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval); \
  NS_IMETHOD ListAllOfflineOpIds(nsMsgKeyArray * offlineOpIds); \
  NS_IMETHOD ListAllOfflineDeletes(nsMsgKeyArray * offlineDeletes); \
  NS_IMETHOD ListAllOfflineMsgs(nsMsgKeyArray * offlineMsgs); \
  NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum); \
  NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum); \
  NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey); \
  NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey); \
  NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey); \
  NS_IMETHOD CreateCollationKey(const PRUnichar *sourceString, PRUint8 * *key, PRUint32 *len); \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval); \
  NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags); \
  NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType); \
  NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize); \
  NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize); \
  NS_IMETHOD SetFolderStream(nsIOFileStream *aFileStream); \
  NS_IMETHOD GetNewList(nsMsgKeyArray * *aNewList); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDATABASE(_to) \
  NS_IMETHOD Open(nsIFileSpec *folderName, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) { return _to Open(folderName, create, upgrading, _retval); } \
  NS_IMETHOD OpenFolderDB(nsIMsgFolder *folder, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) { return _to OpenFolderDB(folder, create, upgrading, _retval); } \
  NS_IMETHOD Close(PRBool forceCommit) { return _to Close(forceCommit); } \
  NS_IMETHOD Commit(nsMsgDBCommit commitType) { return _to Commit(commitType); } \
  NS_IMETHOD ForceClosed(void) { return _to ForceClosed(); } \
  NS_IMETHOD ClearCachedHdrs(void) { return _to ClearCachedHdrs(); } \
  NS_IMETHOD ResetHdrCacheSize(PRUint32 size) { return _to ResetHdrCacheSize(size); } \
  NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo * *aDBFolderInfo) { return _to GetDBFolderInfo(aDBFolderInfo); } \
  NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval) { return _to GetMsgHdrForKey(key, _retval); } \
  NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval) { return _to GetMsgHdrForMessageID(messageID, _retval); } \
  NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval) { return _to ContainsKey(key, _retval); } \
  NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval) { return _to CreateNewHdr(key, _retval); } \
  NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify) { return _to AddNewHdrToDB(newHdr, notify); } \
  NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval) { return _to CopyHdrFromExistingHdr(key, existingHdr, addHdrToDB, _retval); } \
  NS_IMETHOD ListAllKeys(nsMsgKeyArray & outputKeys) { return _to ListAllKeys(outputKeys); } \
  NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval) { return _to EnumerateMessages(_retval); } \
  NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval) { return _to EnumerateThreads(_retval); } \
  NS_IMETHOD HasThreads(PRBool *_retval) { return _to HasThreads(_retval); } \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval) { return _to GetThreadContainingMsgHdr(msgHdr, _retval); } \
  NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator) { return _to MarkHdrRead(msgHdr, bRead, instigator); } \
  NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator) { return _to MarkHdrReplied(msgHdr, bReplied, instigator); } \
  NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator) { return _to MarkHdrMarked(msgHdr, mark, instigator); } \
  NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return _to MarkMDNNeeded(key, bNeeded, instigator); } \
  NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval) { return _to IsMDNNeeded(key, _retval); } \
  NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return _to MarkMDNSent(key, bNeeded, instigator); } \
  NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval) { return _to IsMDNSent(key, _retval); } \
  NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator) { return _to MarkRead(key, bRead, instigator); } \
  NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator) { return _to MarkReplied(key, bReplied, instigator); } \
  NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator) { return _to MarkForwarded(key, bForwarded, instigator); } \
  NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator) { return _to MarkHasAttachments(key, bHasAttachments, instigator); } \
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray * thoseMarked) { return _to MarkThreadRead(thread, instigator, thoseMarked); } \
  NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator) { return _to MarkThreadIgnored(thread, threadKey, bIgnored, instigator); } \
  NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) { return _to MarkThreadWatched(thread, threadKey, bWatched, instigator); } \
  NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval) { return _to IsRead(key, _retval); } \
  NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval) { return _to IsIgnored(key, _retval); } \
  NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval) { return _to IsMarked(key, _retval); } \
  NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval) { return _to HasAttachments(key, _retval); } \
  NS_IMETHOD MarkAllRead(nsMsgKeyArray * thoseMarked) { return _to MarkAllRead(thoseMarked); } \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsMsgKeyArray * markedIds) { return _to MarkReadByDate(startDate, endDate, markedIds); } \
  NS_IMETHOD DeleteMessages(nsMsgKeyArray * nsMsgKeys, nsIDBChangeListener *instigator) { return _to DeleteMessages(nsMsgKeys, instigator); } \
  NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit) { return _to DeleteMessage(key, instigator, commit); } \
  NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) { return _to DeleteHeader(msgHdr, instigator, commit, notify); } \
  NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr) { return _to RemoveHeaderMdbRow(msgHdr); } \
  NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr) { return _to UndoDelete(msgHdr); } \
  NS_IMETHOD MarkLater(nsMsgKey key, PRTime until) { return _to MarkLater(key, until); } \
  NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator) { return _to MarkMarked(key, mark, instigator); } \
  NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator) { return _to MarkOffline(key, offline, instigator); } \
  NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label) { return _to SetLabel(key, label); } \
  NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue) { return _to SetStringProperty(aKey, aProperty, aValue); } \
  NS_IMETHOD AllMsgKeysImapDeleted(nsMsgKeyArray * keys, PRBool *allDeleted) { return _to AllMsgKeysImapDeleted(keys, allDeleted); } \
  NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator) { return _to MarkImapDeleted(key, deleted, instigator); } \
  NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew) { return _to GetFirstNew(aFirstNew); } \
  NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings * *aMsgRetentionSettings) { return _to GetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings * aMsgRetentionSettings) { return _to SetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *msgRetentionSettings) { return _to ApplyRetentionSettings(msgRetentionSettings); } \
  NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings * *aMsgDownloadSettings) { return _to GetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings * aMsgDownloadSettings) { return _to SetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_IMETHOD HasNew(PRBool *_retval) { return _to HasNew(_retval); } \
  NS_IMETHOD ClearNewList(PRBool notify) { return _to ClearNewList(notify); } \
  NS_IMETHOD AddToNewList(nsMsgKey key) { return _to AddToNewList(key); } \
  NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid) { return _to GetSummaryValid(aSummaryValid); } \
  NS_IMETHOD SetSummaryValid(PRBool aSummaryValid) { return _to SetSummaryValid(aSummaryValid); } \
  NS_IMETHOD StartBatch(void) { return _to StartBatch(); } \
  NS_IMETHOD EndBatch(void) { return _to EndBatch(); } \
  NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval) { return _to GetOfflineOpForKey(messageKey, create, _retval); } \
  NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op) { return _to RemoveOfflineOp(op); } \
  NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval) { return _to EnumerateOfflineOps(_retval); } \
  NS_IMETHOD ListAllOfflineOpIds(nsMsgKeyArray * offlineOpIds) { return _to ListAllOfflineOpIds(offlineOpIds); } \
  NS_IMETHOD ListAllOfflineDeletes(nsMsgKeyArray * offlineDeletes) { return _to ListAllOfflineDeletes(offlineDeletes); } \
  NS_IMETHOD ListAllOfflineMsgs(nsMsgKeyArray * offlineMsgs) { return _to ListAllOfflineMsgs(offlineMsgs); } \
  NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum) { return _to GetLowWaterArticleNum(aLowWaterArticleNum); } \
  NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum) { return _to GetHighWaterArticleNum(aHighWaterArticleNum); } \
  NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey) { return _to GetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey) { return _to SetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey) { return _to GetNextFakeOfflineMsgKey(aNextFakeOfflineMsgKey); } \
  NS_IMETHOD CreateCollationKey(const PRUnichar *sourceString, PRUint8 * *key, PRUint32 *len) { return _to CreateCollationKey(sourceString, key, len); } \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval) { return _to CompareCollationKeys(key1, len1, key2, len2, _retval); } \
  NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags) { return _to GetDefaultViewFlags(aDefaultViewFlags); } \
  NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType) { return _to GetDefaultSortType(aDefaultSortType); } \
  NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize) { return _to GetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize) { return _to SetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_IMETHOD SetFolderStream(nsIOFileStream *aFileStream) { return _to SetFolderStream(aFileStream); } \
  NS_IMETHOD GetNewList(nsMsgKeyArray * *aNewList) { return _to GetNewList(aNewList); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGDATABASE(_to) \
  NS_IMETHOD Open(nsIFileSpec *folderName, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Open(folderName, create, upgrading, _retval); } \
  NS_IMETHOD OpenFolderDB(nsIMsgFolder *folder, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->OpenFolderDB(folder, create, upgrading, _retval); } \
  NS_IMETHOD Close(PRBool forceCommit) { return !_to ? NS_ERROR_NULL_POINTER : _to->Close(forceCommit); } \
  NS_IMETHOD Commit(nsMsgDBCommit commitType) { return !_to ? NS_ERROR_NULL_POINTER : _to->Commit(commitType); } \
  NS_IMETHOD ForceClosed(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ForceClosed(); } \
  NS_IMETHOD ClearCachedHdrs(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearCachedHdrs(); } \
  NS_IMETHOD ResetHdrCacheSize(PRUint32 size) { return !_to ? NS_ERROR_NULL_POINTER : _to->ResetHdrCacheSize(size); } \
  NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo * *aDBFolderInfo) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDBFolderInfo(aDBFolderInfo); } \
  NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrForKey(key, _retval); } \
  NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrForMessageID(messageID, _retval); } \
  NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ContainsKey(key, _retval); } \
  NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateNewHdr(key, _retval); } \
  NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddNewHdrToDB(newHdr, notify); } \
  NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CopyHdrFromExistingHdr(key, existingHdr, addHdrToDB, _retval); } \
  NS_IMETHOD ListAllKeys(nsMsgKeyArray & outputKeys) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllKeys(outputKeys); } \
  NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateMessages(_retval); } \
  NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateThreads(_retval); } \
  NS_IMETHOD HasThreads(PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->HasThreads(_retval); } \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThreadContainingMsgHdr(msgHdr, _retval); } \
  NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrRead(msgHdr, bRead, instigator); } \
  NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrReplied(msgHdr, bReplied, instigator); } \
  NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrMarked(msgHdr, mark, instigator); } \
  NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMDNNeeded(key, bNeeded, instigator); } \
  NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMDNNeeded(key, _retval); } \
  NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMDNSent(key, bNeeded, instigator); } \
  NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMDNSent(key, _retval); } \
  NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkRead(key, bRead, instigator); } \
  NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkReplied(key, bReplied, instigator); } \
  NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkForwarded(key, bForwarded, instigator); } \
  NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHasAttachments(key, bHasAttachments, instigator); } \
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray * thoseMarked) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadRead(thread, instigator, thoseMarked); } \
  NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadIgnored(thread, threadKey, bIgnored, instigator); } \
  NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadWatched(thread, threadKey, bWatched, instigator); } \
  NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsRead(key, _retval); } \
  NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsIgnored(key, _retval); } \
  NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMarked(key, _retval); } \
  NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->HasAttachments(key, _retval); } \
  NS_IMETHOD MarkAllRead(nsMsgKeyArray * thoseMarked) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkAllRead(thoseMarked); } \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsMsgKeyArray * markedIds) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkReadByDate(startDate, endDate, markedIds); } \
  NS_IMETHOD DeleteMessages(nsMsgKeyArray * nsMsgKeys, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteMessages(nsMsgKeys, instigator); } \
  NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteMessage(key, instigator, commit); } \
  NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteHeader(msgHdr, instigator, commit, notify); } \
  NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveHeaderMdbRow(msgHdr); } \
  NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr) { return !_to ? NS_ERROR_NULL_POINTER : _to->UndoDelete(msgHdr); } \
  NS_IMETHOD MarkLater(nsMsgKey key, PRTime until) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkLater(key, until); } \
  NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMarked(key, mark, instigator); } \
  NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkOffline(key, offline, instigator); } \
  NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLabel(key, label); } \
  NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStringProperty(aKey, aProperty, aValue); } \
  NS_IMETHOD AllMsgKeysImapDeleted(nsMsgKeyArray * keys, PRBool *allDeleted) { return !_to ? NS_ERROR_NULL_POINTER : _to->AllMsgKeysImapDeleted(keys, allDeleted); } \
  NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkImapDeleted(key, deleted, instigator); } \
  NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstNew(aFirstNew); } \
  NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings * *aMsgRetentionSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings * aMsgRetentionSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *msgRetentionSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->ApplyRetentionSettings(msgRetentionSettings); } \
  NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings * *aMsgDownloadSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings * aMsgDownloadSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_IMETHOD HasNew(PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->HasNew(_retval); } \
  NS_IMETHOD ClearNewList(PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearNewList(notify); } \
  NS_IMETHOD AddToNewList(nsMsgKey key) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddToNewList(key); } \
  NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSummaryValid(aSummaryValid); } \
  NS_IMETHOD SetSummaryValid(PRBool aSummaryValid) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSummaryValid(aSummaryValid); } \
  NS_IMETHOD StartBatch(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->StartBatch(); } \
  NS_IMETHOD EndBatch(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->EndBatch(); } \
  NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOfflineOpForKey(messageKey, create, _retval); } \
  NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveOfflineOp(op); } \
  NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateOfflineOps(_retval); } \
  NS_IMETHOD ListAllOfflineOpIds(nsMsgKeyArray * offlineOpIds) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineOpIds(offlineOpIds); } \
  NS_IMETHOD ListAllOfflineDeletes(nsMsgKeyArray * offlineDeletes) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineDeletes(offlineDeletes); } \
  NS_IMETHOD ListAllOfflineMsgs(nsMsgKeyArray * offlineMsgs) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineMsgs(offlineMsgs); } \
  NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLowWaterArticleNum(aLowWaterArticleNum); } \
  NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHighWaterArticleNum(aHighWaterArticleNum); } \
  NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextFakeOfflineMsgKey(aNextFakeOfflineMsgKey); } \
  NS_IMETHOD CreateCollationKey(const PRUnichar *sourceString, PRUint8 * *key, PRUint32 *len) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateCollationKey(sourceString, key, len); } \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CompareCollationKeys(key1, len1, key2, len2, _retval); } \
  NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultViewFlags(aDefaultViewFlags); } \
  NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultSortType(aDefaultSortType); } \
  NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_IMETHOD SetFolderStream(nsIOFileStream *aFileStream) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFolderStream(aFileStream); } \
  NS_IMETHOD GetNewList(nsMsgKeyArray * *aNewList) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNewList(aNewList); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgDatabase : public nsIMsgDatabase
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGDATABASE

  nsMsgDatabase();
  virtual ~nsMsgDatabase();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgDatabase, nsIMsgDatabase)

nsMsgDatabase::nsMsgDatabase()
{
  /* member initializers and constructor code */
}

nsMsgDatabase::~nsMsgDatabase()
{
  /* destructor code */
}

/* nsIMsgDatabase Open (in nsIFileSpec folderName, in boolean create, in boolean upgrading); */
NS_IMETHODIMP nsMsgDatabase::Open(nsIFileSpec *folderName, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDatabase OpenFolderDB (in nsIMsgFolder folder, in boolean create, in boolean upgrading); */
NS_IMETHODIMP nsMsgDatabase::OpenFolderDB(nsIMsgFolder *folder, PRBool create, PRBool upgrading, nsIMsgDatabase **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void Close (in boolean forceCommit); */
NS_IMETHODIMP nsMsgDatabase::Close(PRBool forceCommit)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void Commit (in nsMsgDBCommit commitType); */
NS_IMETHODIMP nsMsgDatabase::Commit(nsMsgDBCommit commitType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void ForceClosed (); */
NS_IMETHODIMP nsMsgDatabase::ForceClosed()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearCachedHdrs (); */
NS_IMETHODIMP nsMsgDatabase::ClearCachedHdrs()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void resetHdrCacheSize (in unsigned long size); */
NS_IMETHODIMP nsMsgDatabase::ResetHdrCacheSize(PRUint32 size)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIDBFolderInfo dBFolderInfo; */
NS_IMETHODIMP nsMsgDatabase::GetDBFolderInfo(nsIDBFolderInfo * *aDBFolderInfo)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetMsgHdrForKey (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr getMsgHdrForMessageID (in string messageID); */
NS_IMETHODIMP nsMsgDatabase::GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean ContainsKey (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::ContainsKey(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr CreateNewHdr (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void AddNewHdrToDB (in nsIMsgDBHdr newHdr, in boolean notify); */
NS_IMETHODIMP nsMsgDatabase::AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr CopyHdrFromExistingHdr (in nsMsgKey key, in nsIMsgDBHdr existingHdr, in boolean addHdrToDB); */
NS_IMETHODIMP nsMsgDatabase::CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void ListAllKeys (in nsMsgKeyArrayRef outputKeys); */
NS_IMETHODIMP nsMsgDatabase::ListAllKeys(nsMsgKeyArray & outputKeys)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator EnumerateMessages (); */
NS_IMETHODIMP nsMsgDatabase::EnumerateMessages(nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator EnumerateThreads (); */
NS_IMETHODIMP nsMsgDatabase::EnumerateThreads(nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean hasThreads (); */
NS_IMETHODIMP nsMsgDatabase::HasThreads(PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgThread GetThreadContainingMsgHdr (in nsIMsgDBHdr msgHdr); */
NS_IMETHODIMP nsMsgDatabase::GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkHdrRead (in nsIMsgDBHdr msgHdr, in boolean bRead, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkHdrReplied (in nsIMsgDBHdr msgHdr, in boolean bReplied, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkHdrMarked (in nsIMsgDBHdr msgHdr, in boolean mark, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkMDNNeeded (in nsMsgKey key, in boolean bNeeded, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean IsMDNNeeded (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::IsMDNNeeded(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkMDNSent (in nsMsgKey key, in boolean bNeeded, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean IsMDNSent (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::IsMDNSent(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkRead (in nsMsgKey key, in boolean bRead, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkReplied (in nsMsgKey key, in boolean bReplied, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkForwarded (in nsMsgKey key, in boolean bForwarded, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkHasAttachments (in nsMsgKey key, in boolean bHasAttachments, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void MarkThreadRead (in nsIMsgThread thread, in nsIDBChangeListener instigator, in nsMsgKeyArrayPtr thoseMarked); */
NS_IMETHODIMP nsMsgDatabase::MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray * thoseMarked)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkThreadIgnored (in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bIgnored, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkThreadWatched (in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bWatched, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean IsRead (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::IsRead(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean IsIgnored (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::IsIgnored(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean IsMarked (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::IsMarked(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean HasAttachments (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::HasAttachments(nsMsgKey key, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void MarkAllRead (in nsMsgKeyArrayPtr thoseMarked); */
NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsMsgKeyArray * thoseMarked)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void MarkReadByDate (in PRTime startDate, in PRTime endDate, in nsMsgKeyArrayPtr markedIds); */
NS_IMETHODIMP nsMsgDatabase::MarkReadByDate(PRTime startDate, PRTime endDate, nsMsgKeyArray * markedIds)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void DeleteMessages (in nsMsgKeyArrayPtr nsMsgKeys, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::DeleteMessages(nsMsgKeyArray * nsMsgKeys, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void DeleteMessage (in nsMsgKey key, in nsIDBChangeListener instigator, in boolean commit); */
NS_IMETHODIMP nsMsgDatabase::DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void DeleteHeader (in nsIMsgDBHdr msgHdr, in nsIDBChangeListener instigator, in boolean commit, in boolean notify); */
NS_IMETHODIMP nsMsgDatabase::DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void RemoveHeaderMdbRow (in nsIMsgDBHdr msgHdr); */
NS_IMETHODIMP nsMsgDatabase::RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void UndoDelete (in nsIMsgDBHdr msgHdr); */
NS_IMETHODIMP nsMsgDatabase::UndoDelete(nsIMsgDBHdr *msgHdr)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkLater (in nsMsgKey key, in PRTime until); */
NS_IMETHODIMP nsMsgDatabase::MarkLater(nsMsgKey key, PRTime until)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkMarked (in nsMsgKey key, in boolean mark, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkOffline (in nsMsgKey key, in boolean offline, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void SetLabel (in nsMsgKey key, in nsMsgLabelValue label); */
NS_IMETHODIMP nsMsgDatabase::SetLabel(nsMsgKey key, nsMsgLabelValue label)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setStringProperty (in nsMsgKey aKey, in string aProperty, in string aValue); */
NS_IMETHODIMP nsMsgDatabase::SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void AllMsgKeysImapDeleted (in nsMsgKeyArrayPtr keys, out boolean allDeleted); */
NS_IMETHODIMP nsMsgDatabase::AllMsgKeysImapDeleted(nsMsgKeyArray * keys, PRBool *allDeleted)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkImapDeleted (in nsMsgKey key, in boolean deleted, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgKey FirstNew; */
NS_IMETHODIMP nsMsgDatabase::GetFirstNew(nsMsgKey *aFirstNew)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIMsgRetentionSettings msgRetentionSettings; */
NS_IMETHODIMP nsMsgDatabase::GetMsgRetentionSettings(nsIMsgRetentionSettings * *aMsgRetentionSettings)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetMsgRetentionSettings(nsIMsgRetentionSettings * aMsgRetentionSettings)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void ApplyRetentionSettings (in nsIMsgRetentionSettings msgRetentionSettings); */
NS_IMETHODIMP nsMsgDatabase::ApplyRetentionSettings(nsIMsgRetentionSettings *msgRetentionSettings)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIMsgDownloadSettings msgDownloadSettings; */
NS_IMETHODIMP nsMsgDatabase::GetMsgDownloadSettings(nsIMsgDownloadSettings * *aMsgDownloadSettings)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetMsgDownloadSettings(nsIMsgDownloadSettings * aMsgDownloadSettings)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean HasNew (); */
NS_IMETHODIMP nsMsgDatabase::HasNew(PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void ClearNewList (in boolean notify); */
NS_IMETHODIMP nsMsgDatabase::ClearNewList(PRBool notify)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void AddToNewList (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::AddToNewList(nsMsgKey key)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean summaryValid; */
NS_IMETHODIMP nsMsgDatabase::GetSummaryValid(PRBool *aSummaryValid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetSummaryValid(PRBool aSummaryValid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void StartBatch (); */
NS_IMETHODIMP nsMsgDatabase::StartBatch()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void EndBatch (); */
NS_IMETHODIMP nsMsgDatabase::EndBatch()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgOfflineImapOperation GetOfflineOpForKey (in nsMsgKey messageKey, in boolean create); */
NS_IMETHODIMP nsMsgDatabase::GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void RemoveOfflineOp (in nsIMsgOfflineImapOperation op); */
NS_IMETHODIMP nsMsgDatabase::RemoveOfflineOp(nsIMsgOfflineImapOperation *op)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator EnumerateOfflineOps (); */
NS_IMETHODIMP nsMsgDatabase::EnumerateOfflineOps(nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void ListAllOfflineOpIds (in nsMsgKeyArrayPtr offlineOpIds); */
NS_IMETHODIMP nsMsgDatabase::ListAllOfflineOpIds(nsMsgKeyArray * offlineOpIds)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void ListAllOfflineDeletes (in nsMsgKeyArrayPtr offlineDeletes); */
NS_IMETHODIMP nsMsgDatabase::ListAllOfflineDeletes(nsMsgKeyArray * offlineDeletes)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void ListAllOfflineMsgs (in nsMsgKeyArrayPtr offlineMsgs); */
NS_IMETHODIMP nsMsgDatabase::ListAllOfflineMsgs(nsMsgKeyArray * offlineMsgs)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgKey lowWaterArticleNum; */
NS_IMETHODIMP nsMsgDatabase::GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgKey highWaterArticleNum; */
NS_IMETHODIMP nsMsgDatabase::GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgKey nextPseudoMsgKey; */
NS_IMETHODIMP nsMsgDatabase::GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgKey nextFakeOfflineMsgKey; */
NS_IMETHODIMP nsMsgDatabase::GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void createCollationKey (in wstring sourceString, out octetPtr key, out unsigned long len); */
NS_IMETHODIMP nsMsgDatabase::CreateCollationKey(const PRUnichar *sourceString, PRUint8 * *key, PRUint32 *len)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] long compareCollationKeys (out octet key1, in unsigned long len1, out octet key2, in unsigned long len2); */
NS_IMETHODIMP nsMsgDatabase::CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewFlagsTypeValue defaultViewFlags; */
NS_IMETHODIMP nsMsgDatabase::GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewSortTypeValue defaultSortType; */
NS_IMETHODIMP nsMsgDatabase::GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long msgHdrCacheSize; */
NS_IMETHODIMP nsMsgDatabase::GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setFolderStream (in nsIOFileStream aFileStream); */
NS_IMETHODIMP nsMsgDatabase::SetFolderStream(nsIOFileStream *aFileStream)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute nsMsgKeyArrayPtr newList; */
NS_IMETHODIMP nsMsgDatabase::GetNewList(nsMsgKeyArray * *aNewList)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIMsgDatabase_h__ */
