//-----------------------------------------------------------------------
// 
//     Copyright (c) Microsoft Corporation.
// 
//-----------------------------------------------------------------------
namespace Microsoft.Isam.Esent.Interop
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Diagnostics.CodeAnalysis;
    using System.Globalization;
    using System.Runtime.InteropServices;
    /// 
    /// The native version of the JET_DBINFOMISC structure.
    /// 
    [StructLayout(LayoutKind.Sequential)]
    [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules",
        "SA1305:FieldNamesMustNotUseHungarianNotation",
        Justification = "This should match the unmanaged API, which isn't capitalized.")]
    [SuppressMessage(
        "Microsoft.StyleCop.CSharp.NamingRules",
        "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter",
        Justification = "This should match the unmanaged API, which isn't capitalized.")]
    internal struct NATIVE_DBINFOMISC
    {
        /// 
        /// Version of Esent that created the database.
        /// 
        public uint ulVersion;
        /// 
        /// Incremental version of Esent that created the database.
        /// 
        public uint ulUpdate;
        /// 
        /// Database signature.
        /// 
        public NATIVE_SIGNATURE signDb;
        /// 
        /// Consistent/inconsistent state.
        /// 
        public uint dbstate;
        /// 
        /// Null if in inconsistent state.
        /// 
        public JET_LGPOS lgposConsistent;
        /// 
        /// Null if in inconsistent state.
        /// 
        public JET_LOGTIME logtimeConsistent;
        /// 
        /// Last attach time.
        /// 
        public JET_LOGTIME logtimeAttach;
        /// 
        /// Lgpos at last attach.
        /// 
        public JET_LGPOS lgposAttach;
        /// 
        /// Last detach time.
        /// 
        public JET_LOGTIME logtimeDetach;
        /// 
        /// Lgpos at last detach.
        /// 
        public JET_LGPOS lgposDetach;
        /// 
        /// Logfile signature.
        /// 
        public NATIVE_SIGNATURE signLog;
        /// 
        /// Last successful full backup.
        /// 
        public JET_BKINFO bkinfoFullPrev;
        /// 
        /// Last successful incremental backup. Reset when 
        ///  is set.
        /// 
        public JET_BKINFO bkinfoIncPrev;
        /// 
        /// Current backup.
        /// 
        public JET_BKINFO bkinfoFullCur;
        /// 
        /// Internal use only.
        /// 
        public uint fShadowingDisabled;
        /// 
        /// Internal use only.
        /// 
        public uint fUpgradeDb;
        /// 
        /// OS major version.
        /// 
        public uint dwMajorVersion;
        /// 
        /// OS minor version.
        /// 
        public uint dwMinorVersion;
        /// 
        /// OS build number.
        /// 
        public uint dwBuildNumber;
        /// 
        /// OS Service Pack number.
        /// 
        public uint lSPNumber;
        /// 
        /// Database page size (0 = 4Kb page).
        /// 
        public uint cbPageSize;
    }
    /// 
    /// Native version of the JET_DBINFOMISC structure.
    /// Adds support for fields that we added in Windows 7.
    /// 
    [StructLayout(LayoutKind.Sequential)]
    [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules",
        "SA1305:FieldNamesMustNotUseHungarianNotation",
        Justification = "This should match the unmanaged API, which isn't capitalized.")]
    [SuppressMessage(
        "Microsoft.StyleCop.CSharp.NamingRules",
        "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter",
        Justification = "This should match the unmanaged API, which isn't capitalized.")]
    internal struct NATIVE_DBINFOMISC4
    {
        /// 
        /// The core dbinfo structure.
        /// 
        public NATIVE_DBINFOMISC dbinfo;
        // Fields added in JET_DBINFOMISC2
        /// 
        /// The minimum log generation required for replaying the logs.
        /// Typically the checkpoint generation.
        /// 
        public uint genMinRequired;
        /// 
        /// The maximum log generation required for replaying the logs.
        /// 
        public uint genMaxRequired;
        /// 
        /// Creation time of the  logfile.
        /// 
        public JET_LOGTIME logtimeGenMaxCreate;
        /// 
        /// Number of times repair has been called on this database.
        /// 
        public uint ulRepairCount;
        /// 
        /// The last time that repair was run against this database.
        /// 
        public JET_LOGTIME logtimeRepair;
        /// 
        /// Number of times this database was repaired before the last defrag.
        /// 
        public uint ulRepairCountOld;
        /// 
        /// Number of times a one bit error was successfully fixed.
        /// 
        public uint ulECCFixSuccess;
        /// 
        /// The last time a one bit error was successfully fixed.
        /// 
        public JET_LOGTIME logtimeECCFixSuccess;
        /// 
        /// The number of times a one bit error was successfully fixed before the last repair.
        /// 
        public uint ulECCFixSuccessOld;
        /// 
        /// Number of times an uncorrectable one bit error was encountered.
        /// 
        public uint ulECCFixFail;
        /// 
        /// The last time an uncorrectable one bit error was encountered.
        /// 
        public JET_LOGTIME logtimeECCFixFail;
        /// 
        /// The number of times an uncorrectable one bit error was encountered.
        /// 
        public uint ulECCFixFailOld;
        /// 
        /// Number of times a non-correctable checksum error was found.
        /// 
        public uint ulBadChecksum;
        /// 
        /// The last time a non-correctable checksum error was found.
        /// 
        public JET_LOGTIME logtimeBadChecksum;
        /// 
        /// The number of times a non-correctable checksum error was found before the last repair.
        /// 
        public uint ulBadChecksumOld;
        // Fields added in JET_DBINFOMISC3
        /// 
        /// The maximum log generation committed to the database. Typically the current log generation.
        /// 
        public uint genCommitted;
        // Fields added in JET_DBINFOMISC4
        /// 
        /// Last successful copy backup.
        /// 
        public JET_BKINFO bkinfoCopyPrev;
        /// 
        /// Last successful differential backup. Reset when 
        /// bkinfoFullPrev is set.
        /// 
        public JET_BKINFO bkinfoDiffPrev;
    }
    /// 
    /// Holds miscellaneous information about a database. This is
    /// the information that is contained in the database header.
    /// 
    [SuppressMessage(
        "Microsoft.StyleCop.CSharp.NamingRules",
        "SA1300:ElementMustBeginWithUpperCaseLetter",
        Justification = "This should match the unmanaged API, which isn't capitalized.")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules",
        "SA1305:FieldNamesMustNotUseHungarianNotation",
        Justification = "Need to avoid clash between members and properties.")]
    [SuppressMessage(
        "Microsoft.StyleCop.CSharp.NamingRules",
        "SA1309:FieldNamesMustNotBeginWithUnderscore",
        Justification = "Need to avoid clash between members and properties.")]
    [Serializable]
    public sealed partial class JET_DBINFOMISC : IEquatable
    {
        #region Fields
        /// 
        /// Version of Esent that created the database.
        /// 
        private int _ulVersion;
        /// 
        /// Incremental version of Esent that created the database.
        /// 
        private int _ulUpdate;
        /// 
        /// Database signature.
        /// 
        private JET_SIGNATURE _signDb;
        /// 
        /// Consistent/inconsistent state.
        /// 
        private JET_dbstate _dbstate;
        /// 
        /// Null if in inconsistent state.
        /// 
        private JET_LGPOS _lgposConsistent;
        /// 
        /// Null if in inconsistent state.
        /// 
        private JET_LOGTIME _logtimeConsistent;
        /// 
        /// Last attach time.
        /// 
        private JET_LOGTIME _logtimeAttach;
        /// 
        /// Lgpos at last attach.
        /// 
        private JET_LGPOS _lgposAttach;
        /// 
        /// Last detach time.
        /// 
        private JET_LOGTIME _logtimeDetach;
        /// 
        /// Lgpos at last detach.
        /// 
        private JET_LGPOS _lgposDetach;
        /// 
        /// Logfile signature.
        /// 
        private JET_SIGNATURE _signLog;
        /// 
        /// Last successful full backup.
        /// 
        private JET_BKINFO _bkinfoFullPrev;
        /// 
        /// Last successful incremental backup. Reset when 
        ///  is set.
        /// 
        private JET_BKINFO _bkinfoIncPrev;
        /// 
        /// Current backup.
        /// 
        private JET_BKINFO _bkinfoFullCur;
        /// 
        /// Internal use only.
        /// 
        private bool _fShadowingDisabled;
        /// 
        /// Internal use only.
        /// 
        private bool _fUpgradeDb;
        /// 
        /// OS major version.
        /// 
        private int _dwMajorVersion;
        /// 
        /// OS minor version.
        /// 
        private int _dwMinorVersion;
        /// 
        /// OS build number.
        /// 
        private int _dwBuildNumber;
        /// 
        /// OS Service Pack number.
        /// 
        private int _lSPNumber;
        /// 
        /// Database page size (0 = 4Kb page).
        /// 
        private int _cbPageSize;
        /// 
        /// The minimum log generation required for replaying the logs.
        /// Typically the checkpoint generation.
        /// 
        private int _genMinRequired;
        /// 
        /// The maximum log generation required for replaying the logs.
        /// 
        private int _genMaxRequired;
        /// 
        /// Creation time of the  logfile.
        /// 
        private JET_LOGTIME _logtimeGenMaxCreate;
        /// 
        /// Number of times repair has been called on this database.
        /// 
        private int _ulRepairCount;
        /// 
        /// The last time that repair was run against this database.
        /// 
        private JET_LOGTIME _logtimeRepair;
        /// 
        /// Number of times this database was repaired before the last defrag.
        /// 
        private int _ulRepairCountOld;
        /// 
        /// Number of times a one bit error was successfully fixed.
        /// 
        private int _ulECCFixSuccess;
        /// 
        /// The last time a one bit error was successfully fixed.
        /// 
        private JET_LOGTIME _logtimeECCFixSuccess;
        /// 
        /// The number of times a one bit error was successfully fixed before the last repair.
        /// 
        private int _ulECCFixSuccessOld;
        /// 
        /// Number of times an uncorrectable one bit error was encountered.
        /// 
        private int _ulECCFixFail;
        /// 
        /// The last time an uncorrectable one bit error was encountered.
        /// 
        private JET_LOGTIME _logtimeECCFixFail;
        /// 
        /// The number of times an uncorrectable one bit error was encountered.
        /// 
        private int _ulECCFixFailOld;
        /// 
        /// Number of times a non-correctable checksum error was found.
        /// 
        private int _ulBadChecksum;
        /// 
        /// The last time a non-correctable checksum error was found.
        /// 
        private JET_LOGTIME _logtimeBadChecksum;
        /// 
        /// The number of times a non-correctable checksum error was found before the last repair.
        /// 
        private int _ulBadChecksumOld;
        /// 
        /// The maximum log generation committed to the database. Typically the current log generation.
        /// 
        private int _genCommitted;
        /// 
        /// Last successful copy backup.
        /// 
        private JET_BKINFO _bkinfoCopyPrev;
        /// 
        /// Last successful differential backup. Reset when 
        ///  is set.
        /// 
        private JET_BKINFO _bkinfoDiffPrev;
        #endregion
        #region Properties
        /// 
        /// Gets the version of Esent that created the database.
        /// 
        public int ulVersion
        {
            [DebuggerStepThrough]
            get { return this._ulVersion; }
            internal set { this._ulVersion = value; }
        }
        /// 
        /// Gets the incremental version of Esent that created the database.
        /// 
        public int ulUpdate
        {
            [DebuggerStepThrough]
            get { return this._ulUpdate; }
            internal set { this._ulUpdate = value; }
        }
        /// 
        /// Gets the database signature.
        /// 
        public JET_SIGNATURE signDb
        {
            [DebuggerStepThrough]
            get { return this._signDb; }
            internal set { this._signDb = value; }
        }
        /// 
        /// Gets the consistent/inconsistent state of the database.
        /// 
        public JET_dbstate dbstate
        {
            [DebuggerStepThrough]
            get { return this._dbstate; }
            internal set { this._dbstate = value; }
        }
        /// 
        /// Gets the lgpos when the database was made consistent.
        /// This value is null if the database is inconsistent.
        /// 
        public JET_LGPOS lgposConsistent
        {
            [DebuggerStepThrough]
            get { return this._lgposConsistent; }
            internal set { this._lgposConsistent = value; }
        }
        /// 
        /// Gets the time when the database was made consistent.
        /// This value is null if the database is inconsistent.
        /// 
        public JET_LOGTIME logtimeConsistent
        {
            [DebuggerStepThrough]
            get { return this._logtimeConsistent; }
            internal set { this._logtimeConsistent = value; }
        }
        /// 
        /// Gets the time when the database was attached.
        /// 
        public JET_LOGTIME logtimeAttach
        {
            [DebuggerStepThrough]
            get { return this._logtimeAttach; }
            internal set { this._logtimeAttach = value; }
        }
        /// 
        /// Gets the lgpos of the last attach.
        /// 
        public JET_LGPOS lgposAttach
        {
            [DebuggerStepThrough]
            get { return this._lgposAttach; }
            internal set { this._lgposAttach = value; }
        }
        /// 
        /// Gets the time of the last detach.
        /// 
        public JET_LOGTIME logtimeDetach
        {
            [DebuggerStepThrough]
            get { return this._logtimeDetach; }
            internal set { this._logtimeDetach = value; }
        }
        /// 
        /// Gets the lgpos of the last detach.
        /// 
        public JET_LGPOS lgposDetach
        {
            [DebuggerStepThrough]
            get { return this._lgposDetach; }
            internal set { this._lgposDetach = value; }
        }
        /// 
        /// Gets the logfile signature of logs used to modify the database.
        /// 
        public JET_SIGNATURE signLog
        {
            [DebuggerStepThrough]
            get { return this._signLog; }
            internal set { this._signLog = value; }
        }
        /// 
        /// Gets information about the last successful full backup.
        /// 
        public JET_BKINFO bkinfoFullPrev
        {
            [DebuggerStepThrough]
            get { return this._bkinfoFullPrev; }
            internal set { this._bkinfoFullPrev = value; }
        }
        /// 
        /// Gets information about the last successful incremental backup.
        /// This value is reset when  is set.
        /// 
        public JET_BKINFO bkinfoIncPrev
        {
            [DebuggerStepThrough]
            get { return this._bkinfoIncPrev; }
            internal set { this._bkinfoIncPrev = value; }
        }
        /// 
        /// Gets information about the current backup.
        /// 
        public JET_BKINFO bkinfoFullCur
        {
            [DebuggerStepThrough]
            get { return this._bkinfoFullCur; }
            internal set { this._bkinfoFullCur = value; }
        }
        /// 
        /// Gets a value indicating whether catalog shadowing is enabled.
        /// This value is for internal use only.
        /// 
        public bool fShadowingDisabled
        {
            [DebuggerStepThrough]
            get { return this._fShadowingDisabled; }
            internal set { this._fShadowingDisabled = value; }
        }
        /// 
        /// Gets a value indicating whether the database is being upgraded.
        /// This value is for internal use only.
        /// 
        public bool fUpgradeDb
        {
            [DebuggerStepThrough]
            get { return this._fUpgradeDb; }
            internal set { this._fUpgradeDb = value; }
        }
        /// 
        /// Gets the OS major version from the last attach.
        /// 
        public int dwMajorVersion
        {
            [DebuggerStepThrough]
            get { return this._dwMajorVersion; }
            internal set { this._dwMajorVersion = value; }
        }
        /// 
        /// Gets the OS minor version from the last attach.
        /// 
        public int dwMinorVersion
        {
            [DebuggerStepThrough]
            get { return this._dwMinorVersion; }
            internal set { this._dwMinorVersion = value; }
        }
        /// 
        /// Gets the OS build number from the last attach.
        /// 
        public int dwBuildNumber
        {
            [DebuggerStepThrough]
            get { return this._dwBuildNumber; }
            internal set { this._dwBuildNumber = value; }
        }
        /// 
        /// Gets the OS Service Pack number from the last attach.
        /// 
        public int lSPNumber
        {
            [DebuggerStepThrough]
            get { return this._lSPNumber; }
            internal set { this._lSPNumber = value; }
        }
        /// 
        /// Gets the database page size. A value of 0 means 4Kb pages.
        /// 
        public int cbPageSize
        {
            [DebuggerStepThrough]
            get { return this._cbPageSize; }
            internal set { this._cbPageSize = value; }
        }
        /// 
        /// Gets the minimum log generation required for replaying the logs.
        /// Typically the checkpoint generation.
        /// 
        public int genMinRequired
        {
            [DebuggerStepThrough]
            get { return this._genMinRequired; }
            internal set { this._genMinRequired = value; }
        }
        /// 
        /// Gets the maximum log generation required for replaying the logs.
        /// 
        public int genMaxRequired
        {
            [DebuggerStepThrough]
            get { return this._genMaxRequired; }
            internal set { this._genMaxRequired = value; }
        }
        /// 
        /// Gets the creation time of the  logfile.
        /// 
        public JET_LOGTIME logtimeGenMaxCreate
        {
            [DebuggerStepThrough]
            get { return this._logtimeGenMaxCreate; }
            internal set { this._logtimeGenMaxCreate = value; }
        }
        /// 
        /// Gets the number of times repair has been called on this database.
        /// 
        public int ulRepairCount
        {
            [DebuggerStepThrough]
            get { return this._ulRepairCount; }
            internal set { this._ulRepairCount = value; }
        }
        /// 
        /// Gets the last time that repair was run against this database.
        /// 
        public JET_LOGTIME logtimeRepair
        {
            [DebuggerStepThrough]
            get { return this._logtimeRepair; }
            internal set { this._logtimeRepair = value; }
        }
        /// 
        /// Gets the number of times this database was repaired before the last defrag.
        /// 
        public int ulRepairCountOld
        {
            [DebuggerStepThrough]
            get { return this._ulRepairCountOld; }
            internal set { this._ulRepairCountOld = value; }
        }
        /// 
        /// Gets the number of times a one bit error was successfully fixed.
        /// 
        public int ulECCFixSuccess
        {
            [DebuggerStepThrough]
            get { return this._ulECCFixSuccess; }
            internal set { this._ulECCFixSuccess = value; }
        }
        /// 
        /// Gets the last time a one bit error was successfully fixed.
        /// 
        public JET_LOGTIME logtimeECCFixSuccess
        {
            [DebuggerStepThrough]
            get { return this._logtimeECCFixSuccess; }
            internal set { this._logtimeECCFixSuccess = value; }
        }
        /// 
        /// Gets the number of times a one bit error was successfully fixed before the last repair.
        /// 
        public int ulECCFixSuccessOld
        {
            [DebuggerStepThrough]
            get { return this._ulECCFixSuccessOld; }
            internal set { this._ulECCFixSuccessOld = value; }
        }
        /// 
        /// Gets the number of times an uncorrectable one bit error was encountered.
        /// 
        public int ulECCFixFail
        {
            [DebuggerStepThrough]
            get { return this._ulECCFixFail; }
            internal set { this._ulECCFixFail = value; }
        }
        /// 
        /// Gets the last time an uncorrectable one bit error was encountered.
        /// 
        public JET_LOGTIME logtimeECCFixFail
        {
            [DebuggerStepThrough]
            get { return this._logtimeECCFixFail; }
            internal set { this._logtimeECCFixFail = value; }
        }
        /// 
        /// Gets the number of times an uncorrectable one bit error was encountered.
        /// 
        public int ulECCFixFailOld
        {
            [DebuggerStepThrough]
            get { return this._ulECCFixFailOld; }
            internal set { this._ulECCFixFailOld = value; }
        }
        /// 
        /// Gets the number of times a non-correctable checksum error was found.
        /// 
        public int ulBadChecksum
        {
            [DebuggerStepThrough]
            get { return this._ulBadChecksum; }
            internal set { this._ulBadChecksum = value; }
        }
        /// 
        /// Gets the last time a non-correctable checksum error was found.
        /// 
        public JET_LOGTIME logtimeBadChecksum
        {
            [DebuggerStepThrough]
            get { return this._logtimeBadChecksum; }
            internal set { this._logtimeBadChecksum = value; }
        }
        /// 
        /// Gets the number of times a non-correctable checksum error was found before the last repair.
        /// 
        public int ulBadChecksumOld
        {
            [DebuggerStepThrough]
            get { return this._ulBadChecksumOld; }
            internal set { this._ulBadChecksumOld = value; }
        }
        /// 
        /// Gets the maximum log generation committed to the database. Typically the current log generation.
        /// 
        public int genCommitted
        {
            [DebuggerStepThrough]
            get { return this._genCommitted; }
            internal set { this._genCommitted = value; }
        }
        /// 
        /// Gets information about the last successful copy backup.
        /// 
        public JET_BKINFO bkinfoCopyPrev
        {
            [DebuggerStepThrough]
            get { return this._bkinfoCopyPrev; }
            internal set { this._bkinfoCopyPrev = value; }
        }
        /// 
        /// Gets information about the last successful differential backup. Reset when 
        ///  is set.
        /// 
        public JET_BKINFO bkinfoDiffPrev
        {
            [DebuggerStepThrough]
            get { return this._bkinfoDiffPrev; }
            internal set { this._bkinfoDiffPrev = value; }
        }
        #endregion
        /// 
        /// Gets a string representation of this object.
        /// 
        /// A string representation of this object.
        public override string ToString()
        {
            return string.Format(CultureInfo.InvariantCulture, "JET_DBINFOMISC({0})", this._signDb);
        }
        /// 
        /// Returns the hash code for this instance.
        /// 
        /// The hash code for this instance.
        public override int GetHashCode()
        {
            var hashes = new[]
            {
                this._ulVersion,
                this._ulUpdate,
                this._signDb.GetHashCode(),
                this._dbstate.GetHashCode(),
                this._lgposConsistent.GetHashCode(),
                this._logtimeConsistent.GetHashCode(),
                this._logtimeAttach.GetHashCode(),
                this._lgposAttach.GetHashCode(),
                this._logtimeDetach.GetHashCode(),
                this._lgposDetach.GetHashCode(),
                this._signLog.GetHashCode(),
                this._bkinfoFullPrev.GetHashCode(),
                this._bkinfoIncPrev.GetHashCode(),
                this._bkinfoFullCur.GetHashCode(),
                this._fShadowingDisabled.GetHashCode(),
                this._fUpgradeDb.GetHashCode(),
                this._dwMajorVersion,
                this._dwMinorVersion,
                this._dwBuildNumber,
                this._lSPNumber,
                this._cbPageSize,
                this._genMinRequired,
                this._genMaxRequired,
                this._logtimeGenMaxCreate.GetHashCode(),
                this._ulRepairCount,
                this._logtimeRepair.GetHashCode(),
                this._ulRepairCountOld,
                this._ulECCFixSuccess,
                this._logtimeECCFixSuccess.GetHashCode(),
                this._ulECCFixSuccessOld,
                this._ulECCFixFail,
                this._logtimeECCFixFail.GetHashCode(),
                this._ulECCFixFailOld,
                this._ulBadChecksum,
                this._logtimeBadChecksum.GetHashCode(),
                this._ulBadChecksumOld,
                this._genCommitted,
                this._bkinfoCopyPrev.GetHashCode(),
                this._bkinfoDiffPrev.GetHashCode(),
            };
            var listHashes = new List(hashes);
            this.AddNotYetPublishedHashCodes(listHashes);
            return Util.CalculateHashCode(listHashes);
        }
        /// 
        /// Determines whether the specified  is equal to the current .
        /// 
        /// The  to compare with the current .
        /// 
        /// True if the specified  is equal to the current ; otherwise, false.
        /// 
        public override bool Equals(object obj)
        {
            if (obj == null || this.GetType() != obj.GetType())
            {
                return false;
            }
            return this.Equals((JET_DBINFOMISC)obj);
        }
        /// 
        /// Indicates whether the current object is equal to another object of the same type.
        /// 
        /// An object to compare with this object.
        /// 
        /// True if the current object is equal to the  parameter; otherwise, false.
        /// 
        public bool Equals(JET_DBINFOMISC other)
        {
            if (null == other)
            {
                return false;
            }
            bool notYetPublishedEquals = true;
            this.NotYetPublishedEquals(other, ref notYetPublishedEquals);
            return notYetPublishedEquals
                   && this._ulVersion == other._ulVersion
                   && this._ulUpdate == other._ulUpdate
                   && this._signDb == other._signDb
                   && this._dbstate == other._dbstate
                   && this._lgposConsistent == other._lgposConsistent
                   && this._logtimeConsistent == other._logtimeConsistent
                   && this._logtimeAttach == other._logtimeAttach
                   && this._lgposAttach == other._lgposAttach
                   && this._logtimeDetach == other._logtimeDetach
                   && this._lgposDetach == other._lgposDetach
                   && this._signLog == other._signLog
                   && this._bkinfoFullPrev == other._bkinfoFullPrev
                   && this._bkinfoIncPrev == other._bkinfoIncPrev
                   && this._bkinfoFullCur == other._bkinfoFullCur
                   && this._fShadowingDisabled == other._fShadowingDisabled
                   && this._fUpgradeDb == other._fUpgradeDb
                   && this._dwMajorVersion == other._dwMajorVersion
                   && this._dwMinorVersion == other._dwMinorVersion
                   && this._dwBuildNumber == other._dwBuildNumber
                   && this._lSPNumber == other._lSPNumber
                   && this._cbPageSize == other._cbPageSize
                   && this._genMinRequired == other._genMinRequired
                   && this._genMaxRequired == other._genMaxRequired
                   && this._logtimeGenMaxCreate == other._logtimeGenMaxCreate
                   && this._ulRepairCount == other._ulRepairCount
                   && this._logtimeRepair == other._logtimeRepair
                   && this._ulRepairCountOld == other._ulRepairCountOld
                   && this._ulECCFixSuccess == other._ulECCFixSuccess
                   && this._logtimeECCFixSuccess == other._logtimeECCFixSuccess
                   && this._ulECCFixSuccessOld == other._ulECCFixSuccessOld
                   && this._ulECCFixFail == other._ulECCFixFail
                   && this._logtimeECCFixFail == other._logtimeECCFixFail
                   && this._ulECCFixFailOld == other._ulECCFixFailOld
                   && this._ulBadChecksum == other._ulBadChecksum
                   && this._logtimeBadChecksum == other._logtimeBadChecksum
                   && this._ulBadChecksumOld == other._ulBadChecksumOld
                   && this._genCommitted == other._genCommitted
                   && this._bkinfoCopyPrev == other._bkinfoCopyPrev
                   && this._bkinfoDiffPrev == other._bkinfoDiffPrev;
        }
        /// 
        /// Sets the members of this object from a native object.
        /// 
        /// The native object.
        internal void SetFromNativeDbinfoMisc(ref NATIVE_DBINFOMISC native)
        {
            unchecked
            {
                this._ulVersion = (int)native.ulVersion;
                this._ulUpdate = (int)native.ulUpdate;
                this._signDb = new JET_SIGNATURE(native.signDb);
                this._dbstate = (JET_dbstate)native.dbstate;
                this._lgposConsistent = native.lgposConsistent;
                this._logtimeConsistent = native.logtimeConsistent;
                this._logtimeAttach = native.logtimeAttach;
                this._lgposAttach = native.lgposAttach;
                this._logtimeDetach = native.logtimeDetach;
                this._lgposDetach = native.lgposDetach;
                this._signLog = new JET_SIGNATURE(native.signLog);
                this._bkinfoFullPrev = native.bkinfoFullPrev;
                this._bkinfoIncPrev = native.bkinfoIncPrev;
                this._bkinfoFullCur = native.bkinfoFullCur;
                this._fShadowingDisabled = 0 != native.fShadowingDisabled;
                this._fUpgradeDb = 0 != native.fUpgradeDb;
                this._dwMajorVersion = (int)native.dwMajorVersion;
                this._dwMinorVersion = (int)native.dwMinorVersion;
                this._dwBuildNumber = (int)native.dwBuildNumber;
                this._lSPNumber = (int)native.lSPNumber;
                this._cbPageSize = (int)native.cbPageSize;
            }
        }
        /// 
        /// Sets the members of this object from a native object.
        /// 
        /// The native object.
        internal void SetFromNativeDbinfoMisc(ref NATIVE_DBINFOMISC4 native)
        {
            this.SetFromNativeDbinfoMisc(ref native.dbinfo);
            unchecked
            {
                this._genMinRequired = (int)native.genMinRequired;
                this._genMaxRequired = (int)native.genMaxRequired;
                this._logtimeGenMaxCreate = native.logtimeGenMaxCreate;
                this._ulRepairCount = (int)native.ulRepairCount;
                this._logtimeRepair = native.logtimeRepair;
                this._ulRepairCountOld = (int)native.ulRepairCountOld;
                this._ulECCFixSuccess = (int)native.ulECCFixSuccess;
                this._logtimeECCFixSuccess = native.logtimeECCFixSuccess;
                this._ulECCFixSuccessOld = (int)native.ulECCFixSuccessOld;
                this._ulECCFixFail = (int)native.ulECCFixFail;
                this._logtimeECCFixFail = native.logtimeECCFixFail;
                this._ulECCFixFailOld = (int)native.ulECCFixFailOld;
                this._ulBadChecksum = (int)native.ulBadChecksum;
                this._logtimeBadChecksum = native.logtimeBadChecksum;
                this._ulBadChecksumOld = (int)native.ulBadChecksumOld;
                this._genCommitted = (int)native.genCommitted;
                this._bkinfoCopyPrev = native.bkinfoCopyPrev;
                this._bkinfoDiffPrev = native.bkinfoDiffPrev;
            }
        }
        /// 
        /// Calculates the native version of the structure.
        /// 
        /// The native version of the structure.
        internal NATIVE_DBINFOMISC GetNativeDbinfomisc()
        {
            NATIVE_DBINFOMISC native = new NATIVE_DBINFOMISC();
            unchecked
            {
                native.ulVersion = (uint)this._ulVersion;
                native.ulUpdate = (uint)this._ulUpdate;
                native.signDb = this._signDb.GetNativeSignature();
                native.dbstate = (uint)this._dbstate;
                native.lgposConsistent = this._lgposConsistent;
                native.logtimeConsistent = this._logtimeConsistent;
                native.logtimeAttach = this._logtimeAttach;
                native.lgposAttach = this._lgposAttach;
                native.logtimeDetach = this._logtimeDetach;
                native.lgposDetach = this._lgposDetach;
                native.signLog = this._signLog.GetNativeSignature();
                native.bkinfoFullPrev = this._bkinfoFullPrev;
                native.bkinfoIncPrev = this._bkinfoIncPrev;
                native.bkinfoFullCur = this._bkinfoFullCur;
                native.fShadowingDisabled = this._fShadowingDisabled ? 1u : 0u;
                native.fUpgradeDb = this._fUpgradeDb ? 1u : 0u;
                native.dwMajorVersion = (uint)this._dwMajorVersion;
                native.dwMinorVersion = (uint)this._dwMinorVersion;
                native.dwBuildNumber = (uint)this._dwBuildNumber;
                native.lSPNumber = (uint)this._lSPNumber;
                native.cbPageSize = (uint)this._cbPageSize;
            }
            return native;
        }
        /// 
        /// Calculates the native version of the structure.
        /// 
        /// The native version of the structure.
        internal NATIVE_DBINFOMISC4 GetNativeDbinfomisc4()
        {
            NATIVE_DBINFOMISC4 native = new NATIVE_DBINFOMISC4();
            native.dbinfo = this.GetNativeDbinfomisc();
            unchecked
            {
                native.genMinRequired = (uint)this._genMinRequired;
                native.genMaxRequired = (uint)this._genMaxRequired;
                native.logtimeGenMaxCreate = this._logtimeGenMaxCreate;
                native.ulRepairCount = (uint)this._ulRepairCount;
                native.logtimeRepair = this._logtimeRepair;
                native.ulRepairCountOld = (uint)this._ulRepairCountOld;
                native.ulECCFixSuccess = (uint)this._ulECCFixSuccess;
                native.logtimeECCFixSuccess = this._logtimeECCFixSuccess;
                native.ulECCFixSuccessOld = (uint)this._ulECCFixSuccessOld;
                native.ulECCFixFail = (uint)this._ulECCFixFail;
                native.logtimeECCFixFail = this._logtimeECCFixFail;
                native.ulECCFixFailOld = (uint)this._ulECCFixFailOld;
                native.ulBadChecksum = (uint)this._ulBadChecksum;
                native.logtimeBadChecksum = this._logtimeBadChecksum;
                native.ulBadChecksumOld = (uint)this._ulBadChecksumOld;
                native.genCommitted = (uint)this._genCommitted;
                native.bkinfoCopyPrev = this._bkinfoCopyPrev;
                native.bkinfoDiffPrev = this._bkinfoDiffPrev;
            }
            return native;
        }
        /// 
        /// Provides a hook to allow comparison of additional fields in
        /// a different file. These additonal fields are not yet published
        /// on MSDN.
        /// 
        /// The structure to compare with.
        /// Whether the additional fields in 
        /// are the same as this.
        partial void NotYetPublishedEquals(JET_DBINFOMISC other, ref bool notYetPublishedEquals);
        /// 
        /// Provides a hook to allow additional fields to be calculated in the hashcode.
        /// These additonal fields are not yet published on MSDN.
        /// 
        /// The list of hashcodes to add to.
        partial void AddNotYetPublishedHashCodes(IList hashCodes);
    }
}