//-----------------------------------------------------------------------
// 
//     Copyright (c) Microsoft Corporation.
// 
//-----------------------------------------------------------------------
namespace Microsoft.Isam.Esent.Interop
{
    using System;
    using System.Collections.Generic;
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum CreateInstanceGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [Flags]
    public enum InitGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0
    }
    /// 
    /// Options for .
    /// 
    /// 
    [Flags]
    public enum TermGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Requests that the instance be shut down cleanly. Any optional
        /// cleanup work that would ordinarily be done in the background at
        /// run time is completed immediately.
        /// 
        Complete = 1,
        /// 
        /// Requests that the instance be shut down as quickly as possible.
        /// Any optional work that would ordinarily be done in the
        /// background at run time is abandoned.
        /// 
        Abrupt = 2,
        
        /// 
        /// Interrupts and fails any on-going backup.
        /// 
        StopBackup = 4,
    }
    /// 
    /// Options for .
    /// 
    /// 
    [Flags]
    public enum CreateDatabaseGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// By default, if JetCreateDatabase is called and the database already exists,
        /// the Api call will fail and the original database will not be overwritten.
        /// OverwriteExisting changes this behavior, and the old database
        /// will be overwritten with a new one.
        /// 
        OverwriteExisting = 0x200,
        /// 
        /// Turns off logging. Setting this bit loses the ability to replay log files
        /// and recover the database to a consistent usable state after a crash.
        /// 
        RecoveryOff = 0x8,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum DetachDatabaseGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// If  is used,  will be returned.
        /// 
        [Obsolete("ForceDetach is no longer used.")]
        ForceDetach = 1,
        /// 
        ///  is no longer used.
        /// 
        [Obsolete("ForceClose is no longer used.")]
        ForceClose = 0x2,
        /// 
        /// If  is used,  will be returned.
        /// 
        [Obsolete("ForceCloseAndDetach is no longer used.")]
        ForceCloseAndDetach = (0x2 | 0x1 /*ForceDetach*/),
    }
    /// 
    /// Options for .
    /// 
    /// 
    /// 
    /// 
    [Flags]
    public enum AttachDatabaseGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        ///  Prevents modifications to the database.
        /// 
        ReadOnly = 0x1,
        /// 
        /// If JET_paramEnableIndexChecking has been set, all indexes over Unicode
        /// data will be deleted.
        /// 
        DeleteCorruptIndexes = 0x10,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum OpenDatabaseGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Prevents modifications to the database.
        /// 
        ReadOnly = 0x1,
        /// 
        /// Allows only a single session to attach a database.
        /// Normally, several sessions can open a database.
        /// 
        Exclusive = 0x2,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum CloseDatabaseGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
#if !MANAGEDESENT_ON_WSA // Not exposed in MSDK
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum CompactGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Causes JetCompact to dump statistics on the source database to a file
        ///  named DFRGINFO.TXT. Statistics include the name of each table in
        /// source database, number of rows in each table, total size in bytes of
        /// all rows in each table, total size in bytes of all columns of type
        ///  or 
        /// that were large enough to be stored separate from the record, number
        /// of clustered index leaf pages, and the number of long value leaf pages.
        /// In addition, summary statistics including the size of the source database,
        /// destination database, time required for database compaction, temporary
        /// database space are all dumped as well.
        /// 
        Stats = 0x20,
        /// 
        /// Used when the source database is known to be corrupt. It enables a
        /// whole set of new behaviors intended to salvage as much data as
        /// possible from the source database. JetCompact with this option set
        /// may return  but not copy all of the data
        /// created in the source database. Data that was in damaged portions of
        /// the source database will be skipped.
        /// 
        [Obsolete("Use esentutl repair functionality instead.")]
        Repair = 0x40,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SnapshotFreezeGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    /// 
    /// 
    [Flags]
    public enum SnapshotPrepareGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Only logfiles will be taken.
        /// 
        IncrementalSnapshot = 0x1,
        /// 
        /// A copy snapshot (normal or incremental) with no log truncation.
        /// 
        CopySnapshot = 0x2,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SnapshotThawGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum BackupGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Creates an incremental backup as opposed to a full backup. This
        /// means that only the log files created since the last full or
        /// incremental backup will be backed up.
        /// 
        Incremental = 0x1,
        /// 
        /// Creates a full backup of the database. This allows the preservation
        /// of an existing backup in the same directory if the new backup fails.
        /// 
        Atomic = 0x4,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum BeginExternalBackupGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Creates an incremental backup as opposed to a full backup. This
        /// means that only the log files since the last full or incremental
        /// backup will be backed up.
        /// 
        Incremental = 0x1,
    }
    /// 
    /// Options for .
    /// 
    /// 
    [Flags]
    public enum EndExternalBackupGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// The client application finished the backup completely, and is ending normally.
        /// 
        Normal = 0x1,
        /// 
        /// The client application is aborting the backup.
        /// 
        Abort = 0x2,
    }
