Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public void GetColumns_DefaultValues_Succeeds()
const string decimalColumnName1 = "decimalcolumn";
const string guidColumnName1 = "guidcolumn1";
const string booleanColumnName1 = "booleancolumn1";
const string booleanColumnName2 = "booleancolumn2";
const string int32ColumnName1 = "int32column1";
const string int64ColumnName1 = "int64column1";
const string int64ColumnName2 = "int64column2";
Expand All @@ -50,6 +51,7 @@ public void GetColumns_DefaultValues_Succeeds()

// other boolean default values are tested in another test
new Column(booleanColumnName1, DbType.Boolean, true),
new Column(booleanColumnName2, DbType.Boolean, false),

new Column(int32ColumnName1, DbType.Int32, defaultValue: 43),
new Column(int64ColumnName1, DbType.Int64, defaultValue: 88),
Expand All @@ -69,6 +71,7 @@ public void GetColumns_DefaultValues_Succeeds()
var decimalColumn1 = columns.Single(x => x.Name.Equals(decimalColumnName1, StringComparison.OrdinalIgnoreCase));
var guidColumn1 = columns.Single(x => x.Name.Equals(guidColumnName1, StringComparison.OrdinalIgnoreCase));
var booleanColumn1 = columns.Single(x => x.Name.Equals(booleanColumnName1, StringComparison.OrdinalIgnoreCase));
var booleanColumn2 = columns.Single(x => x.Name.Equals(booleanColumnName2, StringComparison.OrdinalIgnoreCase));
var int32Column1 = columns.Single(x => x.Name.Equals(int32ColumnName1, StringComparison.OrdinalIgnoreCase));
var int64Column1 = columns.Single(x => x.Name.Equals(int64ColumnName1, StringComparison.OrdinalIgnoreCase));
var int64Column2 = columns.Single(x => x.Name.Equals(int64ColumnName2, StringComparison.OrdinalIgnoreCase));
Expand All @@ -82,6 +85,7 @@ public void GetColumns_DefaultValues_Succeeds()
Assert.That(decimalColumn1.DefaultValue, Is.EqualTo(decimalDefaultValue));
Assert.That(guidColumn1.DefaultValue, Is.EqualTo(guidDefaultValue));
Assert.That(booleanColumn1.DefaultValue, Is.True);
Assert.That(booleanColumn2.DefaultValue, Is.False);
Assert.That(int32Column1.DefaultValue, Is.EqualTo(43));
Assert.That(int64Column1.DefaultValue, Is.EqualTo(88));
Assert.That(stringColumn1.DefaultValue, Is.EqualTo("Hello"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,57 @@ public void AddColumn_HavingColumnPropertyUniqueAndIndex_RebuildSucceeds()
Assert.That(indexAfter.Name, Is.EqualTo(indexName));
CollectionAssert.AreEquivalent(indexAfter.KeyColumns, new string[] { propertyName1, propertyName2 });
}

[Test]
public void AddColumn_HavingNullInPrimaryKey_HasNULLAfterAddAnotherColumn()
{
// Arrange/Act
Provider.ExecuteNonQuery("CREATE TABLE Common_Language (LanguageID TEXT PRIMARY KEY)");

Provider.AddColumn("Common_Language", "Enabled", DbType.Boolean);

var tableInfo = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo("Common_Language");
var script = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript("Common_Language");

var columnProperty = tableInfo.Columns.Single(x => x.Name == "LanguageID").ColumnProperty;

// Assert
Assert.That(script, Does.Contain("LanguageID TEXT NULL PRIMARY KEY"));
}

[Test]
public void AddColumn_HavingNullInPrimaryKey_HasNOTNULLAfterAddAnotherColumn()
{
// Arrange/Act
Provider.ExecuteNonQuery("CREATE TABLE Common_Language (LanguageID TEXT NOT NULL PRIMARY KEY)");

Provider.AddColumn("Common_Language", "Enabled", DbType.Boolean);

var tableInfo = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo("Common_Language");
var script = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript("Common_Language");

var columnProperty = tableInfo.Columns.Single(x => x.Name == "LanguageID").ColumnProperty;

// Assert
Assert.That(script, Does.Contain("LanguageID TEXT NOT NULL PRIMARY KEY"));
}

[Test]
public void AddColumn_HavingNotNullInPrimaryKey_Succeds()
{
// Arrange/Act
Provider.ExecuteNonQuery("CREATE TABLE Common_Language (LanguageID INT NOT NULL PRIMARY KEY)");

Provider.AddColumn("Common_Language", "Enabled", DbType.Boolean);

var tableInfo = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo("Common_Language");
var script = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript("Common_Language");

var columnProperty = tableInfo.Columns.Single(x => x.Name == "LanguageID").ColumnProperty;
var hasNull = columnProperty.IsSet(ColumnProperty.Null);

// Assert
Assert.That(script, Does.Contain("LanguageID INTEGER NOT NULL PRIMARY KEY"));
Assert.That(hasNull, Is.False);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,9 @@ public void AddTable_SinglePrimaryKey_ContainsNull()

// Assert
var createScript = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript(tableName);
Assert.That(createScript, Is.EqualTo("CREATE TABLE MyTableName (Column1 INTEGER NOT NULL PRIMARY KEY, Column2 INTEGER NOT NULL)"));

var pragmaTableInfos = ((SQLiteTransformationProvider)Provider).GetPragmaTableInfoItems(tableName);
Assert.That(pragmaTableInfos.All(x => x.NotNull), Is.True);
// In SQLite an INTEGER PRIMARY KEY column is NOT NULL implicitly (see insert asserts above)
Assert.That(createScript, Is.EqualTo("CREATE TABLE MyTableName (Column1 INTEGER PRIMARY KEY, Column2 INTEGER NOT NULL)"));

var sqliteInfo = ((SQLiteTransformationProvider)Provider).GetSQLiteTableInfo(tableName);
Assert.That(sqliteInfo.Columns.First().Name, Is.EqualTo(columnName1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ public void GetColumns_Primary_ColumnPropertyOk()

// Assert
Assert.That(columns.Single().ColumnProperty, Is.EqualTo(ColumnProperty.NotNull |
ColumnProperty.Identity |
ColumnProperty.PrimaryKey));
ColumnProperty.PrimaryKeyWithIdentity));
}

[Test]
Expand All @@ -82,8 +81,8 @@ public void GetColumns_PrimaryKeyOnTwoColumns_BothColumnsHavePrimaryKeyAndAreNot
var columns = Provider.GetColumns(tableName);

// Assert
Assert.That(columns[0].ColumnProperty, Is.EqualTo(ColumnProperty.PrimaryKey | ColumnProperty.Null));
Assert.That(columns[1].ColumnProperty, Is.EqualTo(ColumnProperty.PrimaryKey | ColumnProperty.Null));
Assert.That(columns[0].ColumnProperty, Is.EqualTo(ColumnProperty.PrimaryKey | ColumnProperty.NotNull));
Assert.That(columns[1].ColumnProperty, Is.EqualTo(ColumnProperty.PrimaryKey | ColumnProperty.NotNull));
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public void AddPrimaryIdentity_Succeeds()

var sql = ((SQLiteTransformationProvider)Provider).GetSqlCreateTableScript(testTableName);

Assert.That(sql, Does.Contain("Color1 INTEGER NOT NULL PRIMARY KEY"));
// NOT NULL implicitly set in SQLite
Assert.That(sql, Does.Contain("Color1 INTEGER PRIMARY KEY"));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using DotNetProjects.Migrator.Framework;

Expand All @@ -24,22 +23,13 @@

protected override void AddNotNull(Column column, List<string> vals)
{
var isPrimaryKeySelected = PropertySelected(column.ColumnProperty, ColumnProperty.PrimaryKey);
var isNullSelected = PropertySelected(column.ColumnProperty, ColumnProperty.Null);
var isNotNullSelected = PropertySelected(column.ColumnProperty, ColumnProperty.NotNull);

if (isNullSelected && isPrimaryKeySelected)
{
throw new Exception("This is currently not supported by the migrator see issue #44. You need to use NOT NULL for a PK column.");
}

if (isNotNullSelected || isPrimaryKeySelected)
if (column.ColumnProperty.HasFlag(ColumnProperty.NotNull))
{
AddValueIfSelected(column, ColumnProperty.NotNull, vals);
}
}

protected virtual void AddValueIfSelected(Column column, ColumnProperty property, ICollection<string> vals)

Check warning on line 32 in src/Migrator/Providers/Impl/SQLite/SQLiteColumnPropertiesMapper.cs

View workflow job for this annotation

GitHub Actions / build

'SQLiteColumnPropertiesMapper.AddValueIfSelected(Column, ColumnProperty, ICollection<string>)' hides inherited member 'ColumnPropertiesMapper.AddValueIfSelected(Column, ColumnProperty, ICollection<string>)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword.
{
vals.Add(_Dialect.SqlForProperty(property, column));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -893,7 +893,7 @@
}

[Obsolete]
public override void AddTable(string table, string engine, string columns)

Check warning on line 896 in src/Migrator/Providers/Impl/SQLite/SQLiteTransformationProvider.cs

View workflow job for this annotation

GitHub Actions / build

Obsolete member 'SQLiteTransformationProvider.AddTable(string, string, string)' overrides non-obsolete member 'TransformationProvider.AddTable(string, string, string)'
{
throw new NotSupportedException();
}
Expand Down Expand Up @@ -1212,7 +1212,16 @@

if (pragmaTableInfoItem.Pk > 0)
{
column.ColumnProperty |= ColumnProperty.PrimaryKey;
if (new[] { DbType.UInt16, DbType.UInt32, DbType.UInt64, DbType.Int16, DbType.Int32, DbType.Int64 }.Contains(column.Type))
{
column.ColumnProperty |= ColumnProperty.PrimaryKey;
column.ColumnProperty |= ColumnProperty.NotNull;
column.ColumnProperty = column.ColumnProperty.Clear(ColumnProperty.Null);
}
else
{
column.ColumnProperty |= ColumnProperty.PrimaryKey;
}
}

var indexListItems = GetPragmaIndexListItems(tableName);
Expand Down
Loading