diff --git a/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnContentSize.cs b/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnContentSize.cs new file mode 100644 index 00000000..69f81f48 --- /dev/null +++ b/src/Migrator.Tests/Providers/PostgreSQL/PostgreSQLTransformationProvider_GetColumnContentSize.cs @@ -0,0 +1,33 @@ +using System.Data; +using DotNetProjects.Migrator.Framework; +using NUnit.Framework; + +namespace Migrator.Tests.Providers.PostgreSQL; + +[TestFixture] +[Category("Postgre")] +public class PostgreSQLTransformationProvider_GetColumnContentSizeTests : PostgreSQLTransformationProviderTestBase +{ + [Test] + public void GetColumnContentSize_DefaultValues_Succeeds() + { + // Arrange + const string testTableName = "testtable"; + + const string stringColumnName = "stringcolumn"; + + Provider.AddTable(testTableName, + new Column(stringColumnName, DbType.String, 5000) + ); + + Provider.Insert(testTableName, [stringColumnName], [new string('A', 44)]); + Provider.Insert(testTableName, [stringColumnName], [new string('B', 444)]); + Provider.Insert(testTableName, [stringColumnName], [new string('C', 4444)]); + + // Act + var columnContentSize = Provider.GetColumnContentSize(testTableName, stringColumnName); + + // Assert + Assert.That(columnContentSize, Is.EqualTo(4444)); + } +} diff --git a/src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLTransformationProvider.cs b/src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLTransformationProvider.cs index 2729605d..f1b7ede5 100644 --- a/src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLTransformationProvider.cs +++ b/src/Migrator/Providers/Impl/PostgreSQL/PostgreSQLTransformationProvider.cs @@ -249,6 +249,18 @@ public override string[] GetTables() return tables.ToArray(); } + public override int GetColumnContentSize(string table, string columnName) + { + var result = ExecuteScalar($"SELECT MAX(LENGTH({QuoteColumnNameIfRequired(columnName)})) FROM {QuoteTableNameIfRequired(table)}"); + + if (result == DBNull.Value) + { + return 0; + } + + return Convert.ToInt32(result); + } + public override Column[] GetColumns(string table) { var stringBuilder = new StringBuilder(); diff --git a/src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs b/src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs index 6d15caac..3cb2568d 100644 --- a/src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs +++ b/src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs @@ -276,11 +276,11 @@ FROM sys.[indexes] Ind if (!reader.IsDBNull(6)) { - idx.KeyColumns = (reader.GetString(6).Split(',')); + idx.KeyColumns = reader.GetString(6).Split(','); } if (!reader.IsDBNull(7)) { - idx.IncludeColumns = (reader.GetString(7).Split(',')); + idx.IncludeColumns = reader.GetString(7).Split(','); } retVal.Add(idx); @@ -293,7 +293,7 @@ FROM sys.[indexes] Ind public override int GetColumnContentSize(string table, string columnName) { - var result = this.ExecuteScalar("SELECT MAX(LEN(" + this.QuoteColumnNameIfRequired(columnName) + ")) FROM " + this.QuoteTableNameIfRequired(table)); + var result = ExecuteScalar("SELECT MAX(LEN(" + this.QuoteColumnNameIfRequired(columnName) + ")) FROM " + this.QuoteTableNameIfRequired(table)); if (result == DBNull.Value) {