/// <summary> /// Create a ColumnMetaData object from a ColumnInfo. /// </summary> /// <param name="columninfo">The ColumnInfo for the column.</param> /// <returns>A ColumnMetaData object for the column.</returns> private static ColumnMetaData GetMetadata(ColumnInfo columninfo) { var converter = Dependencies.Container.Resolve <InteropConversion>(); var dataConversion = Dependencies.Container.Resolve <DataConversion>(); ColumnMetaData metadata = converter.CreateColumnMetaDataFromColumnInfo(columninfo); metadata.ObjectConverter = dataConversion.ConvertToObject[metadata.Type]; metadata.ObjectToBytesConverter = dataConversion.ConvertObjectToBytes[metadata.Type]; metadata.BytesToObjectConverter = dataConversion.ConvertBytesToObject[metadata.Type]; metadata.SetColumn = (cursor, obj) => { byte[] data = metadata.ObjectToBytesConverter(metadata.ObjectConverter(obj)); cursor.SetColumn(metadata.Columnid, data, SetColumnGrbit.None); }; metadata.MakeKey = (cursor, obj, grbit) => { byte[] data = metadata.ObjectToBytesConverter(metadata.ObjectConverter(obj)); cursor.MakeKey(data, grbit); }; metadata.RetrieveColumn = MakeRetrieveColumnFunction(metadata); return(metadata); }
/// <summary> /// Load the column meta-data for the table. /// </summary> private void LoadColumnMetaData() { this.Columns = new Dictionary <string, ColumnMetaData>(StringComparer.InvariantCultureIgnoreCase); using (Transaction trx = this.Connection.BeginTransaction()) { foreach (ColumnInfo columninfo in this.TableCursor.GetColumns()) { ColumnMetaData metadata = GetMetadata(columninfo); this.Columns[metadata.Name] = metadata; } trx.Commit(); } }
/// <summary> /// Create a ColumnMetaData from an Interop.ColumnInfo /// </summary> /// <param name="info">The columninfo.</param> /// <returns>A ColumnMetaData created from the ColumnInfo</returns> public ColumnMetaData CreateColumnMetaDataFromColumnInfo(ColumnInfo info) { var metadata = new ColumnMetaData { Name = info.Name, Type = this.ColumnTypeFromColumnInfo(info), IsAutoincrement = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnAutoincrement), IsNotNull = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnNotNULL), IsVersion = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnVersion), IsEscrowUpdate = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnEscrowUpdate), MaxSize = info.MaxLength, DefaultValue = info.DefaultValue, Columnid = info.Columnid }; return metadata; }
/// <summary> /// Create a ColumnMetaData from an Interop.ColumnInfo /// </summary> /// <param name="info">The columninfo.</param> /// <returns>A ColumnMetaData created from the ColumnInfo</returns> public ColumnMetaData CreateColumnMetaDataFromColumnInfo(ColumnInfo info) { var metadata = new ColumnMetaData { Name = info.Name, Type = this.ColumnTypeFromColumnInfo(info), IsAutoincrement = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnAutoincrement), IsNotNull = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnNotNULL), IsVersion = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnVersion), IsEscrowUpdate = IsColumndefOptionSet(info.Grbit, ColumndefGrbit.ColumnEscrowUpdate), MaxSize = info.MaxLength, DefaultValue = info.DefaultValue, Columnid = info.Columnid }; return(metadata); }
public void TestCreateColumnMetaDataFromColumnInfoWithAsciiColumn() { var info = new ColumnInfo( "ascii", this.columnid, JET_coltyp.LongText, JET_CP.ASCII, 0, null, ColumndefGrbit.None); var expected = new ColumnMetaData { Name = "ascii", Type = ColumnType.AsciiText, Columnid = this.columnid, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
public void TestCreateColumnMetaDataFromColumnInfoWithAutoinc() { var info = new ColumnInfo( "autoinc", this.columnid, JET_coltyp.Long, JET_CP.None, 0, null, ColumndefGrbit.ColumnAutoincrement); var expected = new ColumnMetaData { Name = "autoinc", Type = ColumnType.Int32, Columnid = this.columnid, IsAutoincrement = true, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
/// <summary> /// Create the column retrieval function for the given metadata. /// </summary> /// <param name="metadata">The meta-data.</param> /// <returns>The meta-data function.</returns> private static Func <Cursor, RetrieveColumnGrbit, object> MakeRetrieveColumnFunction(ColumnMetaData metadata) { switch (metadata.Type) { case ColumnType.Bool: return((cursor, grbit) => cursor.RetrieveColumnAsBoolean(metadata.Columnid, grbit)); case ColumnType.Byte: return((cursor, grbit) => cursor.RetrieveColumnAsByte(metadata.Columnid, grbit)); case ColumnType.Int16: return((cursor, grbit) => cursor.RetrieveColumnAsInt16(metadata.Columnid, grbit)); case ColumnType.UInt16: return((cursor, grbit) => cursor.RetrieveColumnAsUInt16(metadata.Columnid, grbit)); case ColumnType.Int32: return((cursor, grbit) => cursor.RetrieveColumnAsInt32(metadata.Columnid, grbit)); case ColumnType.UInt32: return((cursor, grbit) => cursor.RetrieveColumnAsUInt32(metadata.Columnid, grbit)); case ColumnType.Int64: return((cursor, grbit) => cursor.RetrieveColumnAsInt64(metadata.Columnid, grbit)); case ColumnType.Float: return((cursor, grbit) => cursor.RetrieveColumnAsFloat(metadata.Columnid, grbit)); case ColumnType.Double: return((cursor, grbit) => cursor.RetrieveColumnAsDouble(metadata.Columnid, grbit)); case ColumnType.DateTime: return((cursor, grbit) => cursor.RetrieveColumnAsDateTime(metadata.Columnid, grbit)); case ColumnType.Guid: return((cursor, grbit) => cursor.RetrieveColumnAsGuid(metadata.Columnid, grbit)); case ColumnType.AsciiText: return((cursor, grbit) => cursor.RetrieveColumnAsString(metadata.Columnid, Encoding.ASCII, grbit)); case ColumnType.Text: return((cursor, grbit) => cursor.RetrieveColumnAsString(metadata.Columnid, Encoding.Unicode, grbit)); default: return((cursor, grbit) => metadata.BytesToObjectConverter( cursor.RetrieveColumn(metadata.Columnid, grbit))); } }
/// <summary> /// Verify that CreateColumnMetaDataFromColumnInfo sets the specified ColumnType. /// </summary> /// <param name="jetColtyp">The coltyp for the ColumnInfo.</param> /// <param name="type">The expected ColumnType in the ColumnMetaData.</param> private void VerifyCreateColumnMetaDataSetsType(JET_coltyp jetColtyp, ColumnType type) { var info = new ColumnInfo( "test", this.columnid, jetColtyp, JET_CP.None, 0, null, ColumndefGrbit.None); var expected = new ColumnMetaData { Name = "test", Type = type, Columnid = this.columnid, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
/// <summary> /// Assert that the two ColumnMetaData objects are equal. /// </summary> /// <param name="expected">The expected column meta-data.</param> /// <param name="actual">The actual column meta-data.</param> private static void AssertColumnMetaDataAreEqual(ColumnMetaData expected, ColumnMetaData actual) { Assert.AreEqual(expected.Name, actual.Name); Assert.AreEqual(expected.Type, actual.Type); Assert.AreEqual(expected.IsAutoincrement, actual.IsAutoincrement); Assert.AreEqual(expected.IsNotNull, actual.IsNotNull); Assert.AreEqual(expected.IsVersion, actual.IsVersion); Assert.AreEqual(expected.IsEscrowUpdate, actual.IsEscrowUpdate); Assert.AreEqual(expected.MaxSize, actual.MaxSize); Assert.AreEqual(expected.Columnid, actual.Columnid); Assert.AreEqual(expected.IsIndexed, actual.IsIndexed); Assert.AreEqual(expected.IsUnique, actual.IsUnique); if (null != expected.DefaultValue) { if (expected.DefaultValue.GetType() == typeof(byte[])) { CollectionAssert.AreEqual((byte[]) expected.DefaultValue, (byte[]) actual.DefaultValue); } else { Assert.AreEqual(expected.DefaultValue, actual.DefaultValue); } } }
public void TestCreateColumnMetaDataFromColumnInfoWithVersionColumn() { var info = new ColumnInfo( "version", this.columnid, JET_coltyp.Long, JET_CP.None, 0, null, ColumndefGrbit.ColumnVersion); var expected = new ColumnMetaData { Name = "version", Type = ColumnType.Int32, Columnid = this.columnid, IsVersion = true, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
public void TestCreateColumnMetaDataFromColumnInfoWithUnicodeColumn() { var info = new ColumnInfo( "unicode", this.columnid, JET_coltyp.Text, JET_CP.Unicode, 0, null, ColumndefGrbit.None); var expected = new ColumnMetaData { Name = "unicode", Type = ColumnType.Text, Columnid = this.columnid, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
public void TestCreateColumnMetaDataFromColumnInfoWithEscrowUpdate() { var info = new ColumnInfo( "escrow_update", this.columnid, JET_coltyp.Long, JET_CP.None, 0, null, ColumndefGrbit.ColumnEscrowUpdate); var expected = new ColumnMetaData { Name = "escrow_update", Type = ColumnType.Int32, Columnid = this.columnid, IsEscrowUpdate = true, }; AssertColumnMetaDataAreEqual(expected, this.converter.CreateColumnMetaDataFromColumnInfo(info)); }
/// <summary> /// Create the column retrieval function for the given metadata. /// </summary> /// <param name="metadata">The meta-data.</param> /// <returns>The meta-data function.</returns> private static Func<Cursor, RetrieveColumnGrbit, object> MakeRetrieveColumnFunction(ColumnMetaData metadata) { switch (metadata.Type) { case ColumnType.Bool: return (cursor, grbit) => cursor.RetrieveColumnAsBoolean(metadata.Columnid, grbit); case ColumnType.Byte: return (cursor, grbit) => cursor.RetrieveColumnAsByte(metadata.Columnid, grbit); case ColumnType.Int16: return (cursor, grbit) => cursor.RetrieveColumnAsInt16(metadata.Columnid, grbit); case ColumnType.UInt16: return (cursor, grbit) => cursor.RetrieveColumnAsUInt16(metadata.Columnid, grbit); case ColumnType.Int32: return (cursor, grbit) => cursor.RetrieveColumnAsInt32(metadata.Columnid, grbit); case ColumnType.UInt32: return (cursor, grbit) => cursor.RetrieveColumnAsUInt32(metadata.Columnid, grbit); case ColumnType.Int64: return (cursor, grbit) => cursor.RetrieveColumnAsInt64(metadata.Columnid, grbit); case ColumnType.Float: return (cursor, grbit) => cursor.RetrieveColumnAsFloat(metadata.Columnid, grbit); case ColumnType.Double: return (cursor, grbit) => cursor.RetrieveColumnAsDouble(metadata.Columnid, grbit); case ColumnType.DateTime: return (cursor, grbit) => cursor.RetrieveColumnAsDateTime(metadata.Columnid, grbit); case ColumnType.Guid: return (cursor, grbit) => cursor.RetrieveColumnAsGuid(metadata.Columnid, grbit); case ColumnType.AsciiText: return (cursor, grbit) => cursor.RetrieveColumnAsString(metadata.Columnid, Encoding.ASCII, grbit); case ColumnType.Text: return (cursor, grbit) => cursor.RetrieveColumnAsString(metadata.Columnid, Encoding.Unicode, grbit); default: return (cursor, grbit) => metadata.BytesToObjectConverter( cursor.RetrieveColumn(metadata.Columnid, grbit)); } }