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); }
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()); }
/// <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); } } }