/*
 * 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 "nsTArray.h"
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 nsIOutputStream; /* forward declaration */

class nsIUrlListener; /* forward declaration */

class nsILocalFile; /* forward declaration */

class nsIArray; /* forward declaration */

typedef PRUint32  nsMsgRetainByPreference;


/* starting interface:    nsIMsgRetentionSettings */
#define NS_IMSGRETENTIONSETTINGS_IID_STR "b01d6b3b-78c2-4958-b836-2259c76dbc24"

#define NS_IMSGRETENTIONSETTINGS_IID \
  {0xb01d6b3b, 0x78c2, 0x4958, \
    { 0xb8, 0x36, 0x22, 0x59, 0xc7, 0x6d, 0xbc, 0x24 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgRetentionSettings : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGRETENTIONSETTINGS_IID)

  enum { nsMsgRetainAll = 1U };

  enum { nsMsgRetainByAge = 2U };

  enum { nsMsgRetainByNumHeaders = 3U };

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

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

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

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

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

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

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

  /**
   * Should retention settings be applied to flagged/starred messages?
   * If false, flagged messages are never automatically deleted.
   */
  /* attribute boolean applyToFlaggedMessages; */
  NS_SCRIPTABLE NS_IMETHOD GetApplyToFlaggedMessages(PRBool *aApplyToFlaggedMessages) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetApplyToFlaggedMessages(PRBool aApplyToFlaggedMessages) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgRetentionSettings, NS_IMSGRETENTIONSETTINGS_IID)

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

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

/* 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_SCRIPTABLE NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD GetRetainByPreference(nsMsgRetainByPreference *aRetainByPreference) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRetainByPreference(aRetainByPreference); } \
  NS_SCRIPTABLE NS_IMETHOD SetRetainByPreference(nsMsgRetainByPreference aRetainByPreference) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRetainByPreference(aRetainByPreference); } \
  NS_SCRIPTABLE NS_IMETHOD GetDaysToKeepHdrs(PRUint32 *aDaysToKeepHdrs) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_SCRIPTABLE NS_IMETHOD SetDaysToKeepHdrs(PRUint32 aDaysToKeepHdrs) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDaysToKeepHdrs(aDaysToKeepHdrs); } \
  NS_SCRIPTABLE NS_IMETHOD GetNumHeadersToKeep(PRUint32 *aNumHeadersToKeep) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_SCRIPTABLE NS_IMETHOD SetNumHeadersToKeep(PRUint32 aNumHeadersToKeep) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNumHeadersToKeep(aNumHeadersToKeep); } \
  NS_SCRIPTABLE NS_IMETHOD GetKeepUnreadMessagesOnly(PRBool *aKeepUnreadMessagesOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_SCRIPTABLE NS_IMETHOD SetKeepUnreadMessagesOnly(PRBool aKeepUnreadMessagesOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetKeepUnreadMessagesOnly(aKeepUnreadMessagesOnly); } \
  NS_SCRIPTABLE NS_IMETHOD GetCleanupBodiesByDays(PRBool *aCleanupBodiesByDays) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_SCRIPTABLE NS_IMETHOD SetCleanupBodiesByDays(PRBool aCleanupBodiesByDays) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCleanupBodiesByDays(aCleanupBodiesByDays); } \
  NS_SCRIPTABLE NS_IMETHOD GetDaysToKeepBodies(PRUint32 *aDaysToKeepBodies) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDaysToKeepBodies(aDaysToKeepBodies); } \
  NS_SCRIPTABLE NS_IMETHOD SetDaysToKeepBodies(PRUint32 aDaysToKeepBodies) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDaysToKeepBodies(aDaysToKeepBodies); } \
  NS_SCRIPTABLE NS_IMETHOD GetApplyToFlaggedMessages(PRBool *aApplyToFlaggedMessages) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetApplyToFlaggedMessages(aApplyToFlaggedMessages); } \
  NS_SCRIPTABLE NS_IMETHOD SetApplyToFlaggedMessages(PRBool aApplyToFlaggedMessages) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetApplyToFlaggedMessages(aApplyToFlaggedMessages); } 

#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();

private:
  ~nsMsgRetentionSettings();

protected:
  /* 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;
}

/* attribute boolean applyToFlaggedMessages; */
NS_IMETHODIMP nsMsgRetentionSettings::GetApplyToFlaggedMessages(PRBool *aApplyToFlaggedMessages)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgRetentionSettings::SetApplyToFlaggedMessages(PRBool aApplyToFlaggedMessages)
{
    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 NS_SCRIPTABLE nsIMsgDownloadSettings : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGDOWNLOADSETTINGS_IID)

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

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

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

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

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgDownloadSettings, NS_IMSGDOWNLOADSETTINGS_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDOWNLOADSETTINGS \
  NS_SCRIPTABLE NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults); \
  NS_SCRIPTABLE NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults); \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate); \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate); \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly); \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly); \
  NS_SCRIPTABLE NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload); \
  NS_SCRIPTABLE 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_SCRIPTABLE NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return _to GetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return _to SetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate) { return _to GetDownloadByDate(aDownloadByDate); } \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate) { return _to SetDownloadByDate(aDownloadByDate); } \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly) { return _to GetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly) { return _to SetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_SCRIPTABLE NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload) { return _to GetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } \
  NS_SCRIPTABLE 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_SCRIPTABLE NS_IMETHOD GetUseServerDefaults(PRBool *aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD SetUseServerDefaults(PRBool aUseServerDefaults) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUseServerDefaults(aUseServerDefaults); } \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadByDate(PRBool *aDownloadByDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDownloadByDate(aDownloadByDate); } \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadByDate(PRBool aDownloadByDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDownloadByDate(aDownloadByDate); } \
  NS_SCRIPTABLE NS_IMETHOD GetDownloadUnreadOnly(PRBool *aDownloadUnreadOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_SCRIPTABLE NS_IMETHOD SetDownloadUnreadOnly(PRBool aDownloadUnreadOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDownloadUnreadOnly(aDownloadUnreadOnly); } \
  NS_SCRIPTABLE NS_IMETHOD GetAgeLimitOfMsgsToDownload(PRUint32 *aAgeLimitOfMsgsToDownload) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAgeLimitOfMsgsToDownload(aAgeLimitOfMsgsToDownload); } \
  NS_SCRIPTABLE 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();

private:
  ~nsMsgDownloadSettings();

protected:
  /* 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 NS_SCRIPTABLE nsMsgDBCommitType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGDBCOMMITTYPE_IID)

  enum { kSmallCommit = 0 };

  enum { kLargeCommit = 1 };

  enum { kSessionCommit = 2 };

  enum { kCompressCommit = 3 };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgDBCommitType, NS_MSGDBCOMMITTYPE_IID)

/* 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_();

private:
  ~_MYCLASS_();

protected:
  /* 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:    nsIMsgDBService */
#define NS_IMSGDBSERVICE_IID_STR "6ddaeb28-0499-4be1-85f7-7a5d20f80256"

#define NS_IMSGDBSERVICE_IID \
  {0x6ddaeb28, 0x0499, 0x4be1, \
    { 0x85, 0xf7, 0x7a, 0x5d, 0x20, 0xf8, 0x02, 0x56 }}

/**
 * A service to open mail databases and manipulate listeners automatically.
 *
 * The contract ID for this component is
 * <tt>\@mozilla.org/msgDatabase/msgDBService;1</tt>.
 */
