diff --git a/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintDefinition.cs b/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintDefinition.cs new file mode 100644 index 0000000000..ce6d1092e1 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintDefinition.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; + +namespace Umbraco.Core.Persistence.Migrations.Model +{ + public class ConstraintDefinition + { + public ConstraintDefinition(ConstraintType type) + { + constraintType = type; + } + + private ConstraintType constraintType; + public bool IsPrimaryKeyConstraint { get { return ConstraintType.PrimaryKey == constraintType; } } + public bool IsUniqueConstraint { get { return ConstraintType.Unique == constraintType; } } + + public string SchemaName { get; set; } + public string ConstraintName { get; set; } + public string TableName { get; set; } + public ICollection Columns = new HashSet(); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintType.cs b/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintType.cs new file mode 100644 index 0000000000..30f7912419 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Model/ConstraintType.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Model +{ + public enum ConstraintType + { + PrimaryKey, + Unique + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Model/Direction.cs b/src/Umbraco.Core/Persistence/Migrations/Model/Direction.cs new file mode 100644 index 0000000000..b2d1c6c8a2 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Model/Direction.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Model +{ + public enum Direction + { + Ascending = 0, + Descending = 1 + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Model/IndexColumnDefinition.cs b/src/Umbraco.Core/Persistence/Migrations/Model/IndexColumnDefinition.cs index 1f30bf3381..7a48a4ce66 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Model/IndexColumnDefinition.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Model/IndexColumnDefinition.cs @@ -5,10 +5,4 @@ public virtual string Name { get; set; } public virtual Direction Direction { get; set; } } - - public enum Direction - { - Ascending = 0, - Descending = 1 - } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs index 44b3c8c828..299550d83e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs @@ -17,14 +17,14 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter { var expression = new AlterTableExpression { TableName = tableName }; //_context.Expressions.Add(expression); - return new AlterTableSyntaxBuilder(expression, _context); + return new AlterTableBuilder(expression, _context); } public IAlterColumnSyntax Column(string columnName) { var expression = new AlterColumnExpression { Column = { Name = columnName } }; //_context.Expressions.Add(expression); - return new AlterColumnSyntaxBuilder(expression, _context); + return new AlterColumnBuilder(expression, _context); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnSyntaxBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnSyntaxBuilder.cs rename to src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs index b0ef9144f8..1287871433 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnSyntaxBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs @@ -5,13 +5,14 @@ using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column { - public class AlterColumnSyntaxBuilder : ExpressionBuilder, + public class AlterColumnBuilder : ExpressionBuilder, IAlterColumnSyntax, + IAlterColumnTypeSyntax, IAlterColumnOptionForeignKeyCascadeSyntax { private readonly IMigrationContext _context; - public AlterColumnSyntaxBuilder(AlterColumnExpression expression, IMigrationContext context) + public AlterColumnBuilder(AlterColumnExpression expression, IMigrationContext context) : base(expression) { _context = context; @@ -24,6 +25,30 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column return Expression.Column; } + public IAlterColumnTypeSyntax OnTable(string name) + { + Expression.TableName = name; + return this; + } + + public IAlterColumnOptionSyntax WithDefault(SystemMethods method) + { + var dc = new AlterDefaultConstraintExpression + { + TableName = Expression.TableName, + SchemaName = Expression.SchemaName, + ColumnName = Expression.Column.Name, + DefaultValue = method + }; + + _context.Expressions.Add(dc); + + Expression.Column.DefaultValue = method; + + return this; + } + + public IAlterColumnOptionSyntax WithDefaultValue(object value) { var dc = new AlterDefaultConstraintExpression diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs index 846b4857f2..194db11ba3 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs @@ -2,6 +2,6 @@ { public interface IAlterColumnSyntax : IFluentSyntax { - + IAlterColumnTypeSyntax OnTable(string name); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs new file mode 100644 index 0000000000..0a621ed7d7 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column +{ + public interface IAlterColumnTypeSyntax : IColumnTypeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableSyntaxBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs similarity index 92% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableSyntaxBuilder.cs rename to src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs index b4f2ede72e..2759069945 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableSyntaxBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs @@ -5,13 +5,13 @@ using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table { - public class AlterTableSyntaxBuilder : ExpressionBuilder, - IAlterTableColumnSyntax, + public class AlterTableBuilder : ExpressionBuilder, + IAlterTableColumnTypeSyntax, IAlterTableColumnOptionForeignKeyCascadeSyntax { private readonly IMigrationContext _context; - public AlterTableSyntaxBuilder(AlterTableExpression expression, IMigrationContext context) + public AlterTableBuilder(AlterTableExpression expression, IMigrationContext context) : base(expression) { _context = context; @@ -26,6 +26,12 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table return CurrentColumn; } + public IAlterTableColumnOptionSyntax WithDefault(SystemMethods method) + { + CurrentColumn.DefaultValue = method; + return this; + } + public IAlterTableColumnOptionSyntax WithDefaultValue(object value) { if (CurrentColumn.ModificationType == ModificationType.Alter) @@ -211,7 +217,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table return this; } - public IAlterTableColumnSyntax AddColumn(string name) + public IAlterTableColumnTypeSyntax AddColumn(string name) { var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Create }; var createColumn = new CreateColumnExpression @@ -227,7 +233,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table return this; } - public IAlterTableColumnSyntax AlterColumn(string name) + public IAlterTableColumnTypeSyntax AlterColumn(string name) { var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Alter }; var alterColumn = new AlterColumnExpression diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnSyntax.cs deleted file mode 100644 index 44dc72de6c..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnSyntax.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public interface IAlterTableColumnSyntax : IColumnTypeSyntax - { - - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs new file mode 100644 index 0000000000..b744836c1b --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table +{ + public interface IAlterTableColumnTypeSyntax : IColumnTypeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs index d761c80565..3692e2d07a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs @@ -2,7 +2,7 @@ { public interface IAlterTableSyntax : IFluentSyntax { - IAlterTableColumnSyntax AddColumn(string name); - IAlterTableColumnSyntax AlterColumn(string name); + IAlterTableColumnTypeSyntax AddColumn(string name); + IAlterTableColumnTypeSyntax AlterColumn(string name); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs new file mode 100644 index 0000000000..ea60175e67 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs @@ -0,0 +1,229 @@ +using System.Data; +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column +{ + public class CreateColumnBuilder : ExpressionBuilder, + ICreateColumnOnTableSyntax, + ICreateColumnTypeSyntax, + ICreateColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + + public CreateColumnBuilder(CreateColumnExpression expression, IMigrationContext context) + : base(expression) + { + _context = context; + } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return Expression.Column; + } + + public ICreateColumnTypeSyntax OnTable(string name) + { + Expression.TableName = name; + return this; + } + + public ICreateColumnOptionSyntax WithDefault(SystemMethods method) + { + Expression.Column.DefaultValue = method; + return this; + } + + public ICreateColumnOptionSyntax WithDefaultValue(object value) + { + Expression.Column.DefaultValue = value; + return this; + } + + public ICreateColumnOptionSyntax Identity() + { + return Indexed(null); + } + + public ICreateColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public ICreateColumnOptionSyntax Indexed(string indexName) + { + Expression.Column.IsIndexed = true; + + var index = new CreateIndexExpression + { + Index = new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + } + }; + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateColumnOptionSyntax PrimaryKey() + { + Expression.Column.IsPrimaryKey = true; + return this; + } + + public ICreateColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + Expression.Column.IsPrimaryKey = true; + Expression.Column.PrimaryKeyName = primaryKeyName; + return this; + } + + public ICreateColumnOptionSyntax Nullable() + { + Expression.Column.IsNullable = true; + return this; + } + + public ICreateColumnOptionSyntax NotNullable() + { + Expression.Column.IsNullable = false; + return this; + } + + public ICreateColumnOptionSyntax Unique() + { + return Unique(null); + } + + public ICreateColumnOptionSyntax Unique(string indexName) + { + Expression.Column.IsUnique = true; + + var index = new CreateIndexExpression + { + Index = new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + } + }; + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + Expression.Column.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression + { + ForeignKey = new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + } + }; + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(Expression.Column.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + Expression.Column.IsForeignKey = true; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression + { + ForeignKey = new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + } + }; + + fk.ForeignKey.PrimaryColumns.Add(Expression.Column.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public ICreateColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs new file mode 100644 index 0000000000..530cd9740a --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOnTableSyntax : IColumnTypeSyntax + { + ICreateColumnTypeSyntax OnTable(string name); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs new file mode 100644 index 0000000000..7f30ff4f7a --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOptionForeignKeyCascadeSyntax : ICreateColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs new file mode 100644 index 0000000000..3699dcda89 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOptionSyntax : IColumnOptionSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs new file mode 100644 index 0000000000..97ef046b8b --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnTypeSyntax : IColumnTypeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs new file mode 100644 index 0000000000..acb1a3d392 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs @@ -0,0 +1,32 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint +{ + public class CreateConstraintBuilder : ExpressionBuilderBase, + ICreateConstraintOnTableSyntax, + ICreateConstraintColumnsSyntax + { + public CreateConstraintBuilder(CreateConstraintExpression expression) : base(expression) + { + } + + public ICreateConstraintColumnsSyntax OnTable(string tableName) + { + Expression.Constraint.TableName = tableName; + return this; + } + + public void Column(string columnName) + { + Expression.Constraint.Columns.Add(columnName); + } + + public void Columns(string[] columnNames) + { + foreach (var columnName in columnNames) + { + Expression.Constraint.Columns.Add(columnName); + } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs new file mode 100644 index 0000000000..a037b40605 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint +{ + public interface ICreateConstraintColumnsSyntax : IFluentSyntax + { + void Column(string columnName); + void Columns(string[] columnNames); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs new file mode 100644 index 0000000000..f42d2fcc74 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint +{ + public interface ICreateConstraintOnTableSyntax : IFluentSyntax + { + ICreateConstraintColumnsSyntax OnTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs new file mode 100644 index 0000000000..df50ef2e28 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs @@ -0,0 +1,20 @@ +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions +{ + public class CreateConstraintExpression : IMigrationExpression + { + public CreateConstraintExpression(ConstraintType type) + { + Constraint = new ConstraintDefinition(type); + } + + public ConstraintDefinition Constraint { get; private set; } + + public override string ToString() + { + //TODO replace with sql syntax provider + return base.ToString() + Constraint.ConstraintName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs new file mode 100644 index 0000000000..7dd016517e --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions +{ + public class CreateTableExpression : IMigrationExpression + { + public CreateTableExpression() + { + Columns = new List(); + } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual IList Columns { get; set; } + + public override string ToString() + { + //TODO replace with sql syntax provider + return base.ToString() + TableName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs new file mode 100644 index 0000000000..c8ce249ce2 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs @@ -0,0 +1,73 @@ +using System.Data; +using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public class CreateForeignKeyBuilder : ExpressionBuilderBase, + ICreateForeignKeyFromTableSyntax, + ICreateForeignKeyForeignColumnSyntax, + ICreateForeignKeyToTableSyntax, + ICreateForeignKeyPrimaryColumnSyntax, + ICreateForeignKeyCascadeSyntax + { + public CreateForeignKeyBuilder(CreateForeignKeyExpression expression) : base(expression) + { + } + + public ICreateForeignKeyForeignColumnSyntax FromTable(string table) + { + Expression.ForeignKey.ForeignTable = table; + return this; + } + + public ICreateForeignKeyToTableSyntax ForeignColumn(string column) + { + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns) + { + foreach (var column in columns) + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public ICreateForeignKeyForeignColumnSyntax ToTable(string table) + { + Expression.ForeignKey.PrimaryTable = table; + return this; + } + + public ICreateForeignKeyCascadeSyntax PrimaryColumn(string column) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + return this; + } + + public ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns) + { + foreach (var column in columns) + Expression.ForeignKey.PrimaryColumns.Add(column); + return this; + } + + public ICreateForeignKeyCascadeSyntax OnDelete(Rule rule) + { + Expression.ForeignKey.OnDelete = rule; + return this; + } + + public ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + Expression.ForeignKey.OnUpdate = rule; + return this; + } + + public void OnDeleteOrUpdate(Rule rule) + { + Expression.ForeignKey.OnDelete = rule; + Expression.ForeignKey.OnUpdate = rule; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs new file mode 100644 index 0000000000..7671249c2e --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs @@ -0,0 +1,11 @@ +using System.Data; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyCascadeSyntax : IFluentSyntax + { + ICreateForeignKeyCascadeSyntax OnDelete(Rule rule); + ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule); + void OnDeleteOrUpdate(Rule rule); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs new file mode 100644 index 0000000000..92a7769f8d --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyForeignColumnSyntax : IFluentSyntax + { + ICreateForeignKeyToTableSyntax ForeignColumn(string column); + ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs new file mode 100644 index 0000000000..36be02faae --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyFromTableSyntax : IFluentSyntax + { + ICreateForeignKeyForeignColumnSyntax FromTable(string table); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs new file mode 100644 index 0000000000..bad288b81e --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyPrimaryColumnSyntax : IFluentSyntax + { + ICreateForeignKeyCascadeSyntax PrimaryColumn(string column); + ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs new file mode 100644 index 0000000000..47767c4db4 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyToTableSyntax : IFluentSyntax + { + ICreateForeignKeyForeignColumnSyntax ToTable(string table); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs index 1a7e451f0b..5bb4aaf61b 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs @@ -1,7 +1,22 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Create { - public interface ICreateBuilder + public interface ICreateBuilder : IFluentSyntax { - + /* + ICreateTableWithColumnOrSchemaSyntax Table(string tableName); + ICreateColumnOnTableSyntax Column(string columnName); + * + ICreateForeignKeyFromTableSyntax ForeignKey(); + ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName); + * + ICreateIndexForTableSyntax Index(); + ICreateIndexForTableSyntax Index(string indexName); + * + ICreateConstraintOnTableSyntax PrimaryKey(); + ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName); + * + ICreateConstraintOnTableSyntax UniqueConstraint(); + ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName); + */ } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs new file mode 100644 index 0000000000..438a515593 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs @@ -0,0 +1,72 @@ +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index +{ + public class CreateIndexBuilder : ExpressionBuilderBase, + ICreateIndexForTableSyntax, + ICreateIndexOnColumnSyntax, + ICreateIndexColumnOptionsSyntax, + ICreateIndexOptionsSyntax + { + public CreateIndexBuilder(CreateIndexExpression expression) : base(expression) + { + } + + public IndexColumnDefinition CurrentColumn { get; set; } + + public ICreateIndexOnColumnSyntax OnTable(string tableName) + { + Expression.Index.TableName = tableName; + return this; + } + + public ICreateIndexColumnOptionsSyntax OnColumn(string columnName) + { + CurrentColumn = new IndexColumnDefinition { Name = columnName }; + Expression.Index.Columns.Add(CurrentColumn); + return this; + } + + public ICreateIndexOptionsSyntax WithOptions() + { + return this; + } + + public ICreateIndexOnColumnSyntax Ascending() + { + CurrentColumn.Direction = Direction.Ascending; + return this; + } + + public ICreateIndexOnColumnSyntax Descending() + { + CurrentColumn.Direction = Direction.Descending; + return this; + } + + ICreateIndexOnColumnSyntax ICreateIndexColumnOptionsSyntax.Unique() + { + Expression.Index.IsUnique = true; + return this; + } + + public ICreateIndexOnColumnSyntax NonClustered() + { + Expression.Index.IsClustered = false; + return this; + } + + public ICreateIndexOnColumnSyntax Clustered() + { + Expression.Index.IsClustered = true; + return this; + } + + ICreateIndexOnColumnSyntax ICreateIndexOptionsSyntax.Unique() + { + Expression.Index.IsUnique = true; + return this; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs new file mode 100644 index 0000000000..f8055376aa --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexColumnOptionsSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax Ascending(); + ICreateIndexOnColumnSyntax Descending(); + ICreateIndexOnColumnSyntax Unique(); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs new file mode 100644 index 0000000000..0ac954990b --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexForTableSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax OnTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs new file mode 100644 index 0000000000..0c829aa4ef --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexOnColumnSyntax : IFluentSyntax + { + ICreateIndexColumnOptionsSyntax OnColumn(string columnName); + ICreateIndexOptionsSyntax WithOptions(); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs new file mode 100644 index 0000000000..4253b48088 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexOptionsSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax Unique(); + ICreateIndexOnColumnSyntax NonClustered(); + ICreateIndexOnColumnSyntax Clustered(); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs new file mode 100644 index 0000000000..b6cf3626ec --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs @@ -0,0 +1,235 @@ +using System.Data; +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions; +using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table +{ + public class CreateTableBuilder : ExpressionBuilder, + ICreateTableWithColumnSyntax, + ICreateTableColumnAsTypeSyntax, + ICreateTableColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + + public CreateTableBuilder(CreateTableExpression expression, IMigrationContext context) + : base(expression) + { + _context = context; + } + + public ColumnDefinition CurrentColumn { get; set; } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return CurrentColumn; + } + + public ICreateTableColumnAsTypeSyntax WithColumn(string name) + { + var column = new ColumnDefinition { Name = name, TableName = Expression.TableName, ModificationType = ModificationType.Create }; + Expression.Columns.Add(column); + CurrentColumn = column; + return this; + } + + public ICreateTableColumnOptionSyntax WithDefault(SystemMethods method) + { + CurrentColumn.DefaultValue = method; + return this; + } + + public ICreateTableColumnOptionSyntax WithDefaultValue(object value) + { + CurrentColumn.DefaultValue = value; + return this; + } + + public ICreateTableColumnOptionSyntax Identity() + { + CurrentColumn.IsIdentity = true; + return this; + } + + public ICreateTableColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public ICreateTableColumnOptionSyntax Indexed(string indexName) + { + CurrentColumn.IsIndexed = true; + + var index = new CreateIndexExpression + { + Index = new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + } + }; + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateTableColumnOptionSyntax PrimaryKey() + { + CurrentColumn.IsPrimaryKey = true; + return this; + } + + public ICreateTableColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + CurrentColumn.IsPrimaryKey = true; + CurrentColumn.PrimaryKeyName = primaryKeyName; + return this; + } + + public ICreateTableColumnOptionSyntax Nullable() + { + CurrentColumn.IsNullable = true; + return this; + } + + public ICreateTableColumnOptionSyntax NotNullable() + { + CurrentColumn.IsNullable = false; + return this; + } + + public ICreateTableColumnOptionSyntax Unique() + { + return Unique(null); + } + + public ICreateTableColumnOptionSyntax Unique(string indexName) + { + CurrentColumn.IsUnique = true; + + var index = new CreateIndexExpression + { + Index = new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + } + }; + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + CurrentColumn.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression + { + ForeignKey = new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + } + }; + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(CurrentColumn.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + CurrentColumn.IsForeignKey = true; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression + { + ForeignKey = new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + } + }; + + fk.ForeignKey.PrimaryColumns.Add(CurrentColumn.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public ICreateTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs new file mode 100644 index 0000000000..26e65eb73f --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnAsTypeSyntax : IColumnTypeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs new file mode 100644 index 0000000000..fa6af935d9 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnOptionForeignKeyCascadeSyntax : + ICreateTableColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs new file mode 100644 index 0000000000..68b1aff248 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnOptionSyntax : + IColumnOptionSyntax, + ICreateTableWithColumnSyntax + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs new file mode 100644 index 0000000000..1edf13e847 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table +{ + public interface ICreateTableWithColumnSyntax : IFluentSyntax + { + ICreateTableColumnAsTypeSyntax WithColumn(string name); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs index e18a68eda7..3b07a81944 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs @@ -1,9 +1,12 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax { public interface IColumnOptionSyntax : IFluentSyntax where TNext : IFluentSyntax where TNextFk : IFluentSyntax { + TNext WithDefault(SystemMethods method); TNext WithDefaultValue(object value); TNext Identity(); TNext Indexed(); diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 5b60e54f68..2dd1c4279f 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -226,6 +226,9 @@ + + + @@ -234,20 +237,47 @@ - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + +