Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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;
        }