class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgDBService : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGDBSERVICE_IID)

  /**
   * Opens a database for a given folder.
   *
   * This method is preferred over nsIMsgDBService::openMailDBFromFile if the
   * caller has an actual nsIMsgFolder around. If the database detects that it
   * is unreadable or out of date (using nsIMsgDatabase::outOfDate) it will
   * destroy itself and prepare to be rebuilt, unless aLeaveInvalidDB is true.
   *
   * If one gets a NS_MSG_ERROR_FOLDER_SUMMARY_MISSING message, then one
   * should call nsIMsgDBService::createNewDB to create the new database.
   *
   * @param aFolder         The folder whose database should be returned.
   * @param aLeaveInvalidDB Whether or not the database should be deleted if it
   *                        is invalid.
   * @return                A new nsIMsgDatabase object representing the folder
   *                        database that was opened.
   * @exception NS_ERROR_FILE_TARGET_DOES_NOT_EXIST
   *                        The file could not be created.
   * @exception NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE
   *                        The database is present (and was opened), but the
   *                        summary file is out of date.
   * @exception NS_MSG_ERROR_FOLDER_SUMMARY_MISSING
   *                        The database is present, but the summary file is
   *                        missing.
   * @see nsIMsgDatabase::Open
   * @see nsIMsgDBService::createNewDB
   */
  /* nsIMsgDatabase openFolderDB (in nsIMsgFolder aFolder, in boolean aLeaveInvalidDB); */
  NS_SCRIPTABLE NS_IMETHOD OpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) = 0;

  /**
   * This is the same as a synchronous open in terms of params and errors.
   * But to finish opening the db, the caller must call
   * nsIMsgDBService::OpenMore repeatedly until the open is finished.
   * @see nsIMsgDBService::openFolderDB
   * @see nsIMsgDBService::openMore
   */
  /* nsIMsgDatabase asyncOpenFolderDB (in nsIMsgFolder aFolder, in boolean aLeaveInvalidDB); */
  NS_SCRIPTABLE NS_IMETHOD AsyncOpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) = 0;

  /**
   * Continues the open process for a db opened with
   * nsIMsgDBService::asyncOpenFolderDB. Returns true if the db is ready
   * to use, false if openMore needs to be called again.
   * This will throw the same kinds of exceptions as openFolderDB.
   * @param aTimeHint approximate number of milliseconds to spend
   *                  before returning. This is more of a floor than
                      a ceiling, since we can't guarantee that there
                      won't be one big chunk that we can't interrupt.
   * @return true if db is ready to use, false if openMore needs to
   *         be called again.
   * @see nsIMsgDBService::openFolderDB
   */
  /* boolean openMore (in nsIMsgDatabase aDB, in long aTimeHint); */
  NS_SCRIPTABLE NS_IMETHOD OpenMore(nsIMsgDatabase *aDB, PRInt32 aTimeHint, PRBool *_retval NS_OUTPARAM) = 0;

  /**
   * Creates a new database for the given folder.
   *
   * If the database already exists, it will return the database, emit a
   * warning, but not fully initialize it. For this reason, it should only be
   * used when it is known that the database does not exist, such as when
   * nsIMsgDBService::openFolderDB throws an error.
   *
   * @see nsIMsgDBService::openFolderDB
   */
  /* nsIMsgDatabase createNewDB (in nsIMsgFolder aFolder); */
  NS_SCRIPTABLE NS_IMETHOD CreateNewDB(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) = 0;

  /**
   * Opens or creates a database for a given file.
   *
   * This method should only be used if the caller does not have a folder
   * instance, because the resulting db and message headers retrieved from the
   * database would not know their owning folder, which limits their usefulness.
   * For this reason, one should use nsIMsgDBService::openFolderDB instead
   * except under special circumstances.
   *
   * Unlike nsIMsgDBService::openFolderDB, there is no corresponding method to
   * create a new database if opening the database failed. However, this method
   * will never throw NS_MSG_ERROR_FOLDER_SUMMARY_MISSING, so no corresponding
   * method is needed.
   *
   * @param aFile           The file for which the database should be returned.
   * @param aCreate         Whether or not the file should be created.
   * @param aLeaveInvalidDB Whether or not the database should be deleted if it
   *                        is invalid.
   * @return                A new nsIMsgDatabase object encapsulating the file
   *                        passed in.
   * @exception NS_ERROR_FILE_TARGET_DOES_NOT_EXIST
   *                        The file could not be created.
   * @see nsIMsgDBService::openFolderDB
   * @see nsIMsgDatabase::Open
   */
  /* nsIMsgDatabase openMailDBFromFile (in nsILocalFile aFile, in boolean aCreate, in boolean aLeaveInvalidDB); */
  NS_SCRIPTABLE NS_IMETHOD OpenMailDBFromFile(nsILocalFile *aFile, PRBool aCreate, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) = 0;

  /**
   * Adds the given listener to the listener set for the folder.
   *
   * Since the message database will likely be opened and closed many times, by
   * registering using this method, one will be guaranteed to see all subsequent
   * modifications. This will also add the listener to the database if it is
   * already opened.
   *
   * @param aFolder         The folder to add a listener to.
   * @param aListener       The listener to add the folder to.
   */
  /* void registerPendingListener (in nsIMsgFolder aFolder, in nsIDBChangeListener aListener); */
  NS_SCRIPTABLE NS_IMETHOD RegisterPendingListener(nsIMsgFolder *aFolder, nsIDBChangeListener *aListener) = 0;

  /**
   * Removes the listener from all folder listener sets.
   *
   * @param aListener       The listener to remove.
   * @exception NS_ERROR_FAILURE
   *                        The listener is not registered.
   */
  /* void unregisterPendingListener (in nsIDBChangeListener aListener); */
  NS_SCRIPTABLE NS_IMETHOD UnregisterPendingListener(nsIDBChangeListener *aListener) = 0;

  /**
   * Get the db for a folder, if already open.
   *
   * @param aFolder   The folder to get the cached (open) db for.
   *
   * @returns         null if the db isn't open, otherwise the db.
   */
  /* nsIMsgDatabase cachedDBForFolder (in nsIMsgFolder aFolder); */
  NS_SCRIPTABLE NS_IMETHOD CachedDBForFolder(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgDBService, NS_IMSGDBSERVICE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDBSERVICE \
  NS_SCRIPTABLE NS_IMETHOD OpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD AsyncOpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD OpenMore(nsIMsgDatabase *aDB, PRInt32 aTimeHint, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD CreateNewDB(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD OpenMailDBFromFile(nsILocalFile *aFile, PRBool aCreate, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD RegisterPendingListener(nsIMsgFolder *aFolder, nsIDBChangeListener *aListener); \
  NS_SCRIPTABLE NS_IMETHOD UnregisterPendingListener(nsIDBChangeListener *aListener); \
  NS_SCRIPTABLE NS_IMETHOD CachedDBForFolder(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD OpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return _to OpenFolderDB(aFolder, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD AsyncOpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return _to AsyncOpenFolderDB(aFolder, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD OpenMore(nsIMsgDatabase *aDB, PRInt32 aTimeHint, PRBool *_retval NS_OUTPARAM) { return _to OpenMore(aDB, aTimeHint, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD CreateNewDB(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) { return _to CreateNewDB(aFolder, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD OpenMailDBFromFile(nsILocalFile *aFile, PRBool aCreate, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return _to OpenMailDBFromFile(aFile, aCreate, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RegisterPendingListener(nsIMsgFolder *aFolder, nsIDBChangeListener *aListener) { return _to RegisterPendingListener(aFolder, aListener); } \
  NS_SCRIPTABLE NS_IMETHOD UnregisterPendingListener(nsIDBChangeListener *aListener) { return _to UnregisterPendingListener(aListener); } \
  NS_SCRIPTABLE NS_IMETHOD CachedDBForFolder(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) { return _to CachedDBForFolder(aFolder, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGDBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD OpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->OpenFolderDB(aFolder, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD AsyncOpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->AsyncOpenFolderDB(aFolder, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD OpenMore(nsIMsgDatabase *aDB, PRInt32 aTimeHint, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->OpenMore(aDB, aTimeHint, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD CreateNewDB(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateNewDB(aFolder, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD OpenMailDBFromFile(nsILocalFile *aFile, PRBool aCreate, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->OpenMailDBFromFile(aFile, aCreate, aLeaveInvalidDB, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RegisterPendingListener(nsIMsgFolder *aFolder, nsIDBChangeListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->RegisterPendingListener(aFolder, aListener); } \
  NS_SCRIPTABLE NS_IMETHOD UnregisterPendingListener(nsIDBChangeListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->UnregisterPendingListener(aListener); } \
  NS_SCRIPTABLE NS_IMETHOD CachedDBForFolder(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CachedDBForFolder(aFolder, _retval); } 

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

/* Header file */
class nsMsgDBService : public nsIMsgDBService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGDBSERVICE

  nsMsgDBService();

private:
  ~nsMsgDBService();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgDBService, nsIMsgDBService)

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

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

/* nsIMsgDatabase openFolderDB (in nsIMsgFolder aFolder, in boolean aLeaveInvalidDB); */
NS_IMETHODIMP nsMsgDBService::OpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDatabase asyncOpenFolderDB (in nsIMsgFolder aFolder, in boolean aLeaveInvalidDB); */
NS_IMETHODIMP nsMsgDBService::AsyncOpenFolderDB(nsIMsgFolder *aFolder, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean openMore (in nsIMsgDatabase aDB, in long aTimeHint); */
NS_IMETHODIMP nsMsgDBService::OpenMore(nsIMsgDatabase *aDB, PRInt32 aTimeHint, PRBool *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDatabase createNewDB (in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgDBService::CreateNewDB(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDatabase openMailDBFromFile (in nsILocalFile aFile, in boolean aCreate, in boolean aLeaveInvalidDB); */
NS_IMETHODIMP nsMsgDBService::OpenMailDBFromFile(nsILocalFile *aFile, PRBool aCreate, PRBool aLeaveInvalidDB, nsIMsgDatabase **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void registerPendingListener (in nsIMsgFolder aFolder, in nsIDBChangeListener aListener); */
NS_IMETHODIMP nsMsgDBService::RegisterPendingListener(nsIMsgFolder *aFolder, nsIDBChangeListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void unregisterPendingListener (in nsIDBChangeListener aListener); */
NS_IMETHODIMP nsMsgDBService::UnregisterPendingListener(nsIDBChangeListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDatabase cachedDBForFolder (in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgDBService::CachedDBForFolder(nsIMsgFolder *aFolder, nsIMsgDatabase **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    nsIMsgDatabase */
#define NS_IMSGDATABASE_IID_STR "2ddc3efe-743d-4b8c-b761-6ed75ed06737"

#define NS_IMSGDATABASE_IID \
  {0x2ddc3efe, 0x743d, 0x4b8c, \
    { 0xb7, 0x61, 0x6e, 0xd7, 0x5e, 0xd0, 0x67, 0x37 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgDatabase : public nsIDBChangeAnnouncer {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGDATABASE_IID)

  /**
   * Opens a database folder.
   *
   * @param aFolderName     The name of the folder to create.
   * @param aCreate         Whether or not the file should be created.
   * @param aLeaveInvalidDB Set to true if you do not want the database to be
   *                        deleted if it is invalid.
   * @exception NS_ERROR_FILE_TARGET_DOES_NOT_EXIST
   *                        The file could not be created.
   * @exception NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE
   *                        The database is present (and was opened), but the
   *                        summary file is out of date.
   * @exception NS_MSG_ERROR_FOLDER_SUMMARY_MISSING
   *                        The database is present (and was opened), but the
   *                        summary file is missing.
   */
  /* void Open (in nsILocalFile aFolderName, in boolean aCreate, in boolean aLeaveInvalidDB); */
  NS_SCRIPTABLE NS_IMETHOD Open(nsILocalFile *aFolderName, PRBool aCreate, PRBool aLeaveInvalidDB) = 0;

  /* void forceFolderDBClosed (in nsIMsgFolder aFolder); */
  NS_SCRIPTABLE NS_IMETHOD ForceFolderDBClosed(nsIMsgFolder *aFolder) = 0;

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

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

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

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

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

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

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

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

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

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

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

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

  /* [noscript] void ListAllKeys (in nsMsgKeyArrayRef outputKeys); */
  NS_IMETHOD ListAllKeys(nsTArray<nsMsgKey> & outputKeys) = 0;

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

  /* nsISimpleEnumerator ReverseEnumerateMessages (); */
  NS_SCRIPTABLE NS_IMETHOD ReverseEnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM) = 0;

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

  /**
   * Get an enumerator for use with nextMatchingHdrs. The enumerator
   * will only return messages that match the passed-in search terms.
   *
   * @param     searchTerms       array of search terms to evaluate.
   * @param     reverse           start at the end, defaults to false.
   *
   * @returns   an enumerator for passing into nextMatchingHdrs
   */
  /* nsISimpleEnumerator getFilterEnumerator (in nsIArray searchTerms, [optional] in boolean reverse); */
  NS_SCRIPTABLE NS_IMETHOD GetFilterEnumerator(nsIArray *searchTerms, PRBool reverse, nsISimpleEnumerator **_retval NS_OUTPARAM) = 0;

  /**
   * Get the next N matching headers using a filter enumerator
   * obtained by calling getFilterEnumerator.
   *
   * @param     enumerator -      This *must* be a filter enumerator
   * @param     numHdrsToLookAt   if non 0, the number of hdrs to advance the
   *                              enumerator before returning.
   * @param     maxResults        if non 0, the max results to return.
   * @param     matchingHdrs      if non null, array of matching hdrs.
   * @param     numMatches        if non null, the number of matching hdrs.
   *
   * @returns   false, if done, true if more hdrs to look at.
   */
  /* boolean nextMatchingHdrs (in nsISimpleEnumerator enumerator, in long numHdrsToLookAt, in long maxResults, in nsIMutableArray matchingHdrs, out long numMatches); */
  NS_SCRIPTABLE NS_IMETHOD NextMatchingHdrs(nsISimpleEnumerator *enumerator, PRInt32 numHdrsToLookAt, PRInt32 maxResults, nsIMutableArray *matchingHdrs, PRInt32 *numMatches NS_OUTPARAM, PRBool *_retval NS_OUTPARAM) = 0;

  /* void syncCounts (); */
  NS_SCRIPTABLE NS_IMETHOD SyncCounts(void) = 0;

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

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

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

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

  /**
   * Remove the new status from a message.
   *
   * @param aMsgHdr        The database reference header for the message
   * @param aInstigator    Reference to original calling object
   */
  /* void MarkHdrNotNew (in nsIMsgDBHdr aMsgHdr, in nsIDBChangeListener aInstigator); */
  NS_SCRIPTABLE NS_IMETHOD MarkHdrNotNew(nsIMsgDBHdr *aMsgHdr, nsIDBChangeListener *aInstigator) = 0;

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

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

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

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

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

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

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

  /* void MarkHasAttachments (in nsMsgKey key, in boolean bHasAttachments, in nsIDBChangeListener instigator); */
  NS_SCRIPTABLE 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, nsTArray<nsMsgKey> *thoseMarked) = 0;

  /* void MarkThreadIgnored (in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bIgnored, in nsIDBChangeListener instigator); */
  NS_SCRIPTABLE 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_SCRIPTABLE NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) = 0;

  /* void MarkHeaderKilled (in nsIMsgDBHdr msg, in boolean bIgnored, in nsIDBChangeListener instigator); */
  NS_SCRIPTABLE NS_IMETHOD MarkHeaderKilled(nsIMsgDBHdr *msg, PRBool bIgnored, nsIDBChangeListener *instigator) = 0;

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

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

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

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

  /* [noscript] void MarkAllRead (in nsMsgKeyArrayPtr thoseMarked); */
  NS_IMETHOD MarkAllRead(nsTArray<nsMsgKey> *thoseMarked) = 0;

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

  /* void deleteMessages (in unsigned long aNumKeys, [array, size_is (aNumKeys)] in nsMsgKey nsMsgKeys, in nsIDBChangeListener instigator); */
  NS_SCRIPTABLE NS_IMETHOD DeleteMessages(PRUint32 aNumKeys, nsMsgKey *nsMsgKeys, nsIDBChangeListener *instigator) = 0;

  /* void DeleteMessage (in nsMsgKey key, in nsIDBChangeListener instigator, in boolean commit); */
  NS_SCRIPTABLE 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_SCRIPTABLE NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) = 0;

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

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

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

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

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

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

  /**
   * Set the value of a string property in a message header
   *
   * @param msgHdr    Header of the message whose property will be changed
   * @param aProperty the property to change
   * @param aValue    new value for the property
   */
  /* void setStringPropertyByHdr (in nsIMsgDBHdr msgHdr, in string aProperty, in string aValue); */
  NS_SCRIPTABLE NS_IMETHOD SetStringPropertyByHdr(nsIMsgDBHdr *msgHdr, const char *aProperty, const char *aValue) = 0;

  /**
   * Set the value of a uint32 property in a message header.
   *
   * @param aMsgHdr   header of the message whose property will be changed
   * @param aProperty the property to change
   * @param aValue    new value for the property
   */
  /* void setUint32PropertyByHdr (in nsIMsgDBHdr aMsgHdr, in string aProperty, in unsigned long aValue); */
  NS_SCRIPTABLE NS_IMETHOD SetUint32PropertyByHdr(nsIMsgDBHdr *aMsgHdr, const char *aProperty, PRUint32 aValue) = 0;

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

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

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

  /* void applyRetentionSettings (in nsIMsgRetentionSettings aMsgRetentionSettings, in boolean aDeleteViaFolder); */
  NS_SCRIPTABLE NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings, PRBool aDeleteViaFolder) = 0;

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

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

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

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

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

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

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

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

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

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

  /* [noscript] void ListAllOfflineOpIds (in nsMsgKeyArrayPtr offlineOpIds); */
  NS_IMETHOD ListAllOfflineOpIds(nsTArray<nsMsgKey> *offlineOpIds) = 0;

  /* [noscript] void ListAllOfflineDeletes (in nsMsgKeyArrayPtr offlineDeletes); */
  NS_IMETHOD ListAllOfflineDeletes(nsTArray<nsMsgKey> *offlineDeletes) = 0;

  /* [noscript] void ListAllOfflineMsgs (in nsMsgKeyArrayPtr offlineMsgs); */
  NS_IMETHOD ListAllOfflineMsgs(nsTArray<nsMsgKey> *offlineMsgs) = 0;

  /* void setAttributeOnPendingHdr (in nsIMsgDBHdr pendingHdr, in string property, in string propertyVal); */
  NS_SCRIPTABLE NS_IMETHOD SetAttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, const char *propertyVal) = 0;

  /* void setUint32AttributeOnPendingHdr (in nsIMsgDBHdr pendingHdr, in string property, in unsigned long propertyVal); */
  NS_SCRIPTABLE NS_IMETHOD SetUint32AttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, PRUint32 propertyVal) = 0;

  /**
   * Sets a pending 64 bit attribute, which tells the DB that when a message
   * which looks like the pendingHdr (e.g., same message-id) is added to the
   * db, set the passed in property and value on the new header. This is
   * usually because we've copied an imap message to a different folder, and
   * want to carry forward attributes from the original message to the copy,
   * but don't have the message hdr for the copy yet so we can't set
   * attributes directly.
   *
   * @param aPendingHdr usually the source of the copy.
   * @param aProperty name of property to set.
   * @param aPropertyVal 64 bit value of property to set.
   */
  /* void setUint64AttributeOnPendingHdr (in nsIMsgDBHdr aPendingHdr, in string aProperty, in unsigned long long aPropertyVal); */
  NS_SCRIPTABLE NS_IMETHOD SetUint64AttributeOnPendingHdr(nsIMsgDBHdr *aPendingHdr, const char *aProperty, PRUint64 aPropertyVal) = 0;

  /**
   * Given a message header with its message-id set, update any pending
   *  attributes on the header.
   *
   * @param aNewHdr a new header that may have pending attributes.
   */
  /* void updatePendingAttributes (in nsIMsgDBHdr aNewHdr); */
  NS_SCRIPTABLE NS_IMETHOD UpdatePendingAttributes(nsIMsgDBHdr *aNewHdr) = 0;

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

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

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

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

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

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

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

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

  /* readonly attribute nsMsgViewSortOrderValue defaultSortOrder; */
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortOrder(nsMsgViewSortOrderValue *aDefaultSortOrder) = 0;

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

  /* attribute nsIOutputStream folderStream; */
  NS_SCRIPTABLE NS_IMETHOD GetFolderStream(nsIOutputStream **aFolderStream) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetFolderStream(nsIOutputStream *aFolderStream) = 0;

  /**
   * The list of messages currently in the NEW state.
   * 
   * If there are no such messages, a null pointer may be returned.
   * the caller should free when done using nsMemory::Free.
   */
  /* void getNewList (out unsigned long count, [array, size_is (count)] out nsMsgKey newKeys); */
  NS_SCRIPTABLE NS_IMETHOD GetNewList(PRUint32 *count NS_OUTPARAM, nsMsgKey **newKeys NS_OUTPARAM) = 0;

  /* nsISimpleEnumerator getCachedHits (in string aSearchFolderUri); */
  NS_SCRIPTABLE NS_IMETHOD GetCachedHits(const char *aSearchFolderUri, nsISimpleEnumerator **_retval NS_OUTPARAM) = 0;

  /* void refreshCache (in string aSearchFolderUri, in unsigned long aNumKeys, [array, size_is (aNumKeys)] in nsMsgKey aNewHits, out unsigned long aNumBadHits, [array, size_is (aNumBadHits)] out nsMsgKey aStaleHits); */
  NS_SCRIPTABLE NS_IMETHOD RefreshCache(const char *aSearchFolderUri, PRUint32 aNumKeys, nsMsgKey *aNewHits, PRUint32 *aNumBadHits NS_OUTPARAM, nsMsgKey **aStaleHits NS_OUTPARAM) = 0;

  /* void updateHdrInCache (in string aSearchFolderUri, in nsIMsgDBHdr aHdr, in boolean aAdd); */
  NS_SCRIPTABLE NS_IMETHOD UpdateHdrInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool aAdd) = 0;

  /* boolean hdrIsInCache (in string aSearchFolderUri, in nsIMsgDBHdr aHdr); */
  NS_SCRIPTABLE NS_IMETHOD HdrIsInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool *_retval NS_OUTPARAM) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgDatabase, NS_IMSGDATABASE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDATABASE \
  NS_SCRIPTABLE NS_IMETHOD Open(nsILocalFile *aFolderName, PRBool aCreate, PRBool aLeaveInvalidDB); \
  NS_SCRIPTABLE NS_IMETHOD ForceFolderDBClosed(nsIMsgFolder *aFolder); \
  NS_SCRIPTABLE NS_IMETHOD Close(PRBool aForceCommit); \
  NS_SCRIPTABLE NS_IMETHOD Commit(nsMsgDBCommit commitType); \
  NS_SCRIPTABLE NS_IMETHOD ForceClosed(void); \
  NS_SCRIPTABLE NS_IMETHOD ClearCachedHdrs(void); \
  NS_SCRIPTABLE NS_IMETHOD ResetHdrCacheSize(PRUint32 size); \
  NS_SCRIPTABLE NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo **aDBFolderInfo); \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify); \
  NS_SCRIPTABLE NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval NS_OUTPARAM); \
  NS_IMETHOD ListAllKeys(nsTArray<nsMsgKey> & outputKeys); \
  NS_SCRIPTABLE NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD ReverseEnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetFilterEnumerator(nsIArray *searchTerms, PRBool reverse, nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD NextMatchingHdrs(nsISimpleEnumerator *enumerator, PRInt32 numHdrsToLookAt, PRInt32 maxResults, nsIMutableArray *matchingHdrs, PRInt32 *numMatches NS_OUTPARAM, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD SyncCounts(void); \
  NS_SCRIPTABLE NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrNotNew(nsIMsgDBHdr *aMsgHdr, nsIDBChangeListener *aInstigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator); \
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsTArray<nsMsgKey> *thoseMarked); \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkHeaderKilled(nsIMsgDBHdr *msg, PRBool bIgnored, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval NS_OUTPARAM); \
  NS_IMETHOD MarkAllRead(nsTArray<nsMsgKey> *thoseMarked); \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsTArray<nsMsgKey> *markedIds); \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessages(PRUint32 aNumKeys, nsMsgKey *nsMsgKeys, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit); \
  NS_SCRIPTABLE NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify); \
  NS_SCRIPTABLE NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr); \
  NS_SCRIPTABLE NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr); \
  NS_SCRIPTABLE NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label); \
  NS_SCRIPTABLE NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue); \
  NS_SCRIPTABLE NS_IMETHOD SetStringPropertyByHdr(nsIMsgDBHdr *msgHdr, const char *aProperty, const char *aValue); \
  NS_SCRIPTABLE NS_IMETHOD SetUint32PropertyByHdr(nsIMsgDBHdr *aMsgHdr, const char *aProperty, PRUint32 aValue); \
  NS_SCRIPTABLE NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator); \
  NS_SCRIPTABLE NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew); \
  NS_SCRIPTABLE NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings **aMsgRetentionSettings); \
  NS_SCRIPTABLE NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings); \
  NS_SCRIPTABLE NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings, PRBool aDeleteViaFolder); \
  NS_SCRIPTABLE NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings **aMsgDownloadSettings); \
  NS_SCRIPTABLE NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings *aMsgDownloadSettings); \
  NS_SCRIPTABLE NS_IMETHOD HasNew(PRBool *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD ClearNewList(PRBool notify); \
  NS_SCRIPTABLE NS_IMETHOD AddToNewList(nsMsgKey key); \
  NS_SCRIPTABLE NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid); \
  NS_SCRIPTABLE NS_IMETHOD SetSummaryValid(PRBool aSummaryValid); \
  NS_SCRIPTABLE NS_IMETHOD StartBatch(void); \
  NS_SCRIPTABLE NS_IMETHOD EndBatch(void); \
  NS_SCRIPTABLE NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op); \
  NS_SCRIPTABLE NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_IMETHOD ListAllOfflineOpIds(nsTArray<nsMsgKey> *offlineOpIds); \
  NS_IMETHOD ListAllOfflineDeletes(nsTArray<nsMsgKey> *offlineDeletes); \
  NS_IMETHOD ListAllOfflineMsgs(nsTArray<nsMsgKey> *offlineMsgs); \
  NS_SCRIPTABLE NS_IMETHOD SetAttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, const char *propertyVal); \
  NS_SCRIPTABLE NS_IMETHOD SetUint32AttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, PRUint32 propertyVal); \
  NS_SCRIPTABLE NS_IMETHOD SetUint64AttributeOnPendingHdr(nsIMsgDBHdr *aPendingHdr, const char *aProperty, PRUint64 aPropertyVal); \
  NS_SCRIPTABLE NS_IMETHOD UpdatePendingAttributes(nsIMsgDBHdr *aNewHdr); \
  NS_SCRIPTABLE NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum); \
  NS_SCRIPTABLE NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum); \
  NS_SCRIPTABLE NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey); \
  NS_SCRIPTABLE NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey); \
  NS_SCRIPTABLE NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey); \
  NS_IMETHOD CreateCollationKey(const nsAString & sourceString, PRUint8 **key NS_OUTPARAM, PRUint32 *len NS_OUTPARAM); \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags); \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType); \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortOrder(nsMsgViewSortOrderValue *aDefaultSortOrder); \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize); \
  NS_SCRIPTABLE NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize); \
  NS_SCRIPTABLE NS_IMETHOD GetFolderStream(nsIOutputStream **aFolderStream); \
  NS_SCRIPTABLE NS_IMETHOD SetFolderStream(nsIOutputStream *aFolderStream); \
  NS_SCRIPTABLE NS_IMETHOD GetNewList(PRUint32 *count NS_OUTPARAM, nsMsgKey **newKeys NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetCachedHits(const char *aSearchFolderUri, nsISimpleEnumerator **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD RefreshCache(const char *aSearchFolderUri, PRUint32 aNumKeys, nsMsgKey *aNewHits, PRUint32 *aNumBadHits NS_OUTPARAM, nsMsgKey **aStaleHits NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD UpdateHdrInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool aAdd); \
  NS_SCRIPTABLE NS_IMETHOD HdrIsInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool *_retval NS_OUTPARAM); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDATABASE(_to) \
  NS_SCRIPTABLE NS_IMETHOD Open(nsILocalFile *aFolderName, PRBool aCreate, PRBool aLeaveInvalidDB) { return _to Open(aFolderName, aCreate, aLeaveInvalidDB); } \
  NS_SCRIPTABLE NS_IMETHOD ForceFolderDBClosed(nsIMsgFolder *aFolder) { return _to ForceFolderDBClosed(aFolder); } \
  NS_SCRIPTABLE NS_IMETHOD Close(PRBool aForceCommit) { return _to Close(aForceCommit); } \
  NS_SCRIPTABLE NS_IMETHOD Commit(nsMsgDBCommit commitType) { return _to Commit(commitType); } \
  NS_SCRIPTABLE NS_IMETHOD ForceClosed(void) { return _to ForceClosed(); } \
  NS_SCRIPTABLE NS_IMETHOD ClearCachedHdrs(void) { return _to ClearCachedHdrs(); } \
  NS_SCRIPTABLE NS_IMETHOD ResetHdrCacheSize(PRUint32 size) { return _to ResetHdrCacheSize(size); } \
  NS_SCRIPTABLE NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo **aDBFolderInfo) { return _to GetDBFolderInfo(aDBFolderInfo); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM) { return _to GetMsgHdrForKey(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval NS_OUTPARAM) { return _to GetMsgHdrForMessageID(messageID, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to ContainsKey(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM) { return _to CreateNewHdr(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify) { return _to AddNewHdrToDB(newHdr, notify); } \
  NS_SCRIPTABLE NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval NS_OUTPARAM) { return _to CopyHdrFromExistingHdr(key, existingHdr, addHdrToDB, _retval); } \
  NS_IMETHOD ListAllKeys(nsTArray<nsMsgKey> & outputKeys) { return _to ListAllKeys(outputKeys); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to EnumerateMessages(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD ReverseEnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to ReverseEnumerateMessages(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to EnumerateThreads(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetFilterEnumerator(nsIArray *searchTerms, PRBool reverse, nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to GetFilterEnumerator(searchTerms, reverse, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD NextMatchingHdrs(nsISimpleEnumerator *enumerator, PRInt32 numHdrsToLookAt, PRInt32 maxResults, nsIMutableArray *matchingHdrs, PRInt32 *numMatches NS_OUTPARAM, PRBool *_retval NS_OUTPARAM) { return _to NextMatchingHdrs(enumerator, numHdrsToLookAt, maxResults, matchingHdrs, numMatches, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD SyncCounts(void) { return _to SyncCounts(); } \
  NS_SCRIPTABLE NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval NS_OUTPARAM) { return _to GetThreadContainingMsgHdr(msgHdr, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator) { return _to MarkHdrRead(msgHdr, bRead, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator) { return _to MarkHdrReplied(msgHdr, bReplied, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator) { return _to MarkHdrMarked(msgHdr, mark, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrNotNew(nsIMsgDBHdr *aMsgHdr, nsIDBChangeListener *aInstigator) { return _to MarkHdrNotNew(aMsgHdr, aInstigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return _to MarkMDNNeeded(key, bNeeded, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to IsMDNNeeded(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return _to MarkMDNSent(key, bNeeded, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to IsMDNSent(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator) { return _to MarkRead(key, bRead, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator) { return _to MarkReplied(key, bReplied, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator) { return _to MarkForwarded(key, bForwarded, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments, nsIDBChangeListener *instigator) { return _to MarkHasAttachments(key, bHasAttachments, instigator); } \
  NS_IMETHOD MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsTArray<nsMsgKey> *thoseMarked) { return _to MarkThreadRead(thread, instigator, thoseMarked); } \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator) { return _to MarkThreadIgnored(thread, threadKey, bIgnored, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) { return _to MarkThreadWatched(thread, threadKey, bWatched, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHeaderKilled(nsIMsgDBHdr *msg, PRBool bIgnored, nsIDBChangeListener *instigator) { return _to MarkHeaderKilled(msg, bIgnored, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to IsRead(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to IsIgnored(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to IsMarked(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return _to HasAttachments(key, _retval); } \
  NS_IMETHOD MarkAllRead(nsTArray<nsMsgKey> *thoseMarked) { return _to MarkAllRead(thoseMarked); } \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsTArray<nsMsgKey> *markedIds) { return _to MarkReadByDate(startDate, endDate, markedIds); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessages(PRUint32 aNumKeys, nsMsgKey *nsMsgKeys, nsIDBChangeListener *instigator) { return _to DeleteMessages(aNumKeys, nsMsgKeys, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit) { return _to DeleteMessage(key, instigator, commit); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) { return _to DeleteHeader(msgHdr, instigator, commit, notify); } \
  NS_SCRIPTABLE NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr) { return _to RemoveHeaderMdbRow(msgHdr); } \
  NS_SCRIPTABLE NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr) { return _to UndoDelete(msgHdr); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator) { return _to MarkMarked(key, mark, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator) { return _to MarkOffline(key, offline, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label) { return _to SetLabel(key, label); } \
  NS_SCRIPTABLE NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue) { return _to SetStringProperty(aKey, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD SetStringPropertyByHdr(nsIMsgDBHdr *msgHdr, const char *aProperty, const char *aValue) { return _to SetStringPropertyByHdr(msgHdr, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint32PropertyByHdr(nsIMsgDBHdr *aMsgHdr, const char *aProperty, PRUint32 aValue) { return _to SetUint32PropertyByHdr(aMsgHdr, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator) { return _to MarkImapDeleted(key, deleted, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew) { return _to GetFirstNew(aFirstNew); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings **aMsgRetentionSettings) { return _to GetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings) { return _to SetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_SCRIPTABLE NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings, PRBool aDeleteViaFolder) { return _to ApplyRetentionSettings(aMsgRetentionSettings, aDeleteViaFolder); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings **aMsgDownloadSettings) { return _to GetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings *aMsgDownloadSettings) { return _to SetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_SCRIPTABLE NS_IMETHOD HasNew(PRBool *_retval NS_OUTPARAM) { return _to HasNew(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD ClearNewList(PRBool notify) { return _to ClearNewList(notify); } \
  NS_SCRIPTABLE NS_IMETHOD AddToNewList(nsMsgKey key) { return _to AddToNewList(key); } \
  NS_SCRIPTABLE NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid) { return _to GetSummaryValid(aSummaryValid); } \
  NS_SCRIPTABLE NS_IMETHOD SetSummaryValid(PRBool aSummaryValid) { return _to SetSummaryValid(aSummaryValid); } \
  NS_SCRIPTABLE NS_IMETHOD StartBatch(void) { return _to StartBatch(); } \
  NS_SCRIPTABLE NS_IMETHOD EndBatch(void) { return _to EndBatch(); } \
  NS_SCRIPTABLE NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval NS_OUTPARAM) { return _to GetOfflineOpForKey(messageKey, create, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op) { return _to RemoveOfflineOp(op); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to EnumerateOfflineOps(_retval); } \
  NS_IMETHOD ListAllOfflineOpIds(nsTArray<nsMsgKey> *offlineOpIds) { return _to ListAllOfflineOpIds(offlineOpIds); } \
  NS_IMETHOD ListAllOfflineDeletes(nsTArray<nsMsgKey> *offlineDeletes) { return _to ListAllOfflineDeletes(offlineDeletes); } \
  NS_IMETHOD ListAllOfflineMsgs(nsTArray<nsMsgKey> *offlineMsgs) { return _to ListAllOfflineMsgs(offlineMsgs); } \
  NS_SCRIPTABLE NS_IMETHOD SetAttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, const char *propertyVal) { return _to SetAttributeOnPendingHdr(pendingHdr, property, propertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint32AttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, PRUint32 propertyVal) { return _to SetUint32AttributeOnPendingHdr(pendingHdr, property, propertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint64AttributeOnPendingHdr(nsIMsgDBHdr *aPendingHdr, const char *aProperty, PRUint64 aPropertyVal) { return _to SetUint64AttributeOnPendingHdr(aPendingHdr, aProperty, aPropertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD UpdatePendingAttributes(nsIMsgDBHdr *aNewHdr) { return _to UpdatePendingAttributes(aNewHdr); } \
  NS_SCRIPTABLE NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum) { return _to GetLowWaterArticleNum(aLowWaterArticleNum); } \
  NS_SCRIPTABLE NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum) { return _to GetHighWaterArticleNum(aHighWaterArticleNum); } \
  NS_SCRIPTABLE NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey) { return _to GetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_SCRIPTABLE NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey) { return _to SetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_SCRIPTABLE NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey) { return _to GetNextFakeOfflineMsgKey(aNextFakeOfflineMsgKey); } \
  NS_IMETHOD CreateCollationKey(const nsAString & sourceString, PRUint8 **key NS_OUTPARAM, PRUint32 *len NS_OUTPARAM) { return _to CreateCollationKey(sourceString, key, len); } \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval NS_OUTPARAM) { return _to CompareCollationKeys(key1, len1, key2, len2, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags) { return _to GetDefaultViewFlags(aDefaultViewFlags); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType) { return _to GetDefaultSortType(aDefaultSortType); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortOrder(nsMsgViewSortOrderValue *aDefaultSortOrder) { return _to GetDefaultSortOrder(aDefaultSortOrder); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize) { return _to GetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize) { return _to SetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_SCRIPTABLE NS_IMETHOD GetFolderStream(nsIOutputStream **aFolderStream) { return _to GetFolderStream(aFolderStream); } \
  NS_SCRIPTABLE NS_IMETHOD SetFolderStream(nsIOutputStream *aFolderStream) { return _to SetFolderStream(aFolderStream); } \
  NS_SCRIPTABLE NS_IMETHOD GetNewList(PRUint32 *count NS_OUTPARAM, nsMsgKey **newKeys NS_OUTPARAM) { return _to GetNewList(count, newKeys); } \
  NS_SCRIPTABLE NS_IMETHOD GetCachedHits(const char *aSearchFolderUri, nsISimpleEnumerator **_retval NS_OUTPARAM) { return _to GetCachedHits(aSearchFolderUri, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RefreshCache(const char *aSearchFolderUri, PRUint32 aNumKeys, nsMsgKey *aNewHits, PRUint32 *aNumBadHits NS_OUTPARAM, nsMsgKey **aStaleHits NS_OUTPARAM) { return _to RefreshCache(aSearchFolderUri, aNumKeys, aNewHits, aNumBadHits, aStaleHits); } \
  NS_SCRIPTABLE NS_IMETHOD UpdateHdrInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool aAdd) { return _to UpdateHdrInCache(aSearchFolderUri, aHdr, aAdd); } \
  NS_SCRIPTABLE NS_IMETHOD HdrIsInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool *_retval NS_OUTPARAM) { return _to HdrIsInCache(aSearchFolderUri, aHdr, _retval); } 

/* 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_SCRIPTABLE NS_IMETHOD Open(nsILocalFile *aFolderName, PRBool aCreate, PRBool aLeaveInvalidDB) { return !_to ? NS_ERROR_NULL_POINTER : _to->Open(aFolderName, aCreate, aLeaveInvalidDB); } \
  NS_SCRIPTABLE NS_IMETHOD ForceFolderDBClosed(nsIMsgFolder *aFolder) { return !_to ? NS_ERROR_NULL_POINTER : _to->ForceFolderDBClosed(aFolder); } \
  NS_SCRIPTABLE NS_IMETHOD Close(PRBool aForceCommit) { return !_to ? NS_ERROR_NULL_POINTER : _to->Close(aForceCommit); } \
  NS_SCRIPTABLE NS_IMETHOD Commit(nsMsgDBCommit commitType) { return !_to ? NS_ERROR_NULL_POINTER : _to->Commit(commitType); } \
  NS_SCRIPTABLE NS_IMETHOD ForceClosed(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ForceClosed(); } \
  NS_SCRIPTABLE NS_IMETHOD ClearCachedHdrs(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearCachedHdrs(); } \
  NS_SCRIPTABLE NS_IMETHOD ResetHdrCacheSize(PRUint32 size) { return !_to ? NS_ERROR_NULL_POINTER : _to->ResetHdrCacheSize(size); } \
  NS_SCRIPTABLE NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo **aDBFolderInfo) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDBFolderInfo(aDBFolderInfo); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrForKey(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrForMessageID(const char *messageID, nsIMsgDBHdr **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrForMessageID(messageID, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD ContainsKey(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->ContainsKey(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateNewHdr(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD AddNewHdrToDB(nsIMsgDBHdr *newHdr, PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddNewHdrToDB(newHdr, notify); } \
  NS_SCRIPTABLE NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMsgDBHdr *existingHdr, PRBool addHdrToDB, nsIMsgDBHdr **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CopyHdrFromExistingHdr(key, existingHdr, addHdrToDB, _retval); } \
  NS_IMETHOD ListAllKeys(nsTArray<nsMsgKey> & outputKeys) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllKeys(outputKeys); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateMessages(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD ReverseEnumerateMessages(nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->ReverseEnumerateMessages(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateThreads(nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateThreads(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetFilterEnumerator(nsIArray *searchTerms, PRBool reverse, nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFilterEnumerator(searchTerms, reverse, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD NextMatchingHdrs(nsISimpleEnumerator *enumerator, PRInt32 numHdrsToLookAt, PRInt32 maxResults, nsIMutableArray *matchingHdrs, PRInt32 *numMatches NS_OUTPARAM, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->NextMatchingHdrs(enumerator, numHdrsToLookAt, maxResults, matchingHdrs, numMatches, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD SyncCounts(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->SyncCounts(); } \
  NS_SCRIPTABLE NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThreadContainingMsgHdr(msgHdr, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrRead(nsIMsgDBHdr *msgHdr, PRBool bRead, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrRead(msgHdr, bRead, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrReplied(nsIMsgDBHdr *msgHdr, PRBool bReplied, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrReplied(msgHdr, bReplied, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrMarked(msgHdr, mark, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHdrNotNew(nsIMsgDBHdr *aMsgHdr, nsIDBChangeListener *aInstigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHdrNotNew(aMsgHdr, aInstigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMDNNeeded(key, bNeeded, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMDNNeeded(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMDNSent(key, bNeeded, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMDNSent(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkRead(key, bRead, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkReplied(key, bReplied, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkForwarded(key, bForwarded, instigator); } \
  NS_SCRIPTABLE 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, nsTArray<nsMsgKey> *thoseMarked) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadRead(thread, instigator, thoseMarked); } \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadIgnored(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bIgnored, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadIgnored(thread, threadKey, bIgnored, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkThreadWatched(nsIMsgThread *thread, nsMsgKey threadKey, PRBool bWatched, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkThreadWatched(thread, threadKey, bWatched, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkHeaderKilled(nsIMsgDBHdr *msg, PRBool bIgnored, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkHeaderKilled(msg, bIgnored, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD IsRead(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsRead(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsIgnored(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD IsMarked(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsMarked(key, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->HasAttachments(key, _retval); } \
  NS_IMETHOD MarkAllRead(nsTArray<nsMsgKey> *thoseMarked) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkAllRead(thoseMarked); } \
  NS_IMETHOD MarkReadByDate(PRTime startDate, PRTime endDate, nsTArray<nsMsgKey> *markedIds) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkReadByDate(startDate, endDate, markedIds); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessages(PRUint32 aNumKeys, nsMsgKey *nsMsgKeys, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteMessages(aNumKeys, nsMsgKeys, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteMessage(nsMsgKey key, nsIDBChangeListener *instigator, PRBool commit) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteMessage(key, instigator, commit); } \
  NS_SCRIPTABLE NS_IMETHOD DeleteHeader(nsIMsgDBHdr *msgHdr, nsIDBChangeListener *instigator, PRBool commit, PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeleteHeader(msgHdr, instigator, commit, notify); } \
  NS_SCRIPTABLE NS_IMETHOD RemoveHeaderMdbRow(nsIMsgDBHdr *msgHdr) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveHeaderMdbRow(msgHdr); } \
  NS_SCRIPTABLE NS_IMETHOD UndoDelete(nsIMsgDBHdr *msgHdr) { return !_to ? NS_ERROR_NULL_POINTER : _to->UndoDelete(msgHdr); } \
  NS_SCRIPTABLE NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkMarked(key, mark, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkOffline(key, offline, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(nsMsgKey key, nsMsgLabelValue label) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLabel(key, label); } \
  NS_SCRIPTABLE NS_IMETHOD SetStringProperty(nsMsgKey aKey, const char *aProperty, const char *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStringProperty(aKey, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD SetStringPropertyByHdr(nsIMsgDBHdr *msgHdr, const char *aProperty, const char *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStringPropertyByHdr(msgHdr, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint32PropertyByHdr(nsIMsgDBHdr *aMsgHdr, const char *aProperty, PRUint32 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUint32PropertyByHdr(aMsgHdr, aProperty, aValue); } \
  NS_SCRIPTABLE NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted, nsIDBChangeListener *instigator) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkImapDeleted(key, deleted, instigator); } \
  NS_SCRIPTABLE NS_IMETHOD GetFirstNew(nsMsgKey *aFirstNew) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstNew(aFirstNew); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgRetentionSettings(nsIMsgRetentionSettings **aMsgRetentionSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgRetentionSettings(aMsgRetentionSettings); } \
  NS_SCRIPTABLE NS_IMETHOD ApplyRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings, PRBool aDeleteViaFolder) { return !_to ? NS_ERROR_NULL_POINTER : _to->ApplyRetentionSettings(aMsgRetentionSettings, aDeleteViaFolder); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgDownloadSettings(nsIMsgDownloadSettings **aMsgDownloadSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgDownloadSettings(nsIMsgDownloadSettings *aMsgDownloadSettings) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgDownloadSettings(aMsgDownloadSettings); } \
  NS_SCRIPTABLE NS_IMETHOD HasNew(PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->HasNew(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD ClearNewList(PRBool notify) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearNewList(notify); } \
  NS_SCRIPTABLE NS_IMETHOD AddToNewList(nsMsgKey key) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddToNewList(key); } \
  NS_SCRIPTABLE NS_IMETHOD GetSummaryValid(PRBool *aSummaryValid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSummaryValid(aSummaryValid); } \
  NS_SCRIPTABLE NS_IMETHOD SetSummaryValid(PRBool aSummaryValid) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSummaryValid(aSummaryValid); } \
  NS_SCRIPTABLE NS_IMETHOD StartBatch(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->StartBatch(); } \
  NS_SCRIPTABLE NS_IMETHOD EndBatch(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->EndBatch(); } \
  NS_SCRIPTABLE NS_IMETHOD GetOfflineOpForKey(nsMsgKey messageKey, PRBool create, nsIMsgOfflineImapOperation **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOfflineOpForKey(messageKey, create, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RemoveOfflineOp(nsIMsgOfflineImapOperation *op) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveOfflineOp(op); } \
  NS_SCRIPTABLE NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateOfflineOps(_retval); } \
  NS_IMETHOD ListAllOfflineOpIds(nsTArray<nsMsgKey> *offlineOpIds) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineOpIds(offlineOpIds); } \
  NS_IMETHOD ListAllOfflineDeletes(nsTArray<nsMsgKey> *offlineDeletes) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineDeletes(offlineDeletes); } \
  NS_IMETHOD ListAllOfflineMsgs(nsTArray<nsMsgKey> *offlineMsgs) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListAllOfflineMsgs(offlineMsgs); } \
  NS_SCRIPTABLE NS_IMETHOD SetAttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, const char *propertyVal) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAttributeOnPendingHdr(pendingHdr, property, propertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint32AttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, PRUint32 propertyVal) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUint32AttributeOnPendingHdr(pendingHdr, property, propertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD SetUint64AttributeOnPendingHdr(nsIMsgDBHdr *aPendingHdr, const char *aProperty, PRUint64 aPropertyVal) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUint64AttributeOnPendingHdr(aPendingHdr, aProperty, aPropertyVal); } \
  NS_SCRIPTABLE NS_IMETHOD UpdatePendingAttributes(nsIMsgDBHdr *aNewHdr) { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdatePendingAttributes(aNewHdr); } \
  NS_SCRIPTABLE NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *aLowWaterArticleNum) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLowWaterArticleNum(aLowWaterArticleNum); } \
  NS_SCRIPTABLE NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *aHighWaterArticleNum) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHighWaterArticleNum(aHighWaterArticleNum); } \
  NS_SCRIPTABLE NS_IMETHOD GetNextPseudoMsgKey(nsMsgKey *aNextPseudoMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_SCRIPTABLE NS_IMETHOD SetNextPseudoMsgKey(nsMsgKey aNextPseudoMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNextPseudoMsgKey(aNextPseudoMsgKey); } \
  NS_SCRIPTABLE NS_IMETHOD GetNextFakeOfflineMsgKey(nsMsgKey *aNextFakeOfflineMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextFakeOfflineMsgKey(aNextFakeOfflineMsgKey); } \
  NS_IMETHOD CreateCollationKey(const nsAString & sourceString, PRUint8 **key NS_OUTPARAM, PRUint32 *len NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateCollationKey(sourceString, key, len); } \
  NS_IMETHOD CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CompareCollationKeys(key1, len1, key2, len2, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultViewFlags(nsMsgViewFlagsTypeValue *aDefaultViewFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultViewFlags(aDefaultViewFlags); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortType(nsMsgViewSortTypeValue *aDefaultSortType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultSortType(aDefaultSortType); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultSortOrder(nsMsgViewSortOrderValue *aDefaultSortOrder) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultSortOrder(aDefaultSortOrder); } \
  NS_SCRIPTABLE NS_IMETHOD GetMsgHdrCacheSize(PRUint32 *aMsgHdrCacheSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_SCRIPTABLE NS_IMETHOD SetMsgHdrCacheSize(PRUint32 aMsgHdrCacheSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgHdrCacheSize(aMsgHdrCacheSize); } \
  NS_SCRIPTABLE NS_IMETHOD GetFolderStream(nsIOutputStream **aFolderStream) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFolderStream(aFolderStream); } \
  NS_SCRIPTABLE NS_IMETHOD SetFolderStream(nsIOutputStream *aFolderStream) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFolderStream(aFolderStream); } \
  NS_SCRIPTABLE NS_IMETHOD GetNewList(PRUint32 *count NS_OUTPARAM, nsMsgKey **newKeys NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNewList(count, newKeys); } \
  NS_SCRIPTABLE NS_IMETHOD GetCachedHits(const char *aSearchFolderUri, nsISimpleEnumerator **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCachedHits(aSearchFolderUri, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD RefreshCache(const char *aSearchFolderUri, PRUint32 aNumKeys, nsMsgKey *aNewHits, PRUint32 *aNumBadHits NS_OUTPARAM, nsMsgKey **aStaleHits NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->RefreshCache(aSearchFolderUri, aNumKeys, aNewHits, aNumBadHits, aStaleHits); } \
  NS_SCRIPTABLE NS_IMETHOD UpdateHdrInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool aAdd) { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateHdrInCache(aSearchFolderUri, aHdr, aAdd); } \
  NS_SCRIPTABLE NS_IMETHOD HdrIsInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->HdrIsInCache(aSearchFolderUri, aHdr, _retval); } 

#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();

private:
  ~nsMsgDatabase();

protected:
  /* additional members */
};

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

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

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

/* void Open (in nsILocalFile aFolderName, in boolean aCreate, in boolean aLeaveInvalidDB); */
NS_IMETHODIMP nsMsgDatabase::Open(nsILocalFile *aFolderName, PRBool aCreate, PRBool aLeaveInvalidDB)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void forceFolderDBClosed (in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgDatabase::ForceFolderDBClosed(nsIMsgFolder *aFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void Close (in boolean aForceCommit); */
NS_IMETHODIMP nsMsgDatabase::Close(PRBool aForceCommit)
{
    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 NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

/* nsIMsgDBHdr CreateNewHdr (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDatabase::CreateNewHdr(nsMsgKey key, nsIMsgDBHdr **_retval NS_OUTPARAM)
{
    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 NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

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

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

/* nsISimpleEnumerator getFilterEnumerator (in nsIArray searchTerms, [optional] in boolean reverse); */
NS_IMETHODIMP nsMsgDatabase::GetFilterEnumerator(nsIArray *searchTerms, PRBool reverse, nsISimpleEnumerator **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean nextMatchingHdrs (in nsISimpleEnumerator enumerator, in long numHdrsToLookAt, in long maxResults, in nsIMutableArray matchingHdrs, out long numMatches); */
NS_IMETHODIMP nsMsgDatabase::NextMatchingHdrs(nsISimpleEnumerator *enumerator, PRInt32 numHdrsToLookAt, PRInt32 maxResults, nsIMutableArray *matchingHdrs, PRInt32 *numMatches NS_OUTPARAM, PRBool *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* nsIMsgThread GetThreadContainingMsgHdr (in nsIMsgDBHdr msgHdr); */
NS_IMETHODIMP nsMsgDatabase::GetThreadContainingMsgHdr(nsIMsgDBHdr *msgHdr, nsIMsgThread **_retval NS_OUTPARAM)
{
    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 MarkHdrNotNew (in nsIMsgDBHdr aMsgHdr, in nsIDBChangeListener aInstigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHdrNotNew(nsIMsgDBHdr *aMsgHdr, nsIDBChangeListener *aInstigator)
{
    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 NS_OUTPARAM)
{
    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 NS_OUTPARAM)
{
    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, nsTArray<nsMsgKey> *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;
}

/* void MarkHeaderKilled (in nsIMsgDBHdr msg, in boolean bIgnored, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::MarkHeaderKilled(nsIMsgDBHdr *msg, PRBool bIgnored, nsIDBChangeListener *instigator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

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

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

/* [noscript] void MarkAllRead (in nsMsgKeyArrayPtr thoseMarked); */
NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsTArray<nsMsgKey> *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, nsTArray<nsMsgKey> *markedIds)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void deleteMessages (in unsigned long aNumKeys, [array, size_is (aNumKeys)] in nsMsgKey nsMsgKeys, in nsIDBChangeListener instigator); */
NS_IMETHODIMP nsMsgDatabase::DeleteMessages(PRUint32 aNumKeys, nsMsgKey *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 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;
}

/* void setStringPropertyByHdr (in nsIMsgDBHdr msgHdr, in string aProperty, in string aValue); */
NS_IMETHODIMP nsMsgDatabase::SetStringPropertyByHdr(nsIMsgDBHdr *msgHdr, const char *aProperty, const char *aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setUint32PropertyByHdr (in nsIMsgDBHdr aMsgHdr, in string aProperty, in unsigned long aValue); */
NS_IMETHODIMP nsMsgDatabase::SetUint32PropertyByHdr(nsIMsgDBHdr *aMsgHdr, const char *aProperty, PRUint32 aValue)
{
    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 aMsgRetentionSettings, in boolean aDeleteViaFolder); */
NS_IMETHODIMP nsMsgDatabase::ApplyRetentionSettings(nsIMsgRetentionSettings *aMsgRetentionSettings, PRBool aDeleteViaFolder)
{
    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 NS_OUTPARAM)
{
    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 NS_OUTPARAM)
{
    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 NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

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

/* void setAttributeOnPendingHdr (in nsIMsgDBHdr pendingHdr, in string property, in string propertyVal); */
NS_IMETHODIMP nsMsgDatabase::SetAttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, const char *propertyVal)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setUint32AttributeOnPendingHdr (in nsIMsgDBHdr pendingHdr, in string property, in unsigned long propertyVal); */
NS_IMETHODIMP nsMsgDatabase::SetUint32AttributeOnPendingHdr(nsIMsgDBHdr *pendingHdr, const char *property, PRUint32 propertyVal)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setUint64AttributeOnPendingHdr (in nsIMsgDBHdr aPendingHdr, in string aProperty, in unsigned long long aPropertyVal); */
NS_IMETHODIMP nsMsgDatabase::SetUint64AttributeOnPendingHdr(nsIMsgDBHdr *aPendingHdr, const char *aProperty, PRUint64 aPropertyVal)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void updatePendingAttributes (in nsIMsgDBHdr aNewHdr); */
NS_IMETHODIMP nsMsgDatabase::UpdatePendingAttributes(nsIMsgDBHdr *aNewHdr)
{
    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 AString sourceString, out octetPtr key, out unsigned long len); */
NS_IMETHODIMP nsMsgDatabase::CreateCollationKey(const nsAString & sourceString, PRUint8 **key NS_OUTPARAM, PRUint32 *len NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] long compareCollationKeys (in octetPtr key1, in unsigned long len1, in octetPtr key2, in unsigned long len2); */
NS_IMETHODIMP nsMsgDatabase::CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2, PRUint32 len2, PRInt32 *_retval NS_OUTPARAM)
{
    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;
}

/* readonly attribute nsMsgViewSortOrderValue defaultSortOrder; */
NS_IMETHODIMP nsMsgDatabase::GetDefaultSortOrder(nsMsgViewSortOrderValue *aDefaultSortOrder)
{
    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;
}

/* attribute nsIOutputStream folderStream; */
NS_IMETHODIMP nsMsgDatabase::GetFolderStream(nsIOutputStream **aFolderStream)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDatabase::SetFolderStream(nsIOutputStream *aFolderStream)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getNewList (out unsigned long count, [array, size_is (count)] out nsMsgKey newKeys); */
NS_IMETHODIMP nsMsgDatabase::GetNewList(PRUint32 *count NS_OUTPARAM, nsMsgKey **newKeys NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator getCachedHits (in string aSearchFolderUri); */
NS_IMETHODIMP nsMsgDatabase::GetCachedHits(const char *aSearchFolderUri, nsISimpleEnumerator **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void refreshCache (in string aSearchFolderUri, in unsigned long aNumKeys, [array, size_is (aNumKeys)] in nsMsgKey aNewHits, out unsigned long aNumBadHits, [array, size_is (aNumBadHits)] out nsMsgKey aStaleHits); */
NS_IMETHODIMP nsMsgDatabase::RefreshCache(const char *aSearchFolderUri, PRUint32 aNumKeys, nsMsgKey *aNewHits, PRUint32 *aNumBadHits NS_OUTPARAM, nsMsgKey **aStaleHits NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void updateHdrInCache (in string aSearchFolderUri, in nsIMsgDBHdr aHdr, in boolean aAdd); */
NS_IMETHODIMP nsMsgDatabase::UpdateHdrInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool aAdd)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean hdrIsInCache (in string aSearchFolderUri, in nsIMsgDBHdr aHdr); */
NS_IMETHODIMP nsMsgDatabase::HdrIsInCache(const char *aSearchFolderUri, nsIMsgDBHdr *aHdr, PRBool *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


#endif /* __gen_nsIMsgDatabase_h__ */
