Exemple #1
0
        public void CallingUsingAsOnlyToExpressionInPostgres(bool?isOnly)
        {
            var collectionMock = new Mock <PostgresIndexOnlyDefinition>();

            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.Only] = collectionMock.Object
            };

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            if (isOnly == null)
            {
                builder.WithOptions().AsOnly();
            }
            else
            {
                builder.WithOptions().AsOnly(isOnly.Value);
            }

            collectionMock.VerifySet(x => x.IsOnly = isOnly ?? true);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #2
0
        public void CallingIncludeAddsNewIncludeToExpressionInPostgres()
        {
            var collectionMock = new Mock <IList <PostgresIndexIncludeDefinition> >();

            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.IncludesList] = collectionMock.Object
            };

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            PostgresExtensions.Include(builder, "BaconId");

            collectionMock.Verify(x => x.Add(It.Is <PostgresIndexIncludeDefinition>(c => c.Name.Equals("BaconId"))));
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #3
0
        public void CallingNullsToExpressionInPostgres(NullSort sort)
        {
            var collectionMock = new Mock <PostgresIndexNullsSort>();

            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.NullsSort] = collectionMock.Object
            };

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.Nulls(sort);

            collectionMock.VerifySet(x => x.Sort = sort);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);
        }
        public void CanCreateIndexWithIncludedColumnAndFilter()
        {
            var expression = GeneratorTestHelper.GetCreateIndexExpression();
            var x          = new CreateIndexExpressionBuilder(expression).Filter("TestColumn2 IS NULL").Include("TestColumn3");
            var result     = _generator.Generate(expression);

            result.ShouldBe("CREATE INDEX [TestIndex] ON [dbo].[TestTable1] ([TestColumn1] ASC) INCLUDE ([TestColumn3]) WHERE TestColumn2 IS NULL");
        }
        public void CallingDescendingSetsDirectionToDescending()
        {
            var columnMock = new Mock<IndexColumnDefinition>();
            var expressionMock = new Mock<CreateIndexExpression>();

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);
            builder.CurrentColumn = columnMock.Object;

            builder.Descending();

            columnMock.VerifySet(c => c.Direction = Direction.Descending);
        }
Exemple #6
0
        public void CallingUsingIndexAlgorithmToExpressionInPostgres(Algorithm algorithm)
        {
            var collectionMock = new Mock <PostgresIndexAlgorithmDefinition>();

            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.IndexAlgorithm] = collectionMock.Object
            };

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            switch (algorithm)
            {
            case Algorithm.BTree:
                builder.WithOptions().UsingBTree();
                break;

            case Algorithm.Hash:
                builder.WithOptions().UsingHash();
                break;

            case Algorithm.Gist:
                builder.WithOptions().UsingGist();
                break;

            case Algorithm.Spgist:
                builder.WithOptions().UsingSpgist();
                break;

            case Algorithm.Gin:
                builder.WithOptions().UsingGin();
                break;

            case Algorithm.Brin:
                builder.WithOptions().UsingBrin();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(algorithm), algorithm, null);
            }

            collectionMock.VerifySet(x => x.Algorithm = algorithm);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #7
0
        public static ICreateIndexOptionsSyntax Include(this ICreateIndexOptionsSyntax expression, string columnName)
        {
            CreateIndexExpressionBuilder castIndex = expression as CreateIndexExpressionBuilder;

            if (castIndex == null)
            {
                throw new InvalidOperationException("The Include method can only be called on a valid object.");
            }
            castIndex.Expression.Index.Includes.Add(new IndexIncludeDefinition {
                Name = columnName
            });;
            return(expression);
        }
