-
-
Notifications
You must be signed in to change notification settings - Fork 11
Postgre read type and default values #91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
6aedd59
ec13b6c
e7464e6
65d1182
d4f3144
6c887c3
886c454
c6d4d27
1499598
0060049
746432e
5944df7
2f98da0
355ff7e
adb0023
12561fc
e24fe5d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| using System; | ||
| using System.Data; | ||
| using System.Linq; | ||
| using DotNetProjects.Migrator.Framework; | ||
| using NUnit.Framework; | ||
|
|
||
| namespace Migrator.Tests.Providers.PostgreSQL; | ||
|
|
||
| [TestFixture] | ||
| [Category("Postgre")] | ||
| public class PostgreSQLTransformationProvider_GetColumnsDefaultTypeTests : PostgreSQLTransformationProviderTestBase | ||
| { | ||
| private const decimal DecimalDefaultValue = 14.56565m; | ||
|
|
||
| [Test] | ||
| public void GetColumns_DataTypeResolveSucceeds() | ||
| { | ||
| // Arrange | ||
| var dateTimeDefaultValue = new DateTime(2000, 1, 2, 3, 4, 5, DateTimeKind.Utc); | ||
| var guidDefaultValue = Guid.NewGuid(); | ||
|
|
||
| const string testTableName = "MyDefaultTestTable"; | ||
|
|
||
| const string dateTimeColumnName1 = "datetimecolumn1"; | ||
| const string dateTimeColumnName2 = "datetimecolumn2"; | ||
| const string decimalColumnName1 = "decimalcolumn"; | ||
| const string guidColumnName1 = "guidcolumn1"; | ||
| const string booleanColumnName1 = "booleancolumn1"; | ||
| const string int32ColumnName1 = "int32column1"; | ||
| const string int64ColumnName1 = "int64column1"; | ||
| const string stringColumnName1 = "stringcolumn1"; | ||
| const string binaryColumnName1 = "binarycolumn1"; | ||
|
|
||
| // Should be extended by remaining types | ||
| Provider.AddTable(testTableName, | ||
| new Column(dateTimeColumnName1, DbType.DateTime, dateTimeDefaultValue), | ||
| new Column(dateTimeColumnName2, DbType.DateTime2, dateTimeDefaultValue), | ||
| new Column(decimalColumnName1, DbType.Decimal, DecimalDefaultValue), | ||
| new Column(guidColumnName1, DbType.Guid, guidDefaultValue), | ||
|
|
||
| // other boolean default values are tested in another test | ||
| new Column(booleanColumnName1, DbType.Boolean, true), | ||
|
|
||
| new Column(int32ColumnName1, DbType.Int32, defaultValue: 43), | ||
| new Column(int64ColumnName1, DbType.Int64, defaultValue: 88), | ||
| new Column(stringColumnName1, DbType.String, defaultValue: "Hello"), | ||
| new Column(binaryColumnName1, DbType.Binary, defaultValue: new byte[] { 12, 32, 34 }) | ||
| ); | ||
|
|
||
| // Act | ||
| var columns = Provider.GetColumns(testTableName); | ||
|
|
||
| // Assert | ||
| var dateTimeColumn1 = columns.Single(x => x.Name == dateTimeColumnName1); | ||
| var dateTimeColumn2 = columns.Single(x => x.Name == dateTimeColumnName2); | ||
| var decimalColumn1 = columns.Single(x => x.Name == decimalColumnName1); | ||
| var guidColumn1 = columns.Single(x => x.Name == guidColumnName1); | ||
| var booleanColumn1 = columns.Single(x => x.Name == booleanColumnName1); | ||
| var int32Column1 = columns.Single(x => x.Name == int32ColumnName1); | ||
| var int64Column1 = columns.Single(x => x.Name == int64ColumnName1); | ||
| var stringColumn1 = columns.Single(x => x.Name == stringColumnName1); | ||
| var binarycolumn1 = columns.Single(x => x.Name == binaryColumnName1); | ||
|
|
||
| Assert.That(dateTimeColumn1.DefaultValue, Is.EqualTo(dateTimeDefaultValue)); | ||
| Assert.That(dateTimeColumn2.DefaultValue, Is.EqualTo(dateTimeDefaultValue)); | ||
| Assert.That(decimalColumn1.DefaultValue, Is.EqualTo(DecimalDefaultValue)); | ||
| Assert.That(guidColumn1.DefaultValue, Is.EqualTo(guidDefaultValue)); | ||
| Assert.That(booleanColumn1.DefaultValue, Is.True); | ||
| Assert.That(int32Column1.DefaultValue, Is.EqualTo(43)); | ||
| Assert.That(int64Column1.DefaultValue, Is.EqualTo(88)); | ||
| Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello")); | ||
| Assert.That(binarycolumn1.DefaultValue, Is.EqualTo(new byte[] { 12, 32, 34 })); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| using System.Data; | ||
| using System.Linq; | ||
| using DotNetProjects.Migrator.Framework; | ||
| using NUnit.Framework; | ||
|
|
||
| namespace Migrator.Tests.Providers.PostgreSQL; | ||
|
|
||
| [TestFixture] | ||
| [Category("Postgre")] | ||
| public class PostgreSQLTransformationProvider_GetColumnTypeTests : PostgreSQLTransformationProviderTestBase | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Name nicht gleich wie Datei. |
||
| { | ||
| [Test] | ||
| public void GetColumns_DataTypeResolveSucceeds() | ||
| { | ||
| // Arrange | ||
| const string testTableName = "MyDefaultTestTable"; | ||
| const string dateTimeColumnName1 = "datetimecolumn1"; | ||
| const string dateTimeColumnName2 = "datetimecolumn2"; | ||
| const string decimalColumnName1 = "decimalcolumn"; | ||
| const string guidColumnName1 = "guidcolumn1"; | ||
| const string booleanColumnName1 = "booleancolumn1"; | ||
| const string int32ColumnName1 = "int32column1"; | ||
| const string int64ColumnName1 = "int64column1"; | ||
| const string stringColumnName1 = "stringcolumn1"; | ||
| const string stringColumnName2 = "stringcolumn2"; | ||
| const string binaryColumnName1 = "binarycolumn"; | ||
|
|
||
| // Should be extended by remaining types | ||
| Provider.AddTable(testTableName, | ||
| new Column(dateTimeColumnName1, DbType.DateTime), | ||
| new Column(dateTimeColumnName2, DbType.DateTime2), | ||
| new Column(decimalColumnName1, DbType.Decimal), | ||
| new Column(guidColumnName1, DbType.Guid), | ||
| new Column(booleanColumnName1, DbType.Boolean), | ||
| new Column(int32ColumnName1, DbType.Int32), | ||
| new Column(int64ColumnName1, DbType.Int64), | ||
| new Column(stringColumnName1, DbType.String), | ||
| new Column(stringColumnName2, DbType.String) { Size = 30 }, | ||
| new Column(binaryColumnName1, DbType.Binary) | ||
| ); | ||
|
|
||
| // Act | ||
| var columns = Provider.GetColumns(testTableName); | ||
|
|
||
| var dateTimeColumn1 = columns.Single(x => x.Name == dateTimeColumnName1); | ||
| var dateTimeColumn2 = columns.Single(x => x.Name == dateTimeColumnName2); | ||
| var decimalColumn1 = columns.Single(x => x.Name == decimalColumnName1); | ||
| var guidColumn1 = columns.Single(x => x.Name == guidColumnName1); | ||
| var booleanColumn1 = columns.Single(x => x.Name == booleanColumnName1); | ||
| var int32Column1 = columns.Single(x => x.Name == int32ColumnName1); | ||
| var int64column1 = columns.Single(x => x.Name == int64ColumnName1); | ||
| var stringColumn1 = columns.Single(x => x.Name == stringColumnName1); | ||
| var stringColumn2 = columns.Single(x => x.Name == stringColumnName2); | ||
| var binaryColumn1 = columns.Single(x => x.Name == binaryColumnName1); | ||
|
|
||
|
|
||
| // Assert | ||
| Assert.That(dateTimeColumn1.Type, Is.EqualTo(DbType.DateTime)); | ||
| Assert.That(dateTimeColumn1.Precision, Is.EqualTo(3)); | ||
| Assert.That(dateTimeColumn2.Type, Is.EqualTo(DbType.DateTime2)); | ||
| Assert.That(dateTimeColumn2.Precision, Is.EqualTo(6)); | ||
| Assert.That(decimalColumn1.Type, Is.EqualTo(DbType.Decimal)); | ||
| Assert.That(decimalColumn1.Precision, Is.EqualTo(19)); | ||
| Assert.That(decimalColumn1.Scale, Is.EqualTo(5)); | ||
| Assert.That(guidColumn1.Type, Is.EqualTo(DbType.Guid)); | ||
| Assert.That(booleanColumn1.Type, Is.EqualTo(DbType.Boolean)); | ||
| Assert.That(int32Column1.Type, Is.EqualTo(DbType.Int32)); | ||
| Assert.That(int64column1.Type, Is.EqualTo(DbType.Int64)); | ||
| Assert.That(stringColumn1.Type, Is.EqualTo(DbType.String)); | ||
| Assert.That(stringColumn2.Type, Is.EqualTo(DbType.String)); | ||
| Assert.That(stringColumn2.Size, Is.EqualTo(30)); | ||
| Assert.That(binaryColumn1.Type, Is.EqualTo(DbType.Binary)); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -11,6 +11,7 @@ | |
|
|
||
| #endregion | ||
|
|
||
| using System; | ||
| using System.Data; | ||
|
|
||
| namespace DotNetProjects.Migrator.Framework; | ||
|
|
@@ -20,6 +21,8 @@ namespace DotNetProjects.Migrator.Framework; | |
| /// </summary> | ||
| public class Column : IColumn, IDbField | ||
| { | ||
| private object _defaultValue; | ||
|
|
||
| public Column(string name) | ||
| { | ||
| Name = name; | ||
|
|
@@ -147,13 +150,34 @@ public DbType Type | |
|
|
||
| public int Size { get; set; } | ||
|
|
||
| /// <summary> | ||
| /// Gets or sets the precision for NUMERIC/DECIMAL | ||
| /// </summary> | ||
| public int? Precision { get; set; } | ||
|
|
||
| /// <summary> | ||
| /// Gets or sets the scale for NUMERIC/DECIMAL | ||
| /// </summary> | ||
| public int? Scale { get; set; } | ||
|
|
||
| public ColumnProperty ColumnProperty { get; set; } | ||
|
|
||
| public object DefaultValue { get; set; } | ||
| public object DefaultValue | ||
| { | ||
| get => _defaultValue; | ||
| set | ||
| { | ||
| if (value is DateTime defaultValueDateTime) | ||
| { | ||
| if (defaultValueDateTime.Kind != DateTimeKind.Utc) | ||
| { | ||
| throw new Exception("We only accept UTC values as default DateTime values."); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unspecified is not okay?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No unspecified is not ok. You need to set UTC explicitly DateTimeKind.Unspecified is not ok
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, will change the "We only accept..." and merge it. |
||
| } | ||
| } | ||
|
|
||
| _defaultValue = value; | ||
| } | ||
| } | ||
|
|
||
| public bool IsIdentity | ||
| { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Name nicht gleich wie Datei.