Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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();
            }
        }
Beispiel #3
0
 /// <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));
        }
Beispiel #7
0
        /// <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));
        }
Beispiel #13
0
 /// <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));
     }
 }