/// <summary> /// Create an array of IndexSegment objects from the data in the current JET_INDEXLIST entry. /// </summary> /// <param name="sesid">The session to use.</param> /// <param name="indexlist">The indexlist to take the data from.</param> /// <returns>An array of IndexSegment objects containing the information for the current index.</returns> private static IndexSegment[] GetIndexSegmentsFromIndexlist(JET_SESID sesid, JET_INDEXLIST indexlist) { var numSegments = (int)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcColumn); Debug.Assert(numSegments > 0, "Index has zero index segments"); var segments = new IndexSegment[numSegments]; for (int i = 0; i < numSegments; ++i) { string columnName = Api.RetrieveColumnAsString( sesid, indexlist.tableid, indexlist.columnidcolumnname, NativeMethods.Encoding, RetrieveColumnGrbit.None); columnName = StringCache.TryToIntern(columnName); var coltyp = (JET_coltyp)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcoltyp); var grbit = (IndexKeyGrbit)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidgrbitColumn); bool isAscending = IndexKeyGrbit.Ascending == grbit; var cp = (JET_CP)Api.RetrieveColumnAsInt16(sesid, indexlist.tableid, indexlist.columnidCp); bool isASCII = JET_CP.ASCII == cp; segments[i] = new IndexSegment(columnName, coltyp, isAscending, isASCII); if (i < numSegments - 1) { Api.JetMove(sesid, indexlist.tableid, JET_Move.Next, MoveGrbit.None); } } return(segments); }
internal IndexInfo( string name, CultureInfo cultureInfo, CompareOptions compareOptions, IndexSegment[] indexSegments, CreateIndexGrbit grbit) { this.Name = name; this.CultureInfo = cultureInfo; this.CompareOptions = compareOptions; this.IndexSegments = indexSegments; this.Grbit = grbit; }
/// <summary> /// Initializes a new instance of the IndexInfo class. /// </summary> /// <param name="name">Name of the index.</param> /// <param name="cultureInfo">CultureInfo for string sorting.</param> /// <param name="compareOptions">String comparison options.</param> /// <param name="indexSegments">Array of index segment descriptions.</param> /// <param name="grbit">Index options.</param> /// <param name="keys">Number of unique keys in the index.</param> /// <param name="entries">Number of entries in the index.</param> /// <param name="pages">Number of pages in the index.</param> internal IndexInfo( string name, CultureInfo cultureInfo, CompareOptions compareOptions, IndexSegment[] indexSegments, CreateIndexGrbit grbit, int keys, int entries, int pages) { this.name = name; this.cultureInfo = cultureInfo; this.compareOptions = compareOptions; this.indexSegments = Array.AsReadOnly(indexSegments); this.grbit = grbit; this.keys = keys; this.entries = entries; this.pages = pages; }
/// <summary> /// Create an array of IndexSegment objects from the data in the current JET_INDEXLIST entry. /// </summary> /// <param name="sesid">The session to use.</param> /// <param name="indexlist">The indexlist to take the data from.</param> /// <returns>An array of IndexSegment objects containing the information for the current index.</returns> private static IndexSegment[] GetIndexSegmentsFromIndexlist(JET_SESID sesid, JET_INDEXLIST indexlist) { var numSegments = (int)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcColumn); Debug.Assert(numSegments > 0, "Index has zero index segments"); // If we use the wide API (Vista+), then the temp table will be in UTF-16. Encoding encodingOfTextColumns = EsentVersion.SupportsVistaFeatures ? Encoding.Unicode : LibraryHelpers.EncodingASCII; var segments = new IndexSegment[numSegments]; for (int i = 0; i < numSegments; ++i) { string columnName = Api.RetrieveColumnAsString( sesid, indexlist.tableid, indexlist.columnidcolumnname, encodingOfTextColumns, RetrieveColumnGrbit.None); columnName = StringCache.TryToIntern(columnName); var coltyp = (JET_coltyp)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcoltyp); var grbit = (IndexKeyGrbit)Api.RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidgrbitColumn); bool isAscending = IndexKeyGrbit.Ascending == grbit; var cp = (JET_CP)Api.RetrieveColumnAsInt16(sesid, indexlist.tableid, indexlist.columnidCp); bool isASCII = JET_CP.ASCII == cp; segments[i] = new IndexSegment(columnName, coltyp, isAscending, isASCII); if (i < numSegments - 1) { Api.JetMove(sesid, indexlist.tableid, JET_Move.Next, MoveGrbit.None); } } return(segments); }
/// <summary> /// Create an array of IndexSegment objects from the data in the current JET_INDEXLIST entry. /// </summary> /// <param name="sesid">The session to use.</param> /// <param name="indexlist">The indexlist to take the data from.</param> /// <returns>An array of IndexSegment objects containing the information for the current index.</returns> private static IndexSegment[] GetIndexSegmentsFromIndexlist(JET_SESID sesid, JET_INDEXLIST indexlist) { var numSegments = (int) RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcColumn); Debug.Assert(numSegments > 0, "Index has zero index segments"); var segments = new IndexSegment[numSegments]; for (int i = 0; i < numSegments; ++i) { string columnName = RetrieveColumnAsString( sesid, indexlist.tableid, indexlist.columnidcolumnname, NativeMethods.Encoding, RetrieveColumnGrbit.None); var coltyp = (JET_coltyp) RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidcoltyp); var grbit = (IndexKeyGrbit) RetrieveColumnAsInt32(sesid, indexlist.tableid, indexlist.columnidgrbitColumn); bool isAscending = IndexKeyGrbit.Ascending == grbit; var cp = (JET_CP) RetrieveColumnAsInt16(sesid, indexlist.tableid, indexlist.columnidCp); bool isASCII = JET_CP.ASCII == cp; segments[i] = new IndexSegment(columnName, coltyp, isAscending, isASCII); if (i < numSegments - 1) { Api.JetMove(sesid, indexlist.tableid, JET_Move.Next, MoveGrbit.None); } } return segments; }
public void DescendingIndexSegmentToString() { var segment = new IndexSegment("othercolumn", JET_coltyp.Bit, false, false); Assert.AreEqual("-othercolumn(Bit)", segment.ToString()); }
public void AscendingIndexSegmentToString() { var segment = new IndexSegment("column", JET_coltyp.IEEEDouble, true, false); Assert.AreEqual("+column(IEEEDouble)", segment.ToString()); }