public static void Expression_PropertyGet_EqualsCtorArg() { const string expression = "lower(test_column)"; var column = Mock.Of <IDatabaseColumn>(); var indexColumn = new DatabaseIndexColumn(expression, column, IndexColumnOrder.Ascending); Assert.That(indexColumn.Expression, Is.EqualTo(expression)); }
public static void Order_WhenDescendingProvidedInCtor_ReturnsDescending() { const string expression = "lower(test_column)"; var column = Mock.Of <IDatabaseColumn>(); const IndexColumnOrder order = IndexColumnOrder.Descending; var indexColumn = new DatabaseIndexColumn(expression, column, order); Assert.That(indexColumn.Order, Is.EqualTo(order)); }
public static void ToString_WhenInvoked_ReturnsExpectedValues(string expression, string expectedResult) { var column = Mock.Of <IDatabaseColumn>(); const IndexColumnOrder order = IndexColumnOrder.Ascending; var indexColumn = new DatabaseIndexColumn(expression, column, order); var result = indexColumn.ToString(); Assert.That(result, Is.EqualTo(expectedResult)); }
public ReflectionDatabaseTableIndex(IDatabaseDialect dialect, IRelationalDatabaseTable table, IModelledIndex index) { if (dialect == null) { throw new ArgumentNullException(nameof(dialect)); } if (table == null) { throw new ArgumentNullException(nameof(table)); } if (index == null) { throw new ArgumentNullException(nameof(index)); } IsUnique = index.IsUnique; Name = dialect.GetAliasOrDefault(index.Property !); var tableType = index.Property !.ReflectedType; var propertyLookup = tableType.GetProperties() .Select(p => new KeyValuePair <string, PropertyInfo>(p.Name, p)) .ToDictionary(); var tableColumnLookup = table.GetColumnLookup(); var columns = new List <IDatabaseIndexColumn>(); var includedColumns = new List <IDatabaseColumn>(); var isFunctionBasedIndex = false; foreach (var indexColumn in index.Columns) { if (indexColumn.Expression.IsIdentity) { var expressionName = indexColumn.Expression.DependentNames.Single().LocalName; var columnName = dialect.GetAliasOrDefault(propertyLookup[expressionName]); var tableColumn = tableColumnLookup[columnName]; var textExpression = indexColumn.Expression.ToSql(dialect); var column = new DatabaseIndexColumn(textExpression, tableColumn, indexColumn.Order); columns.Add(column); } else { isFunctionBasedIndex = true; var tableColumns = indexColumn.Expression.DependentNames .Select(name => propertyLookup.ContainsKey(name.LocalName) ? propertyLookup[name.LocalName] : null) .Where(prop => prop != null) .Select(prop => dialect.GetAliasOrDefault(prop !)) .Select(name => tableColumnLookup[name]) .ToList(); var textExpression = indexColumn.Expression.ToSql(dialect); var column = new DatabaseIndexColumn(textExpression, tableColumns, indexColumn.Order); columns.Add(column); } } foreach (var includedColumn in index.IncludedColumns) { var includedColumnName = dialect.GetAliasOrDefault(includedColumn.Property !); var column = tableColumnLookup[includedColumnName]; includedColumns.Add(column); } IsFunctionBased = isFunctionBasedIndex; Columns = columns; IncludedColumns = includedColumns; }