Esempio n. 1
0
        /// <summary>
        /// Determines whether a column set is covered by an index.
        /// </summary>
        /// <param name="columns">A set of columns.</param>
        /// <param name="indexColumns">The index columns.</param>
        /// <param name="indexIncludedColumns">The index columns.</param>
        /// <returns><c>true</c> if <paramref name="columns"/> is covered by <paramref name="indexColumns"/>; otherwise <c>false</c>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="columns"/> or <paramref name="indexColumns"/> or <paramref name="indexIncludedColumns"/> is <c>null</c>.</exception>
        protected static bool ColumnsHaveIndexWithIncludedColumns(IEnumerable <IDatabaseColumn> columns, IEnumerable <IDatabaseIndexColumn> indexColumns, IEnumerable <IDatabaseColumn> indexIncludedColumns)
        {
            if (columns == null)
            {
                throw new ArgumentNullException(nameof(columns));
            }
            if (indexColumns == null)
            {
                throw new ArgumentNullException(nameof(indexColumns));
            }
            if (indexIncludedColumns == null)
            {
                throw new ArgumentNullException(nameof(indexIncludedColumns));
            }

            if (indexIncludedColumns.Empty())
            {
                return(false);
            }

            var columnList         = columns.ToList();
            var indexColumnList    = indexColumns.ToList();
            var dependentColumns   = indexColumnList.SelectMany(ic => ic.DependentColumns).ToList();
            var includedColumnList = indexIncludedColumns.ToList();

            // can only check for regular indexes, not functional ones (functions may be composed of multiple columns)
            if (indexColumnList.Count != dependentColumns.Count)
            {
                return(false);
            }

            var columnNames      = new System.Collections.Generic.HashSet <Identifier>(columnList.Select(c => c.Name));
            var indexColumnNames = new System.Collections.Generic.HashSet <Identifier>(dependentColumns.Select(ic => ic.Name));

            // index won't be completely used or there are extra columns in it
            if (indexColumnNames.Count > columnNames.Count || indexColumnNames.Any(ic => !columnNames.Contains(ic)))
            {
                return(false);
            }

            indexColumnNames.UnionWith(includedColumnList.Select(ic => ic.Name));
            return(columnNames.IsSubsetOf(indexColumnNames));
        }
Esempio n. 2
0
 protected bool IsSelectMode() =>
 _selectedItems.Any();