Exemple #8
0
        public void CallingDescendingSetsDirectionToDescending()
        {
            var columnMock     = new Mock <IndexColumnDefinition>();
            var expressionMock = new Mock <CreateIndexExpression>();

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.CurrentColumn = columnMock.Object;

            builder.Descending();

            columnMock.VerifySet(c => c.Direction = Direction.Descending);
        }
        public void CallingAscendingSetsDirectionToAscending()
        {
            var columnMock = new Mock<IndexColumnDefinition>();
            columnMock.SetupSet(c => c.Direction = Direction.Ascending).AtMostOnce();
            var expressionMock = new Mock<CreateIndexExpression>();

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);
            builder.CurrentColumn = columnMock.Object;

            builder.Ascending();

            columnMock.VerifyAll();
        }
        public void CallingOnTableSetsTableNameToSpecifiedValue()
        {
            var indexMock = new Mock<IndexDefinition>();


            var expressionMock = new Mock<CreateIndexExpression>();
            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);
            builder.OnTable("Bacon");

            indexMock.VerifySet(x => x.TableName = "Bacon");
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #11
0
        public void CallingAscendingSetsDirectionToAscending()
        {
            var columnMock = new Mock <IndexColumnDefinition>();

            columnMock.SetupSet(c => c.Direction = Direction.Ascending).AtMostOnce();
            var expressionMock = new Mock <CreateIndexExpression>();

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.CurrentColumn = columnMock.Object;

            builder.Ascending();

            columnMock.VerifyAll();
        }
Exemple #12
0
        public void CallingOnTableSetsTableNameToSpecifiedValue()
        {
            var indexMock = new Mock <IndexDefinition>();


            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.OnTable("Bacon");

            indexMock.VerifySet(x => x.TableName = "Bacon");
            expressionMock.VerifyGet(e => e.Index);
        }
        public void CallingOnColumnAddsNewColumnToExpression()
        {
            var collectionMock = new Mock<IList<IndexColumnDefinition>>();

            var indexMock = new Mock<IndexDefinition>();
            indexMock.Setup(x => x.Columns).Returns(collectionMock.Object);

            var expressionMock = new Mock<CreateIndexExpression>();
            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);
            builder.OnColumn("BaconId");

            collectionMock.Verify(x => x.Add(It.Is<IndexColumnDefinition>(c => c.Name.Equals("BaconId"))));
            indexMock.VerifyGet(x => x.Columns);
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #14
0
        public void CallingOnColumnAddsNewColumnToExpression()
        {
            var collectionMock = new Mock <IList <IndexColumnDefinition> >();

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.Columns).Returns(collectionMock.Object);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.OnColumn("BaconId");

            collectionMock.Verify(x => x.Add(It.Is <IndexColumnDefinition>(c => c.Name.Equals("BaconId"))));
            indexMock.VerifyGet(x => x.Columns);
            expressionMock.VerifyGet(e => e.Index);
        }
Exemple #15
0
        public void CallingWithAutosummarizeInPostgres(bool autosummarize)
        {
            var additionalFeatures = new Dictionary <string, object>();

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.WithOptions().UsingBrin().Autosummarize(autosummarize);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);

            Assert.AreEqual(autosummarize, additionalFeatures[PostgresExtensions.IndexAutosummarize]);
        }
Exemple #16
0
        public void CallingWithGinPendingListLimitInPostgres()
        {
            var additionalFeatures = new Dictionary <string, object>();

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.WithOptions().UsingGin().PendingListLimit(90);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);

            Assert.AreEqual(90, additionalFeatures[PostgresExtensions.IndexGinPendingListLimit]);
        }
Exemple #17
0
        public void CallingWithVacuumCleanupIndexScaleFactorInPostgres()
        {
            var additionalFeatures = new Dictionary <string, object>();

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.WithOptions().UsingBTree().VacuumCleanupIndexScaleFactor(90);
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);

            Assert.AreEqual(90, additionalFeatures[PostgresExtensions.IndexVacuumCleanupIndexScaleFactor]);
        }
