Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        public IQueryable <IndexColumnMetadata> GetIndexColumnMetadata()
        {
            var sqlDefinition = getSQLDefinition(typeof(IndexColumnMetadata).GetCustomAttribute <SQLServerMetadataAttribute>().SQLDefinitionResource);

            return(IndexColumnMetadata
                   .FromSql(sqlDefinition)
                   .AsQueryable());
        }