Exemplo n.º 1
0
        public void ConvertColumnlistFromNative()
        {
            var tableid = new JET_TABLEID {
                Value = (IntPtr)0x1000
            };
            var col1 = new JET_COLUMNID {
                Value = 1
            };
            var col2 = new JET_COLUMNID {
                Value = 2
            };
            var col3 = new JET_COLUMNID {
                Value = 3
            };
            var col4 = new JET_COLUMNID {
                Value = 4
            };
            var col5 = new JET_COLUMNID {
                Value = 5
            };
            var col6 = new JET_COLUMNID {
                Value = 6
            };
            var col7 = new JET_COLUMNID {
                Value = 7
            };
            var col8 = new JET_COLUMNID {
                Value = 8
            };

            var native = new NATIVE_COLUMNLIST()
            {
                tableid               = tableid.Value,
                cRecord               = 100,
                columnidcolumnname    = col1.Value,
                columnidcolumnid      = col2.Value,
                columnidcoltyp        = col3.Value,
                columnidCp            = col4.Value,
                columnidcbMax         = col5.Value,
                columnidgrbit         = col6.Value,
                columnidDefault       = col7.Value,
                columnidBaseTableName = col8.Value,
            };

            var columnlist = new JET_COLUMNLIST();

            columnlist.SetFromNativeColumnlist(native);

            Assert.AreEqual(tableid, columnlist.tableid);
            Assert.AreEqual(100, columnlist.cRecord);
            Assert.AreEqual(col1, columnlist.columnidcolumnname);
            Assert.AreEqual(col2, columnlist.columnidcolumnid);
            Assert.AreEqual(col3, columnlist.columnidcoltyp);
            Assert.AreEqual(col4, columnlist.columnidCp);
            Assert.AreEqual(col5, columnlist.columnidcbMax);
            Assert.AreEqual(col6, columnlist.columnidgrbit);
            Assert.AreEqual(col7, columnlist.columnidDefault);
            Assert.AreEqual(col8, columnlist.columnidBaseTableName);
        }
Exemplo n.º 2
0
        public void JetColumnlistToString()
        {
            var value = new JET_COLUMNLIST {
                cRecord = 3, tableid = new JET_TABLEID {
                    Value = (IntPtr)0x1a
                }
            };

            Assert.AreEqual("JET_COLUMNLIST(0x1a,3 records)", value.ToString());
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates a <see cref="ColumnDefinition"/> object representing the column passed in by <paramref name="columnList"/>.
        /// </summary>
        /// <param name="database">The database.</param>
        /// <param name="tableName">Name of the table.</param>
        /// <param name="columnList">The <see cref="JET_COLUMNLIST"/> object that represents the row in
        /// the temptable for this particular column.</param>
        /// <returns>
        /// A <see cref="ColumnDefinition"/> object based on the current row in the temptable
        /// represented by <paramref name="columnList"/>.
        /// </returns>
        internal static ColumnDefinition Load(IsamDatabase database, string tableName, JET_COLUMNLIST columnList)
        {
            lock (database.IsamSession)
            {
                using (IsamTransaction trx = new IsamTransaction(database.IsamSession))
                {
                    // load info for the column
                    ColumnDefinition columnDefinition = new ColumnDefinition();

                    JET_SESID sesid = database.IsamSession.Sesid;

                    // As of Sep 2015, JetGetColumnInfoW is only called for Win8+. Even though Unicode should have
                    // worked in Win7, it wasn't reliable until Win8.
                    Encoding encodingOfTextColumns = EsentVersion.SupportsWindows8Features ? Encoding.Unicode : LibraryHelpers.EncodingASCII;

                    string columnName = Api.RetrieveColumnAsString(
                        database.IsamSession.Sesid,
                        columnList.tableid,
                        columnList.columnidcolumnname,
                        encodingOfTextColumns);
                    JET_COLUMNBASE columnbase;
                    Api.JetGetColumnInfo(database.IsamSession.Sesid, database.Dbid, tableName, columnName, out columnbase);
                    columnDefinition.columnid = new Columnid(columnbase);
                    columnDefinition.name     = columnDefinition.columnid.Name;
                    columnDefinition.type     = columnDefinition.columnid.Type;

                    ColumndefGrbit grbitColumn = (ColumndefGrbit)Api.RetrieveColumnAsUInt32(sesid, columnList.tableid, columnList.columnidgrbit).GetValueOrDefault();
                    columnDefinition.flags = ColumnFlagsFromGrbits(grbitColumn);

                    columnDefinition.maxLength = Api.RetrieveColumnAsInt32(sesid, columnList.tableid, columnList.columnidcbMax).GetValueOrDefault();

                    columnDefinition.IsAscii = columnbase.cp == JET_CP.ASCII;
                    byte[] defaultValueBytes = Api.RetrieveColumn(sesid, columnList.tableid, columnList.columnidDefault);

                    Columnid isamColumnid = columnDefinition.columnid;
                    columnDefinition.defaultValue = Converter.ObjectFromBytes(
                        isamColumnid.Coltyp,
                        columnDefinition.IsAscii,
                        defaultValueBytes);

                    columnDefinition.ReadOnly = true;

                    return(columnDefinition);
                }
            }
        }