#endif // !MANAGEDESENT_ON_WSA
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum BeginTransactionGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// The transaction will not modify the database. If an update is attempted,
        /// that operation will fail with . This
        /// option is ignored unless it is requested when the given session is not
        /// already in a transaction.
        /// 
        ReadOnly = 0x1,
    }
    /// 
    /// Options for JetCommitTransaction.
    /// 
    /// 
    /// 
    [Flags]
    public enum CommitTransactionGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// The transaction is committed normally but this Api does not wait for
        /// the transaction to be flushed to the transaction log file before returning
        /// to the caller. This drastically reduces the duration of a commit operation
        /// at the cost of durability. Any transaction that is not flushed to the log
        /// before a crash will be automatically aborted during crash recovery during
        /// the next call to JetInit. If  or 
        /// are specified, this option is ignored.
        /// 
        LazyFlush = 0x1,
        /// 
        ///  If the session has previously committed any transactions and they have not yet
        ///  been flushed to the transaction log file, they should be flushed immediately.
        ///  This Api will wait until the transactions have been flushed before returning
        ///  to the caller. This is useful if the application has previously committed several
        ///  transactions using JET_bitCommitLazyFlush and now wants to flush all of them to disk.
        /// 
        /// 
        /// This option may be used even if the session is not currently in a transaction.
        /// This option cannot be used in combination with any other option.
        /// 
        WaitLastLevel0Commit = 0x2,
    }
    /// 
    /// Options for JetRollbackTransaction.
    /// 
    [Flags]
    public enum RollbackTransactionGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// This option requests that all changes made to the state of the
        /// database during all save points be undone. As a result, the
        /// session will exit the transaction.
        /// 
        RollbackAll = 0x1,
    }
    /// 
    /// Options for JetEndSession.
    /// 
    [Flags]
    public enum EndSessionGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for JetOpenTable.
    /// 
    [Flags]
    public enum OpenTableGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// This table cannot be opened for write access by another session.
        /// 
        DenyWrite = 0x1,
        /// 
        /// This table cannot be opened for read access by another session.
        /// 
        DenyRead = 0x2,
        /// 
        /// Request read-only access to the table.
        /// 
        ReadOnly = 0x4,
        /// 
        /// Request write access to the table.
        /// 
        Updatable = 0x8,
        /// 
        /// Allow DDL modifications to a table flagged as FixedDDL. This option
        /// must be used with DenyRead.
        /// 
        PermitDDL = 0x10,
        /// 
        /// Do not cache pages for this table.
        /// 
        NoCache = 0x20,
        /// 
        /// Provides a hint that the table is probably not in the buffer cache, and
        /// that pre-reading may be beneficial to performance.
        /// 
        Preread = 0x40,
        /// 
        /// Assume a sequential access pattern and prefetch database pages.
        /// 
        Sequential = 0x8000,
        /// 
        /// Table belongs to stats class 1.
        /// 
        TableClass1 = 0x00010000,
        /// 
        /// Table belongs to stats class 2.
        /// 
        TableClass2 = 0x00020000,
        /// 
        /// Table belongs to stats class 3.
        /// 
        TableClass3 = 0x00030000,
        /// 
        /// Table belongs to stats class 4.
        /// 
        TableClass4 = 0x00040000,
        /// 
        /// Table belongs to stats class 5.
        /// 
        TableClass5 = 0x00050000,
        /// 
        /// Table belongs to stats class 6.
        /// 
        TableClass6 = 0x00060000,
        /// 
        /// Table belongs to stats class 7.
        /// 
        TableClass7 = 0x00070000,
        /// 
        /// Table belongs to stats class 8.
        /// 
        TableClass8 = 0x00080000,
        /// 
        /// Table belongs to stats class 9.
        /// 
        TableClass9 = 0x00090000,
        /// 
        /// Table belongs to stats class 10.
        /// 
        TableClass10 = 0x000A0000,
        /// 
        /// Table belongs to stats class 11.
        /// 
        TableClass11 = 0x000B0000,
        /// 
        /// Table belongs to stats class 12.
        /// 
        TableClass12 = 0x000C0000,
        /// 
        /// Table belongs to stats class 13.
        /// 
        TableClass13 = 0x000D0000,
        /// 
        /// Table belongs to stats class 14.
        /// 
        TableClass14 = 0x000E0000,
        /// 
        /// Table belongs to stats class 15.
        /// 
        TableClass15 = 0x000F0000,
    }
#if !MANAGEDESENT_ON_WSA // Not exposed in MSDK
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum DupCursorGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for  and .
    /// 
    [Flags]
    public enum LsGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// The context handle for the chosen object should be reset to JET_LSNil.
        /// 
        Reset = 0x1,
        /// 
        /// Specifies the context handle should be associated with the given cursor.
        /// 
        Cursor = 0x2,
        /// 
        /// Specifies that the context handle should be associated with the
        /// table associated with the given cursor. It is illegal to use this
        /// option with .
        /// 
        Table = 0x4,
    }
