From f9403f2bc69fcaa1133e5b990d6eb3be6ffa59e1 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Fri, 7 Dec 2012 13:46:11 -0100 Subject: [PATCH] Implementing fluent Delete, Rename and Update syntax for migrations. --- .../Persistence/Migrations/MigrationBase.cs | 6 -- .../Model/DeletionDataDefinition.cs | 9 ++ .../AlterDefaultConstraintExpression.cs | 2 +- .../Delete/Column/DeleteColumnBuilder.cs | 22 +++++ .../Column/IDeleteColumnFromTableSyntax.cs | 8 ++ .../Constraint/DeleteConstraintBuilder.cs | 16 ++++ .../IDeleteConstraintOnTableSyntax.cs | 7 ++ .../DeleteDefaultConstraintBuilder.cs | 25 ++++++ .../IDeleteDefaultConstraintOnColumnSyntax.cs | 7 ++ .../IDeleteDefaultConstraintOnTableSyntax.cs | 7 ++ .../Migrations/Syntax/Delete/DeleteBuilder.cs | 85 ++++++++++++++++++- .../Syntax/Delete/DeleteDataBuilder.cs | 55 ++++++++++++ .../Expressions/DeleteColumnExpression.cs | 23 +++++ .../Expressions/DeleteConstraintExpression.cs | 20 +++++ .../Expressions/DeleteDataExpression.cs | 18 ++++ .../DeleteDefaultConstraintExpression.cs | 19 +++++ .../Expressions/DeleteForeignKeyExpression.cs | 23 +++++ .../Expressions/DeleteIndexExpression.cs | 21 +++++ .../Expressions/DeleteTableExpression.cs | 15 ++++ .../ForeignKey/DeleteForeignKeyBuilder.cs | 62 ++++++++++++++ .../IDeleteForeignKeyForeignColumnSyntax.cs | 8 ++ .../IDeleteForeignKeyFromTableSyntax.cs | 7 ++ .../IDeleteForeignKeyOnTableSyntax.cs | 7 ++ .../IDeleteForeignKeyPrimaryColumnSyntax.cs | 8 ++ .../IDeleteForeignKeyToTableSyntax.cs | 7 ++ .../Syntax/Delete/IDeleteBuilder.cs | 21 ++++- .../Syntax/Delete/IDeleteDataSyntax.cs | 9 ++ .../Syntax/Delete/Index/DeleteIndexBuilder.cs | 34 ++++++++ .../Index/IDeleteIndexForTableSyntax.cs | 7 ++ .../Index/IDeleteIndexOnColumnSyntax.cs | 8 ++ .../Syntax/Delete/Table/DeleteTableBuilder.cs | 11 +++ .../Rename/Column/IRenameColumnTableSyntax.cs | 7 ++ .../Rename/Column/IRenameColumnToSyntax.cs | 7 ++ .../Rename/Column/RenameColumnBuilder.cs | 22 +++++ .../Expressions/RenameColumnExpression.cs | 16 ++++ .../Expressions/RenameTableExpression.cs | 15 ++++ .../Syntax/Rename/IRenameBuilder.cs | 10 ++- .../Migrations/Syntax/Rename/RenameBuilder.cs | 20 ++++- .../Syntax/Rename/Table/IRenameTableSyntax.cs | 7 ++ .../Syntax/Rename/Table/RenameTableBuilder.cs | 16 ++++ .../Syntax/Schema/ISchemaBuilder.cs | 7 -- .../Migrations/Syntax/Schema/SchemaBuilder.cs | 12 --- .../Expressions/UpdateDataExpression.cs | 14 +++ .../Syntax/Update/IUpdateBuilder.cs | 4 +- .../Syntax/Update/IUpdateSetSyntax.cs | 7 ++ .../Syntax/Update/IUpdateWhereSyntax.cs | 8 ++ .../Migrations/Syntax/Update/UpdateBuilder.cs | 11 ++- .../Syntax/Update/UpdateDataBuilder.cs | 47 ++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 52 +++++++++--- 49 files changed, 810 insertions(+), 49 deletions(-) create mode 100644 src/Umbraco.Core/Persistence/Migrations/Model/DeletionDataDefinition.cs rename src/Umbraco.Core/Persistence/Migrations/Syntax/{ => Alter}/Expressions/AlterDefaultConstraintExpression.cs (87%) create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs delete mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/ISchemaBuilder.cs delete mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/SchemaBuilder.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs create mode 100644 src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs b/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs index 88103e7d2d..4334bc307b 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs +++ b/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs @@ -3,7 +3,6 @@ using Umbraco.Core.Persistence.Migrations.Syntax.Create; using Umbraco.Core.Persistence.Migrations.Syntax.Delete; using Umbraco.Core.Persistence.Migrations.Syntax.Insert; using Umbraco.Core.Persistence.Migrations.Syntax.Rename; -using Umbraco.Core.Persistence.Migrations.Syntax.Schema; using Umbraco.Core.Persistence.Migrations.Syntax.Update; namespace Umbraco.Core.Persistence.Migrations @@ -52,11 +51,6 @@ namespace Umbraco.Core.Persistence.Migrations get { return new RenameBuilder(_context); } } - public ISchemaBuilder Schema - { - get { return new SchemaBuilder(_context); } - } - public IUpdateBuilder Update { get { return new UpdateBuilder(_context); } diff --git a/src/Umbraco.Core/Persistence/Migrations/Model/DeletionDataDefinition.cs b/src/Umbraco.Core/Persistence/Migrations/Model/DeletionDataDefinition.cs new file mode 100644 index 0000000000..fc57dc2d6c --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Model/DeletionDataDefinition.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Umbraco.Core.Persistence.Migrations.Model +{ + public class DeletionDataDefinition : List> + { + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/AlterDefaultConstraintExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/AlterDefaultConstraintExpression.cs rename to src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs index d50df9b0fe..a310f850b8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/AlterDefaultConstraintExpression.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions +namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions { public class AlterDefaultConstraintExpression : IMigrationExpression { diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs new file mode 100644 index 0000000000..c8d13b97cd --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs @@ -0,0 +1,22 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column +{ + public class DeleteColumnBuilder : ExpressionBuilderBase, IDeleteColumnFromTableSyntax + { + public DeleteColumnBuilder(DeleteColumnExpression expression) : base(expression) + { + } + + public void FromTable(string tableName) + { + Expression.TableName = tableName; + } + + public IDeleteColumnFromTableSyntax Column(string columnName) + { + Expression.ColumnNames.Add(columnName); + return this; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs new file mode 100644 index 0000000000..cdeb259e25 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column +{ + public interface IDeleteColumnFromTableSyntax : IFluentSyntax + { + void FromTable(string tableName); + IDeleteColumnFromTableSyntax Column(string columnName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs new file mode 100644 index 0000000000..49aa1ed0e0 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs @@ -0,0 +1,16 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint +{ + public class DeleteConstraintBuilder : ExpressionBuilderBase, IDeleteConstraintOnTableSyntax + { + public DeleteConstraintBuilder(DeleteConstraintExpression expression) : base(expression) + { + } + + public void FromTable(string tableName) + { + Expression.Constraint.TableName = tableName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs new file mode 100644 index 0000000000..bcbb886ccb --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint +{ + public interface IDeleteConstraintOnTableSyntax : IFluentSyntax + { + void FromTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs new file mode 100644 index 0000000000..c2af83ad9b --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs @@ -0,0 +1,25 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint +{ + public class DeleteDefaultConstraintBuilder : ExpressionBuilderBase, + IDeleteDefaultConstraintOnTableSyntax, + IDeleteDefaultConstraintOnColumnSyntax + { + public DeleteDefaultConstraintBuilder(DeleteDefaultConstraintExpression expression) + : base(expression) + { + } + + public IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName) + { + Expression.TableName = tableName; + return this; + } + + public void OnColumn(string columnName) + { + Expression.ColumnName = columnName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs new file mode 100644 index 0000000000..a8055d55e0 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint +{ + public interface IDeleteDefaultConstraintOnColumnSyntax : IFluentSyntax + { + void OnColumn(string columnName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs new file mode 100644 index 0000000000..95eb4675b1 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint +{ + public interface IDeleteDefaultConstraintOnTableSyntax : IFluentSyntax + { + IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs index 8013869854..a592da7102 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs @@ -1,4 +1,12 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete { public class DeleteBuilder : IDeleteBuilder { @@ -8,5 +16,80 @@ { _context = context; } + + public void Table(string tableName) + { + var expression = new DeleteTableExpression { TableName = tableName }; + _context.Expressions.Add(expression); + } + + public IDeleteColumnFromTableSyntax Column(string columnName) + { + var expression = new DeleteColumnExpression { ColumnNames = { columnName } }; + _context.Expressions.Add(expression); + return new DeleteColumnBuilder(expression); + } + + public IDeleteForeignKeyFromTableSyntax ForeignKey() + { + var expression = new DeleteForeignKeyExpression(); + _context.Expressions.Add(expression); + return new DeleteForeignKeyBuilder(expression); + } + + public IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName) + { + var expression = new DeleteForeignKeyExpression { ForeignKey = { Name = foreignKeyName } }; + _context.Expressions.Add(expression); + return new DeleteForeignKeyBuilder(expression); + } + + public IDeleteDataSyntax FromTable(string tableName) + { + var expression = new DeleteDataExpression { TableName = tableName }; + _context.Expressions.Add(expression); + return new DeleteDataBuilder(expression); + } + + public IDeleteIndexForTableSyntax Index() + { + var expression = new DeleteIndexExpression(); + _context.Expressions.Add(expression); + return new DeleteIndexBuilder(expression); + } + + public IDeleteIndexForTableSyntax Index(string indexName) + { + var expression = new DeleteIndexExpression {Index = {Name = indexName}}; + _context.Expressions.Add(expression); + return new DeleteIndexBuilder(expression); + } + + public IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName) + { + var expression = new DeleteConstraintExpression(ConstraintType.PrimaryKey) + { + Constraint = { ConstraintName = primaryKeyName } + }; + _context.Expressions.Add(expression); + return new DeleteConstraintBuilder(expression); + } + + public IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName) + { + var expression = new DeleteConstraintExpression(ConstraintType.Unique) + { + Constraint = { ConstraintName = constraintName } + }; + _context.Expressions.Add(expression); + return new DeleteConstraintBuilder(expression); + } + + public IDeleteDefaultConstraintOnTableSyntax DefaultConstraint() + { + var expression = new DeleteDefaultConstraintExpression(); + _context.Expressions.Add(expression); + return new DeleteDefaultConstraintBuilder(expression); + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs new file mode 100644 index 0000000000..3e99d7a5c4 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.ComponentModel; +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete +{ + public class DeleteDataBuilder : IDeleteDataSyntax + { + private readonly DeleteDataExpression _expression; + + public DeleteDataBuilder(DeleteDataExpression expression) + { + _expression = expression; + } + + public void IsNull(string columnName) + { + _expression.Rows.Add(new DeletionDataDefinition + { + new KeyValuePair(columnName, null) + }); + } + + public IDeleteDataSyntax Row(object dataAsAnonymousType) + { + _expression.Rows.Add(GetData(dataAsAnonymousType)); + return this; + } + + public IDeleteDataSyntax InSchema(string schemaName) + { + _expression.SchemaName = schemaName; + return this; + } + + public void AllRows() + { + _expression.IsAllRows = true; + } + + private static DeletionDataDefinition GetData(object dataAsAnonymousType) + { + var data = new DeletionDataDefinition(); + var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); + + foreach (PropertyDescriptor property in properties) + { + data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); + } + + return data; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs new file mode 100644 index 0000000000..cf11fc7119 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteColumnExpression : IMigrationExpression + { + public DeleteColumnExpression() + { + ColumnNames = new List(); + } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public ICollection ColumnNames { get; set; } + + public override string ToString() + { + //TODO Change to use sql syntax provider + return base.ToString() + TableName + " " + ColumnNames.Aggregate((a, b) => a + ", " + b); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs new file mode 100644 index 0000000000..b474a30955 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs @@ -0,0 +1,20 @@ +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteConstraintExpression : IMigrationExpression + { + public DeleteConstraintExpression(ConstraintType type) + { + Constraint = new ConstraintDefinition(type); + } + + public ConstraintDefinition Constraint { get; private set; } + + public override string ToString() + { + //TODO change to use sql syntax provider + return base.ToString() + Constraint.ConstraintName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs new file mode 100644 index 0000000000..2c368432e2 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteDataExpression : IMigrationExpression + { + private readonly List _rows = new List(); + public virtual string SchemaName { get; set; } + public string TableName { get; set; } + public virtual bool IsAllRows { get; set; } + + public List Rows + { + get { return _rows; } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs new file mode 100644 index 0000000000..55ee11ca3c --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs @@ -0,0 +1,19 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteDefaultConstraintExpression : IMigrationExpression + { + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual string ColumnName { get; set; } + + public override string ToString() + { + //TODO Change to use sql syntax provider + return base.ToString() + + string.Format("{0}.{1} {2}", + SchemaName, + TableName, + ColumnName); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs new file mode 100644 index 0000000000..ce7a1d0f76 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs @@ -0,0 +1,23 @@ +using System.Linq; +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteForeignKeyExpression : IMigrationExpression + { + public DeleteForeignKeyExpression() + { + ForeignKey = new ForeignKeyDefinition(); + } + + public virtual ForeignKeyDefinition ForeignKey { get; set; } + + public override string ToString() + { + //TODO Change to use sql syntax provider + return base.ToString() + ForeignKey.Name + " " + + ForeignKey.ForeignTable + " (" + string.Join(", ", ForeignKey.ForeignColumns.ToArray()) + ") " + + ForeignKey.PrimaryTable + " (" + string.Join(", ", ForeignKey.PrimaryColumns.ToArray()) + ")"; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs new file mode 100644 index 0000000000..26af44a000 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs @@ -0,0 +1,21 @@ +using System.Linq; +using Umbraco.Core.Persistence.Migrations.Model; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteIndexExpression : IMigrationExpression + { + public DeleteIndexExpression() + { + Index = new IndexDefinition(); + } + + public virtual IndexDefinition Index { get; set; } + + public override string ToString() + { + //TODO Change to use sql syntax provider + return base.ToString() + Index.TableName + " (" + string.Join(", ", Index.Columns.Select(x => x.Name).ToArray()) + ")"; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs new file mode 100644 index 0000000000..67f2418ec5 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs @@ -0,0 +1,15 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions +{ + public class DeleteTableExpression : IMigrationExpression + { + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + + public override string ToString() + { + //TODO implement the use of sql syntax provider + + return base.ToString() + TableName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs new file mode 100644 index 0000000000..f6c9ee6c07 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs @@ -0,0 +1,62 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public class DeleteForeignKeyBuilder : ExpressionBuilderBase, + IDeleteForeignKeyFromTableSyntax, + IDeleteForeignKeyForeignColumnSyntax, + IDeleteForeignKeyToTableSyntax, + IDeleteForeignKeyPrimaryColumnSyntax, + IDeleteForeignKeyOnTableSyntax + { + public DeleteForeignKeyBuilder(DeleteForeignKeyExpression expression) : base(expression) + { + } + + public IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName) + { + Expression.ForeignKey.ForeignTable = foreignTableName; + return this; + } + + public IDeleteForeignKeyToTableSyntax ForeignColumn(string column) + { + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns) + { + foreach (var column in columns) + { + Expression.ForeignKey.ForeignColumns.Add(column); + } + + return this; + } + + public IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table) + { + Expression.ForeignKey.PrimaryTable = table; + return this; + } + + public void PrimaryColumn(string column) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + } + + public void PrimaryColumns(params string[] columns) + { + foreach (var column in columns) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + } + } + + public void OnTable(string foreignTableName) + { + Expression.ForeignKey.ForeignTable = foreignTableName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs new file mode 100644 index 0000000000..ae2fbfb70e --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyForeignColumnSyntax : IFluentSyntax + { + IDeleteForeignKeyToTableSyntax ForeignColumn(string column); + IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs new file mode 100644 index 0000000000..aa8de0673e --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyFromTableSyntax : IFluentSyntax + { + IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs new file mode 100644 index 0000000000..91e26d38b4 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyOnTableSyntax : IFluentSyntax + { + void OnTable(string foreignTableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs new file mode 100644 index 0000000000..a2f256e644 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyPrimaryColumnSyntax : IFluentSyntax + { + void PrimaryColumn(string column); + void PrimaryColumns(params string[] columns); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs new file mode 100644 index 0000000000..46b32c6237 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyToTableSyntax : IFluentSyntax + { + IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs index 2989156022..df70d81b0a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs @@ -1,7 +1,22 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete { - public interface IDeleteBuilder + public interface IDeleteBuilder : IFluentSyntax { - + void Table(string tableName); + IDeleteColumnFromTableSyntax Column(string columnName); + IDeleteForeignKeyFromTableSyntax ForeignKey(); + IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName); + IDeleteDataSyntax FromTable(string tableName); + IDeleteIndexForTableSyntax Index(); + IDeleteIndexForTableSyntax Index(string indexName); + IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName); + IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName); + IDeleteDefaultConstraintOnTableSyntax DefaultConstraint(); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs new file mode 100644 index 0000000000..c17ba0f212 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete +{ + public interface IDeleteDataSyntax : IFluentSyntax + { + IDeleteDataSyntax Row(object dataAsAnonymousType); + void AllRows(); + void IsNull(string columnName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs new file mode 100644 index 0000000000..b754f91803 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs @@ -0,0 +1,34 @@ +using Umbraco.Core.Persistence.Migrations.Model; +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index +{ + public class DeleteIndexBuilder : ExpressionBuilderBase, IDeleteIndexForTableSyntax, IDeleteIndexOnColumnSyntax + { + public DeleteIndexBuilder(DeleteIndexExpression expression) : base(expression) + { + } + + public IndexColumnDefinition CurrentColumn { get; set; } + + public IDeleteIndexOnColumnSyntax OnTable(string tableName) + { + Expression.Index.TableName = tableName; + return this; + } + + public void OnColumn(string columnName) + { + var column = new IndexColumnDefinition { Name = columnName }; + Expression.Index.Columns.Add(column); + } + + public void OnColumns(params string[] columnNames) + { + foreach (string columnName in columnNames) + { + Expression.Index.Columns.Add(new IndexColumnDefinition { Name = columnName }); + } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs new file mode 100644 index 0000000000..c6d7a227cb --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index +{ + public interface IDeleteIndexForTableSyntax : IFluentSyntax + { + IDeleteIndexOnColumnSyntax OnTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs new file mode 100644 index 0000000000..f2f4280f23 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index +{ + public interface IDeleteIndexOnColumnSyntax : IFluentSyntax + { + void OnColumn(string columnName); + void OnColumns(params string[] columnNames); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs new file mode 100644 index 0000000000..01f94201b4 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs @@ -0,0 +1,11 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Table +{ + public class DeleteTableBuilder : ExpressionBuilderBase + { + public DeleteTableBuilder(DeleteTableExpression expression) : base(expression) + { + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs new file mode 100644 index 0000000000..5792ac8756 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column +{ + public interface IRenameColumnTableSyntax : IFluentSyntax + { + IRenameColumnToSyntax OnTable(string tableName); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs new file mode 100644 index 0000000000..10a0f5cee5 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column +{ + public interface IRenameColumnToSyntax : IFluentSyntax + { + void To(string name); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs new file mode 100644 index 0000000000..4f001a76fd --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs @@ -0,0 +1,22 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column +{ + public class RenameColumnBuilder : ExpressionBuilderBase, IRenameColumnToSyntax, IRenameColumnTableSyntax + { + public RenameColumnBuilder(RenameColumnExpression expression) : base(expression) + { + } + + public void To(string name) + { + Expression.NewName = name; + } + + public IRenameColumnToSyntax OnTable(string tableName) + { + Expression.TableName = tableName; + return this; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs new file mode 100644 index 0000000000..62edf37851 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs @@ -0,0 +1,16 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions +{ + public class RenameColumnExpression : IMigrationExpression + { + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual string OldName { get; set; } + public virtual string NewName { get; set; } + + public override string ToString() + { + //TODO Implement usage of sql syntax provider + return base.ToString() + TableName + " " + OldName + " to " + NewName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs new file mode 100644 index 0000000000..28e733f949 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs @@ -0,0 +1,15 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions +{ + public class RenameTableExpression : IMigrationExpression + { + public virtual string SchemaName { get; set; } + public virtual string OldName { get; set; } + public virtual string NewName { get; set; } + + public override string ToString() + { + //TODO Implement usage of sql syntax provider + return base.ToString() + OldName + " " + NewName; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs index 6a54c32863..7a52d2647e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs @@ -1,7 +1,11 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column; +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename { - public interface IRenameBuilder + public interface IRenameBuilder : IFluentSyntax { - + IRenameTableSyntax Table(string oldName); + IRenameColumnTableSyntax Column(string oldName); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs index 4e04f87554..3034de1215 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs @@ -1,4 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column; +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename { public class RenameBuilder : IRenameBuilder { @@ -8,5 +12,19 @@ { _context = context; } + + public IRenameTableSyntax Table(string oldName) + { + var expression = new RenameTableExpression { OldName = oldName }; + _context.Expressions.Add(expression); + return new RenameTableBuilder(expression); + } + + public IRenameColumnTableSyntax Column(string oldName) + { + var expression = new RenameColumnExpression { OldName = oldName }; + _context.Expressions.Add(expression); + return new RenameColumnBuilder(expression); + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs new file mode 100644 index 0000000000..f44fdea9da --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table +{ + public interface IRenameTableSyntax : IFluentSyntax + { + void To(string name); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs new file mode 100644 index 0000000000..c5e493fb4a --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs @@ -0,0 +1,16 @@ +using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table +{ + public class RenameTableBuilder : ExpressionBuilderBase, IRenameTableSyntax + { + public RenameTableBuilder(RenameTableExpression expression) : base(expression) + { + } + + public void To(string name) + { + Expression.NewName = name; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/ISchemaBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/ISchemaBuilder.cs deleted file mode 100644 index b22c92ed07..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/ISchemaBuilder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Schema -{ - public interface ISchemaBuilder - { - - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/SchemaBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/SchemaBuilder.cs deleted file mode 100644 index 327102d520..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Schema/SchemaBuilder.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Schema -{ - public class SchemaBuilder : ISchemaBuilder - { - private readonly IMigrationContext _context; - - public SchemaBuilder(IMigrationContext context) - { - _context = context; - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs new file mode 100644 index 0000000000..06e78f7106 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions +{ + public class UpdateDataExpression : IMigrationExpression + { + public string SchemaName { get; set; } + public string TableName { get; set; } + + public List> Set { get; set; } + public List> Where { get; set; } + public bool IsAllRows { get; set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs index fce9bfe18f..9b94af958e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs @@ -1,7 +1,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Update { - public interface IUpdateBuilder + public interface IUpdateBuilder : IFluentSyntax { - + IUpdateSetSyntax Table(string tableName); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs new file mode 100644 index 0000000000..2c1d8a1c9f --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Update +{ + public interface IUpdateSetSyntax + { + IUpdateWhereSyntax Set(object dataAsAnonymousType); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs new file mode 100644 index 0000000000..2d318a02bf --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs @@ -0,0 +1,8 @@ +namespace Umbraco.Core.Persistence.Migrations.Syntax.Update +{ + public interface IUpdateWhereSyntax + { + void Where(object dataAsAnonymousType); + void AllRows(); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs index 5866a3b8b9..9df3e26f6d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs @@ -1,4 +1,6 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update +using Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Update { public class UpdateBuilder : IUpdateBuilder { @@ -8,5 +10,12 @@ { _context = context; } + + public IUpdateSetSyntax Table(string tableName) + { + var expression = new UpdateDataExpression { TableName = tableName }; + _context.Expressions.Add(expression); + return new UpdateDataBuilder(expression, _context); + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs new file mode 100644 index 0000000000..47eff5c2a3 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +using System.ComponentModel; +using Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions; + +namespace Umbraco.Core.Persistence.Migrations.Syntax.Update +{ + public class UpdateDataBuilder : IUpdateSetSyntax, IUpdateWhereSyntax + { + private readonly UpdateDataExpression _expression; + private readonly IMigrationContext _context; + + public UpdateDataBuilder(UpdateDataExpression expression, IMigrationContext context) + { + _context = context; + _expression = expression; + } + + public IUpdateWhereSyntax Set(object dataAsAnonymousType) + { + _expression.Set = GetData(dataAsAnonymousType); + return this; + } + + public void Where(object dataAsAnonymousType) + { + _expression.Where = GetData(dataAsAnonymousType); + } + + public void AllRows() + { + _expression.IsAllRows = true; + } + + private static List> GetData(object dataAsAnonymousType) + { + var data = new List>(); + var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); + + foreach (PropertyDescriptor property in properties) + { + data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); + } + + return data; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 65e1145173..e81cef4503 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -228,6 +228,7 @@ + @@ -244,6 +245,7 @@ + @@ -279,11 +281,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -296,12 +323,21 @@ + + + + + - - + + + + + + @@ -598,15 +634,7 @@ umbraco.interfaces - - - - - - - - - +