/// <summary> /// Gets the indexes for a table. /// </summary> /// <param name="tableName">Name of the table.</param> /// <returns></returns> /// <remarks> /// This should be cached on a TableOrViewMetadata object. /// </remarks> public override IndexMetadataCollection <AccessObjectName, OleDbType> GetIndexesForTable(AccessObjectName tableName) { var result = new List <IndexMetadata <AccessObjectName, OleDbType> >(); var indexDT = GetSchemaTable(OleDbSchemaGuid.Indexes); var allColumns = GetTableOrView(tableName).Columns; var indexes = indexDT.AsEnumerable().Where(r => string.Equals(r["TABLE_NAME"].ToString(), tableName.Name, StringComparison.Ordinal)).GroupBy(r => r["INDEX_NAME"].ToString()).ToList(); foreach (var index in indexes) { var name = index.Key; var unique = (bool)index.First()["UNIQUE"]; var isPrimary = (bool)index.First()["PRIMARY_KEY"]; var columns = new IndexColumnMetadata <OleDbType> [index.Count()]; foreach (var column in index) { var details = allColumns[(string)column["COLUMN_NAME"]]; columns[(int)(long)column["ORDINAL_POSITION"] - 1] = new IndexColumnMetadata <OleDbType>(details, false, false); } var indexType = isPrimary ? IndexType.Clustered : IndexType.Nonclustered; result.Add(new IndexMetadata <AccessObjectName, OleDbType>(tableName, name, isPrimary, unique, false, new IndexColumnMetadataCollection <OleDbType>(columns), null, null, indexType)); } return(new IndexMetadataCollection <AccessObjectName, OleDbType>(result)); }
public IQueryable <IndexColumnMetadata> GetIndexColumnMetadata() { var sqlDefinition = getSQLDefinition(typeof(IndexColumnMetadata).GetCustomAttribute <SQLServerMetadataAttribute>().SQLDefinitionResource); return(IndexColumnMetadata .FromSql(sqlDefinition) .AsQueryable()); }