#endif // !MANAGEDESENT_ON_WSA
    /// 
    /// Options for the 
    /// and its associated overloads.
    /// 
    /// 
    /// 
    [Flags]
    public enum SetColumnGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// This option is used to append data to a column of type 
        /// or . The same behavior can be achieved by determining
        /// the size of the existing long value and specifying ibLongValue in psetinfo.
        /// However, its simpler to use this grbit since knowing the size of the existing
        /// column value is not necessary.
        /// 
        AppendLV = 0x1,
        /// 
        /// This option is used replace the existing long value with the newly provided
        /// data. When this option is used, it is as though the existing long value has
        /// been set to 0 (zero) length prior to setting the new data.
        /// 
        OverwriteLV = 0x4,
        /// 
        /// This option is only applicable for tagged, sparse or multi-valued columns.
        /// It causes the column to return the default column value on subsequent retrieve
        /// column operations. All existing column values are removed.
        /// 
        RevertToDefaultValue = 0x200,
        /// 
        /// This option is used to force a long value, columns of type 
        /// or , to be stored separately from the remainder of record
        /// data. This occurs normally when the size of the long value prevents it from being
        /// stored with remaining record data. However, this option can be used to force the
        /// long value to be stored separately. Note that long values four bytes in size
        /// of smaller cannot be forced to be separate. In such cases, the option is ignored.
        /// 
        SeparateLV = 0x40,
        /// 
        /// This option is used to interpret the input buffer as a integer number of bytes
        /// to set as the length of the long value described by the given columnid and if
        /// provided, the sequence number in psetinfo->itagSequence. If the size given is
        /// larger than the existing column value, the column will be extended with 0s.
        /// If the size is smaller than the existing column value then the value will be
        /// truncated.
        /// 
        SizeLV = 0x8,
        /// 
        /// This option is used to enforce that all values in a multi-valued column are
        /// distinct. This option compares the source column data, without any
        /// transformations, to other existing column values and an error is returned
        /// if a duplicate is found. If this option is given, then AppendLV, OverwriteLV
        /// and SizeLV cannot also be given.
        /// 
        UniqueMultiValues = 0x80,
        /// 
        /// This option is used to enforce that all values in a multi-valued column are
        /// distinct. This option compares the key normalized transformation of column
        /// data, to other similarly transformed existing column values and an error is
        /// returned if a duplicate is found. If this option is given, then AppendLV,
        /// OverwriteLV and SizeLV cannot also be given.
        /// 
        UniqueNormalizedMultiValues = 0x100,
        /// 
        /// This option is used to set a value to zero length. Normally, a column value
        /// is set to NULL by passing a cbMax of 0 (zero). However, for some types, like
        /// JET_coltyp.Text, a column value can be 0 (zero) length instead of NULL, and
        /// this option is used to differentiate between NULL and 0 (zero) length.
        /// 
        ZeroLength = 0x20,
        /// 
        /// Try to store long-value columns in the record, even if they exceed the default
        /// separation size.
        /// 
        IntrinsicLV = 0x400,
    }
    /// 
    /// Options for JetRetrieveColumn.
    /// 
    [Flags]
    public enum RetrieveColumnGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        ///  This flag causes retrieve column to retrieve the modified value instead of
        ///  the original value. If the value has not been modified, then the original
        ///  value is retrieved. In this way, a value that has not yet been inserted or
        ///  updated may be retrieved during the operation of inserting or updating a record.
        /// 
        RetrieveCopy = 0x1,
        /// 
        /// This option is used to retrieve column values from the index, if possible,
        /// without accessing the record. In this way, unnecessary loading of records
        /// can be avoided when needed data is available from index entries themselves.
        /// 
        RetrieveFromIndex = 0x2,
        /// 
        /// This option is used to retrieve column values from the index bookmark,
        /// and may differ from the index value when a column appears both in the
        /// primary index and the current index. This option should not be specified
        /// if the current index is the clustered, or primary, index. This bit cannot
        /// be set if RetrieveFromIndex is also set.
        /// 
        RetrieveFromPrimaryBookmark = 0x4,
        /// 
        /// This option is used to retrieve the sequence number of a multi-valued
        /// column value in JET_RETINFO.itagSequence. Retrieving the sequence number
        /// can be a costly operation and should only be done if necessary.
        /// 
        RetrieveTag = 0x8,
        /// 
        /// This option is used to retrieve multi-valued column NULL values. If
        /// this option is not specified, multi-valued column NULL values will
        /// automatically be skipped.
        /// 
        RetrieveNull = 0x10,
        /// 
        /// This option affects only multi-valued columns and causes a NULL
        /// value to be returned when the requested sequence number is 1 and
        /// there are no set values for the column in the record.
        /// 
        RetrieveIgnoreDefault = 0x20,
    }
    /// 
    /// Options for 
    /// and its associated overloads.
    /// 
    /// 
    /// 
    [Flags]
    public enum EnumerateColumnsGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// When enumerating column values, all columns for which we are retrieving
        /// all values and that have only one non-NULL column value may be returned
        /// in a compressed format. The status for such columns will be set to
        ///  and the size of the column value
        /// and the memory containing the column value will be returned directly in
        /// the  structure. It is not guaranteed that
        /// all eligible columns are compressed in this manner. See
        ///  for more information.
        /// 
        EnumerateCompressOutput = 0x00080000,
        /// 
        /// This option indicates that the modified column values of the record
        /// should be enumerated rather than the original column values. If a
        /// column value has not been modified, the original column value is
        /// enumerated. In this way, a column value that has not yet been inserted
        /// or updated may be enumerated when inserting or updating a record.
        /// 
        /// 
        /// This option is identical to .
        /// 
        EnumerateCopy = 0x1,
        /// 
        /// If a given column is not present in the record then no column value
        /// will be returned. Ordinarily, the default value for the column,
        /// if any, would be returned in this case. It is guaranteed that if the
        /// column is set to a value different than the default value then that
        /// different value will be returned (that is, if a column with a
        /// default value is explicitly set to NULL then a NULL will be returned
        /// as the value for that column). Even if this option is requested, it
        /// is still possible to see a column value that happens to be equal to
        /// the default value. No effort is made to remove column values that
        /// match their default values.
        /// It is important to remember that this option affects the output of
        /// 
        /// and its associated overloads when used with
        ///  or
        /// .
        /// 
        EnumerateIgnoreDefault = 0x20,
        /// 
        /// If a non-NULL value exists for the requested column or column value
        /// then the associated data is not returned. Instead, the associated
        /// status for that column or column value will be set to
        /// . If the column or column value
        /// is NULL then  will be returned as usual.
        /// 
        EnumeratePresenceOnly = 0x00020000,
        /// 
        /// When enumerating all column values in the record (for example,that is
        /// when numColumnids is zero), only tagged column values will be returned.
        /// This option is not allowed when enumerating a specific array of column IDs.
        /// 
        EnumerateTaggedOnly = 0x00040000,
    }