Exemple #18
0
        public void CallingNullsFirstOrLastToExpressionInPostgres(NullSort sort)
        {
            var collectionMock = new Mock <PostgresIndexNullsSort>();

            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.NullsSort] = collectionMock.Object
            };

            var indexMock = new Mock <IndexDefinition>();
            var indexCurrentColumnMock = new Mock <IndexColumnDefinition>();

            indexCurrentColumnMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            var builder = new CreateIndexExpressionBuilder(expressionMock.Object)
            {
                CurrentColumn = indexCurrentColumnMock.Object
            };


            switch (sort)
            {
            case NullSort.First:
                builder.NullsFirst();
                break;

            case NullSort.Last:
                builder.NullsLast();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(sort), sort, null);
            }

            collectionMock.VerifySet(x => x.Sort = sort);
            indexCurrentColumnMock.VerifyGet(x => x.AdditionalFeatures);
        }
        public void CanCreateUniqueIndexWithNonDistinctNullsAlternativeSyntax()
        {
            var expression = new CreateIndexExpression()
            {
                Index =
                {
                    Name = GeneratorTestHelper.TestIndexName,
                }
            };

            var builder = new CreateIndexExpressionBuilder(expression);

            builder
            .OnTable(GeneratorTestHelper.TestTableName1)
            .OnColumn(GeneratorTestHelper.TestColumnName1)
            .Unique().NullsNotDistinct();

            var result = _generator.Generate(expression);

            result.ShouldBe("CREATE UNIQUE INDEX [TestIndex] ON [dbo].[TestTable1] ([TestColumn1] ASC) WHERE [TestColumn1] IS NOT NULL");
        }
        public void CanCreateMultiColumnUniqueIndexWithNonDistinctNullsWithSingleColumnNullsDistinct()
        {
            var expression = new CreateIndexExpression()
            {
                Index =
                {
                    Name = GeneratorTestHelper.TestIndexName,
                }
            };

            var builder = new CreateIndexExpressionBuilder(expression);

            builder
            .OnTable(GeneratorTestHelper.TestTableName1)
            .OnColumn(GeneratorTestHelper.TestColumnName1).Ascending().NullsDistinct()
            .OnColumn(GeneratorTestHelper.TestColumnName2).Descending()
            .WithOptions().UniqueNullsNotDistinct();

            var result = _generator.Generate(expression);

            result.ShouldBe("CREATE UNIQUE INDEX [TestIndex] ON [dbo].[TestTable1] ([TestColumn1] ASC, [TestColumn2] DESC) WHERE [TestColumn2] IS NOT NULL");
        }
Exemple #21
0
        public void CanCreateUniqueIndexWithDistinctNulls()
        {
            var expression = new CreateIndexExpression()
            {
                Index =
                {
                    Name = GeneratorTestHelper.TestIndexName,
                }
            };

            var builder = new CreateIndexExpressionBuilder(expression);

            builder
            .OnTable(GeneratorTestHelper.TestTableName1)
            .OnColumn(GeneratorTestHelper.TestColumnName1)
            .Ascending()
            .WithOptions().UniqueNullsDistinct();

            var result = Generator.Generate(expression);

            result.ShouldBe("CREATE UNIQUE INDEX [TestIndex] ON [dbo].[TestTable1] ([TestColumn1] ASC) WITH NULLS DISTINCT");
        }
Exemple #22
0
        public void CallingTablespaceExpressingInPostgres()
        {
            var additionalFeatures = new Dictionary <string, object>()
            {
                [PostgresExtensions.IndexTablespace] = ""
            };

            var indexMock = new Mock <IndexDefinition>();

            indexMock.Setup(x => x.AdditionalFeatures).Returns(additionalFeatures);

            var expressionMock = new Mock <CreateIndexExpression>();

            expressionMock.SetupGet(e => e.Index).Returns(indexMock.Object);

            ICreateIndexOnColumnOrInSchemaSyntax builder = new CreateIndexExpressionBuilder(expressionMock.Object);

            builder.WithOptions().Tablespace("indexspace");
            indexMock.VerifyGet(x => x.AdditionalFeatures);
            expressionMock.VerifyGet(e => e.Index);

            Assert.AreEqual("indexspace", additionalFeatures[PostgresExtensions.IndexTablespace]);
        }