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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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]); }
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]); }
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]); }
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"); }
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"); }
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]); }