#if !MANAGEDESENT_ON_WSA // Not exposed in MSDK
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum GetRecordSizeGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Retrieve the size of the record that is in the copy buffer prepared
        /// or update. Otherwise, the tableid must be positioned on a record,
        /// and that record will be used.
        /// 
        InCopyBuffer = 0x1,
        /// 
        /// The JET_RECSIZE is not zeroed before filling the contents, effectively
        /// acting as an accumulation of the statistics for multiple records visited
        /// or updated.
        /// 
        RunningTotal = 0x2,
        /// 
        /// Ignore non-intrinsic Long Values. Only the local record on the page
        /// will be used.
        /// 
        Local = 0x4,
    }
#endif // !MANAGEDESENT_ON_WSA
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum GetSecondaryIndexBookmarkGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum GotoSecondaryIndexBookmarkGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// In the event that the index entry can no longer be found, the cursor
        /// will be left positioned where that index entry was previously found.
        /// The operation will still fail with JET_errRecordDeleted; however,
        /// it will be possible to move to the next or previous index entry
        /// relative to the index entry that is now missing.
        /// 
        BookmarkPermitVirtualCurrency = 0x1,
    }
    /// 
    /// Options for JetMove.
    /// 
    [Flags]
    public enum MoveGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Moves the cursor forward or backward by the number of index entries
        /// required to skip the requested number of index key values encountered
        /// in the index. This has the effect of collapsing index entries with
        /// duplicate key values into a single index entry.
        /// 
        MoveKeyNE = 0x1,
    }
    /// 
    /// Options for JetMakeKey.
    /// 
    [Flags]
    public enum MakeKeyGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// A new search key should be constructed. Any previously existing search
        /// key is discarded.
        /// 
        NewKey = 0x1,
        /// 
        /// When this option is specified, all other options are ignored, any
        /// previously existing search key is discarded, and the contents of the
        /// input buffer are loaded as the new search key.
        /// 
        NormalizedKey = 0x8,
        /// 
        /// If the size of the input buffer is zero and the current key column
        /// is a variable length column, this option indicates that the input
        /// buffer contains a zero length value. Otherwise, an input buffer size
        /// of zero would indicate a NULL value.
        /// 
        KeyDataZeroLength = 0x10,
        /// 
        /// This option indicates that the search key should be constructed
        /// such that any key columns that come after the current key column
        /// should be considered to be wildcards.
        /// 
        StrLimit = 0x2,
        /// 
        /// This option indicates that the search key should be constructed
        /// such that the current key column is considered to be a prefix
        /// wildcard and that any key columns that come after the current
        /// key column should be considered to be wildcards.
        /// 
        SubStrLimit = 0x4,
        /// 
        /// The search key should be constructed such that any key columns
        /// that come after the current key column should be considered to
        /// be wildcards.
        /// 
        FullColumnStartLimit = 0x100,
        /// 
        /// The search key should be constructed in such a way that any key
        /// columns that come after the current key column are considered to
        /// be wildcards.
        /// 
        FullColumnEndLimit = 0x200,
        /// 
        /// The search key should be constructed such that the current key
        /// column is considered to be a prefix wildcard and that any key
        /// columns that come after the current key column should be considered
        /// to be wildcards.
        /// 
        PartialColumnStartLimit = 0x400,
        /// 
        /// The search key should be constructed such that the current key
        /// column is considered to be a prefix wildcard and that any key
        /// columns that come after the current key column should be considered
        /// to be wildcards.
        /// 
        PartialColumnEndLimit = 0x800,
    }
    /// 
    /// Options for JetRetrieveKey.
    /// 
    [Flags]
    public enum RetrieveKeyGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Retrieve the currently constructed key.
        /// 
        RetrieveCopy = 0x1,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SeekGrbit
    {
        /// 
        /// The cursor will be positioned at the index entry closest to the
        /// start of the index that exactly matches the search key.
        /// 
        SeekEQ = 0x1,
        /// 
        /// The cursor will be positioned at the index entry closest to the
        /// end of the index that is less than an index entry that would
        /// exactly match the search criteria.
        /// 
        SeekLT = 0x2,
        /// 
        /// The cursor will be positioned at the index entry closest to the
        /// end of the index that is less than or equal to an index entry
        /// that would exactly match the search criteria.
        /// 
        SeekLE = 0x4,
        /// 
        /// The cursor will be positioned at the index entry closest to the
        /// start of the index that is greater than or equal to an index
        /// entry that would exactly match the search criteria.
        /// 
        SeekGE = 0x8,
        /// 
        /// The cursor will be positioned at the index entry closest to the
        /// start of the index that is greater than an index entry that
        /// would exactly match the search criteria.
        /// 
        SeekGT = 0x10,
        /// 
        /// An index range will automatically be setup for all keys that
        /// exactly match the search key.
        /// 
        SetIndexRange = 0x20,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SetIndexRangeGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// This option indicates that the limit of the index range is inclusive.
        /// 
        RangeInclusive = 0x1,
        /// 
        /// The search key in the cursor represents the search criteria for the
        /// index entry closest to the end of the index that will match the index
        /// range.
        /// 
        RangeUpperLimit = 0x2,
        /// 
        /// The index range should be removed as soon as it has been established.
        /// This is useful for testing for the existence of index entries that
        /// match the search criteria.
        /// 
        RangeInstantDuration = 0x4,
        /// 
        /// Cancel and existing index range.
        /// 
        RangeRemove = 0x8,
    }
    /// 
    /// Options for the  object.
    /// 
    [Flags]
    public enum IndexRangeGrbit
    {
        /// 
        /// Records in the cursors indexrange should be included in the output.
        /// 
        RecordInIndex = 0x1,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum IntersectIndexesGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for  and
    /// .
    /// 
    [Flags]
    public enum SetCurrentIndexGrbit
    {
        /// 
        /// Default options. This is the same as .
        /// 
        None = 0,
        /// 
        /// Indicates that the cursor should be positioned on the first entry of
        /// the specified index. If the current index is being selected then this
        /// option is ignored.
        /// 
        MoveFirst = 0,
        /// 
        /// Indicates that the cursor should be positioned on the index entry
        /// of the new index that corresponds to the record associated with the
        /// index entry at the current position of the cursor on the old index.
        /// 
        NoMove = 0x2,
    }
    /// 
    /// Options for .
    /// 
    /// 
    [Flags]
    public enum SetTableSequentialGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum ResetTableSequentialGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for JetGetLock.
    /// 
    [Flags]
    public enum GetLockGrbit
    {
        /// 
        /// Acquire a read lock on the current record. Read locks are incompatible with
        /// write locks already held by other sessions but are compatible with read locks
        /// held by other sessions.
        /// 
        Read = 0x1,
        /// 
        ///  Acquire a write lock on the current record. Write locks are not compatible
        ///  with write or read locks held by other sessions but are compatible with
        ///  read locks held by the same session.
        /// 
        Write = 0x2,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum EscrowUpdateGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// Even if the session performing the escrow update has its transaction rollback
        /// this update will not be undone. As the log records may not be flushed to disk,
        /// recent escrow updates done with this flag may be lost if there is a crash.
        /// 
        NoRollback = 0x1,
    }
    /// 
    /// Options for the  structure.
    /// 
    /// 
    /// 
    [Flags]
    public enum ColumndefGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// The column will be fixed. It will always use the same amount of space in a row,
        /// regardless of how much data is being stored in the column. ColumnFixed
        /// cannot be used with ColumnTagged. This bit cannot be used with long values
        /// (that is JET_coltyp.LongText and JET_coltyp.LongBinary).
        /// 
        ColumnFixed = 0x1,
        /// 
        ///  The column will be tagged. Tagged columns do not take up any space in the database
        ///  if they do not contain data. This bit cannot be used with ColumnFixed.
        /// 
        ColumnTagged = 0x2,
        /// 
        /// The column must never be set to a NULL value. On Windows XP this can only be applied to
        /// fixed columns (bit, byte, integer, etc).
        /// 
        ColumnNotNULL = 0x4,
        /// 
        /// The column is a version column that specifies the version of the row. The value of
        /// this column starts at zero and will be automatically incremented for each update on
        /// the row. This option can only be applied to  columns. This option cannot
        /// be used with , , or .
        /// 
        ColumnVersion = 0x8,
        /// 
        /// The column will automatically be incremented. The number is an increasing number, and
        /// is guaranteed to be unique within a table. The numbers, however, might not be continuous.
        /// For example, if five rows are inserted into a table, the "autoincrement" column could
        /// contain the values { 1, 2, 6, 7, 8 }. This bit can only be used on columns of type
        ///  or .
        /// 
        ColumnAutoincrement = 0x10,
        /// 
        /// The column can be updated. This is NOT a valid grbit to set on input to any API. It is
        /// returned as part of the  structure's grbit member, as an
        /// output from Api.JetGetColumnInfo.
        /// 
        ColumnUpdatable = 0x20,
        /// 
        /// The column can be multi-valued.
        /// A multi-valued column can have zero, one, or more values
        /// associated with it. The various values in a multi-valued column are identified by a number
        /// called the itagSequence member, which belongs to various structures, including:
        /// , , , , and .
        /// Multi-valued columns must be tagged columns; that is, they cannot be fixed-length or
        /// variable-length columns.
        /// 
        ColumnMultiValued = 0x400,
        /// 
        ///  Specifies that a column is an escrow update column. An escrow update column can be
        ///  updated concurrently by different sessions with JetEscrowUpdate and will maintain
        ///  transactional consistency. An escrow update column must also meet the following conditions:
        ///  An escrow update column can be created only when the table is empty.
        ///  An escrow update column must be of type JET_coltypLong.
        ///  An escrow update column must have a default value.
        ///  ColumnEscrowUpdate cannot be used in conjunction with ,
        ///  , or .
        /// 
        ColumnEscrowUpdate = 0x800,
        /// 
        /// The column will be created in an without version information. This means that other
        /// transactions that attempt to add a column with the same name will fail. This bit
        /// is only useful with JetAddColumn. It cannot be used within a transaction.
        /// 
        ColumnUnversioned = 0x1000,
        /// 
        /// In doing an outer join, the retrieve column operation might not have a match
        /// from the inner table.
        /// 
        ColumnMaybeNull = 0x2000,
        /// 
        /// DEPRECATED / Not Fully Implemented: use ColumnDeleteOnZero  instead.
        /// 
        ColumnFinalize = 0x4000,
        /// 
        /// The default value for a column will be provided by a callback function. A column that
        /// has a user-defined default must be a tagged column. Specifying 
        /// means that pvDefault must point to a JET_USERDEFINEDDEFAULT structure, and cbDefault must be
        /// set to sizeof( JET_USERDEFINEDDEFAULT ).
        /// 
        ColumnUserDefinedDefault = 0x8000,
        /// 
        /// The column will be a key column for the temporary table. The order
        /// of the column definitions with this option specified in the input
        /// array will determine the precedence of each key column for the
        /// temporary table. The first column definition in the array that
        /// has this option set will be the most significant key column and
        /// so on. If more key columns are requested than can be supported
        /// by the database engine then this option is ignored for the
        /// unsupportable key columns.
        /// 
        TTKey = 0x40,
        /// 
        /// The sort order of the key column for the temporary table should
        /// be descending rather than ascending. If this option is specified
        ///  without  then this option is ignored.
        /// 
        TTDescending = 0x80,
    }
    /// 
    /// Options for the  parameter used by
    /// .
    /// 
    /// 
    [Flags]
    public enum CreateTableColumnIndexGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// The DDL is fixed.
        /// 
        FixedDDL = 0x1,
        /// 
        /// The DDL is inheritable. Implies FixedDDL.
        /// 
        TemplateTable = 0x2,
        /// 
        /// Used in conjunction with TemplateTable.
        /// 
        NoFixedVarColumnsInDerivedTables = 0x4,
    }
    /// 
    /// Options for  and .
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [Flags]
    public enum CreateIndexGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// Duplicate index entries (keys) are disallowed. This is enforced when JetUpdate is called,
        /// not when JetSetColumn is called.
        /// 
        IndexUnique  = 0x1,
        /// 
        /// The index is a primary (clustered) index. Every table must have exactly one primary index.
        /// If no primary index is explicitly defined over a table, then the database engine will
        /// create its own primary index.
        /// 
        IndexPrimary = 0x2,
        /// 
        /// None of the columns over which the index is created may contain a NULL value.
        /// 
        IndexDisallowNull = 0x4,
        /// 
        /// Do not add an index entry for a row if all of the columns being indexed are NULL.
        /// 
        IndexIgnoreNull = 0x8,
        /// 
        /// Do not add an index entry for a row if any of the columns being indexed are NULL.
        /// 
        IndexIgnoreAnyNull = 0x20,
        /// 
        /// Do not add an index entry for a row if the first column being indexed is NULL.
        /// 
        IndexIgnoreFirstNull = 0x40,
        /// 
        /// Specifies that the index operations will be logged lazily. JET_bitIndexLazyFlush does not
        /// affect the laziness of data updates. If the indexing operations is interrupted by process
        /// termination, Soft Recovery will still be able to able to get the database to a consistent
        /// state, but the index may not be present.
        /// 
        IndexLazyFlush = 0x80,
        /// 
        /// Do not attempt to build the index, because all entries would evaluate to NULL. grbit MUST
        /// also specify JET_bitIgnoreAnyNull when JET_bitIndexEmpty is passed. This is a performance
        /// enhancement. For example if a new column is added to a table, then an index is created over
        /// this newly added column, all of the records in the table would be scanned even though they
        /// would never get added to the index anyway. Specifying JET_bitIndexEmpty skips the scanning
        /// of the table, which could potentially take a long time.
        /// 
        IndexEmpty = 0x100,
        /// 
        /// Causes index creation to be visible to other transactions. Normally a session in a
        /// transaction will not be able to see an index creation operation in another session. This
        /// flag can be useful if another transaction is likely to create the same index, so that the
        /// second index-create will simply fail instead of potentially causing many unnecessary database
        /// operations. The second transaction may not be able to use the index immediately. The index
        /// creation operation needs to complete before it is usable. The session must not currently be in
        /// a transaction to create an index without version information.
        /// 
        IndexUnversioned = 0x200,
        /// 
        /// Specifying this flag causes NULL values to be sorted after data for all columns in the index.
        /// 
        IndexSortNullsHigh = 0x400,
    }
    /// 
    /// Key definition grbits. Used when retrieving information about an index, contained
    /// in the column specified in .
    /// 
    [Flags]
    public enum IndexKeyGrbit
    {
        /// 
        /// Key segment is ascending.
        /// 
        Ascending = 0x0,
        /// 
        /// Key segment is descending.
        /// 
        Descending = 0x1,
    }
    /// 
    /// Options for the  structure.
    /// 
    [Flags]
    public enum ConditionalColumnGrbit
    {
        /// 
        /// The column must be null for an index entry to appear in the index.
        /// 
        ColumnMustBeNull = 0x1,
        /// 
        /// The column must be non-null for an index entry to appear in the index.
        /// 
        ColumnMustBeNonNull = 0x2,
    }
    /// 
    /// Options for temporary table creation, with ,
    /// Api.JetOpenTempTable2, and .
    /// 
    /// 
    /// 
    /// 
    [Flags]
    public enum TempTableGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// This option requests that the temporary table be flexible enough to
        /// permit the use of JetSeek to lookup records by index key. If this
        /// functionality it not required then it is best to not request it. If this
        /// functionality is not requested then the temporary table manager may be
        /// able to choose a strategy for managing the temporary table that will
        /// result in improved performance.
        /// 
        Indexed = 0x1,
        /// 
        /// This option requests that records with duplicate index keys be removed
        /// from the final set of records in the temporary table.
        /// Prior to Windows Server 2003, the database engine always assumed this
        /// option to be in effect due to the fact that all clustered indexes must
        /// also be a primary key and thus must be unique. As of Windows Server
        /// 2003, it is now possible to create a temporary table that does NOT
        /// remove duplicates when the 
        /// option is also specified.
        /// It is not possible to know which duplicate will win and which duplicates
        /// will be discarded in general. However, when the
        ///  option is requested then the first
        /// record with a given index key to be inserted into the temporary table
        /// will always win.
        /// 
        Unique = 0x2,
        /// 
        /// This option requests that the temporary table be flexible enough to
        /// allow records that have previously been inserted to be subsequently
        /// changed. If this functionality it not required then it is best to not
        /// request it. If this functionality is not requested then the temporary
        /// table manager may be able to choose a strategy for managing the
        /// temporary table that will result in improved performance.
        /// 
        Updatable = 0x4,
        /// 
        /// This option requests that the temporary table be flexible enough to
        /// allow records to be scanned in arbitrary order and direction using
        /// .
        /// If this functionality it not required then it is best to not
        /// request it. If this functionality is not requested then the temporary
        /// table manager may be able to choose a strategy for managing the
        /// temporary table that will result in improved performance.
         /// 
        Scrollable = 0x8,
        /// 
        /// This option requests that NULL key column values sort closer
        /// to the end of the index than non-NULL key column values.
        /// 
        SortNullsHigh = 0x10,
        /// 
        /// This option forces the temporary table manager to abandon
        /// any attempt to choose a clever strategy for managing the
        /// temporary table that will result in enhanced performance.
        /// 
        ForceMaterialization = 0x20,
        /// 
        /// This option requests that any attempt to insert a record with the same
        /// index key as a previously inserted record will immediately fail with
        /// . If this option is not requested then a duplicate
        /// may be detected immediately and fail or may be silently removed later
        /// depending on the strategy chosen by the database engine to implement the
        /// temporary table based on the requested functionality. If this
        /// functionality it not required then it is best to not request it. If this
        /// functionality is not requested then the temporary table manager may be
        /// able to choose a strategy for managing the temporary table that will
        /// result in improved performance.
        /// 
        ErrorOnDuplicateInsertion = 0x20,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum DeleteColumnGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
        /// 
        /// The API should only attempt to delete columns in the derived table.
        /// If a column of that name exists in the base table it will be ignored.
        /// 
        IgnoreTemplateColumns = 0x1,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum RenameColumnGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
