//----------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. // //----------------------------------------------------------------------- namespace Microsoft.Isam.Esent.Interop { using System; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Runtime.InteropServices; /// /// Native (unmanaged) version of the JET_ENUMCOLUMN structure. /// [StructLayout(LayoutKind.Sequential)] [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 = "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 unsafe struct NATIVE_ENUMCOLUMN { /// /// The columnid that was enumerated. /// public uint columnid; /// /// The column status code from the enumeration of the column. /// public int err; /// /// The size of the value that was enumerated for the column. /// This member is only used if is equal to /// . /// /// /// The unmanaged JET_ENUMCOLUMN structure is a union so this /// is aliased with cEnumColumnValue. /// public uint cbData; /// /// The the value that was enumerated for the column. /// This member is only used if is equal to /// . /// /// /// The unmanaged JET_ENUMCOLUMN structure is a union so this /// is aliased with rgEnumColumnValue. /// public IntPtr pvData; /// /// Gets or sets the number of entries in rgEnumColumnValue. /// This member is only used if is not /// . /// /// /// The unmanaged JET_ENUMCOLUMN structure is a union so this /// property uses cbData as its backing storage. /// public uint cEnumColumnValue { get { return this.cbData; } set { this.cbData = value; } } /// /// Gets or sets an array of column values. /// This member is only used if is not /// . /// /// /// The unmanaged JET_ENUMCOLUMN structure is a union so this /// property uses pvData as its backing storage. /// public NATIVE_ENUMCOLUMNVALUE* rgEnumColumnValue { get { return (NATIVE_ENUMCOLUMNVALUE*)this.pvData; } set { this.pvData = new IntPtr(value); } } } /// /// Enumerates the column values of a record using the JetEnumerateColumns /// function. JetEnumerateColumns returns an array of JET_ENUMCOLUMNVALUE /// structures. The array is returned in memory that was allocated using /// the callback that was supplied to that function. /// [SuppressMessage( "Microsoft.StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "This should match the unmanaged API, which isn't capitalized.")] public class JET_ENUMCOLUMN { /// /// Gets the columnid ID that was enumerated. /// public JET_COLUMNID columnid { get; internal set; } /// /// Gets the column status code that results from the enumeration. /// /// public JET_wrn err { get; internal set; } /// /// Gets the number of column values enumerated for the column. /// This member is only used if is not /// . /// public int cEnumColumnValue { get; internal set; } /// /// Gets the enumerated column values for the column. /// This member is only used if is not /// . /// public JET_ENUMCOLUMNVALUE[] rgEnumColumnValue { get; internal set; } /// /// Gets the size of the value that was enumerated for the column. /// This member is only used if is equal to /// . /// public int cbData { get; internal set; } /// /// Gets the the value that was enumerated for the column. /// This member is only used if is equal to /// . /// This points to memory allocated with the /// allocator callback passed to /// . /// Remember to release the memory when finished. /// public IntPtr pvData { get; internal set; } /// /// Returns a that represents the current . /// /// /// A that represents the current . /// public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "JET_ENUMCOLUMN(0x{0:x})", this.columnid); } /// /// Sets the fields of the object from a native JET_ENUMCOLUMN struct. /// /// /// The native enumcolumn to set the values from. /// internal void SetFromNativeEnumColumn(NATIVE_ENUMCOLUMN value) { this.columnid = new JET_COLUMNID { Value = value.columnid }; this.err = (JET_wrn)value.err; if (JET_wrn.ColumnSingleValue == this.err) { this.cbData = checked((int)value.cbData); this.pvData = value.pvData; } else { this.cEnumColumnValue = checked((int)value.cEnumColumnValue); this.rgEnumColumnValue = null; } } } }