#if !MANAGEDESENT_ON_WSA // Not exposed in MSDK
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SetColumnDefaultValueGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum IdleGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// Reserved for future use. If this flag is specified, the API will return .
        /// 
        FlushBuffers = 0x01,
        /// Triggers cleanup of the version store.
        Compact = 0x02,
        /// 
        /// Returns  if version store is more than half full.
        /// 
        GetStatus = 0x04,
    }
#endif // !MANAGEDESENT_ON_WSA
    /// 
    /// Options for .
    /// 
    /// 
    /// 
    [Flags]
    public enum DefragGrbit
    {
        /// 
        /// Defragments the available space portion of ESE database space
        /// allocation. Database space is divided into two types, owned
        /// space and available space. Owned space is allocated to a table
        /// or index while available space is ready for use within the table
        /// or index, respectively. Available space is much more dynamic in
        /// behavior and requires on-line defragmentation more so than owned
        /// space or table or index data.
        /// 
        AvailSpaceTreesOnly = 0x40,
        /// 
        /// Starts a new defragmentation task.
        /// 
        BatchStart = 0x1,
        /// 
        /// Stops a defragmentation task.
        /// 
        BatchStop = 0x2,
    }
    /// 
    /// Grbits for the various Api.JetGetColumnInfo and Api.JetGetTableColumnInfo
    /// overloads.
    /// 
    /// 
    /// Internally this value is OR'ed together with the
    ///  info level. The info level is not publically exposed
    /// in this CLR code because it's only used to differentiate the type of the output
    /// parameter, which is covered by having explicit function overloads with different
    /// signatures. There is no need to expose JET_ColInfo to CLR.
    /// 
    [Flags]
    public enum ColInfoGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        /// 
        /// For lists (example: ), only return
        /// non-derived columns (if the table is derived from a template).
        /// 
        /// This value is 0x80000000.
        NonDerivedColumnsOnly = int.MinValue,
        /// 
        /// For lists (example: ), only return
        /// the column name and columnid of each column.
        /// 
        MinimalInfo = 0x40000000,
        /// 
        /// For lists (example: ), sort
        /// returned column list by columnid (the default is to sort list by column name).
        /// 
        SortByColumnid = 0x20000000,
    }
    /// 
    /// Options for .
    /// 
    [Flags]
    public enum SpaceHintsGrbit
    {
        /// 
        /// Default options.
        /// 
        None = 0x0,
        // Generic bits.
        /// 
        /// This changes the internal allocation policy to get space hierarchically
        /// from a B-Tree's immediate parent.
        /// 
        SpaceHintUtilizeParentSpace = 0x00000001,
        // Create bits.
        /// 
        /// This bit will enable Append split behavior to grow according to the
        /// growth dynamics of the table (set by cbMinExtent, ulGrowth, cbMaxExtent).
        /// 
        CreateHintAppendSequential = 0x00000002,
        /// 
        /// This bit will enable Hotpoint split behavior to grow according to the
        /// growth dynamics of the table (set by cbMinExtent, ulGrowth, cbMaxExtent).
        /// 
        CreateHintHotpointSequential = 0x00000004,
        // Retrieve bits.
        /// 
        /// Reserved and ignored.
        /// 
        RetrieveHintReserve1 = 0x00000008,
        /// 
        /// By setting this the client indicates that forward sequential scan is
        /// the predominant usage pattern of this table (causing B+ Tree defrag to
        /// be auto-triggered to clean it up if fragmented).
        /// 
        RetrieveHintTableScanForward = 0x00000010,
        /// 
        /// By setting this the client indicates that backwards sequential scan
        /// is the predominant usage pattern of this table(causing B+ Tree defrag to
        /// be auto-triggered to clean it up if fragmented).
        /// 
        RetrieveHintTableScanBackward = 0x00000020,
        /// 
        /// Reserved and ignored.
        /// 
        RetrieveHintReserve2 = 0x00000040,
        /// 
        /// Reserved and ignored.
        /// 
        RetrieveHintReserve3 = 0x00000080,
        // Delete bits.
        /// 
        /// The application expects this table to be cleaned up in-order
        /// sequentially (from lowest key to highest key).
        /// 
        DeleteHintTableSequential = 0x00000100,
    }
}