diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/AlterBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/AlterBuilder.cs
new file mode 100644
index 0000000000..c95455dec6
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/AlterBuilder.cs
@@ -0,0 +1,28 @@
+using NPoco;
+using Umbraco.Core.Migrations.Expressions.Alter.Expressions;
+using Umbraco.Core.Migrations.Expressions.Alter.Table;
+
+namespace Umbraco.Core.Migrations.Expressions.Alter
+{
+ ///
+ /// Implements .
+ ///
+ public class AlterBuilder : IAlterBuilder
+ {
+ private readonly IMigrationContext _context;
+ private readonly DatabaseType[] _supportedDatabaseTypes;
+
+ public AlterBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
+ {
+ _context = context;
+ _supportedDatabaseTypes = supportedDatabaseTypes;
+ }
+
+ ///
+ public IAlterTableBuilder Table(string tableName)
+ {
+ var expression = new AlterTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
+ return new AlterTableBuilder(_context, _supportedDatabaseTypes, expression);
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterColumnExpression.cs
similarity index 92%
rename from src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterColumnExpression.cs
index bb9ec2f90a..04b06c46aa 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterColumnExpression.cs
@@ -1,7 +1,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Alter.Expressions
{
public class AlterColumnExpression : MigrationExpressionBase
{
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterDefaultConstraintExpression.cs
similarity index 70%
rename from src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterDefaultConstraintExpression.cs
index fb43257e05..f9ef2c377d 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterDefaultConstraintExpression.cs
@@ -1,6 +1,6 @@
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Alter.Expressions
{
public class AlterDefaultConstraintExpression : MigrationExpressionBase
{
@@ -8,8 +8,6 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
: base(context, supportedDatabaseTypes)
{ }
- public virtual string SchemaName { get; set; }
-
public virtual string TableName { get; set; }
public virtual string ColumnName { get; set; }
@@ -18,13 +16,16 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
public virtual object DefaultValue { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
//NOTE Should probably investigate if Deleting a Default Constraint is different from deleting a 'regular' constraint
return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(TableName),
- SqlSyntax.GetQuotedName(ConstraintName));
+ SqlSyntax.GetQuotedTableName(TableName),
+ SqlSyntax.GetQuotedName(ConstraintName));
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterTableExpression.cs
similarity index 67%
rename from src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterTableExpression.cs
index 73ead175b7..fa3190e72b 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Expressions/AlterTableExpression.cs
@@ -1,6 +1,6 @@
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Alter.Expressions
{
public class AlterTableExpression : MigrationExpressionBase
{
@@ -8,11 +8,13 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions
: base(context, supportedDatabaseTypes)
{ }
- public virtual string SchemaName { get; set; }
public virtual string TableName { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
return $"ALTER TABLE {TableName}";
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/IAlterBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/IAlterBuilder.cs
new file mode 100644
index 0000000000..80a519d449
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/IAlterBuilder.cs
@@ -0,0 +1,15 @@
+using Umbraco.Core.Migrations.Expressions.Alter.Table;
+
+namespace Umbraco.Core.Migrations.Expressions.Alter
+{
+ ///
+ /// Builds an Alter expression.
+ ///
+ public interface IAlterBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table to alter.
+ ///
+ IAlterTableBuilder Table(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/AlterTableBuilder.cs
similarity index 71%
rename from src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Alter/Table/AlterTableBuilder.cs
index 92444f3a25..18d3538320 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/AlterTableBuilder.cs
@@ -1,14 +1,14 @@
using System.Data;
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Alter.Expressions;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Alter.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Alter.Table
+namespace Umbraco.Core.Migrations.Expressions.Alter.Table
{
- public class AlterTableBuilder : ExpressionBuilder,
- IAlterTableColumnTypeSyntax,
- IAlterTableColumnOptionForeignKeyCascadeSyntax
+ public class AlterTableBuilder : ExpressionBuilderBase,
+ IAlterTableColumnTypeBuilder,
+ IAlterTableColumnOptionForeignKeyCascadeBuilder
{
private readonly IMigrationContext _context;
private readonly DatabaseType[] _supportedDatabaseTypes;
@@ -29,20 +29,19 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return CurrentColumn;
}
- public IAlterTableColumnOptionSyntax WithDefault(SystemMethods method)
+ public IAlterTableColumnOptionBuilder WithDefault(SystemMethods method)
{
CurrentColumn.DefaultValue = method;
return this;
}
- public IAlterTableColumnOptionSyntax WithDefaultValue(object value)
+ public IAlterTableColumnOptionBuilder WithDefaultValue(object value)
{
if (CurrentColumn.ModificationType == ModificationType.Alter)
{
var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes)
{
TableName = Expression.TableName,
- SchemaName = Expression.SchemaName,
ColumnName = CurrentColumn.Name,
DefaultValue = value
};
@@ -54,25 +53,24 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnOptionSyntax Identity()
+ public IAlterTableColumnOptionBuilder Identity()
{
CurrentColumn.IsIdentity = true;
return this;
}
- public IAlterTableColumnOptionSyntax Indexed()
+ public IAlterTableColumnOptionBuilder Indexed()
{
return Indexed(null);
}
- public IAlterTableColumnOptionSyntax Indexed(string indexName)
+ public IAlterTableColumnOptionBuilder Indexed(string indexName)
{
CurrentColumn.IsIndexed = true;
var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition
{
Name = indexName,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName
});
@@ -86,44 +84,43 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnOptionSyntax PrimaryKey()
+ public IAlterTableColumnOptionBuilder PrimaryKey()
{
CurrentColumn.IsPrimaryKey = true;
return this;
}
- public IAlterTableColumnOptionSyntax PrimaryKey(string primaryKeyName)
+ public IAlterTableColumnOptionBuilder PrimaryKey(string primaryKeyName)
{
CurrentColumn.IsPrimaryKey = true;
CurrentColumn.PrimaryKeyName = primaryKeyName;
return this;
}
- public IAlterTableColumnOptionSyntax Nullable()
+ public IAlterTableColumnOptionBuilder Nullable()
{
CurrentColumn.IsNullable = true;
return this;
}
- public IAlterTableColumnOptionSyntax NotNullable()
+ public IAlterTableColumnOptionBuilder NotNullable()
{
CurrentColumn.IsNullable = false;
return this;
}
- public IAlterTableColumnOptionSyntax Unique()
+ public IAlterTableColumnOptionBuilder Unique()
{
return Unique(null);
}
- public IAlterTableColumnOptionSyntax Unique(string indexName)
+ public IAlterTableColumnOptionBuilder Unique(string indexName)
{
CurrentColumn.IsUnique = true;
var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition
{
Name = indexName,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName,
IsUnique = true
});
@@ -138,18 +135,18 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName)
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string primaryTableName, string primaryColumnName)
{
return ForeignKey(null, null, primaryTableName, primaryColumnName);
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName,
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string foreignKeyName, string primaryTableName,
string primaryColumnName)
{
return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName);
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema,
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string foreignKeyName, string primaryTableSchema,
string primaryTableName, string primaryColumnName)
{
CurrentColumn.IsForeignKey = true;
@@ -159,8 +156,7 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
Name = foreignKeyName,
PrimaryTable = primaryTableName,
PrimaryTableSchema = primaryTableSchema,
- ForeignTable = Expression.TableName,
- ForeignTableSchema = Expression.SchemaName
+ ForeignTable = Expression.TableName
});
fk.ForeignKey.PrimaryColumns.Add(primaryColumnName);
@@ -171,31 +167,30 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey()
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ForeignKey()
{
CurrentColumn.IsForeignKey = true;
return this;
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName)
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignTableName, string foreignColumnName)
{
return ReferencedBy(null, null, foreignTableName, foreignColumnName);
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName,
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignKeyName, string foreignTableName,
string foreignColumnName)
{
return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName);
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema,
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignKeyName, string foreignTableSchema,
string foreignTableName, string foreignColumnName)
{
var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition
{
Name = foreignKeyName,
PrimaryTable = Expression.TableName,
- PrimaryTableSchema = Expression.SchemaName,
ForeignTable = foreignTableName,
ForeignTableSchema = foreignTableSchema
});
@@ -208,13 +203,12 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnTypeSyntax AddColumn(string name)
+ public IAlterTableColumnTypeBuilder AddColumn(string name)
{
var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Create };
var createColumn = new CreateColumnExpression(_context, _supportedDatabaseTypes)
{
Column = column,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName
};
@@ -224,13 +218,12 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnTypeSyntax AlterColumn(string name)
+ public IAlterTableColumnTypeBuilder AlterColumn(string name)
{
var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Alter };
var alterColumn = new AlterColumnExpression(_context, _supportedDatabaseTypes)
{
Column = column,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName
};
@@ -240,19 +233,19 @@ namespace Umbraco.Core.Migrations.Syntax.Alter.Table
return this;
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule)
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder OnDelete(Rule rule)
{
CurrentForeignKey.OnDelete = rule;
return this;
}
- public IAlterTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule)
+ public IAlterTableColumnOptionForeignKeyCascadeBuilder OnUpdate(Rule rule)
{
CurrentForeignKey.OnUpdate = rule;
return this;
}
- public IAlterTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule)
+ public IAlterTableColumnOptionBuilder OnDeleteOrUpdate(Rule rule)
{
OnDelete(rule);
OnUpdate(rule);
diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableBuilder.cs
new file mode 100644
index 0000000000..04537e48db
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableBuilder.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Core.Migrations.Expressions.Alter.Table
+{
+ ///
+ /// Builds an Alter Table expression.
+ ///
+ public interface IAlterTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies a column to add.
+ ///
+ IAlterTableColumnTypeBuilder AddColumn(string name);
+
+ ///
+ /// Specifies a column to alter.
+ ///
+ IAlterTableColumnTypeBuilder AlterColumn(string name);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionBuilder.cs
new file mode 100644
index 0000000000..c1ce8f7e72
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionBuilder.cs
@@ -0,0 +1,7 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Alter.Table
+{
+ public interface IAlterTableColumnOptionBuilder : IColumnOptionBuilder, IAlterTableBuilder
+ { }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeBuilder.cs
new file mode 100644
index 0000000000..8099deaa56
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeBuilder.cs
@@ -0,0 +1,9 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Alter.Table
+{
+ public interface IAlterTableColumnOptionForeignKeyCascadeBuilder :
+ IAlterTableColumnOptionBuilder,
+ IForeignKeyCascadeBuilder
+ { }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnTypeBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnTypeBuilder.cs
new file mode 100644
index 0000000000..61fdec4ca0
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Alter/Table/IAlterTableColumnTypeBuilder.cs
@@ -0,0 +1,7 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Alter.Table
+{
+ public interface IAlterTableColumnTypeBuilder : IColumnTypeBuilder
+ { }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateColumnExpression.cs
similarity index 72%
rename from src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateColumnExpression.cs
index 19e9f03f43..2883dbe669 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateColumnExpression.cs
@@ -1,7 +1,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Common.Expressions
{
public class CreateColumnExpression : MigrationExpressionBase
{
@@ -11,11 +11,13 @@ namespace Umbraco.Core.Migrations.Syntax.Expressions
Column = new ColumnDefinition { ModificationType = ModificationType.Create };
}
- public string SchemaName { get; set; }
public string TableName { get; set; }
public ColumnDefinition Column { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
if (IsExpressionSupported() == false)
return string.Empty;
@@ -24,8 +26,8 @@ namespace Umbraco.Core.Migrations.Syntax.Expressions
Column.TableName = TableName;
return string.Format(SqlSyntax.AddColumn,
- SqlSyntax.GetQuotedTableName(Column.TableName),
- SqlSyntax.Format(Column));
+ SqlSyntax.GetQuotedTableName(Column.TableName),
+ SqlSyntax.Format(Column));
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateForeignKeyExpression.cs
similarity index 81%
rename from src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateForeignKeyExpression.cs
index 29337520a9..3821f44bae 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateForeignKeyExpression.cs
@@ -1,7 +1,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Common.Expressions
{
public class CreateForeignKeyExpression : MigrationExpressionBase
{
@@ -19,7 +19,10 @@ namespace Umbraco.Core.Migrations.Syntax.Expressions
public ForeignKeyDefinition ForeignKey { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
if (IsExpressionSupported() == false)
return string.Empty;
diff --git a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateIndexExpression.cs
similarity index 79%
rename from src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateIndexExpression.cs
index b14b627d44..4471632c2f 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/Expressions/CreateIndexExpression.cs
@@ -1,7 +1,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Common.Expressions
{
public class CreateIndexExpression : MigrationExpressionBase
{
@@ -20,7 +20,10 @@ namespace Umbraco.Core.Migrations.Syntax.Expressions
public IndexDefinition Index { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
return SqlSyntax.Format(Index);
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Common/IColumnOptionBuilder.cs
similarity index 84%
rename from src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs
rename to src/Umbraco.Core/Migrations/Expressions/Common/IColumnOptionBuilder.cs
index 72ff552cf0..06e00211a0 100644
--- a/src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/IColumnOptionBuilder.cs
@@ -1,10 +1,10 @@
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax
+namespace Umbraco.Core.Migrations.Expressions.Common
{
- public interface IColumnOptionSyntax : IFluentSyntax
- where TNext : IFluentSyntax
- where TNextFk : IFluentSyntax
+ public interface IColumnOptionBuilder : IFluentBuilder
+ where TNext : IFluentBuilder
+ where TNextFk : IFluentBuilder
{
TNext WithDefault(SystemMethods method);
TNext WithDefaultValue(object value);
diff --git a/src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Common/IColumnTypeBuilder.cs
similarity index 76%
rename from src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs
rename to src/Umbraco.Core/Migrations/Expressions/Common/IColumnTypeBuilder.cs
index a1bb09de8e..431b6c34c4 100644
--- a/src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/IColumnTypeBuilder.cs
@@ -1,7 +1,10 @@
-namespace Umbraco.Core.Migrations.Syntax
+namespace Umbraco.Core.Migrations.Expressions.Common
{
- public interface IColumnTypeSyntax : IFluentSyntax
- where TNext : IFluentSyntax
+ ///
+ /// Builds a column type expression.
+ ///
+ public interface IColumnTypeBuilder : IFluentBuilder
+ where TNext : IFluentBuilder
{
TNext AsAnsiString();
TNext AsAnsiString(int size);
diff --git a/src/Umbraco.Core/Migrations/Expressions/Common/IForeignKeyCascadeBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Common/IForeignKeyCascadeBuilder.cs
new file mode 100644
index 0000000000..746dea64d4
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Common/IForeignKeyCascadeBuilder.cs
@@ -0,0 +1,24 @@
+using System.Data;
+
+namespace Umbraco.Core.Migrations.Expressions.Common
+{
+ public interface IForeignKeyCascadeBuilder : IFluentBuilder
+ where TNext : IFluentBuilder
+ where TNextFk : IFluentBuilder
+ {
+ ///
+ /// Specifies a rule on deletes.
+ ///
+ TNextFk OnDelete(Rule rule);
+
+ ///
+ /// Specifies a rule on updates.
+ ///
+ TNextFk OnUpdate(Rule rule);
+
+ ///
+ /// Specifies a rule on deletes and updates.
+ ///
+ TNext OnDeleteOrUpdate(Rule rule);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Column/CreateColumnBuilder.cs
similarity index 93%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Column/CreateColumnBuilder.cs
index ecefed5f49..239f35f75c 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Column/CreateColumnBuilder.cs
@@ -1,11 +1,11 @@
using System.Data;
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Column
+namespace Umbraco.Core.Migrations.Expressions.Create.Column
{
- public class CreateColumnBuilder : ExpressionBuilder,
+ public class CreateColumnBuilder : ExpressionBuilderBase,
ICreateColumnOnTableSyntax,
ICreateColumnTypeSyntax,
ICreateColumnOptionForeignKeyCascadeSyntax
@@ -62,7 +62,6 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Column
var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition
{
Name = indexName,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName
});
@@ -113,7 +112,6 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Column
var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition
{
Name = indexName,
- SchemaName = Expression.SchemaName,
TableName = Expression.TableName,
IsUnique = true
});
@@ -149,8 +147,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Column
Name = foreignKeyName,
PrimaryTable = primaryTableName,
PrimaryTableSchema = primaryTableSchema,
- ForeignTable = Expression.TableName,
- ForeignTableSchema = Expression.SchemaName
+ ForeignTable = Expression.TableName
});
fk.ForeignKey.PrimaryColumns.Add(primaryColumnName);
@@ -185,7 +182,6 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Column
{
Name = foreignKeyName,
PrimaryTable = Expression.TableName,
- PrimaryTableSchema = Expression.SchemaName,
ForeignTable = foreignTableName,
ForeignTableSchema = foreignTableSchema
});
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOnTableSyntax.cs
new file mode 100644
index 0000000000..819485b40f
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOnTableSyntax.cs
@@ -0,0 +1,9 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Column
+{
+ public interface ICreateColumnOnTableSyntax : IColumnTypeBuilder
+ {
+ ICreateColumnTypeSyntax OnTable(string name);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs
new file mode 100644
index 0000000000..89381b16a2
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs
@@ -0,0 +1,10 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Column
+{
+ public interface ICreateColumnOptionForeignKeyCascadeSyntax : ICreateColumnOptionSyntax,
+ IForeignKeyCascadeBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionSyntax.cs
new file mode 100644
index 0000000000..8d0d5c8239
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnOptionSyntax.cs
@@ -0,0 +1,9 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Column
+{
+ public interface ICreateColumnOptionSyntax : IColumnOptionBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnTypeSyntax.cs
new file mode 100644
index 0000000000..8c2f34ab24
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Column/ICreateColumnTypeSyntax.cs
@@ -0,0 +1,9 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Column
+{
+ public interface ICreateColumnTypeSyntax : IColumnTypeBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/CreateConstraintBuilder.cs
similarity index 78%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Constraint/CreateConstraintBuilder.cs
index 73ce66f4bc..6dfa1b994c 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/CreateConstraintBuilder.cs
@@ -1,16 +1,16 @@
-using Umbraco.Core.Migrations.Syntax.Create.Expressions;
+using Umbraco.Core.Migrations.Expressions.Create.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Constraint
+namespace Umbraco.Core.Migrations.Expressions.Create.Constraint
{
public class CreateConstraintBuilder : ExpressionBuilderBase,
- ICreateConstraintOnTableSyntax,
- ICreateConstraintColumnsSyntax
+ ICreateConstraintOnTableBuilder,
+ ICreateConstraintColumnsBuilder
{
public CreateConstraintBuilder(CreateConstraintExpression expression) : base(expression)
{
}
- public ICreateConstraintColumnsSyntax OnTable(string tableName)
+ public ICreateConstraintColumnsBuilder OnTable(string tableName)
{
Expression.Constraint.TableName = tableName;
return this;
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintColumnsBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintColumnsBuilder.cs
new file mode 100644
index 0000000000..f7e6f10652
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintColumnsBuilder.cs
@@ -0,0 +1,8 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Constraint
+{
+ public interface ICreateConstraintColumnsBuilder : IFluentBuilder
+ {
+ void Column(string columnName);
+ void Columns(string[] columnNames);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintOnTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintOnTableBuilder.cs
new file mode 100644
index 0000000000..b8385b7332
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Constraint/ICreateConstraintOnTableBuilder.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Constraint
+{
+ public interface ICreateConstraintOnTableBuilder : IFluentBuilder
+ {
+ ICreateConstraintColumnsBuilder OnTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/CreateBuilder.cs
similarity index 63%
rename from src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/CreateBuilder.cs
index f7fa947898..4ef90faa99 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/CreateBuilder.cs
@@ -1,18 +1,21 @@
using System;
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Create.Column;
-using Umbraco.Core.Migrations.Syntax.Create.Constraint;
-using Umbraco.Core.Migrations.Syntax.Create.Expressions;
-using Umbraco.Core.Migrations.Syntax.Create.ForeignKey;
-using Umbraco.Core.Migrations.Syntax.Create.Index;
-using Umbraco.Core.Migrations.Syntax.Create.Table;
-using Umbraco.Core.Migrations.Syntax.Execute.Expressions;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
+using Umbraco.Core.Migrations.Expressions.Create.Column;
+using Umbraco.Core.Migrations.Expressions.Create.Constraint;
+using Umbraco.Core.Migrations.Expressions.Create.Expressions;
+using Umbraco.Core.Migrations.Expressions.Create.ForeignKey;
+using Umbraco.Core.Migrations.Expressions.Create.Index;
+using Umbraco.Core.Migrations.Expressions.Create.Table;
+using Umbraco.Core.Migrations.Expressions.Execute.Expressions;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
using Umbraco.Core.Persistence.SqlSyntax;
-namespace Umbraco.Core.Migrations.Syntax.Create
+namespace Umbraco.Core.Migrations.Expressions.Create
{
+ ///
+ /// Implements .
+ ///
public class CreateBuilder : ICreateBuilder
{
private readonly IMigrationContext _context;
@@ -26,126 +29,129 @@ namespace Umbraco.Core.Migrations.Syntax.Create
private ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax;
- public void Table(bool withoutKeysAndIndexes = false)
+ ///
+ public void Table(bool withoutKeysAndIndexes = false)
{
- var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
+ var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(TDto), SqlSyntax);
- AddSql(SqlSyntax.Format(tableDefinition));
+ ExecuteSql(SqlSyntax.Format(tableDefinition));
if (withoutKeysAndIndexes)
return;
- AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
+ ExecuteSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys))
- AddSql(sql);
+ ExecuteSql(sql);
foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes))
- AddSql(sql);
+ ExecuteSql(sql);
}
- public void KeysAndIndexes()
+ ///
+ public void KeysAndIndexes()
{
- var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax);
+ var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(TDto), SqlSyntax);
- AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
+ ExecuteSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes))
- AddSql(sql);
+ ExecuteSql(sql);
foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys))
- AddSql(sql);
+ ExecuteSql(sql);
}
+ ///
public void KeysAndIndexes(Type typeOfDto)
{
var tableDefinition = DefinitionFactory.GetTableDefinition(typeOfDto, SqlSyntax);
- AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
+ ExecuteSql(SqlSyntax.FormatPrimaryKey(tableDefinition));
foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes))
- AddSql(sql);
+ ExecuteSql(sql);
foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys))
- AddSql(sql);
+ ExecuteSql(sql);
}
- private void AddSql(string sql)
+ private void ExecuteSql(string sql)
{
var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) { SqlStatement = sql };
- _context.Expressions.Add(expression);
+ expression.Execute();
}
- public ICreateTableWithColumnSyntax Table(string tableName)
+ ///
+ public ICreateTableWithColumnBuilder Table(string tableName)
{
var expression = new CreateTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- _context.Expressions.Add(expression);
return new CreateTableBuilder(_context, _supportedDatabaseTypes, expression);
}
+ ///
public ICreateColumnOnTableSyntax Column(string columnName)
{
var expression = new CreateColumnExpression(_context, _supportedDatabaseTypes) { Column = { Name = columnName } };
- _context.Expressions.Add(expression);
return new CreateColumnBuilder(_context, _supportedDatabaseTypes, expression);
}
- public ICreateForeignKeyFromTableSyntax ForeignKey()
+ ///
+ public ICreateForeignKeyFromTableBuilder ForeignKey()
{
var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes);
- _context.Expressions.Add(expression);
return new CreateForeignKeyBuilder(expression);
}
- public ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName)
+ ///
+ public ICreateForeignKeyFromTableBuilder ForeignKey(string foreignKeyName)
{
var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes) { ForeignKey = { Name = foreignKeyName } };
- _context.Expressions.Add(expression);
return new CreateForeignKeyBuilder(expression);
}
- public ICreateIndexForTableSyntax Index()
+ ///
+ public ICreateIndexForTableBuilder Index()
{
var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes);
- _context.Expressions.Add(expression);
return new CreateIndexBuilder(expression);
}
- public ICreateIndexForTableSyntax Index(string indexName)
+ ///
+ public ICreateIndexForTableBuilder Index(string indexName)
{
var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } };
- _context.Expressions.Add(expression);
return new CreateIndexBuilder(expression);
}
- public ICreateConstraintOnTableSyntax PrimaryKey()
+ ///
+ public ICreateConstraintOnTableBuilder PrimaryKey()
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey);
- _context.Expressions.Add(expression);
return new CreateConstraintBuilder(expression);
}
- public ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName)
+ ///
+ public ICreateConstraintOnTableBuilder PrimaryKey(string primaryKeyName)
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey);
expression.Constraint.ConstraintName = primaryKeyName;
- _context.Expressions.Add(expression);
return new CreateConstraintBuilder(expression);
}
- public ICreateConstraintOnTableSyntax UniqueConstraint()
+ ///
+ public ICreateConstraintOnTableBuilder UniqueConstraint()
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique);
- _context.Expressions.Add(expression);
return new CreateConstraintBuilder(expression);
}
- public ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName)
+ ///
+ public ICreateConstraintOnTableBuilder UniqueConstraint(string constraintName)
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique);
expression.Constraint.ConstraintName = constraintName;
- _context.Expressions.Add(expression);
return new CreateConstraintBuilder(expression);
}
- public ICreateConstraintOnTableSyntax Constraint(string constraintName)
+ ///
+ public ICreateConstraintOnTableBuilder Constraint(string constraintName)
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.NonUnique);
expression.Constraint.ConstraintName = constraintName;
- _context.Expressions.Add(expression);
return new CreateConstraintBuilder(expression);
}
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateConstraintExpression.cs
similarity index 95%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateConstraintExpression.cs
index fb8f0233d0..c7dd54a815 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateConstraintExpression.cs
@@ -2,7 +2,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Create.Expressions
{
public class CreateConstraintExpression : MigrationExpressionBase
{
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateTableExpression.cs
similarity index 92%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateTableExpression.cs
index 2889ada3d2..7bc669632a 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Expressions/CreateTableExpression.cs
@@ -2,7 +2,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Create.Expressions
{
public class CreateTableExpression : MigrationExpressionBase
{
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/CreateForeignKeyBuilder.cs
similarity index 67%
rename from src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/CreateForeignKeyBuilder.cs
index 07f9b8ec34..d7e3bc62e4 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/CreateForeignKeyBuilder.cs
@@ -1,64 +1,64 @@
using System.Data;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
{
public class CreateForeignKeyBuilder : ExpressionBuilderBase,
- ICreateForeignKeyFromTableSyntax,
- ICreateForeignKeyForeignColumnSyntax,
- ICreateForeignKeyToTableSyntax,
- ICreateForeignKeyPrimaryColumnSyntax,
- ICreateForeignKeyCascadeSyntax
+ ICreateForeignKeyFromTableBuilder,
+ ICreateForeignKeyForeignColumnBuilder,
+ ICreateForeignKeyToTableBuilder,
+ ICreateForeignKeyPrimaryColumnBuilder,
+ ICreateForeignKeyCascadeBuilder
{
public CreateForeignKeyBuilder(CreateForeignKeyExpression expression) : base(expression)
{
}
- public ICreateForeignKeyForeignColumnSyntax FromTable(string table)
+ public ICreateForeignKeyForeignColumnBuilder FromTable(string table)
{
Expression.ForeignKey.ForeignTable = table;
return this;
}
- public ICreateForeignKeyToTableSyntax ForeignColumn(string column)
+ public ICreateForeignKeyToTableBuilder ForeignColumn(string column)
{
Expression.ForeignKey.ForeignColumns.Add(column);
return this;
}
- public ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns)
+ public ICreateForeignKeyToTableBuilder ForeignColumns(params string[] columns)
{
foreach (var column in columns)
Expression.ForeignKey.ForeignColumns.Add(column);
return this;
}
- public ICreateForeignKeyPrimaryColumnSyntax ToTable(string table)
+ public ICreateForeignKeyPrimaryColumnBuilder ToTable(string table)
{
Expression.ForeignKey.PrimaryTable = table;
return this;
}
- public ICreateForeignKeyCascadeSyntax PrimaryColumn(string column)
+ public ICreateForeignKeyCascadeBuilder PrimaryColumn(string column)
{
Expression.ForeignKey.PrimaryColumns.Add(column);
return this;
}
- public ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns)
+ public ICreateForeignKeyCascadeBuilder PrimaryColumns(params string[] columns)
{
foreach (var column in columns)
Expression.ForeignKey.PrimaryColumns.Add(column);
return this;
}
- public ICreateForeignKeyCascadeSyntax OnDelete(Rule rule)
+ public ICreateForeignKeyCascadeBuilder OnDelete(Rule rule)
{
Expression.ForeignKey.OnDelete = rule;
return this;
}
- public ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule)
+ public ICreateForeignKeyCascadeBuilder OnUpdate(Rule rule)
{
Expression.ForeignKey.OnUpdate = rule;
return this;
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyCascadeBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyCascadeBuilder.cs
new file mode 100644
index 0000000000..ef5a2980ee
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyCascadeBuilder.cs
@@ -0,0 +1,11 @@
+using System.Data;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
+{
+ public interface ICreateForeignKeyCascadeBuilder : IFluentBuilder
+ {
+ ICreateForeignKeyCascadeBuilder OnDelete(Rule rule);
+ ICreateForeignKeyCascadeBuilder OnUpdate(Rule rule);
+ void OnDeleteOrUpdate(Rule rule);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyForeignColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyForeignColumnBuilder.cs
new file mode 100644
index 0000000000..2abebc513e
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyForeignColumnBuilder.cs
@@ -0,0 +1,8 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
+{
+ public interface ICreateForeignKeyForeignColumnBuilder : IFluentBuilder
+ {
+ ICreateForeignKeyToTableBuilder ForeignColumn(string column);
+ ICreateForeignKeyToTableBuilder ForeignColumns(params string[] columns);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyFromTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyFromTableBuilder.cs
new file mode 100644
index 0000000000..bb6ea987b5
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyFromTableBuilder.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
+{
+ public interface ICreateForeignKeyFromTableBuilder : IFluentBuilder
+ {
+ ICreateForeignKeyForeignColumnBuilder FromTable(string table);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyPrimaryColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyPrimaryColumnBuilder.cs
new file mode 100644
index 0000000000..39ad38cd7d
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyPrimaryColumnBuilder.cs
@@ -0,0 +1,8 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
+{
+ public interface ICreateForeignKeyPrimaryColumnBuilder : IFluentBuilder
+ {
+ ICreateForeignKeyCascadeBuilder PrimaryColumn(string column);
+ ICreateForeignKeyCascadeBuilder PrimaryColumns(params string[] columns);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyToTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyToTableBuilder.cs
new file mode 100644
index 0000000000..0c415cd0ac
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ForeignKey/ICreateForeignKeyToTableBuilder.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.ForeignKey
+{
+ public interface ICreateForeignKeyToTableBuilder : IFluentBuilder
+ {
+ ICreateForeignKeyPrimaryColumnBuilder ToTable(string table);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/ICreateBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/ICreateBuilder.cs
new file mode 100644
index 0000000000..6166cb6cda
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/ICreateBuilder.cs
@@ -0,0 +1,85 @@
+using System;
+using Umbraco.Core.Migrations.Expressions.Create.Column;
+using Umbraco.Core.Migrations.Expressions.Create.Constraint;
+using Umbraco.Core.Migrations.Expressions.Create.ForeignKey;
+using Umbraco.Core.Migrations.Expressions.Create.Index;
+using Umbraco.Core.Migrations.Expressions.Create.Table;
+
+namespace Umbraco.Core.Migrations.Expressions.Create
+{
+ ///
+ /// Builds a Create expression.
+ ///
+ public interface ICreateBuilder : IFluentBuilder
+ {
+ ///
+ /// Builds a Create Table expresion, and executes.
+ ///
+ void Table(bool withoutKeysAndIndexes = false);
+
+ ///
+ /// Builds a Create Keys and Indexes expresion, and executes.
+ ///
+ void KeysAndIndexes();
+
+ ///
+ /// Builds a Create Keys and Indexes expresion, and executes.
+ ///
+ void KeysAndIndexes(Type typeOfDto);
+
+ ///
+ /// Builds a Create Table expression.
+ ///
+ ICreateTableWithColumnBuilder Table(string tableName);
+
+ ///
+ /// Builds a Create Column expression.
+ ///
+ ICreateColumnOnTableSyntax Column(string columnName);
+
+ ///
+ /// Builds a Create Foreign Key expression.
+ ///
+ ICreateForeignKeyFromTableBuilder ForeignKey();
+
+ ///
+ /// Builds a Create Foreign Key expression.
+ ///
+ ICreateForeignKeyFromTableBuilder ForeignKey(string foreignKeyName);
+
+ ///
+ /// Builds a Create Index expression.
+ ///
+ ICreateIndexForTableBuilder Index();
+
+ ///
+ /// Builds a Create Index expression.
+ ///
+ ICreateIndexForTableBuilder Index(string indexName);
+
+ ///
+ /// Builds a Create Primary Key expression.
+ ///
+ ICreateConstraintOnTableBuilder PrimaryKey();
+
+ ///
+ /// Builds a Create Primary Key expression.
+ ///
+ ICreateConstraintOnTableBuilder PrimaryKey(string primaryKeyName);
+
+ ///
+ /// Builds a Create Unique Constraint expression.
+ ///
+ ICreateConstraintOnTableBuilder UniqueConstraint();
+
+ ///
+ /// Builds a Create Unique Constraint expression.
+ ///
+ ICreateConstraintOnTableBuilder UniqueConstraint(string constraintName);
+
+ ///
+ /// Builds a Create Constraint expression.
+ ///
+ ICreateConstraintOnTableBuilder Constraint(string constraintName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Index/CreateIndexBuilder.cs
similarity index 68%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Index/CreateIndexBuilder.cs
index 34c857d798..4b5cac634d 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Index/CreateIndexBuilder.cs
@@ -1,14 +1,14 @@
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
using Umbraco.Core.Persistence.DatabaseAnnotations;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Index
+namespace Umbraco.Core.Migrations.Expressions.Create.Index
{
public class CreateIndexBuilder : ExpressionBuilderBase,
- ICreateIndexForTableSyntax,
- ICreateIndexOnColumnSyntax,
- ICreateIndexColumnOptionsSyntax,
- ICreateIndexOptionsSyntax
+ ICreateIndexForTableBuilder,
+ ICreateIndexOnColumnBuilder,
+ ICreateIndexColumnOptionsBuilder,
+ ICreateIndexOptionsBuilder
{
public CreateIndexBuilder(CreateIndexExpression expression) : base(expression)
{
@@ -16,37 +16,37 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Index
public IndexColumnDefinition CurrentColumn { get; set; }
- public ICreateIndexOnColumnSyntax OnTable(string tableName)
+ public ICreateIndexOnColumnBuilder OnTable(string tableName)
{
Expression.Index.TableName = tableName;
return this;
}
- public ICreateIndexColumnOptionsSyntax OnColumn(string columnName)
+ public ICreateIndexColumnOptionsBuilder OnColumn(string columnName)
{
CurrentColumn = new IndexColumnDefinition { Name = columnName };
Expression.Index.Columns.Add(CurrentColumn);
return this;
}
- public ICreateIndexOptionsSyntax WithOptions()
+ public ICreateIndexOptionsBuilder WithOptions()
{
return this;
}
- public ICreateIndexOnColumnSyntax Ascending()
+ public ICreateIndexOnColumnBuilder Ascending()
{
CurrentColumn.Direction = Direction.Ascending;
return this;
}
- public ICreateIndexOnColumnSyntax Descending()
+ public ICreateIndexOnColumnBuilder Descending()
{
CurrentColumn.Direction = Direction.Descending;
return this;
}
- ICreateIndexOnColumnSyntax ICreateIndexColumnOptionsSyntax.Unique()
+ ICreateIndexOnColumnBuilder ICreateIndexColumnOptionsBuilder.Unique()
{
Expression.Index.IsUnique = true;
//if it is Unique then it must be unique nonclustered and set the other flags
@@ -55,7 +55,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Index
return this;
}
- public ICreateIndexOnColumnSyntax NonClustered()
+ public ICreateIndexOnColumnBuilder NonClustered()
{
Expression.Index.IndexType = IndexTypes.NonClustered;
Expression.Index.IsClustered = false;
@@ -64,7 +64,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Index
return this;
}
- public ICreateIndexOnColumnSyntax Clustered()
+ public ICreateIndexOnColumnBuilder Clustered()
{
Expression.Index.IndexType = IndexTypes.Clustered;
Expression.Index.IsClustered = true;
@@ -75,7 +75,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Index
return this;
}
- ICreateIndexOnColumnSyntax ICreateIndexOptionsSyntax.Unique()
+ ICreateIndexOnColumnBuilder ICreateIndexOptionsBuilder.Unique()
{
Expression.Index.IndexType = IndexTypes.UniqueNonClustered;
Expression.Index.IsUnique = true;
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexColumnOptionsBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexColumnOptionsBuilder.cs
new file mode 100644
index 0000000000..fbf873236d
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexColumnOptionsBuilder.cs
@@ -0,0 +1,9 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Index
+{
+ public interface ICreateIndexColumnOptionsBuilder : IFluentBuilder
+ {
+ ICreateIndexOnColumnBuilder Ascending();
+ ICreateIndexOnColumnBuilder Descending();
+ ICreateIndexOnColumnBuilder Unique();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexForTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexForTableBuilder.cs
new file mode 100644
index 0000000000..f22cedab16
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexForTableBuilder.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Index
+{
+ public interface ICreateIndexForTableBuilder : IFluentBuilder
+ {
+ ICreateIndexOnColumnBuilder OnTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOnColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOnColumnBuilder.cs
new file mode 100644
index 0000000000..3fee162b4e
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOnColumnBuilder.cs
@@ -0,0 +1,8 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Index
+{
+ public interface ICreateIndexOnColumnBuilder : IFluentBuilder
+ {
+ ICreateIndexColumnOptionsBuilder OnColumn(string columnName);
+ ICreateIndexOptionsBuilder WithOptions();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOptionsBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOptionsBuilder.cs
new file mode 100644
index 0000000000..d3b9c51cd7
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Index/ICreateIndexOptionsBuilder.cs
@@ -0,0 +1,9 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Index
+{
+ public interface ICreateIndexOptionsBuilder : IFluentBuilder
+ {
+ ICreateIndexOnColumnBuilder Unique();
+ ICreateIndexOnColumnBuilder NonClustered();
+ ICreateIndexOnColumnBuilder Clustered();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Table/CreateTableBuilder.cs
similarity index 78%
rename from src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Create/Table/CreateTableBuilder.cs
index 37475f59e6..8f73ed820a 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Table/CreateTableBuilder.cs
@@ -1,16 +1,16 @@
using System.Data;
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Create.Expressions;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
+using Umbraco.Core.Migrations.Expressions.Create.Expressions;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Create.Table
+namespace Umbraco.Core.Migrations.Expressions.Create.Table
{
- public class CreateTableBuilder : ExpressionBuilder,
- ICreateTableWithColumnSyntax,
+ public class CreateTableBuilder : ExpressionBuilderBase,
+ ICreateTableWithColumnBuilder,
ICreateTableColumnAsTypeSyntax,
- ICreateTableColumnOptionForeignKeyCascadeSyntax
+ ICreateTableColumnOptionForeignKeyCascadeBuilder
{
private readonly IMigrationContext _context;
private readonly DatabaseType[] _supportedDatabaseTypes;
@@ -39,30 +39,30 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionSyntax WithDefault(SystemMethods method)
+ public ICreateTableColumnOptionBuilder WithDefault(SystemMethods method)
{
CurrentColumn.DefaultValue = method;
return this;
}
- public ICreateTableColumnOptionSyntax WithDefaultValue(object value)
+ public ICreateTableColumnOptionBuilder WithDefaultValue(object value)
{
CurrentColumn.DefaultValue = value;
return this;
}
- public ICreateTableColumnOptionSyntax Identity()
+ public ICreateTableColumnOptionBuilder Identity()
{
CurrentColumn.IsIdentity = true;
return this;
}
- public ICreateTableColumnOptionSyntax Indexed()
+ public ICreateTableColumnOptionBuilder Indexed()
{
return Indexed(null);
}
- public ICreateTableColumnOptionSyntax Indexed(string indexName)
+ public ICreateTableColumnOptionBuilder Indexed(string indexName)
{
CurrentColumn.IsIndexed = true;
@@ -83,7 +83,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionSyntax PrimaryKey()
+ public ICreateTableColumnOptionBuilder PrimaryKey()
{
CurrentColumn.IsPrimaryKey = true;
@@ -94,7 +94,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
// for this, but I don't see another way around. MySQL doesn't support checking for a constraint before creating
// it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use
// it. For now, this is what I'm doing
- if (Expression.CurrentDatabaseType.IsMySql() == false)
+ if (Expression.DatabaseType.IsMySql() == false)
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey)
{
@@ -110,7 +110,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionSyntax PrimaryKey(string primaryKeyName)
+ public ICreateTableColumnOptionBuilder PrimaryKey(string primaryKeyName)
{
CurrentColumn.IsPrimaryKey = true;
CurrentColumn.PrimaryKeyName = primaryKeyName;
@@ -123,7 +123,7 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
// it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use
// it. For now, this is what I'm doing
- if (Expression.CurrentDatabaseType.IsMySql() == false)
+ if (Expression.DatabaseType.IsMySql() == false)
{
var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey)
{
@@ -140,24 +140,24 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionSyntax Nullable()
+ public ICreateTableColumnOptionBuilder Nullable()
{
CurrentColumn.IsNullable = true;
return this;
}
- public ICreateTableColumnOptionSyntax NotNullable()
+ public ICreateTableColumnOptionBuilder NotNullable()
{
CurrentColumn.IsNullable = false;
return this;
}
- public ICreateTableColumnOptionSyntax Unique()
+ public ICreateTableColumnOptionBuilder Unique()
{
return Unique(null);
}
- public ICreateTableColumnOptionSyntax Unique(string indexName)
+ public ICreateTableColumnOptionBuilder Unique(string indexName)
{
CurrentColumn.IsUnique = true;
@@ -179,18 +179,18 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName)
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string primaryTableName, string primaryColumnName)
{
return ForeignKey(null, null, primaryTableName, primaryColumnName);
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName,
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string foreignKeyName, string primaryTableName,
string primaryColumnName)
{
return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName);
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema,
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ForeignKey(string foreignKeyName, string primaryTableSchema,
string primaryTableName, string primaryColumnName)
{
CurrentColumn.IsForeignKey = true;
@@ -212,24 +212,24 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey()
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ForeignKey()
{
CurrentColumn.IsForeignKey = true;
return this;
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName)
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignTableName, string foreignColumnName)
{
return ReferencedBy(null, null, foreignTableName, foreignColumnName);
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName,
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignKeyName, string foreignTableName,
string foreignColumnName)
{
return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName);
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema,
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder ReferencedBy(string foreignKeyName, string foreignTableSchema,
string foreignTableName, string foreignColumnName)
{
var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition
@@ -249,19 +249,19 @@ namespace Umbraco.Core.Migrations.Syntax.Create.Table
return this;
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule)
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder OnDelete(Rule rule)
{
CurrentForeignKey.OnDelete = rule;
return this;
}
- public ICreateTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule)
+ public ICreateTableColumnOptionForeignKeyCascadeBuilder OnUpdate(Rule rule)
{
CurrentForeignKey.OnUpdate = rule;
return this;
}
- public ICreateTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule)
+ public ICreateTableColumnOptionBuilder OnDeleteOrUpdate(Rule rule)
{
OnDelete(rule);
OnUpdate(rule);
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnAsTypeSyntax.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnAsTypeSyntax.cs
new file mode 100644
index 0000000000..d47a2ff363
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnAsTypeSyntax.cs
@@ -0,0 +1,9 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Table
+{
+ public interface ICreateTableColumnAsTypeSyntax : IColumnTypeBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionBuilder.cs
new file mode 100644
index 0000000000..3d6f4cb3d2
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionBuilder.cs
@@ -0,0 +1,11 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Table
+{
+ public interface ICreateTableColumnOptionBuilder :
+ IColumnOptionBuilder,
+ ICreateTableWithColumnBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionForeignKeyCascadeBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionForeignKeyCascadeBuilder.cs
new file mode 100644
index 0000000000..e59d4d9457
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableColumnOptionForeignKeyCascadeBuilder.cs
@@ -0,0 +1,11 @@
+using Umbraco.Core.Migrations.Expressions.Common;
+
+namespace Umbraco.Core.Migrations.Expressions.Create.Table
+{
+ public interface ICreateTableColumnOptionForeignKeyCascadeBuilder :
+ ICreateTableColumnOptionBuilder,
+ IForeignKeyCascadeBuilder
+ {
+
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableWithColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableWithColumnBuilder.cs
new file mode 100644
index 0000000000..18dc02b726
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Create/Table/ICreateTableWithColumnBuilder.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Migrations.Expressions.Create.Table
+{
+ public interface ICreateTableWithColumnBuilder : IFluentBuilder
+ {
+ ICreateTableColumnAsTypeSyntax WithColumn(string name);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Column/DeleteColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Column/DeleteColumnBuilder.cs
new file mode 100644
index 0000000000..b4b8a61716
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Column/DeleteColumnBuilder.cs
@@ -0,0 +1,28 @@
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Column
+{
+ ///
+ /// Implements .
+ ///
+ public class DeleteColumnBuilder : ExpressionBuilderBase, IDeleteColumnBuilder
+ {
+ public DeleteColumnBuilder(DeleteColumnExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public void FromTable(string tableName)
+ {
+ Expression.TableName = tableName;
+ Expression.Execute();
+ }
+
+ ///
+ public IDeleteColumnBuilder Column(string columnName)
+ {
+ Expression.ColumnNames.Add(columnName);
+ return this;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Column/IDeleteColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Column/IDeleteColumnBuilder.cs
new file mode 100644
index 0000000000..aa872026a5
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Column/IDeleteColumnBuilder.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.Column
+{
+ ///
+ /// Builds a Delete Column expression.
+ ///
+ public interface IDeleteColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table of the column to delete, and execute.
+ ///
+ void FromTable(string tableName);
+
+ ///
+ /// Specifies the column to delete.
+ ///
+ IDeleteColumnBuilder Column(string columnName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/DeleteConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/DeleteConstraintBuilder.cs
new file mode 100644
index 0000000000..640c977747
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/DeleteConstraintBuilder.cs
@@ -0,0 +1,21 @@
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Constraint
+{
+ ///
+ /// Implements .
+ ///
+ public class DeleteConstraintBuilder : ExpressionBuilderBase, IDeleteConstraintBuilder
+ {
+ public DeleteConstraintBuilder(DeleteConstraintExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public void FromTable(string tableName)
+ {
+ Expression.Constraint.TableName = tableName;
+ Expression.Execute();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/IDeleteConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/IDeleteConstraintBuilder.cs
new file mode 100644
index 0000000000..babfd0362a
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Constraint/IDeleteConstraintBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.Constraint
+{
+ ///
+ /// Builds a Delete Constraint expression.
+ ///
+ public interface IDeleteConstraintBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table of the constraint to delete, and executes.
+ ///
+ void FromTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Data/DeleteDataBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Data/DeleteDataBuilder.cs
new file mode 100644
index 0000000000..3893ec3812
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Data/DeleteDataBuilder.cs
@@ -0,0 +1,53 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Data
+{
+ ///
+ /// Implements .
+ ///
+ public class DeleteDataBuilder : ExpressionBuilderBase, IDeleteDataBuilder
+ {
+ public DeleteDataBuilder(DeleteDataExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public void IsNull(string columnName)
+ {
+ Expression.Rows.Add(new DeletionDataDefinition { new KeyValuePair(columnName, null) });
+ }
+
+ ///
+ public IDeleteDataBuilder Row(object dataAsAnonymousType)
+ {
+ Expression.Rows.Add(GetData(dataAsAnonymousType));
+ return this;
+ }
+
+ ///
+ public void AllRows()
+ {
+ Expression.IsAllRows = true;
+ Expression.Execute();
+ }
+
+ ///
+ public void Execute()
+ {
+ Expression.Execute();
+ }
+
+ private static DeletionDataDefinition GetData(object dataAsAnonymousType)
+ {
+ var properties = TypeDescriptor.GetProperties(dataAsAnonymousType);
+
+ var data = new DeletionDataDefinition();
+ foreach (PropertyDescriptor property in properties)
+ data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType)));
+ return data;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Data/IDeleteDataBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Data/IDeleteDataBuilder.cs
new file mode 100644
index 0000000000..ba42dee997
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Data/IDeleteDataBuilder.cs
@@ -0,0 +1,28 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.Data
+{
+ ///
+ /// Builds a Delete Data expression.
+ ///
+ public interface IDeleteDataBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies a row to be deleted.
+ ///
+ IDeleteDataBuilder Row(object dataAsAnonymousType);
+
+ ///
+ /// Specifies that all rows must be deleted, and executes.
+ ///
+ void AllRows();
+
+ ///
+ /// Specifies that rows with a specified column being null must be deleted, and executes.
+ ///
+ void IsNull(string columnName);
+
+ ///
+ /// Executes.
+ ///
+ void Execute();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
new file mode 100644
index 0000000000..299345cbb7
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
@@ -0,0 +1,30 @@
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint
+{
+ ///
+ /// Implements , .
+ ///
+ public class DeleteDefaultConstraintBuilder : ExpressionBuilderBase,
+ IDeleteDefaultConstraintOnTableBuilder,
+ IDeleteDefaultConstraintOnColumnBuilder
+ {
+ public DeleteDefaultConstraintBuilder(DeleteDefaultConstraintExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public IDeleteDefaultConstraintOnColumnBuilder OnTable(string tableName)
+ {
+ Expression.TableName = tableName;
+ return this;
+ }
+
+ ///
+ public void OnColumn(string columnName)
+ {
+ Expression.ColumnName = columnName;
+ Expression.Execute();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnBuilder.cs
new file mode 100644
index 0000000000..d78583dcfb
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint
+{
+ ///
+ /// Builds a Delete Default Constraint On Column expression.
+ ///
+ public interface IDeleteDefaultConstraintOnColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the column of the constraint to delete, and executes.
+ ///
+ void OnColumn(string columnName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableBuilder.cs
new file mode 100644
index 0000000000..95834bcea8
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint
+{
+ ///
+ /// Builds a Delete Default Constraint On Table expression.
+ ///
+ public interface IDeleteDefaultConstraintOnTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table of the constraint to delete.
+ ///
+ IDeleteDefaultConstraintOnColumnBuilder OnTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/DeleteBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/DeleteBuilder.cs
new file mode 100644
index 0000000000..1d4f89778a
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/DeleteBuilder.cs
@@ -0,0 +1,138 @@
+using NPoco;
+using System.Linq;
+using Umbraco.Core.Migrations.Expressions.Delete.Column;
+using Umbraco.Core.Migrations.Expressions.Delete.Constraint;
+using Umbraco.Core.Migrations.Expressions.Delete.Data;
+using Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint;
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+using Umbraco.Core.Migrations.Expressions.Delete.ForeignKey;
+using Umbraco.Core.Migrations.Expressions.Delete.Index;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+using Umbraco.Core.Persistence.SqlSyntax;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete
+{
+ ///
+ /// Implements .
+ ///
+ public class DeleteBuilder : IDeleteBuilder
+ {
+ private readonly IMigrationContext _context;
+ private readonly DatabaseType[] _supportedDatabaseTypes;
+
+ public DeleteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
+ {
+ _context = context;
+ _supportedDatabaseTypes = supportedDatabaseTypes;
+ }
+
+ ///
+ public void Table(string tableName)
+ {
+ var expression = new DeleteTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
+ expression.Execute();
+ }
+
+ ///
+ public void KeysAndIndexes(string tableName = null)
+ {
+ if (tableName == null)
+ {
+ // drop keys
+ var keys = _context.SqlContext.SqlSyntax.GetConstraintsPerTable(_context.Database).DistinctBy(x => x.Item2).ToArray();
+ foreach (var key in keys.Where(x => x.Item2.StartsWith("FK_")))
+ ForeignKey(key.Item2).OnTable(key.Item1);
+ foreach (var key in keys.Where(x => x.Item2.StartsWith("PK_")))
+ PrimaryKey(key.Item2).FromTable(key.Item1);
+
+ // drop indexes
+ var indexes = _context.SqlContext.SqlSyntax.GetDefinedIndexesDefinitions(_context.Database).DistinctBy(x => x.IndexName).ToArray();
+ foreach (var index in indexes)
+ Index(index.IndexName).OnTable(index.TableName);
+ }
+ else
+ {
+ // drop keys
+ var keys = _context.SqlContext.SqlSyntax.GetConstraintsPerTable(_context.Database).DistinctBy(x => x.Item2).ToArray();
+ foreach (var key in keys.Where(x => x.Item1 == tableName && x.Item2.StartsWith("FK_")))
+ ForeignKey(key.Item2).OnTable(key.Item1);
+ foreach (var key in keys.Where(x => x.Item1 == tableName && x.Item2.StartsWith("PK_")))
+ PrimaryKey(key.Item2).FromTable(key.Item1);
+
+ // drop indexes
+ var indexes = _context.SqlContext.SqlSyntax.GetDefinedIndexesDefinitions(_context.Database).DistinctBy(x => x.IndexName).ToArray();
+ foreach (var index in indexes.Where(x => x.TableName == tableName))
+ Index(index.IndexName).OnTable(index.TableName);
+ }
+ }
+
+ ///
+ public IDeleteColumnBuilder Column(string columnName)
+ {
+ var expression = new DeleteColumnExpression(_context, _supportedDatabaseTypes) {ColumnNames = {columnName}};
+ return new DeleteColumnBuilder(expression);
+ }
+
+ ///
+ public IDeleteForeignKeyFromTableBuilder ForeignKey()
+ {
+ var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes);
+ return new DeleteForeignKeyBuilder(expression);
+ }
+
+ ///
+ public IDeleteForeignKeyOnTableBuilder ForeignKey(string foreignKeyName)
+ {
+ var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes) {ForeignKey = {Name = foreignKeyName}};
+ return new DeleteForeignKeyBuilder(expression);
+ }
+
+ ///
+ public IDeleteDataBuilder FromTable(string tableName)
+ {
+ var expression = new DeleteDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
+ return new DeleteDataBuilder(expression);
+ }
+
+ ///
+ public IDeleteIndexForTableBuilder Index()
+ {
+ var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes);
+ return new DeleteIndexBuilder(expression);
+ }
+
+ ///
+ public IDeleteIndexForTableBuilder Index(string indexName)
+ {
+ var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } };
+ return new DeleteIndexBuilder(expression);
+ }
+
+ ///
+ public IDeleteConstraintBuilder PrimaryKey(string primaryKeyName)
+ {
+ var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey)
+ {
+ Constraint = { ConstraintName = primaryKeyName }
+ };
+ return new DeleteConstraintBuilder(expression);
+ }
+
+ ///
+ public IDeleteConstraintBuilder UniqueConstraint(string constraintName)
+ {
+ var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique)
+ {
+ Constraint = { ConstraintName = constraintName }
+ };
+ return new DeleteConstraintBuilder(expression);
+ }
+
+ ///
+ public IDeleteDefaultConstraintOnTableBuilder DefaultConstraint()
+ {
+ var expression = new DeleteDefaultConstraintExpression(_context, _supportedDatabaseTypes);
+ return new DeleteDefaultConstraintBuilder(expression);
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteColumnExpression.cs
similarity index 51%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteColumnExpression.cs
index 800d756c5d..af0d687b25 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteColumnExpression.cs
@@ -1,9 +1,8 @@
using System.Collections.Generic;
-using System.Linq;
using System.Text;
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
{
public class DeleteColumnExpression : MigrationExpressionBase
{
@@ -13,25 +12,24 @@ namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
ColumnNames = new List();
}
- public virtual string SchemaName { get; set; }
public virtual string TableName { get; set; }
public ICollection ColumnNames { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
if (IsExpressionSupported() == false)
return string.Empty;
- var sb = new StringBuilder();
- foreach (string columnName in ColumnNames)
+ var stmts = new StringBuilder();
+ foreach (var columnName in ColumnNames)
{
- if (ColumnNames.First() != columnName) sb.AppendLine(";");
- sb.AppendFormat(SqlSyntax.DropColumn,
- SqlSyntax.GetQuotedTableName(TableName),
- SqlSyntax.GetQuotedColumnName(columnName));
+ stmts.AppendFormat(SqlSyntax.DropColumn, SqlSyntax.GetQuotedTableName(TableName), SqlSyntax.GetQuotedColumnName(columnName));
+ AppendStatementSeparator(stmts);
}
-
- return sb.ToString();
+ return stmts.ToString();
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteConstraintExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteConstraintExpression.cs
new file mode 100644
index 0000000000..594067098d
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteConstraintExpression.cs
@@ -0,0 +1,37 @@
+using NPoco;
+using Umbraco.Core.Persistence;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
+{
+ public class DeleteConstraintExpression : MigrationExpressionBase
+ {
+ public DeleteConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType type)
+ : base(context, supportedDatabaseTypes)
+ {
+ Constraint = new ConstraintDefinition(type);
+ }
+
+ public ConstraintDefinition Constraint { get; }
+
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
+ {
+ return DatabaseType.IsMySql()
+ ? GetMySql()
+ : string.Format(SqlSyntax.DeleteConstraint,
+ SqlSyntax.GetQuotedTableName(Constraint.TableName),
+ SqlSyntax.GetQuotedName(Constraint.ConstraintName));
+ }
+
+ private string GetMySql()
+ {
+ return string.Format(SqlSyntax.DeleteConstraint,
+ SqlSyntax.GetQuotedTableName(Constraint.TableName),
+ Constraint.IsPrimaryKeyConstraint ? "PRIMARY KEY" : "FOREIGN KEY",
+ "");
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDataExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDataExpression.cs
new file mode 100644
index 0000000000..720613e110
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDataExpression.cs
@@ -0,0 +1,42 @@
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+using NPoco;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
+{
+ public class DeleteDataExpression : MigrationExpressionBase
+ {
+ public DeleteDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ { }
+
+ public string TableName { get; set; }
+ public virtual bool IsAllRows { get; set; }
+
+ public List Rows { get; } = new List();
+
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
+ {
+ if (IsAllRows)
+ return string.Format(SqlSyntax.DeleteData, SqlSyntax.GetQuotedTableName(TableName), "(1=1)");
+
+ var stmts = new StringBuilder();
+ foreach (var row in Rows)
+ {
+ var whereClauses = row.Select(kvp => $"{SqlSyntax.GetQuotedColumnName(kvp.Key)} {(kvp.Value == null ? "IS" : "=")} {GetQuotedValue(kvp.Value)}");
+
+ stmts.Append(string.Format(SqlSyntax.DeleteData,
+ SqlSyntax.GetQuotedTableName(TableName),
+ string.Join(" AND ", whereClauses)));
+
+ AppendStatementSeparator(stmts);
+ }
+ return stmts.ToString();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
similarity index 65%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
index f3177af500..b46921c55f 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteDefaultConstraintExpression.cs
@@ -1,6 +1,6 @@
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
{
public class DeleteDefaultConstraintExpression : MigrationExpressionBase
{
@@ -8,18 +8,20 @@ namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
: base(context, supportedDatabaseTypes)
{ }
- public virtual string SchemaName { get; set; }
public virtual string TableName { get; set; }
public virtual string ColumnName { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
if (IsExpressionSupported() == false)
return string.Empty;
return string.Format(SqlSyntax.DeleteDefaultConstraint,
- TableName,
- ColumnName);
+ SqlSyntax.GetQuotedTableName(TableName),
+ SqlSyntax.GetQuotedColumnName(ColumnName));
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteForeignKeyExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteForeignKeyExpression.cs
new file mode 100644
index 0000000000..1b306af3a7
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteForeignKeyExpression.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Linq;
+using NPoco;
+using Umbraco.Core.Persistence;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
+{
+ public class DeleteForeignKeyExpression : MigrationExpressionBase
+ {
+ public DeleteForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ {
+ ForeignKey = new ForeignKeyDefinition();
+ }
+
+ public ForeignKeyDefinition ForeignKey { get; set; }
+
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
+ {
+ if (IsExpressionSupported() == false)
+ return string.Empty;
+
+ if (ForeignKey.ForeignTable == null)
+ throw new ArgumentNullException("Table name not specified, ensure you have appended the OnTable extension. Format should be Delete.ForeignKey(KeyName).OnTable(TableName)");
+
+ if (DatabaseType.IsMySql())
+ return GetMySql();
+
+ if (string.IsNullOrEmpty(ForeignKey.Name))
+ {
+ ForeignKey.Name = $"FK_{ForeignKey.ForeignTable}_{ForeignKey.PrimaryTable}_{ForeignKey.PrimaryColumns.First()}";
+ }
+
+ return string.Format(SqlSyntax.DeleteConstraint,
+ SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable),
+ SqlSyntax.GetQuotedName(ForeignKey.Name));
+ }
+
+ private string GetMySql()
+ {
+ // MySql naming "convention" for foreignkeys, which aren't explicitly named
+ if (string.IsNullOrEmpty(ForeignKey.Name))
+ ForeignKey.Name = $"{ForeignKey.ForeignTable.ToLower()}_ibfk_1";
+
+ return string.Format(SqlSyntax.DeleteConstraint,
+ SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable),
+ "FOREIGN KEY",
+ SqlSyntax.GetQuotedName(ForeignKey.Name));
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteIndexExpression.cs
similarity index 70%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteIndexExpression.cs
index 31cdba5be8..c12ea346bc 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteIndexExpression.cs
@@ -1,7 +1,7 @@
using NPoco;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
{
public class DeleteIndexExpression : MigrationExpressionBase
{
@@ -19,11 +19,14 @@ namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
public IndexDefinition Index { get; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
return string.Format(SqlSyntax.DropIndex,
- SqlSyntax.GetQuotedName(Index.Name),
- SqlSyntax.GetQuotedTableName(Index.TableName));
+ SqlSyntax.GetQuotedName(Index.Name),
+ SqlSyntax.GetQuotedTableName(Index.TableName));
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteTableExpression.cs
similarity index 69%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteTableExpression.cs
index a663213240..915d829696 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Expressions/DeleteTableExpression.cs
@@ -1,6 +1,6 @@
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Delete.Expressions
{
public class DeleteTableExpression : MigrationExpressionBase
{
@@ -8,13 +8,12 @@ namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
: base(context, supportedDatabaseTypes)
{ }
- public virtual string SchemaName { get; set; }
public virtual string TableName { get; set; }
public override string ToString()
{
return string.Format(SqlSyntax.DropTable,
- SqlSyntax.GetQuotedTableName(TableName));
+ SqlSyntax.GetQuotedTableName(TableName));
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/DeleteForeignKeyBuilder.cs
similarity index 51%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/DeleteForeignKeyBuilder.cs
index 792fcebf43..9a5f25217f 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/DeleteForeignKeyBuilder.cs
@@ -1,59 +1,67 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
{
+ ///
+ /// Implements IDeleteForeignKey...
+ ///
public class DeleteForeignKeyBuilder : ExpressionBuilderBase,
- IDeleteForeignKeyFromTableSyntax,
- IDeleteForeignKeyForeignColumnSyntax,
- IDeleteForeignKeyToTableSyntax,
- IDeleteForeignKeyPrimaryColumnSyntax,
- IDeleteForeignKeyOnTableSyntax
+ IDeleteForeignKeyFromTableBuilder,
+ IDeleteForeignKeyForeignColumnBuilder,
+ IDeleteForeignKeyToTableBuilder,
+ IDeleteForeignKeyPrimaryColumnBuilder,
+ IDeleteForeignKeyOnTableBuilder
{
- public DeleteForeignKeyBuilder(DeleteForeignKeyExpression expression) : base(expression)
- {
- }
+ public DeleteForeignKeyBuilder(DeleteForeignKeyExpression expression)
+ : base(expression)
+ { }
- public IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName)
+ ///
+ public IDeleteForeignKeyForeignColumnBuilder FromTable(string foreignTableName)
{
Expression.ForeignKey.ForeignTable = foreignTableName;
return this;
}
- public IDeleteForeignKeyToTableSyntax ForeignColumn(string column)
+ ///
+ public IDeleteForeignKeyToTableBuilder ForeignColumn(string column)
{
Expression.ForeignKey.ForeignColumns.Add(column);
return this;
}
- public IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns)
+ ///
+ public IDeleteForeignKeyToTableBuilder ForeignColumns(params string[] columns)
{
foreach (var column in columns)
- {
Expression.ForeignKey.ForeignColumns.Add(column);
- }
return this;
}
- public IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table)
+ ///
+ public IDeleteForeignKeyPrimaryColumnBuilder ToTable(string table)
{
Expression.ForeignKey.PrimaryTable = table;
return this;
}
+ ///
public void PrimaryColumn(string column)
{
Expression.ForeignKey.PrimaryColumns.Add(column);
+ Expression.Execute();
}
+ ///
public void PrimaryColumns(params string[] columns)
{
foreach (var column in columns)
- {
Expression.ForeignKey.PrimaryColumns.Add(column);
- }
+ Expression.Execute();
}
+ ///
public void OnTable(string foreignTableName)
{
Expression.ForeignKey.ForeignTable = foreignTableName;
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyForeignColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyForeignColumnBuilder.cs
new file mode 100644
index 0000000000..6f9e16f684
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyForeignColumnBuilder.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
+{
+ ///
+ /// Builds a Delete Foreign Key expression.
+ ///
+ public interface IDeleteForeignKeyForeignColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the foreign column.
+ ///
+ IDeleteForeignKeyToTableBuilder ForeignColumn(string column);
+
+ ///
+ /// Specifies the foreign columns.
+ ///
+ IDeleteForeignKeyToTableBuilder ForeignColumns(params string[] columns);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyFromTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyFromTableBuilder.cs
new file mode 100644
index 0000000000..7bd16cefa2
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyFromTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
+{
+ ///
+ /// Builds a Delete Foreign Key expression.
+ ///
+ public interface IDeleteForeignKeyFromTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the source table of the foreign key.
+ ///
+ IDeleteForeignKeyForeignColumnBuilder FromTable(string foreignTableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyOnTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyOnTableBuilder.cs
new file mode 100644
index 0000000000..35095c6650
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyOnTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
+{
+ ///
+ /// Builds a Delete Foreign Key expression.
+ ///
+ public interface IDeleteForeignKeyOnTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table of the foreign key, and executes.
+ ///
+ void OnTable(string foreignTableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnBuilder.cs
new file mode 100644
index 0000000000..1722c3b7f9
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnBuilder.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
+{
+ ///
+ /// Builds a Delete Foreign Key expression.
+ ///
+ public interface IDeleteForeignKeyPrimaryColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the target primary column, and executes.
+ ///
+ void PrimaryColumn(string column);
+
+ ///
+ /// Specifies the target primary columns, and executes.
+ ///
+ void PrimaryColumns(params string[] columns);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyToTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyToTableBuilder.cs
new file mode 100644
index 0000000000..cd881042ee
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/ForeignKey/IDeleteForeignKeyToTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.ForeignKey
+{
+ ///
+ /// Builds a Delete Foreign Key expression.
+ ///
+ public interface IDeleteForeignKeyToTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the target table of the foreign key.
+ ///
+ IDeleteForeignKeyPrimaryColumnBuilder ToTable(string table);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/IDeleteBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/IDeleteBuilder.cs
new file mode 100644
index 0000000000..602114f14f
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/IDeleteBuilder.cs
@@ -0,0 +1,72 @@
+using Umbraco.Core.Migrations.Expressions.Delete.Column;
+using Umbraco.Core.Migrations.Expressions.Delete.Constraint;
+using Umbraco.Core.Migrations.Expressions.Delete.Data;
+using Umbraco.Core.Migrations.Expressions.Delete.DefaultConstraint;
+using Umbraco.Core.Migrations.Expressions.Delete.ForeignKey;
+using Umbraco.Core.Migrations.Expressions.Delete.Index;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete
+{
+ ///
+ /// Builds a Delete expression.
+ ///
+ public interface IDeleteBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table to delete, and executes.
+ ///
+ void Table(string tableName);
+
+ ///
+ /// Specifies the table to delete keys and indexes for, and executes.
+ ///
+ void KeysAndIndexes(string tableName = null);
+
+ ///
+ /// Specifies the column to delete.
+ ///
+ IDeleteColumnBuilder Column(string columnName);
+
+ ///
+ /// Specifies the foreign key to delete.
+ ///
+ IDeleteForeignKeyFromTableBuilder ForeignKey();
+
+ ///
+ /// Specifies the foreign key to delete.
+ ///
+ IDeleteForeignKeyOnTableBuilder ForeignKey(string foreignKeyName);
+
+ ///
+ /// Specifies the table to delete data from.
+ ///
+ ///
+ ///
+ IDeleteDataBuilder FromTable(string tableName);
+
+ ///
+ /// Specifies the index to delete.
+ ///
+ IDeleteIndexForTableBuilder Index();
+
+ ///
+ /// Specifies the index to delete.
+ ///
+ IDeleteIndexForTableBuilder Index(string indexName);
+
+ ///
+ /// Specifies the primary key to delete.
+ ///
+ IDeleteConstraintBuilder PrimaryKey(string primaryKeyName);
+
+ ///
+ /// Specifies the unique constraint to delete.
+ ///
+ IDeleteConstraintBuilder UniqueConstraint(string constraintName);
+
+ ///
+ /// Specifies the default constraint to delete.
+ ///
+ IDeleteDefaultConstraintOnTableBuilder DefaultConstraint();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/DeleteIndexBuilder.cs
similarity index 58%
rename from src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Delete/Index/DeleteIndexBuilder.cs
index fbdd3d0222..247664417f 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/DeleteIndexBuilder.cs
@@ -1,37 +1,40 @@
using System;
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-namespace Umbraco.Core.Migrations.Syntax.Delete.Index
+namespace Umbraco.Core.Migrations.Expressions.Delete.Index
{
- public class DeleteIndexBuilder : ExpressionBuilderBase, IDeleteIndexForTableSyntax, IDeleteIndexOnColumnSyntax
+ ///
+ /// Implements , .
+ ///
+ public class DeleteIndexBuilder : ExpressionBuilderBase, IDeleteIndexForTableBuilder, IDeleteIndexOnColumnBuilder
{
- public DeleteIndexBuilder(DeleteIndexExpression expression) : base(expression)
- {
- }
+ public DeleteIndexBuilder(DeleteIndexExpression expression)
+ : base(expression)
+ { }
public IndexColumnDefinition CurrentColumn { get; set; }
- public IDeleteIndexOnColumnSyntax OnTable(string tableName)
+ public IDeleteIndexOnColumnBuilder OnTable(string tableName)
{
Expression.Index.TableName = tableName;
return this;
}
- [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
+ ///
public void OnColumn(string columnName)
{
var column = new IndexColumnDefinition { Name = columnName };
Expression.Index.Columns.Add(column);
+ Expression.Execute();
}
- [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
+ ///
public void OnColumns(params string[] columnNames)
{
foreach (string columnName in columnNames)
- {
Expression.Index.Columns.Add(new IndexColumnDefinition { Name = columnName });
- }
+ Expression.Execute();
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexForTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexForTableBuilder.cs
new file mode 100644
index 0000000000..99b762a562
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexForTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Delete.Index
+{
+ ///
+ /// Builds a Delete Index expression.
+ ///
+ public interface IDeleteIndexForTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table of the index to delete.
+ ///
+ IDeleteIndexOnColumnBuilder OnTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexOnColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexOnColumnBuilder.cs
new file mode 100644
index 0000000000..b8eb588bed
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Index/IDeleteIndexOnColumnBuilder.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Index
+{
+ ///
+ /// Builds a Delete Index expression.
+ ///
+ public interface IDeleteIndexOnColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the column of the index, and executes.
+ ///
+ [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
+ void OnColumn(string columnName);
+
+ ///
+ /// Specifies the column of the index, and executes.
+ ///
+ [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
+ void OnColumns(params string[] columnNames);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Delete/Table/DeleteTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Delete/Table/DeleteTableBuilder.cs
new file mode 100644
index 0000000000..c21c4f9619
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Delete/Table/DeleteTableBuilder.cs
@@ -0,0 +1,16 @@
+using Umbraco.Core.Migrations.Expressions.Delete.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Delete.Table
+{
+ ///
+ /// Builds a Delete Table expression, and executes.
+ ///
+ public class DeleteTableBuilder : ExpressionBuilderBase
+ {
+ public DeleteTableBuilder(DeleteTableExpression expression)
+ : base(expression)
+ {
+ Expression.Execute();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Execute/ExecuteBuilder.cs
similarity index 79%
rename from src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Execute/ExecuteBuilder.cs
index c6f428ad94..87066ca085 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Execute/ExecuteBuilder.cs
@@ -1,9 +1,12 @@
using System;
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Execute.Expressions;
+using Umbraco.Core.Migrations.Expressions.Execute.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Execute
+namespace Umbraco.Core.Migrations.Expressions.Execute
{
+ ///
+ /// Implements .
+ ///
public class ExecuteBuilder : IExecuteBuilder
{
private readonly IMigrationContext _context;
@@ -18,7 +21,7 @@ namespace Umbraco.Core.Migrations.Syntax.Execute
public void Sql(string sqlStatement)
{
var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) {SqlStatement = sqlStatement};
- _context.Expressions.Add(expression);
+ expression.Execute();
}
public void Code(Func codeStatement)
diff --git a/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteCodeStatementExpression.cs
similarity index 89%
rename from src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteCodeStatementExpression.cs
index 372112aedb..1149cda9e9 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteCodeStatementExpression.cs
@@ -1,7 +1,7 @@
using System;
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Execute.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Execute.Expressions
{
public class ExecuteCodeStatementExpression : MigrationExpressionBase
{
diff --git a/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteSqlStatementExpression.cs
similarity index 71%
rename from src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs
rename to src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteSqlStatementExpression.cs
index c9487cce55..74dfca3f37 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Execute/Expressions/ExecuteSqlStatementExpression.cs
@@ -1,6 +1,6 @@
using NPoco;
-namespace Umbraco.Core.Migrations.Syntax.Execute.Expressions
+namespace Umbraco.Core.Migrations.Expressions.Execute.Expressions
{
public class ExecuteSqlStatementExpression : MigrationExpressionBase
{
@@ -10,7 +10,10 @@ namespace Umbraco.Core.Migrations.Syntax.Execute.Expressions
public virtual string SqlStatement { get; set; }
- public override string ToString()
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
{
if (IsExpressionSupported() == false)
return string.Empty;
diff --git a/src/Umbraco.Core/Migrations/Expressions/Execute/IExecuteBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Execute/IExecuteBuilder.cs
new file mode 100644
index 0000000000..d4dba5ced8
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Execute/IExecuteBuilder.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace Umbraco.Core.Migrations.Expressions.Execute
+{
+ ///
+ /// Builds and executes an Sql statement.
+ ///
+ /// Deals with multi-statements Sql.
+ public interface IExecuteBuilder : IFluentBuilder
+ {
+ ///
+ /// Executes an Sql statement.
+ ///
+ void Sql(string sqlStatement);
+
+ [Obsolete("kill.kill.kill")]
+ void Code(Func codeStatement);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBase.cs b/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBase.cs
new file mode 100644
index 0000000000..e491cf30c7
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBase.cs
@@ -0,0 +1,22 @@
+namespace Umbraco.Core.Migrations.Expressions
+{
+ ///
+ /// Provides a base class for expression builders.
+ ///
+ public abstract class ExpressionBuilderBase
+ where TExpression : IMigrationExpression
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ protected ExpressionBuilderBase(TExpression expression)
+ {
+ Expression = expression;
+ }
+
+ ///
+ /// Gets the expression.
+ ///
+ public TExpression Expression { get; }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBaseOfNext.cs b/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBaseOfNext.cs
new file mode 100644
index 0000000000..91cf471b0a
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/ExpressionBuilderBaseOfNext.cs
@@ -0,0 +1,185 @@
+using System.Data;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions
+{
+ ///
+ /// Provides a base class for expression builders.
+ ///
+ public abstract class ExpressionBuilderBase : ExpressionBuilderBase
+ where TExpression : IMigrationExpression
+ where TNext : IFluentBuilder
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ protected ExpressionBuilderBase(TExpression expression)
+ : base(expression)
+ { }
+
+ // FIXME WTF is this and what is TNext here?!
+
+ public abstract ColumnDefinition GetColumnForType();
+
+ private ColumnDefinition Column => GetColumnForType();
+
+ public TNext AsAnsiString()
+ {
+ Column.Type = DbType.AnsiString;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsAnsiString(int size)
+ {
+ Column.Type = DbType.AnsiString;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsBinary()
+ {
+ Column.Type = DbType.Binary;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsBinary(int size)
+ {
+ Column.Type = DbType.Binary;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsBoolean()
+ {
+ Column.Type = DbType.Boolean;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsByte()
+ {
+ Column.Type = DbType.Byte;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsCurrency()
+ {
+ Column.Type = DbType.Currency;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsDate()
+ {
+ Column.Type = DbType.Date;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsDateTime()
+ {
+ Column.Type = DbType.DateTime;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsDecimal()
+ {
+ Column.Type = DbType.Decimal;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsDecimal(int size, int precision)
+ {
+ Column.Type = DbType.Decimal;
+ Column.Size = size;
+ Column.Precision = precision;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsDouble()
+ {
+ Column.Type = DbType.Double;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsFixedLengthString(int size)
+ {
+ Column.Type = DbType.StringFixedLength;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsFixedLengthAnsiString(int size)
+ {
+ Column.Type = DbType.AnsiStringFixedLength;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsFloat()
+ {
+ Column.Type = DbType.Single;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsGuid()
+ {
+ Column.Type = DbType.Guid;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsInt16()
+ {
+ Column.Type = DbType.Int16;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsInt32()
+ {
+ Column.Type = DbType.Int32;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsInt64()
+ {
+ Column.Type = DbType.Int64;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsString()
+ {
+ Column.Type = DbType.String;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsString(int size)
+ {
+ Column.Type = DbType.String;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsTime()
+ {
+ Column.Type = DbType.Time;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsXml()
+ {
+ Column.Type = DbType.Xml;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsXml(int size)
+ {
+ Column.Type = DbType.Xml;
+ Column.Size = size;
+ return (TNext)(object)this;
+ }
+
+ public TNext AsCustom(string customType)
+ {
+ Column.Type = null;
+ Column.CustomType = customType;
+ return (TNext)(object)this;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/IFluentBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/IFluentBuilder.cs
new file mode 100644
index 0000000000..6d947ef410
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/IFluentBuilder.cs
@@ -0,0 +1,5 @@
+namespace Umbraco.Core.Migrations.Expressions
+{
+ public interface IFluentBuilder
+ { }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs
new file mode 100644
index 0000000000..94a62c0c06
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Insert/Expressions/InsertDataExpression.cs
@@ -0,0 +1,64 @@
+using System.Collections.Generic;
+using System.Text;
+using System.Linq;
+using NPoco;
+using Umbraco.Core.Persistence;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Insert.Expressions
+{
+ public class InsertDataExpression : MigrationExpressionBase
+ {
+ public InsertDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ { }
+
+ public string TableName { get; set; }
+ public bool EnabledIdentityInsert { get; set; }
+
+ public List Rows { get; } = new List();
+
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
+ {
+ if (IsExpressionSupported() == false)
+ return string.Empty;
+
+ var stmts = new StringBuilder();
+
+ if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert())
+ {
+ stmts.AppendLine($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(TableName)} ON");
+ AppendStatementSeparator(stmts);
+ }
+
+ try
+ {
+ foreach (var item in Rows)
+ {
+ var cols = string.Join(",", item.Select(x => x.Key));
+ var vals = string.Join(",", item.Select(x => x.Value));
+
+ var sql = string.Format(SqlSyntax.InsertData,
+ SqlSyntax.GetQuotedTableName(TableName),
+ cols, vals);
+
+ stmts.Append(sql);
+ AppendStatementSeparator(stmts);
+ }
+ }
+ finally
+ {
+ if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert())
+ {
+ stmts.AppendLine($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(TableName)} OFF");
+ AppendStatementSeparator(stmts);
+ }
+ }
+
+ return stmts.ToString();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertBuilder.cs
new file mode 100644
index 0000000000..14dab6e0da
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Insert
+{
+ ///
+ /// Builds an Insert expression.
+ ///
+ public interface IInsertBuilder : IFluentBuilder
+ {
+ ///
+ /// Builds an Insert Into expression.
+ ///
+ IInsertIntoBuilder IntoTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertIntoBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertIntoBuilder.cs
new file mode 100644
index 0000000000..442023ea62
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Insert/IInsertIntoBuilder.cs
@@ -0,0 +1,23 @@
+namespace Umbraco.Core.Migrations.Expressions.Insert
+{
+ ///
+ /// Builds an Insert Into expression.
+ ///
+ public interface IInsertIntoBuilder : IFluentBuilder
+ {
+ ///
+ /// Enables identity insert.
+ ///
+ IInsertIntoBuilder EnableIdentityInsert();
+
+ ///
+ /// Specifies a row to be inserted.
+ ///
+ IInsertIntoBuilder Row(object dataAsAnonymousType);
+
+ ///
+ /// Executes.
+ ///
+ void Execute();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/InsertBuilder.cs
similarity index 60%
rename from src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Insert/InsertBuilder.cs
index d1ae17ffef..18b9cb0b2b 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Insert/InsertBuilder.cs
@@ -1,13 +1,14 @@
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Insert.Expressions;
-using Umbraco.Core.Persistence.SqlSyntax;
+using Umbraco.Core.Migrations.Expressions.Insert.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Insert
+namespace Umbraco.Core.Migrations.Expressions.Insert
{
+ ///
+ /// Implements .
+ ///
public class InsertBuilder : IInsertBuilder
{
private readonly IMigrationContext _context;
- private readonly ISqlSyntaxProvider _sqlSyntax;
private readonly DatabaseType[] _supportedDatabaseTypes;
public InsertBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
@@ -16,11 +17,11 @@ namespace Umbraco.Core.Migrations.Syntax.Insert
_supportedDatabaseTypes = supportedDatabaseTypes;
}
- public IInsertDataSyntax IntoTable(string tableName)
+ ///
+ public IInsertIntoBuilder IntoTable(string tableName)
{
var expression = new InsertDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- _context.Expressions.Add(expression);
- return new InsertDataBuilder(expression);
+ return new InsertIntoBuilder(expression);
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Insert/InsertIntoBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Insert/InsertIntoBuilder.cs
new file mode 100644
index 0000000000..d17f7ff2d2
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Insert/InsertIntoBuilder.cs
@@ -0,0 +1,47 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using Umbraco.Core.Migrations.Expressions.Insert.Expressions;
+using Umbraco.Core.Persistence.DatabaseModelDefinitions;
+
+namespace Umbraco.Core.Migrations.Expressions.Insert
+{
+ ///
+ /// Implements .
+ ///
+ public class InsertIntoBuilder : ExpressionBuilderBase, IInsertIntoBuilder
+ {
+ public InsertIntoBuilder(InsertDataExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public IInsertIntoBuilder EnableIdentityInsert()
+ {
+ Expression.EnabledIdentityInsert = true;
+ return this;
+ }
+
+ ///
+ public IInsertIntoBuilder Row(object dataAsAnonymousType)
+ {
+ Expression.Rows.Add(GetData(dataAsAnonymousType));
+ return this;
+ }
+
+ ///
+ public void Execute()
+ {
+ Expression.Execute();
+ }
+
+ private static InsertionDataDefinition GetData(object dataAsAnonymousType)
+ {
+ var properties = TypeDescriptor.GetProperties(dataAsAnonymousType);
+
+ var data = new InsertionDataDefinition();
+ foreach (PropertyDescriptor property in properties)
+ data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType)));
+ return data;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnBuilder.cs
new file mode 100644
index 0000000000..dd2ccb889f
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Rename.Column
+{
+ ///
+ /// Builds a Rename Column expression.
+ ///
+ public interface IRenameColumnBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the table name.
+ ///
+ IRenameColumnToBuilder OnTable(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnToBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnToBuilder.cs
new file mode 100644
index 0000000000..403132c222
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/IRenameColumnToBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Rename.Column
+{
+ ///
+ /// Builds a Rename Column expression.
+ ///
+ public interface IRenameColumnToBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the new name of the column and executes.
+ ///
+ void To(string name);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Column/RenameColumnBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/RenameColumnBuilder.cs
new file mode 100644
index 0000000000..bf9e48017a
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Column/RenameColumnBuilder.cs
@@ -0,0 +1,27 @@
+using Umbraco.Core.Migrations.Expressions.Rename.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Rename.Column
+{
+ ///
+ /// Implements , .
+ ///
+ public class RenameColumnBuilder : ExpressionBuilderBase, IRenameColumnToBuilder, IRenameColumnBuilder
+ {
+ public RenameColumnBuilder(RenameColumnExpression expression) : base(expression)
+ { }
+
+ ///
+ public void To(string name)
+ {
+ Expression.NewName = name;
+ Expression.Execute();
+ }
+
+ ///
+ public IRenameColumnToBuilder OnTable(string tableName)
+ {
+ Expression.TableName = tableName;
+ return this;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameColumnExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameColumnExpression.cs
new file mode 100644
index 0000000000..9ed4d97486
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameColumnExpression.cs
@@ -0,0 +1,55 @@
+using NPoco;
+using Umbraco.Core.Persistence;
+
+namespace Umbraco.Core.Migrations.Expressions.Rename.Expressions
+{
+ public class RenameColumnExpression : MigrationExpressionBase
+ {
+ public RenameColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ { }
+
+ public virtual string TableName { get; set; }
+ public virtual string OldName { get; set; }
+ public virtual string NewName { get; set; }
+
+ public override string Process(IMigrationContext context)
+ => GetSql();
+
+ public override string ToString() // fixme kill
+ => GetBaseSql();
+
+ ///
+ protected override string GetSql()
+ {
+ return DatabaseType.IsMySql()
+ ? GetMySql()
+ : GetBaseSql();
+ }
+
+ private string GetBaseSql()
+ {
+ return IsExpressionSupported() == false
+ ? string.Empty
+ : SqlSyntax.FormatColumnRename(TableName, OldName, NewName);
+ }
+
+ private string GetMySql()
+ {
+ var columnDefinitionSql = $@"
+SELECT CONCAT(
+ CAST(COLUMN_TYPE AS CHAR),
+ IF(ISNULL(CHARACTER_SET_NAME), '', CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)),
+ IF(ISNULL(COLLATION_NAME), '', CONCAT(' COLLATE ', COLLATION_NAME)),
+ ' ',
+ IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''),
+ IF(IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NULL, '', CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')),
+ UPPER(extra))
+FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_NAME = '{TableName}' AND COLUMN_NAME = '{OldName}'";
+
+ var columnDefinition = Database.ExecuteScalar(columnDefinitionSql);
+ return GetBaseSql() + " " + columnDefinition;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameTableExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameTableExpression.cs
new file mode 100644
index 0000000000..573ac4e4b8
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Expressions/RenameTableExpression.cs
@@ -0,0 +1,36 @@
+using NPoco;
+
+namespace Umbraco.Core.Migrations.Expressions.Rename.Expressions
+{
+ ///
+ /// Represents a Rename Table expression.
+ ///
+ public class RenameTableExpression : MigrationExpressionBase
+ {
+ public RenameTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ { }
+
+ ///
+ /// Gets or sets the source name.
+ ///
+ public virtual string OldName { get; set; }
+
+ ///
+ /// Gets or sets the target name.
+ ///
+ public virtual string NewName { get; set; }
+
+ ///
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ ///
+ protected override string GetSql()
+ {
+ return IsExpressionSupported() == false
+ ? string.Empty
+ : SqlSyntax.FormatTableRename(OldName, NewName);
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/IRenameBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/IRenameBuilder.cs
new file mode 100644
index 0000000000..87bc85784b
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/IRenameBuilder.cs
@@ -0,0 +1,21 @@
+using Umbraco.Core.Migrations.Expressions.Rename.Column;
+using Umbraco.Core.Migrations.Expressions.Rename.Table;
+
+namespace Umbraco.Core.Migrations.Expressions.Rename
+{
+ ///
+ /// Builds a Rename expression.
+ ///
+ public interface IRenameBuilder : IFluentBuilder
+ {
+ ///
+ /// Builds a Rename Table expression.
+ ///
+ IRenameTableBuilder Table(string oldName);
+
+ ///
+ /// Builds a Rename Column expression.
+ ///
+ IRenameColumnBuilder Column(string oldName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/RenameBuilder.cs
similarity index 62%
rename from src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Rename/RenameBuilder.cs
index d3a158d87e..dc500168ce 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/RenameBuilder.cs
@@ -1,10 +1,13 @@
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Rename.Column;
-using Umbraco.Core.Migrations.Syntax.Rename.Expressions;
-using Umbraco.Core.Migrations.Syntax.Rename.Table;
+using Umbraco.Core.Migrations.Expressions.Rename.Column;
+using Umbraco.Core.Migrations.Expressions.Rename.Expressions;
+using Umbraco.Core.Migrations.Expressions.Rename.Table;
-namespace Umbraco.Core.Migrations.Syntax.Rename
+namespace Umbraco.Core.Migrations.Expressions.Rename
{
+ ///
+ /// Implements .
+ ///
public class RenameBuilder : IRenameBuilder
{
private readonly IMigrationContext _context;
@@ -16,17 +19,17 @@ namespace Umbraco.Core.Migrations.Syntax.Rename
_supportedDatabaseTypes = supportedDatabaseTypes;
}
- public IRenameTableSyntax Table(string oldName)
+ ///
+ public IRenameTableBuilder Table(string oldName)
{
var expression = new RenameTableExpression(_context, _supportedDatabaseTypes) { OldName = oldName };
- _context.Expressions.Add(expression);
return new RenameTableBuilder(expression);
}
- public IRenameColumnTableSyntax Column(string oldName)
+ ///
+ public IRenameColumnBuilder Column(string oldName)
{
var expression = new RenameColumnExpression(_context, _supportedDatabaseTypes) { OldName = oldName };
- _context.Expressions.Add(expression);
return new RenameColumnBuilder(expression);
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Table/IRenameTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Table/IRenameTableBuilder.cs
new file mode 100644
index 0000000000..207c447c85
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Table/IRenameTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Rename.Table
+{
+ ///
+ /// Builds a Rename Table expression.
+ ///
+ public interface IRenameTableBuilder : IFluentBuilder
+ {
+ ///
+ /// Specifies the new name of the table and executes.
+ ///
+ void To(string name);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Rename/Table/RenameTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Rename/Table/RenameTableBuilder.cs
new file mode 100644
index 0000000000..89fa86622e
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Rename/Table/RenameTableBuilder.cs
@@ -0,0 +1,21 @@
+using Umbraco.Core.Migrations.Expressions.Rename.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Rename.Table
+{
+ ///
+ /// Implements .
+ ///
+ public class RenameTableBuilder : ExpressionBuilderBase, IRenameTableBuilder
+ {
+ public RenameTableBuilder(RenameTableExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public void To(string name)
+ {
+ Expression.NewName = name;
+ Expression.Execute();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Update/Expressions/UpdateDataExpression.cs b/src/Umbraco.Core/Migrations/Expressions/Update/Expressions/UpdateDataExpression.cs
new file mode 100644
index 0000000000..6ce9fb7966
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/Expressions/UpdateDataExpression.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using NPoco;
+using System.Linq;
+
+namespace Umbraco.Core.Migrations.Expressions.Update.Expressions
+{
+ public class UpdateDataExpression : MigrationExpressionBase
+ {
+ public UpdateDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
+ : base(context, supportedDatabaseTypes)
+ { }
+
+ public string TableName { get; set; }
+
+ public List> Set { get; set; }
+ public List> Where { get; set; }
+ public bool IsAllRows { get; set; }
+
+ public override string ToString() // fixme kill
+ => GetSql();
+
+ protected override string GetSql()
+ {
+ if (IsExpressionSupported() == false)
+ return string.Empty;
+
+ var updateItems = Set.Select(x => $"{SqlSyntax.GetQuotedColumnName(x.Key)} = {GetQuotedValue(x.Value)}");
+ var whereClauses = IsAllRows
+ ? null
+ : Where.Select(x => $"{SqlSyntax.GetQuotedColumnName(x.Key)} {(x.Value == null ? "IS" : "=")} {GetQuotedValue(x.Value)}");
+
+ var whereClause = whereClauses == null
+ ? "(1=1)"
+ : string.Join(" AND ", whereClauses.ToArray());
+
+ return string.Format(SqlSyntax.UpdateData,
+ SqlSyntax.GetQuotedTableName(TableName),
+ string.Join(", ", updateItems),
+ whereClause);
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateBuilder.cs
new file mode 100644
index 0000000000..cb045830cb
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Update
+{
+ ///
+ /// Builds an Update expression.
+ ///
+ public interface IUpdateBuilder : IFluentBuilder
+ {
+ ///
+ /// Builds an Update Table expression.
+ ///
+ IUpdateTableBuilder Table(string tableName);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateTableBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateTableBuilder.cs
new file mode 100644
index 0000000000..f0f5835356
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateTableBuilder.cs
@@ -0,0 +1,13 @@
+namespace Umbraco.Core.Migrations.Expressions.Update
+{
+ ///
+ /// Builds an Update Table expression.
+ ///
+ public interface IUpdateTableBuilder
+ {
+ ///
+ /// Specifies the data.
+ ///
+ IUpdateWhereBuilder Set(object dataAsAnonymousType);
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateWhereBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateWhereBuilder.cs
new file mode 100644
index 0000000000..88c8936072
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/IUpdateWhereBuilder.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Core.Migrations.Expressions.Update
+{
+ ///
+ /// Builds an Update Table ... Where expression.
+ ///
+ public interface IUpdateWhereBuilder
+ {
+ ///
+ /// Specifies rows to update, and executes.
+ ///
+ void Where(object dataAsAnonymousType);
+
+ ///
+ /// Specifies that all rows must be updated, and executes.
+ ///
+ void AllRows();
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Update/UpdateBuilder.cs
similarity index 61%
rename from src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs
rename to src/Umbraco.Core/Migrations/Expressions/Update/UpdateBuilder.cs
index 6a8afbd842..9dec308a9e 100644
--- a/src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/UpdateBuilder.cs
@@ -1,8 +1,11 @@
using NPoco;
-using Umbraco.Core.Migrations.Syntax.Update.Expressions;
+using Umbraco.Core.Migrations.Expressions.Update.Expressions;
-namespace Umbraco.Core.Migrations.Syntax.Update
+namespace Umbraco.Core.Migrations.Expressions.Update
{
+ ///
+ /// Implements .
+ ///
public class UpdateBuilder : IUpdateBuilder
{
private readonly IMigrationContext _context;
@@ -14,11 +17,11 @@ namespace Umbraco.Core.Migrations.Syntax.Update
_supportedDatabaseTypes = supportedDatabaseTypes;
}
- public IUpdateSetSyntax Table(string tableName)
+ ///
+ public IUpdateTableBuilder Table(string tableName)
{
var expression = new UpdateDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- _context.Expressions.Add(expression);
- return new UpdateDataBuilder(expression, _context);
+ return new UpdateDataBuilder(expression);
}
}
}
diff --git a/src/Umbraco.Core/Migrations/Expressions/Update/UpdateDataBuilder.cs b/src/Umbraco.Core/Migrations/Expressions/Update/UpdateDataBuilder.cs
new file mode 100644
index 0000000000..501efb5056
--- /dev/null
+++ b/src/Umbraco.Core/Migrations/Expressions/Update/UpdateDataBuilder.cs
@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using Umbraco.Core.Migrations.Expressions.Update.Expressions;
+
+namespace Umbraco.Core.Migrations.Expressions.Update
+{
+ ///
+ /// Implements , /
+ ///
+ public class UpdateDataBuilder : ExpressionBuilderBase, IUpdateTableBuilder, IUpdateWhereBuilder
+ {
+ public UpdateDataBuilder(UpdateDataExpression expression)
+ : base(expression)
+ { }
+
+ ///
+ public IUpdateWhereBuilder Set(object dataAsAnonymousType)
+ {
+ Expression.Set = GetData(dataAsAnonymousType);
+ return this;
+ }
+
+ ///
+ public void Where(object dataAsAnonymousType)
+ {
+ Expression.Where = GetData(dataAsAnonymousType);
+ Expression.Execute();
+ }
+
+ ///
+ public void AllRows()
+ {
+ Expression.IsAllRows = true;
+ Expression.Execute();
+ }
+
+ private static List> GetData(object dataAsAnonymousType)
+ {
+ var properties = TypeDescriptor.GetProperties(dataAsAnonymousType);
+
+ var data = new List>();
+ foreach (PropertyDescriptor property in properties)
+ data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType)));
+ return data;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Migrations/ILocalMigration.cs b/src/Umbraco.Core/Migrations/ILocalMigration.cs
index a4670cb390..5822298150 100644
--- a/src/Umbraco.Core/Migrations/ILocalMigration.cs
+++ b/src/Umbraco.Core/Migrations/ILocalMigration.cs
@@ -1,8 +1,8 @@
-using Umbraco.Core.Migrations.Syntax.Alter;
-using Umbraco.Core.Migrations.Syntax.Create;
-using Umbraco.Core.Migrations.Syntax.Delete;
-using Umbraco.Core.Migrations.Syntax.Execute;
-using Umbraco.Core.Migrations.Syntax.Update;
+using Umbraco.Core.Migrations.Expressions.Alter;
+using Umbraco.Core.Migrations.Expressions.Create;
+using Umbraco.Core.Migrations.Expressions.Delete;
+using Umbraco.Core.Migrations.Expressions.Execute;
+using Umbraco.Core.Migrations.Expressions.Update;
namespace Umbraco.Core.Migrations
{
@@ -11,7 +11,7 @@ namespace Umbraco.Core.Migrations
IExecuteBuilder Execute { get; }
IDeleteBuilder Delete { get; }
IUpdateBuilder Update { get; }
- IAlterSyntaxBuilder Alter { get; }
+ IAlterBuilder Alter { get; }
ICreateBuilder Create { get; }
string GetSql();
}
diff --git a/src/Umbraco.Core/Migrations/IMigrationContext.cs b/src/Umbraco.Core/Migrations/IMigrationContext.cs
index e555fbce89..335df94057 100644
--- a/src/Umbraco.Core/Migrations/IMigrationContext.cs
+++ b/src/Umbraco.Core/Migrations/IMigrationContext.cs
@@ -4,16 +4,33 @@ using Umbraco.Core.Persistence;
namespace Umbraco.Core.Migrations
{
+ ///
+ /// Provides context to migrations.
+ ///
public interface IMigrationContext
{
- IUmbracoDatabase Database { get; }
-
- ICollection Expressions { get; set; }
-
+ ///
+ /// Gets the logger.
+ ///
ILogger Logger { get; }
- ILocalMigration GetLocalMigration();
+ ///
+ /// Gets the database instance.
+ ///
+ IUmbracoDatabase Database { get; }
+ ///
+ /// Gets the Sql context.
+ ///
ISqlContext SqlContext { get; }
+
+ ///
+ /// Gets the expression index.
+ ///
+ int Index { get; set; }
+
+ ICollection Expressions { get; set; } // fixme kill
+
+ ILocalMigration GetLocalMigration(); // fixme kill
}
}
diff --git a/src/Umbraco.Core/Migrations/IMigrationExpression.cs b/src/Umbraco.Core/Migrations/IMigrationExpression.cs
index e4265d9190..8f950ab301 100644
--- a/src/Umbraco.Core/Migrations/IMigrationExpression.cs
+++ b/src/Umbraco.Core/Migrations/IMigrationExpression.cs
@@ -5,6 +5,7 @@
///
public interface IMigrationExpression
{
- string Process(IMigrationContext context);
+ string Process(IMigrationContext context); // fixme kill
+ void Execute();
}
}
diff --git a/src/Umbraco.Core/Migrations/LocalMigration.cs b/src/Umbraco.Core/Migrations/LocalMigration.cs
index 53729b3a93..6e1ee1a713 100644
--- a/src/Umbraco.Core/Migrations/LocalMigration.cs
+++ b/src/Umbraco.Core/Migrations/LocalMigration.cs
@@ -1,11 +1,11 @@
using System.Linq;
using System.Text;
using Umbraco.Core.Logging;
-using Umbraco.Core.Migrations.Syntax.Alter;
-using Umbraco.Core.Migrations.Syntax.Create;
-using Umbraco.Core.Migrations.Syntax.Delete;
-using Umbraco.Core.Migrations.Syntax.Execute;
-using Umbraco.Core.Migrations.Syntax.Update;
+using Umbraco.Core.Migrations.Expressions.Alter;
+using Umbraco.Core.Migrations.Expressions.Create;
+using Umbraco.Core.Migrations.Expressions.Delete;
+using Umbraco.Core.Migrations.Expressions.Execute;
+using Umbraco.Core.Migrations.Expressions.Update;
using Umbraco.Core.Persistence;
namespace Umbraco.Core.Migrations
@@ -22,7 +22,7 @@ namespace Umbraco.Core.Migrations
public IUpdateBuilder Update => new UpdateBuilder(this);
- public IAlterSyntaxBuilder Alter => new AlterSyntaxBuilder(this);
+ public IAlterBuilder Alter => new AlterBuilder(this);
public ICreateBuilder Create => new CreateBuilder(this);
diff --git a/src/Umbraco.Core/Migrations/MigrationBase.cs b/src/Umbraco.Core/Migrations/MigrationBase.cs
index 3ef3bb27bc..5e89182121 100644
--- a/src/Umbraco.Core/Migrations/MigrationBase.cs
+++ b/src/Umbraco.Core/Migrations/MigrationBase.cs
@@ -1,65 +1,112 @@
using System;
using NPoco;
using Umbraco.Core.Logging;
-using Umbraco.Core.Migrations.Syntax.Alter;
-using Umbraco.Core.Migrations.Syntax.Create;
-using Umbraco.Core.Migrations.Syntax.Delete;
-using Umbraco.Core.Migrations.Syntax.Execute;
-using Umbraco.Core.Migrations.Syntax.IfDatabase;
-using Umbraco.Core.Migrations.Syntax.Insert;
-using Umbraco.Core.Migrations.Syntax.Rename;
-using Umbraco.Core.Migrations.Syntax.Update;
+using Umbraco.Core.Migrations.Expressions.Alter;
+using Umbraco.Core.Migrations.Expressions.Create;
+using Umbraco.Core.Migrations.Expressions.Delete;
+using Umbraco.Core.Migrations.Expressions.Execute;
+using Umbraco.Core.Migrations.Expressions.Insert;
+using Umbraco.Core.Migrations.Expressions.Rename;
+using Umbraco.Core.Migrations.Expressions.Update;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Migrations
{
+ ///
+ /// Provides a base class to all migrations.
+ ///
public abstract class MigrationBase : IMigration
{
- public ISqlSyntaxProvider SqlSyntax => Context.SqlContext.SqlSyntax;
-
- public DatabaseType DatabaseType => Context.Database.DatabaseType;
-
- public ILogger Logger { get; }
- protected IMigrationContext Context { get; }
-
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// A migration context.
protected MigrationBase(IMigrationContext context)
{
- Logger = context.Logger;
Context = context;
}
+ ///
+ /// Gets the migration context.
+ ///
+ protected IMigrationContext Context { get; }
+
+ ///
+ /// Gets the logger.
+ ///
+ protected ILogger Logger => Context.Logger;
+
+ ///
+ /// Gets the Sql syntax.
+ ///
+ protected ISqlSyntaxProvider SqlSyntax => Context.SqlContext.SqlSyntax;
+
+ ///
+ /// Gets the database instance.
+ ///
+ protected IUmbracoDatabase Database => Context.Database;
+
+ ///
+ /// Gets the database type.
+ ///
+ protected DatabaseType DatabaseType => Context.Database.DatabaseType;
+
+ ///
+ /// Creates a new Sql statement.
+ ///
+ protected Sql Sql() => Context.SqlContext.Sql();
+
+ ///
+ /// Creates a new Sql statement with arguments.
+ ///
+ protected Sql Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args);
+
+ ///
public virtual void Up()
{
throw new NotSupportedException("This migration does not implement the \"up\" operation.");
}
+ ///
public virtual void Down()
{
throw new NotSupportedException("This migration does not implement the \"down\" operation.");
}
- public IAlterSyntaxBuilder Alter => new AlterSyntaxBuilder(Context);
+ ///
+ /// Builds an Alter expression.
+ ///
+ public IAlterBuilder Alter => new AlterBuilder(Context);
+ ///
+ /// Builds a Create expression.
+ ///
public ICreateBuilder Create => new CreateBuilder(Context);
+ ///
+ /// Builds a Delete expression.
+ ///
public IDeleteBuilder Delete => new DeleteBuilder(Context);
+ ///
+ /// Builds an Execute expression.
+ ///
public IExecuteBuilder Execute => new ExecuteBuilder(Context);
+ ///
+ /// Builds an Insert expression.
+ ///
public IInsertBuilder Insert => new InsertBuilder(Context);
+ ///
+ /// Builds a Rename expression.
+ ///
public IRenameBuilder Rename => new RenameBuilder(Context);
+ ///
+ /// Builds an Update expression.
+ ///
public IUpdateBuilder Update => new UpdateBuilder(Context);
-
- protected Sql Sql() => Context.SqlContext.Sql();
-
- protected Sql Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args);
-
- public IIfDatabaseBuilder IfDatabase(params DatabaseType[] supportedDatabaseTypes)
- {
- return new IfDatabaseBuilder(Context, supportedDatabaseTypes);
- }
}
}
diff --git a/src/Umbraco.Core/Migrations/MigrationContext.cs b/src/Umbraco.Core/Migrations/MigrationContext.cs
index 094c2e7194..e996fe0410 100644
--- a/src/Umbraco.Core/Migrations/MigrationContext.cs
+++ b/src/Umbraco.Core/Migrations/MigrationContext.cs
@@ -15,14 +15,16 @@ namespace Umbraco.Core.Migrations
Logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
- public ICollection Expressions { get; set; }
+ public ILogger Logger { get; }
public IUmbracoDatabase Database { get; }
public ISqlContext SqlContext => Database.SqlContext;
- public ILogger Logger { get; }
+ public int Index { get; set; }
- public ILocalMigration GetLocalMigration() => new LocalMigration(Database, Logger);
+ public ICollection Expressions { get; set; } // fixme kill
+
+ public ILocalMigration GetLocalMigration() => new LocalMigration(Database, Logger); // fixme kill
}
}
diff --git a/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs b/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs
index 7fc7349130..3addba1075 100644
--- a/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs
+++ b/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs
@@ -1,28 +1,40 @@
using System;
+using System.IO;
using System.Linq;
+using System.Text;
using NPoco;
+using Umbraco.Core.Logging;
+using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Migrations
{
+ ///
+ /// Provides a base class for migration expressions.
+ ///
public abstract class MigrationExpressionBase : IMigrationExpression
{
- private readonly IMigrationContext _context;
+ private bool _executed;
protected MigrationExpressionBase(IMigrationContext context, DatabaseType[] supportedDatabaseTypes = null)
{
- if (context == null) throw new ArgumentNullException(nameof(context));
- _context = context;
+ Context = context ?? throw new ArgumentNullException(nameof(context));
SupportedDatabaseTypes = supportedDatabaseTypes;
}
- public virtual DatabaseType[] SupportedDatabaseTypes { get; }
+ protected IMigrationContext Context { get; }
- public ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax;
+ protected ILogger Logger => Context.Logger;
- public virtual DatabaseType CurrentDatabaseType => _context.Database.DatabaseType;
+ protected ISqlSyntaxProvider SqlSyntax => Context.Database.SqlContext.SqlSyntax;
- public bool IsExpressionSupported()
+ protected IUmbracoDatabase Database => Context.Database;
+
+ public DatabaseType DatabaseType => Context.Database.DatabaseType;
+
+ public DatabaseType[] SupportedDatabaseTypes { get; }
+
+ public bool IsExpressionSupported() // fixme - do we need this?!
{
return SupportedDatabaseTypes == null
|| SupportedDatabaseTypes.Length == 0
@@ -33,7 +45,7 @@ namespace Umbraco.Core.Migrations
// need to accept SqlServer2012 too => cannot simply test with "Contains"
// and have to test the types.
//|| SupportedDatabaseTypes.Contains(CurrentDatabaseType);
- || SupportedDatabaseTypes.Any(x => CurrentDatabaseType.GetType().Inherits(x.GetType()));
+ || SupportedDatabaseTypes.Any(x => DatabaseType.GetType().Inherits(x.GetType()));
}
public virtual string Process(IMigrationContext context)
@@ -41,6 +53,63 @@ namespace Umbraco.Core.Migrations
return ToString();
}
+ protected virtual string GetSql()
+ {
+ return ToString();
+ }
+
+ public void Execute()
+ {
+ if (_executed)
+ throw new InvalidOperationException("This expression has already been executed.");
+ _executed = true;
+
+ var sql = GetSql();
+
+ if (string.IsNullOrWhiteSpace(sql))
+ {
+ Logger.Info(GetType(), $"SQL [{Context.Index}]: ");
+ Context.Index++;
+ return;
+ }
+
+ // split multiple statements - required for SQL CE
+ // http://stackoverflow.com/questions/13665491/sql-ce-inconsistent-with-multiple-statements
+ var stmtBuilder = new StringBuilder();
+ using (var reader = new StringReader(sql))
+ {
+ string line;
+ while ((line = reader.ReadLine()) != null)
+ {
+ line = line.Trim();
+ if (line.Equals("GO", StringComparison.OrdinalIgnoreCase))
+ ExecuteStatement(stmtBuilder);
+ else
+ stmtBuilder.AppendLine(line);
+ }
+
+ if (stmtBuilder.Length > 0)
+ ExecuteStatement(stmtBuilder);
+ }
+
+ Context.Index++;
+ }
+
+ private void ExecuteStatement(StringBuilder stmtBuilder)
+ {
+ var stmt = stmtBuilder.ToString();
+ Logger.Info(GetType(), $"SQL [{Context.Index}]: {stmt}");
+ Database.Execute(stmt);
+ stmtBuilder.Clear();
+ }
+
+ protected void AppendStatementSeparator(StringBuilder stmtBuilder)
+ {
+ stmtBuilder.AppendLine(";");
+ if (DatabaseType.IsSqlServerOrCe())
+ stmtBuilder.AppendLine("GO");
+ }
+
///
/// This might be useful in the future if we add it to the interface, but for now it's used to hack the DeleteAppTables & DeleteForeignKeyExpression
/// to ensure they are not executed twice.
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs
deleted file mode 100644
index b8442c17f8..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using NPoco;
-using Umbraco.Core.Migrations.Syntax.Alter.Column;
-using Umbraco.Core.Migrations.Syntax.Alter.Expressions;
-using Umbraco.Core.Migrations.Syntax.Alter.Table;
-
-namespace Umbraco.Core.Migrations.Syntax.Alter
-{
- public class AlterSyntaxBuilder : IAlterSyntaxBuilder
- {
- private readonly IMigrationContext _context;
- private readonly DatabaseType[] _supportedDatabaseTypes;
-
- public AlterSyntaxBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
- {
- _context = context;
- _supportedDatabaseTypes = supportedDatabaseTypes;
- }
-
- public IAlterTableSyntax Table(string tableName)
- {
- var expression = new AlterTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- //_context.Expressions.Add(expression);
- return new AlterTableBuilder(_context, _supportedDatabaseTypes, expression);
- }
-
- ///
- /// The problem with this is that only under particular circumstances is the expression added to the context
- /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore
- /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add
- /// the expression to the context.
- ///
- ///
- ///
- [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")]
- public IAlterColumnSyntax Column(string columnName)
- {
- var expression = new AlterColumnExpression(_context, _supportedDatabaseTypes) {Column = {Name = columnName}};
- //_context.Expressions.Add(expression);
- return new AlterColumnBuilder(_context, _supportedDatabaseTypes, expression);
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs
deleted file mode 100644
index d1c8e009ab..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-using System.Data;
-using NPoco;
-using Umbraco.Core.Migrations.Syntax.Alter.Expressions;
-using Umbraco.Core.Migrations.Syntax.Expressions;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Alter.Column
-{
- public class AlterColumnBuilder : ExpressionBuilder,
- IAlterColumnSyntax,
- IAlterColumnTypeSyntax,
- IAlterColumnOptionForeignKeyCascadeSyntax
- {
- private readonly IMigrationContext _context;
- private readonly DatabaseType[] _supportedDatabaseTypes;
-
- public AlterColumnBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, AlterColumnExpression expression)
- : base(expression)
- {
- _context = context;
- _supportedDatabaseTypes = supportedDatabaseTypes;
- }
-
- public ForeignKeyDefinition CurrentForeignKey { get; set; }
-
- public override ColumnDefinition GetColumnForType()
- {
- return Expression.Column;
- }
-
- public IAlterColumnTypeSyntax OnTable(string name)
- {
- Expression.TableName = name;
- return this;
- }
-
- public IAlterColumnOptionSyntax WithDefault(SystemMethods method)
- {
- var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes)
- {
- 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(_context, _supportedDatabaseTypes)
- {
- TableName = Expression.TableName,
- SchemaName = Expression.SchemaName,
- ColumnName = Expression.Column.Name,
- DefaultValue = value
- };
-
- _context.Expressions.Add(dc);
-
- Expression.Column.DefaultValue = value;
-
- return this;
- }
-
- public IAlterColumnOptionSyntax Identity()
- {
- Expression.Column.IsIdentity = true;
- return this;
- }
-
- public IAlterColumnOptionSyntax Indexed()
- {
- return Indexed(null);
- }
-
- public IAlterColumnOptionSyntax Indexed(string indexName)
- {
- Expression.Column.IsIndexed = true;
-
- var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, 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 IAlterColumnOptionSyntax PrimaryKey()
- {
- Expression.Column.IsPrimaryKey = true;
- return this;
- }
-
- public IAlterColumnOptionSyntax PrimaryKey(string primaryKeyName)
- {
- Expression.Column.IsPrimaryKey = true;
- Expression.Column.PrimaryKeyName = primaryKeyName;
- return this;
- }
-
- public IAlterColumnOptionSyntax Nullable()
- {
- Expression.Column.IsNullable = true;
- return this;
- }
-
- public IAlterColumnOptionSyntax NotNullable()
- {
- Expression.Column.IsNullable = false;
- return this;
- }
-
- public IAlterColumnOptionSyntax Unique()
- {
- return Unique(null);
- }
-
- public IAlterColumnOptionSyntax Unique(string indexName)
- {
- Expression.Column.IsUnique = true;
-
- var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, 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 IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName)
- {
- return ForeignKey(null, null, primaryTableName, primaryColumnName);
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName,
- string primaryColumnName)
- {
- return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName);
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema,
- string primaryTableName, string primaryColumnName)
- {
- Expression.Column.IsForeignKey = true;
-
- var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, 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 IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey()
- {
- Expression.Column.IsForeignKey = true;
- return this;
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName)
- {
- return ReferencedBy(null, null, foreignTableName, foreignColumnName);
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName,
- string foreignColumnName)
- {
- return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName);
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema,
- string foreignTableName, string foreignColumnName)
- {
- var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, 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 IAlterColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule)
- {
- CurrentForeignKey.OnDelete = rule;
- return this;
- }
-
- public IAlterColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule)
- {
- CurrentForeignKey.OnUpdate = rule;
- return this;
- }
-
- public IAlterColumnOptionSyntax OnDeleteOrUpdate(Rule rule)
- {
- OnDelete(rule);
- OnUpdate(rule);
- return this;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs
deleted file mode 100644
index ae26b9fd1e..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Column
-{
- public interface IAlterColumnOptionForeignKeyCascadeSyntax :
- IAlterColumnOptionSyntax,
- IForeignKeyCascadeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs
deleted file mode 100644
index a7ac58ac97..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Column
-{
- public interface IAlterColumnOptionSyntax : IColumnOptionSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs
deleted file mode 100644
index bd699820ae..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Column
-{
- public interface IAlterColumnSyntax : IFluentSyntax
- {
- IAlterColumnTypeSyntax OnTable(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs
deleted file mode 100644
index 4f396f1c16..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Column
-{
- public interface IAlterColumnTypeSyntax : IColumnTypeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs
deleted file mode 100644
index e2eb741c1f..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using Umbraco.Core.Migrations.Syntax.Alter.Column;
-using Umbraco.Core.Migrations.Syntax.Alter.Table;
-
-namespace Umbraco.Core.Migrations.Syntax.Alter
-{
- public interface IAlterSyntaxBuilder : IFluentSyntax
- {
- IAlterTableSyntax Table(string tableName);
-
- ///
- /// The problem with this is that only under particular circumstances is the expression added to the context
- /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore
- /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add
- /// the expression to the context.
- ///
- ///
- ///
- [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")]
- IAlterColumnSyntax Column(string columnName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs
deleted file mode 100644
index a43ab18153..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Table
-{
- public interface IAlterTableColumnOptionForeignKeyCascadeSyntax :
- IAlterTableColumnOptionSyntax,
- IForeignKeyCascadeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs
deleted file mode 100644
index fe6e05aff3..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Table
-{
- public interface IAlterTableColumnOptionSyntax :
- IColumnOptionSyntax,
- IAlterTableSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs
deleted file mode 100644
index bc76a255c2..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Table
-{
- public interface IAlterTableColumnTypeSyntax : IColumnTypeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs
deleted file mode 100644
index 89fea53621..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Alter.Table
-{
- public interface IAlterTableSyntax : IFluentSyntax
- {
- IAlterTableColumnTypeSyntax AddColumn(string name);
- IAlterTableColumnTypeSyntax AlterColumn(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs
deleted file mode 100644
index ef2d72a210..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Column
-{
- public interface ICreateColumnOnTableSyntax : IColumnTypeSyntax
- {
- ICreateColumnTypeSyntax OnTable(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs
deleted file mode 100644
index 29bacacce4..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Column
-{
- public interface ICreateColumnOptionForeignKeyCascadeSyntax : ICreateColumnOptionSyntax,
- IForeignKeyCascadeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs
deleted file mode 100644
index b5a1764985..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Column
-{
- public interface ICreateColumnOptionSyntax : IColumnOptionSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs
deleted file mode 100644
index 7a5e60cb08..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Column
-{
- public interface ICreateColumnTypeSyntax : IColumnTypeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs
deleted file mode 100644
index 4690e1dc6e..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Constraint
-{
- public interface ICreateConstraintColumnsSyntax : IFluentSyntax
- {
- void Column(string columnName);
- void Columns(string[] columnNames);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs
deleted file mode 100644
index 0655592a22..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Constraint
-{
- public interface ICreateConstraintOnTableSyntax : IFluentSyntax
- {
- ICreateConstraintColumnsSyntax OnTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs
deleted file mode 100644
index 324e5684de..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System.Data;
-
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
-{
- public interface ICreateForeignKeyCascadeSyntax : IFluentSyntax
- {
- ICreateForeignKeyCascadeSyntax OnDelete(Rule rule);
- ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule);
- void OnDeleteOrUpdate(Rule rule);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs
deleted file mode 100644
index fb46976c04..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
-{
- public interface ICreateForeignKeyForeignColumnSyntax : IFluentSyntax
- {
- ICreateForeignKeyToTableSyntax ForeignColumn(string column);
- ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs
deleted file mode 100644
index 676aa891d2..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
-{
- public interface ICreateForeignKeyFromTableSyntax : IFluentSyntax
- {
- ICreateForeignKeyForeignColumnSyntax FromTable(string table);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs
deleted file mode 100644
index e61a3f4334..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
-{
- public interface ICreateForeignKeyPrimaryColumnSyntax : IFluentSyntax
- {
- ICreateForeignKeyCascadeSyntax PrimaryColumn(string column);
- ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs
deleted file mode 100644
index 813fe6be3d..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey
-{
- public interface ICreateForeignKeyToTableSyntax : IFluentSyntax
- {
- ICreateForeignKeyPrimaryColumnSyntax ToTable(string table);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs
deleted file mode 100644
index 41a06145f8..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using Umbraco.Core.Migrations.Syntax.Create.Column;
-using Umbraco.Core.Migrations.Syntax.Create.Constraint;
-using Umbraco.Core.Migrations.Syntax.Create.ForeignKey;
-using Umbraco.Core.Migrations.Syntax.Create.Index;
-using Umbraco.Core.Migrations.Syntax.Create.Table;
-
-namespace Umbraco.Core.Migrations.Syntax.Create
-{
- public interface ICreateBuilder : IFluentSyntax
- {
- void Table(bool withoutKeysAndIndexes = false);
- void KeysAndIndexes();
- void KeysAndIndexes(Type typeOfDto);
-
- ICreateTableWithColumnSyntax 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);
- ICreateConstraintOnTableSyntax Constraint(string constraintName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs
deleted file mode 100644
index db3bce0387..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Index
-{
- public interface ICreateIndexColumnOptionsSyntax : IFluentSyntax
- {
- ICreateIndexOnColumnSyntax Ascending();
- ICreateIndexOnColumnSyntax Descending();
- ICreateIndexOnColumnSyntax Unique();
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs
deleted file mode 100644
index 934a7af023..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Index
-{
- public interface ICreateIndexForTableSyntax : IFluentSyntax
- {
- ICreateIndexOnColumnSyntax OnTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs
deleted file mode 100644
index 1cb8ea8344..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Index
-{
- public interface ICreateIndexOnColumnSyntax : IFluentSyntax
- {
- ICreateIndexColumnOptionsSyntax OnColumn(string columnName);
- ICreateIndexOptionsSyntax WithOptions();
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs
deleted file mode 100644
index 46e76c1c6a..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Index
-{
- public interface ICreateIndexOptionsSyntax : IFluentSyntax
- {
- ICreateIndexOnColumnSyntax Unique();
- ICreateIndexOnColumnSyntax NonClustered();
- ICreateIndexOnColumnSyntax Clustered();
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs
deleted file mode 100644
index 3ea94316e5..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Table
-{
- public interface ICreateTableColumnAsTypeSyntax : IColumnTypeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs
deleted file mode 100644
index 203e653064..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Table
-{
- public interface ICreateTableColumnOptionForeignKeyCascadeSyntax :
- ICreateTableColumnOptionSyntax,
- IForeignKeyCascadeSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs
deleted file mode 100644
index 290e21f599..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Table
-{
- public interface ICreateTableColumnOptionSyntax :
- IColumnOptionSyntax,
- ICreateTableWithColumnSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs
deleted file mode 100644
index b7b6eeb4ee..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Create.Table
-{
- public interface ICreateTableWithColumnSyntax : IFluentSyntax
- {
- ICreateTableColumnAsTypeSyntax WithColumn(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs
deleted file mode 100644
index ca298adeba..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-
-namespace Umbraco.Core.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;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs
deleted file mode 100644
index 87f10d7dec..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.Column
-{
- public interface IDeleteColumnFromTableSyntax : IFluentSyntax
- {
- void FromTable(string tableName);
- IDeleteColumnFromTableSyntax Column(string columnName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs
deleted file mode 100644
index 20287319a5..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Constraint
-{
- public class DeleteConstraintBuilder : ExpressionBuilderBase, IDeleteConstraintOnTableSyntax
- {
- public DeleteConstraintBuilder(DeleteConstraintExpression expression) : base(expression)
- {
- }
-
- public void FromTable(string tableName)
- {
- Expression.Constraint.TableName = tableName;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs
deleted file mode 100644
index c1c5f1428f..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.Constraint
-{
- public interface IDeleteConstraintOnTableSyntax : IFluentSyntax
- {
- void FromTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
deleted file mode 100644
index 5ae0b923ef..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-
-namespace Umbraco.Core.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;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs
deleted file mode 100644
index faacc9e5dc..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint
-{
- public interface IDeleteDefaultConstraintOnColumnSyntax : IFluentSyntax
- {
- void OnColumn(string columnName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs
deleted file mode 100644
index 36b08c8e15..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint
-{
- public interface IDeleteDefaultConstraintOnTableSyntax : IFluentSyntax
- {
- IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs
deleted file mode 100644
index 4a3847f254..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using NPoco;
-using Umbraco.Core.Migrations.Syntax.Delete.Column;
-using Umbraco.Core.Migrations.Syntax.Delete.Constraint;
-using Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint;
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-using Umbraco.Core.Migrations.Syntax.Delete.ForeignKey;
-using Umbraco.Core.Migrations.Syntax.Delete.Index;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete
-{
- public class DeleteBuilder : IDeleteBuilder
- {
- private readonly IMigrationContext _context;
- private readonly DatabaseType[] _supportedDatabaseTypes;
-
- public DeleteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
- {
- _context = context;
- _supportedDatabaseTypes = supportedDatabaseTypes;
- }
-
- public void Table(string tableName)
- {
- var expression = new DeleteTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- _context.Expressions.Add(expression);
- }
-
- public IDeleteColumnFromTableSyntax Column(string columnName)
- {
- var expression = new DeleteColumnExpression(_context, _supportedDatabaseTypes) {ColumnNames = {columnName}};
- _context.Expressions.Add(expression);
- return new DeleteColumnBuilder(expression);
- }
-
- public IDeleteForeignKeyFromTableSyntax ForeignKey()
- {
- var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes);
- _context.Expressions.Add(expression);
- return new DeleteForeignKeyBuilder(expression);
- }
-
- public IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName)
- {
- var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes) {ForeignKey = {Name = foreignKeyName}};
- _context.Expressions.Add(expression);
- return new DeleteForeignKeyBuilder(expression);
- }
-
- public IDeleteDataSyntax FromTable(string tableName)
- {
- var expression = new DeleteDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName };
- _context.Expressions.Add(expression);
- return new DeleteDataBuilder(expression);
- }
-
- public IDeleteIndexForTableSyntax Index()
- {
- var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes);
- _context.Expressions.Add(expression);
- return new DeleteIndexBuilder(expression);
- }
-
- public IDeleteIndexForTableSyntax Index(string indexName)
- {
- var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } };
- _context.Expressions.Add(expression);
- return new DeleteIndexBuilder(expression);
- }
-
- public IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName)
- {
- var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey)
- {
- Constraint = { ConstraintName = primaryKeyName }
- };
- _context.Expressions.Add(expression);
- return new DeleteConstraintBuilder(expression);
- }
-
- public IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName)
- {
- var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique)
- {
- Constraint = { ConstraintName = constraintName }
- };
- _context.Expressions.Add(expression);
- return new DeleteConstraintBuilder(expression);
- }
-
- public IDeleteDefaultConstraintOnTableSyntax DefaultConstraint()
- {
- var expression = new DeleteDefaultConstraintExpression(_context, _supportedDatabaseTypes);
- _context.Expressions.Add(expression);
- return new DeleteDefaultConstraintBuilder(expression);
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs
deleted file mode 100644
index 904f382ea0..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel;
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.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;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs
deleted file mode 100644
index 75bc7d6eae..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using NPoco;
-using Umbraco.Core.Persistence;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
-{
- public class DeleteConstraintExpression : MigrationExpressionBase
- {
- public DeleteConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType type)
- : base(context, supportedDatabaseTypes)
- {
- Constraint = new ConstraintDefinition(type);
- }
-
- public ConstraintDefinition Constraint { get; }
-
- public override string ToString()
- {
- // Test for MySQL primary key situation.
- if (CurrentDatabaseType.IsMySql())
- {
- if (Constraint.IsPrimaryKeyConstraint)
- {
- return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(Constraint.TableName),
- "PRIMARY KEY",
- "");
- }
- else
- {
- return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(Constraint.TableName),
- "FOREIGN KEY",
- "");
- }
- }
- else
- {
- return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(Constraint.TableName),
- SqlSyntax.GetQuotedName(Constraint.ConstraintName));
- }
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs
deleted file mode 100644
index 561df84f7d..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using NPoco;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
-{
- public class DeleteDataExpression : MigrationExpressionBase
- {
- private readonly List _rows = new List();
-
- public DeleteDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- { }
-
- public virtual string SchemaName { get; set; }
- public string TableName { get; set; }
- public virtual bool IsAllRows { get; set; }
-
- public List Rows => _rows;
-
- public override string ToString()
- {
- var deleteItems = new List();
-
- if (IsAllRows)
- {
- deleteItems.Add(string.Format(SqlSyntax.DeleteData, SqlSyntax.GetQuotedTableName(TableName), "1 = 1"));
- }
- else
- {
- foreach (var row in Rows)
- {
- var whereClauses = new List();
- foreach (KeyValuePair item in row)
- {
- whereClauses.Add(string.Format("{0} {1} {2}",
- SqlSyntax.GetQuotedColumnName(item.Key),
- item.Value == null ? "IS" : "=",
- GetQuotedValue(item.Value)));
- }
-
- deleteItems.Add(string.Format(SqlSyntax.DeleteData,
- SqlSyntax.GetQuotedTableName(TableName),
- String.Join(" AND ", whereClauses.ToArray())));
- }
- }
-
- return String.Join("; ", deleteItems.ToArray());
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs
deleted file mode 100644
index 3a12272509..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Linq;
-using NPoco;
-using Umbraco.Core.Persistence;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions
-{
- public class DeleteForeignKeyExpression : MigrationExpressionBase
- {
- public DeleteForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- {
- ForeignKey = new ForeignKeyDefinition();
- }
-
- public ForeignKeyDefinition ForeignKey { get; set; }
-
- public override string ToString()
- {
- if (IsExpressionSupported() == false)
- return string.Empty;
-
- if (ForeignKey.ForeignTable == null)
- throw new ArgumentNullException("Table name not specified, ensure you have appended the OnTable extension. Format should be Delete.ForeignKey(KeyName).OnTable(TableName)");
-
- if (CurrentDatabaseType.IsMySql())
- {
- //MySql naming "convention" for foreignkeys, which aren't explicitly named
- if (string.IsNullOrEmpty(ForeignKey.Name))
- ForeignKey.Name = string.Format("{0}_ibfk_1", ForeignKey.ForeignTable.ToLower());
-
- return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable),
- "FOREIGN KEY",
- SqlSyntax.GetQuotedName(ForeignKey.Name));
- }
-
- if (string.IsNullOrEmpty(ForeignKey.Name))
- {
- ForeignKey.Name = string.Format("FK_{0}_{1}_{2}", ForeignKey.ForeignTable, ForeignKey.PrimaryTable, ForeignKey.PrimaryColumns.First());
- }
-
- return string.Format(SqlSyntax.DeleteConstraint,
- SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable),
- SqlSyntax.GetQuotedName(ForeignKey.Name));
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs
deleted file mode 100644
index b3d3afdb18..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
-{
- public interface IDeleteForeignKeyForeignColumnSyntax : IFluentSyntax
- {
- IDeleteForeignKeyToTableSyntax ForeignColumn(string column);
- IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs
deleted file mode 100644
index f8b198b636..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
-{
- public interface IDeleteForeignKeyFromTableSyntax : IFluentSyntax
- {
- IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs
deleted file mode 100644
index 37edd643f6..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
-{
- public interface IDeleteForeignKeyOnTableSyntax : IFluentSyntax
- {
- void OnTable(string foreignTableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs
deleted file mode 100644
index 27f4335b24..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
-{
- public interface IDeleteForeignKeyPrimaryColumnSyntax : IFluentSyntax
- {
- void PrimaryColumn(string column);
- void PrimaryColumns(params string[] columns);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs
deleted file mode 100644
index 0b351ab73a..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey
-{
- public interface IDeleteForeignKeyToTableSyntax : IFluentSyntax
- {
- IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs
deleted file mode 100644
index 3319a94d27..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Column;
-using Umbraco.Core.Migrations.Syntax.Delete.Constraint;
-using Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint;
-using Umbraco.Core.Migrations.Syntax.Delete.ForeignKey;
-using Umbraco.Core.Migrations.Syntax.Delete.Index;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete
-{
- 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();
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs
deleted file mode 100644
index 64709b864a..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete
-{
- public interface IDeleteDataSyntax : IFluentSyntax
- {
- IDeleteDataSyntax Row(object dataAsAnonymousType);
- void AllRows();
- void IsNull(string columnName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs
deleted file mode 100644
index 68fd10e237..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Delete.Index
-{
- public interface IDeleteIndexForTableSyntax : IFluentSyntax
- {
- IDeleteIndexOnColumnSyntax OnTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs
deleted file mode 100644
index bb97622980..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Index
-{
- public interface IDeleteIndexOnColumnSyntax : IFluentSyntax
- {
- [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
- void OnColumn(string columnName);
-
- [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")]
- void OnColumns(params string[] columnNames);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs
deleted file mode 100644
index f9939f2730..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Delete.Expressions;
-
-namespace Umbraco.Core.Migrations.Syntax.Delete.Table
-{
- public class DeleteTableBuilder : ExpressionBuilderBase
- {
- public DeleteTableBuilder(DeleteTableExpression expression) : base(expression)
- {
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs
deleted file mode 100644
index 9b6e6756d6..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System.Linq;
-using Umbraco.Core.Persistence.SqlSyntax;
-
-namespace Umbraco.Core.Migrations.Syntax.Execute
-{
- public static class ExecuteBuilderExtensions
- {
- public static void DropKeysAndIndexes(this IExecuteBuilder execute, string tableName)
- {
- execute.Code(context => DropKeysAndIndexes(context, tableName));
- }
-
- public static void DropKeysAndIndexes(this IExecuteBuilder execute)
- {
- execute.Code(DropKeysAndIndexes);
- }
-
- private static string DropKeysAndIndexes(IMigrationContext context, string tableName)
- {
- var local = context.GetLocalMigration();
-
- // drop keys
- var keys = context.SqlContext.SqlSyntax.GetConstraintsPerTable(context.Database).DistinctBy(x => x.Item2).ToArray();
- foreach (var key in keys.Where(x => x.Item1 == tableName && x.Item2.StartsWith("FK_")))
- local.Delete.ForeignKey(key.Item2).OnTable(key.Item1);
- foreach (var key in keys.Where(x => x.Item1 == tableName && x.Item2.StartsWith("PK_")))
- local.Delete.PrimaryKey(key.Item2).FromTable(key.Item1);
-
- // drop indexes
- var indexes = context.SqlContext.SqlSyntax.GetDefinedIndexesDefinitions(context.Database).DistinctBy(x => x.IndexName).ToArray();
- foreach (var index in indexes.Where(x => x.TableName == tableName))
- local.Delete.Index(index.IndexName).OnTable(index.TableName);
-
- return local.GetSql();
- }
-
- private static string DropKeysAndIndexes(IMigrationContext context)
- {
- var local = context.GetLocalMigration();
-
- // drop keys
- var keys = context.SqlContext.SqlSyntax.GetConstraintsPerTable(context.Database).DistinctBy(x => x.Item2).ToArray();
- foreach (var key in keys.Where(x => x.Item2.StartsWith("FK_")))
- local.Delete.ForeignKey(key.Item2).OnTable(key.Item1);
- foreach (var key in keys.Where(x => x.Item2.StartsWith("PK_")))
- local.Delete.PrimaryKey(key.Item2).FromTable(key.Item1);
-
- // drop indexes
- var indexes = context.SqlContext.SqlSyntax.GetDefinedIndexesDefinitions(context.Database).DistinctBy(x => x.IndexName).ToArray();
- foreach (var index in indexes)
- local.Delete.Index(index.IndexName).OnTable(index.TableName);
-
- return local.GetSql();
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs
deleted file mode 100644
index 3b8e1021bb..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-namespace Umbraco.Core.Migrations.Syntax.Execute
-{
- public interface IExecuteBuilder : IFluentSyntax
- {
- void Sql(string sqlStatement);
- void Code(Func codeStatement);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs
deleted file mode 100644
index 4aca632b3f..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-using System.Data;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax
-{
- public abstract class ExpressionBuilder : ExpressionBuilderBase
- where ExpressionT : IMigrationExpression
- where NextT : IFluentSyntax
- {
- protected ExpressionBuilder(ExpressionT expression)
- : base(expression)
- {
- }
-
- public abstract ColumnDefinition GetColumnForType();
-
- private ColumnDefinition Column
- {
- get { return GetColumnForType(); }
- }
-
- public NextT AsAnsiString()
- {
- Column.Type = DbType.AnsiString;
- return (NextT)(object)this;
- }
-
- public NextT AsAnsiString(int size)
- {
- Column.Type = DbType.AnsiString;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsBinary()
- {
- Column.Type = DbType.Binary;
- return (NextT)(object)this;
- }
-
- public NextT AsBinary(int size)
- {
- Column.Type = DbType.Binary;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsBoolean()
- {
- Column.Type = DbType.Boolean;
- return (NextT)(object)this;
- }
-
- public NextT AsByte()
- {
- Column.Type = DbType.Byte;
- return (NextT)(object)this;
- }
-
- public NextT AsCurrency()
- {
- Column.Type = DbType.Currency;
- return (NextT)(object)this;
- }
-
- public NextT AsDate()
- {
- Column.Type = DbType.Date;
- return (NextT)(object)this;
- }
-
- public NextT AsDateTime()
- {
- Column.Type = DbType.DateTime;
- return (NextT)(object)this;
- }
-
- public NextT AsDecimal()
- {
- Column.Type = DbType.Decimal;
- return (NextT)(object)this;
- }
-
- public NextT AsDecimal(int size, int precision)
- {
- Column.Type = DbType.Decimal;
- Column.Size = size;
- Column.Precision = precision;
- return (NextT)(object)this;
- }
-
- public NextT AsDouble()
- {
- Column.Type = DbType.Double;
- return (NextT)(object)this;
- }
-
- public NextT AsFixedLengthString(int size)
- {
- Column.Type = DbType.StringFixedLength;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsFixedLengthAnsiString(int size)
- {
- Column.Type = DbType.AnsiStringFixedLength;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsFloat()
- {
- Column.Type = DbType.Single;
- return (NextT)(object)this;
- }
-
- public NextT AsGuid()
- {
- Column.Type = DbType.Guid;
- return (NextT)(object)this;
- }
-
- public NextT AsInt16()
- {
- Column.Type = DbType.Int16;
- return (NextT)(object)this;
- }
-
- public NextT AsInt32()
- {
- Column.Type = DbType.Int32;
- return (NextT)(object)this;
- }
-
- public NextT AsInt64()
- {
- Column.Type = DbType.Int64;
- return (NextT)(object)this;
- }
-
- public NextT AsString()
- {
- Column.Type = DbType.String;
- return (NextT)(object)this;
- }
-
- public NextT AsString(int size)
- {
- Column.Type = DbType.String;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsTime()
- {
- Column.Type = DbType.Time;
- return (NextT)(object)this;
- }
-
- public NextT AsXml()
- {
- Column.Type = DbType.Xml;
- return (NextT)(object)this;
- }
-
- public NextT AsXml(int size)
- {
- Column.Type = DbType.Xml;
- Column.Size = size;
- return (NextT)(object)this;
- }
-
- public NextT AsCustom(string customType)
- {
- Column.Type = null;
- Column.CustomType = customType;
- return (NextT)(object)this;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs
deleted file mode 100644
index b4d8938fd1..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax
-{
- public abstract class ExpressionBuilderBase
- where T : IMigrationExpression
- {
- public T Expression { get; private set; }
-
- protected ExpressionBuilderBase(T expression)
- {
- Expression = expression;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs
deleted file mode 100644
index c1b6d7c2e5..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax
-{
- public interface IFluentSyntax
- {
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs
deleted file mode 100644
index 36fc624631..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Data;
-
-namespace Umbraco.Core.Migrations.Syntax
-{
- public interface IForeignKeyCascadeSyntax : IFluentSyntax
- where TNext : IFluentSyntax
- where TNextFk : IFluentSyntax
- {
- TNextFk OnDelete(Rule rule);
- TNextFk OnUpdate(Rule rule);
- TNext OnDeleteOrUpdate(Rule rule);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs
deleted file mode 100644
index e26e6ff45d..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Create;
-using Umbraco.Core.Migrations.Syntax.Delete;
-using Umbraco.Core.Migrations.Syntax.Execute;
-using Umbraco.Core.Migrations.Syntax.Rename;
-using Umbraco.Core.Migrations.Syntax.Update;
-
-namespace Umbraco.Core.Migrations.Syntax.IfDatabase
-{
- public interface IIfDatabaseBuilder : IFluentSyntax
- {
- ICreateBuilder Create { get; }
- IExecuteBuilder Execute { get; }
- IDeleteBuilder Delete { get; }
- IRenameBuilder Rename { get; }
- IUpdateBuilder Update { get; }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs
deleted file mode 100644
index 02d1483c0a..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using NPoco;
-using Umbraco.Core.Migrations.Syntax.Create;
-using Umbraco.Core.Migrations.Syntax.Delete;
-using Umbraco.Core.Migrations.Syntax.Execute;
-using Umbraco.Core.Migrations.Syntax.Rename;
-using Umbraco.Core.Migrations.Syntax.Update;
-
-namespace Umbraco.Core.Migrations.Syntax.IfDatabase
-{
- public class IfDatabaseBuilder : IIfDatabaseBuilder
- {
- private readonly IMigrationContext _context;
- private readonly DatabaseType[] _supportedDatabaseTypes;
-
- public IfDatabaseBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes)
- {
- _context = context;
- _supportedDatabaseTypes = supportedDatabaseTypes;
- }
-
- public ICreateBuilder Create => new CreateBuilder(_context, _supportedDatabaseTypes);
-
- public IExecuteBuilder Execute => new ExecuteBuilder(_context, _supportedDatabaseTypes);
-
- public IDeleteBuilder Delete => new DeleteBuilder(_context, _supportedDatabaseTypes);
-
- public IRenameBuilder Rename => new RenameBuilder(_context, _supportedDatabaseTypes);
-
- public IUpdateBuilder Update => new UpdateBuilder(_context, _supportedDatabaseTypes);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs
deleted file mode 100644
index c7022f7d15..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System.Collections.Generic;
-using System.Text;
-using NPoco;
-using Umbraco.Core.Persistence;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Insert.Expressions
-{
- public class InsertDataExpression : MigrationExpressionBase
- {
- private readonly List _rows = new List();
-
- public InsertDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- { }
-
- public string SchemaName { get; set; }
- public string TableName { get; set; }
- public bool EnabledIdentityInsert { get; set; }
-
- public List Rows => _rows;
-
- public override string ToString()
- {
- if (IsExpressionSupported() == false)
- return string.Empty;
-
- var sb = new StringBuilder();
-
- if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert())
- {
- sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} ON;", SqlSyntax.GetQuotedTableName(TableName)));
- if (CurrentDatabaseType.IsSqlServerOrCe())
- {
- sb.AppendLine("GO");
- }
- }
-
- try
- {
- foreach (var item in Rows)
- {
- var cols = "";
- var vals = "";
- foreach (var keyVal in item)
- {
- cols += SqlSyntax.GetQuotedColumnName(keyVal.Key) + ",";
- vals += GetQuotedValue(keyVal.Value) + ",";
- }
- cols = cols.TrimEnd(',');
- vals = vals.TrimEnd(',');
-
-
- var sql = string.Format(SqlSyntax.InsertData,
- SqlSyntax.GetQuotedTableName(TableName),
- cols, vals);
-
- sb.AppendLine(string.Format("{0};", sql));
- if (CurrentDatabaseType.IsSqlServerOrCe())
- {
- sb.AppendLine("GO");
- }
- }
- }
- finally
- {
- if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert())
- {
- sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} OFF;", SqlSyntax.GetQuotedTableName(TableName)));
- if (CurrentDatabaseType.IsSqlServerOrCe())
- {
- sb.AppendLine("GO");
- }
- }
- }
-
- return sb.ToString();
- }
-
-
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs
deleted file mode 100644
index eb5ba5ac90..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Insert
-{
- public interface IInsertBuilder : IFluentSyntax
- {
- IInsertDataSyntax IntoTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs
deleted file mode 100644
index b875640dc2..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Insert
-{
- public interface IInsertDataSyntax : IFluentSyntax
- {
- IInsertDataSyntax EnableIdentityInsert();
- IInsertDataSyntax Row(object dataAsAnonymousType);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs
deleted file mode 100644
index 734e6be39d..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel;
-using Umbraco.Core.Migrations.Syntax.Insert.Expressions;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
-
-namespace Umbraco.Core.Migrations.Syntax.Insert
-{
- public class InsertDataBuilder : IInsertDataSyntax
- {
- private readonly InsertDataExpression _expression;
-
- public InsertDataBuilder(InsertDataExpression expression)
- {
- _expression = expression;
- }
-
- public IInsertDataSyntax EnableIdentityInsert()
- {
- _expression.EnabledIdentityInsert = true;
- return this;
- }
-
- public IInsertDataSyntax Row(object dataAsAnonymousType)
- {
- _expression.Rows.Add(GetData(dataAsAnonymousType));
- return this;
- }
-
- private static InsertionDataDefinition GetData(object dataAsAnonymousType)
- {
- var data = new InsertionDataDefinition();
- var properties = TypeDescriptor.GetProperties(dataAsAnonymousType);
-
- foreach (PropertyDescriptor property in properties)
- {
- data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType)));
- }
-
- return data;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs
deleted file mode 100644
index 340749947b..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Rename.Column
-{
- public interface IRenameColumnTableSyntax : IFluentSyntax
- {
- IRenameColumnToSyntax OnTable(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs
deleted file mode 100644
index 166a07e05c..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Rename.Column
-{
- public interface IRenameColumnToSyntax : IFluentSyntax
- {
- void To(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs
deleted file mode 100644
index e432abb9e2..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Rename.Expressions;
-
-namespace Umbraco.Core.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;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs
deleted file mode 100644
index c390cd4c54..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using NPoco;
-using Umbraco.Core.Persistence;
-
-namespace Umbraco.Core.Migrations.Syntax.Rename.Expressions
-{
- public class RenameColumnExpression : MigrationExpressionBase
- {
- public RenameColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- { }
-
- 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 Process(IMigrationContext context)
- {
- if (CurrentDatabaseType.IsMySql())
- {
- string columnDefinitionSql = string.Format(@"
-SELECT CONCAT(
- CAST(COLUMN_TYPE AS CHAR),
- IF(ISNULL(CHARACTER_SET_NAME),
- '',
- CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)),
- IF(ISNULL(COLLATION_NAME),
- '',
- CONCAT(' COLLATE ', COLLATION_NAME)),
- ' ',
- IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''),
- IF(IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NULL,
- '',
- CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')),
- UPPER(extra))
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_NAME = '{0}' AND COLUMN_NAME = '{1}'", TableName, OldName);
-
- var columnDefinition = context.Database.ExecuteScalar(columnDefinitionSql);
- return this.ToString() + " " + columnDefinition;
- }
-
- return this.ToString();
- }
-
- public override string ToString()
- {
- if (IsExpressionSupported() == false)
- return string.Empty;
-
- return SqlSyntax.FormatColumnRename(TableName, OldName, NewName);
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs
deleted file mode 100644
index fc854a9e4d..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using NPoco;
-
-namespace Umbraco.Core.Migrations.Syntax.Rename.Expressions
-{
- public class RenameTableExpression : MigrationExpressionBase
- {
- public RenameTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- { }
-
- public virtual string SchemaName { get; set; }
- public virtual string OldName { get; set; }
- public virtual string NewName { get; set; }
-
- public override string ToString()
- {
- if (IsExpressionSupported() == false)
- return string.Empty;
-
- return SqlSyntax.FormatTableRename(OldName, NewName);
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs
deleted file mode 100644
index baad503753..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Rename.Column;
-using Umbraco.Core.Migrations.Syntax.Rename.Table;
-
-namespace Umbraco.Core.Migrations.Syntax.Rename
-{
- public interface IRenameBuilder : IFluentSyntax
- {
- IRenameTableSyntax Table(string oldName);
- IRenameColumnTableSyntax Column(string oldName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs
deleted file mode 100644
index 77962d0f78..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Rename.Table
-{
- public interface IRenameTableSyntax : IFluentSyntax
- {
- void To(string name);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs
deleted file mode 100644
index c1e2700028..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Umbraco.Core.Migrations.Syntax.Rename.Expressions;
-
-namespace Umbraco.Core.Migrations.Syntax.Rename.Table
-{
- public class RenameTableBuilder : ExpressionBuilderBase, IRenameTableSyntax
- {
- public RenameTableBuilder(RenameTableExpression expression) : base(expression)
- {
- }
-
- public void To(string name)
- {
- Expression.NewName = name;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs
deleted file mode 100644
index 0de91c5c2a..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System.Collections.Generic;
-using NPoco;
-
-namespace Umbraco.Core.Migrations.Syntax.Update.Expressions
-{
- public class UpdateDataExpression : MigrationExpressionBase
- {
- public UpdateDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes)
- : base(context, supportedDatabaseTypes)
- { }
-
- 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; }
-
- public override string ToString()
- {
- if (IsExpressionSupported() == false)
- return string.Empty;
-
- var updateItems = new List();
- var whereClauses = new List();
-
- foreach (var item in Set)
- {
- updateItems.Add(string.Format("{0} = {1}",
- SqlSyntax.GetQuotedColumnName(item.Key),
- GetQuotedValue(item.Value)));
- }
-
- if (IsAllRows)
- {
- whereClauses.Add("1 = 1");
- }
- else
- {
- foreach (var item in Where)
- {
- whereClauses.Add(string.Format("{0} {1} {2}",
- SqlSyntax.GetQuotedColumnName(item.Key),
- item.Value == null ? "IS" : "=",
- GetQuotedValue(item.Value)));
- }
- }
- return string.Format(SqlSyntax.UpdateData,
- SqlSyntax.GetQuotedTableName(TableName),
- string.Join(", ", updateItems.ToArray()),
- string.Join(" AND ", whereClauses.ToArray()));
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs
deleted file mode 100644
index 01e7c33961..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Update
-{
- public interface IUpdateBuilder : IFluentSyntax
- {
- IUpdateSetSyntax Table(string tableName);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs
deleted file mode 100644
index 1d9f2f05b7..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Update
-{
- public interface IUpdateSetSyntax
- {
- IUpdateWhereSyntax Set(object dataAsAnonymousType);
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs
deleted file mode 100644
index a3ca0d814f..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Umbraco.Core.Migrations.Syntax.Update
-{
- public interface IUpdateWhereSyntax
- {
- void Where(object dataAsAnonymousType);
- void AllRows();
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs
deleted file mode 100644
index c7811acea9..0000000000
--- a/src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel;
-using Umbraco.Core.Migrations.Syntax.Update.Expressions;
-
-namespace Umbraco.Core.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;
- }
- }
-}
diff --git a/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs
index 74c1c99dc6..ceb4e2d486 100644
--- a/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs
+++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs
@@ -2,8 +2,8 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using Umbraco.Core.Migrations.Expressions.Execute;
using Umbraco.Core.Migrations.Install;
-using Umbraco.Core.Migrations.Syntax.Execute;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
@@ -24,40 +24,35 @@ namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight
public override void Up()
{
// delete *all* keys and indexes - because of FKs
- //Execute.DropKeysAndIndexes(PreTables.PropertyData);
- Execute.DropKeysAndIndexes();
+ Delete.KeysAndIndexes();
MigratePropertyData();
MigrateContentAndPropertyTypes();
MigrateContent();
MigrateVersions();
- Execute.Code(context =>
- {
- if (context.Database.Fetch(@"SELECT uContentVersion.nodeId, COUNT(uContentVersion.id)
+ if (Database.Fetch(@"SELECT uContentVersion.nodeId, COUNT(uContentVersion.id)
FROM uContentVersion
JOIN uDocumentVersion ON uContentVersion.id=uDocumentVersion.id
WHERE uDocumentVersion.published=1
GROUP BY uContentVersion.nodeId
HAVING COUNT(uContentVersion.id) > 1").Any())
- {
- Debugger.Break();
- throw new Exception("Migration failed: duplicate 'published' document versions.");
- }
- if (context.Database.Fetch(@"SELECT v1.nodeId, v1.id, COUNT(v2.id)
+ {
+ Debugger.Break();
+ throw new Exception("Migration failed: duplicate 'published' document versions.");
+ }
+
+ if (Database.Fetch(@"SELECT v1.nodeId, v1.id, COUNT(v2.id)
FROM uContentVersion v1
LEFT JOIN uContentVersion v2 ON v1.nodeId=v2.nodeId AND v2.[current]=1
GROUP BY v1.nodeId, v1.id
HAVING COUNT(v2.id) <> 1").Any())
- {
- Debugger.Break();
- throw new Exception("Migration failed: missing or duplicate 'current' content versions.");
- }
- return string.Empty;
- });
+ {
+ Debugger.Break();
+ throw new Exception("Migration failed: missing or duplicate 'current' content versions.");
+ }
// re-create *all* keys and indexes
- //Create.KeysAndIndexes();
foreach (var x in DatabaseSchemaCreator.OrderedTables)
Create.KeysAndIndexes(x.Value);
}
@@ -90,14 +85,10 @@ HAVING COUNT(v2.id) <> 1").Any())
if (ColumnType(PreTables.PropertyData, "versionId") == "uniqueidentifier")
{
Execute.Sql($"ALTER TABLE {PreTables.PropertyData} ADD COLUMN versionId2 INT NULL;");
- Execute.Code(context =>
- {
- // SQLCE does not support UPDATE...FROM
- var temp = context.Database.Fetch($"SELECT id, versionId FROM {PreTables.ContentVersion}");
- foreach (var t in temp)
- context.Database.Execute($"UPDATE {PreTables.PropertyData} SET versionId2=@v2 WHERE versionId=@v1", new { v1 = t.versionId, v2 = t.id });
- return string.Empty;
- });
+ // SQLCE does not support UPDATE...FROM
+ var temp = Database.Fetch($"SELECT id, versionId FROM {PreTables.ContentVersion}");
+ foreach (var t in temp)
+ Database.Execute($"UPDATE {PreTables.PropertyData} SET versionId2=@v2 WHERE versionId=@v1", new { v1 = t.versionId, v2 = t.id });
Delete.Column("versionId").FromTable(PreTables.PropertyData);
ReplaceColumn(PreTables.PropertyData, "versionId2", "versionId");
}
@@ -173,30 +164,22 @@ HAVING COUNT(v2.id) <> 1").Any())
ReplaceColumn(PreTables.ContentVersion, "ContentId", "nodeId");
// populate contentVersion text, current and userId columns for documents
- Execute.Code(context =>
- {
- // SQLCE does not support UPDATE...FROM
- var temp = context.Database.Fetch($"SELECT versionId, text, newest, documentUser FROM {PreTables.Document}");
- foreach (var t in temp)
- context.Database.Execute($@"UPDATE {PreTables.ContentVersion} SET text=@text, {SqlSyntax.GetQuotedColumnName("current")}=@current, userId=@userId WHERE versionId=@versionId",
- new { text = t.text, current = t.newest, userId=t.documentUser, versionId=t.versionId });
- return string.Empty;
- });
+ // SQLCE does not support UPDATE...FROM
+ var temp1 = Database.Fetch($"SELECT versionId, text, newest, documentUser FROM {PreTables.Document}");
+ foreach (var t in temp1)
+ Database.Execute($@"UPDATE {PreTables.ContentVersion} SET text=@text, {SqlSyntax.GetQuotedColumnName("current")}=@current, userId=@userId WHERE versionId=@versionId",
+ new { text = t.text, current = t.newest, userId=t.documentUser, versionId=t.versionId });
// populate contentVersion text and current columns for non-documents, userId is default
- Execute.Code(context =>
- {
- // SQLCE does not support UPDATE...FROM
- var temp = context.Database.Fetch($@"SELECT cver.versionId, n.text
+ // SQLCE does not support UPDATE...FROM
+ var temp2 = Database.Fetch($@"SELECT cver.versionId, n.text
FROM {PreTables.ContentVersion} cver
JOIN {SqlSyntax.GetQuotedTableName(Constants.DatabaseSchema.Tables.Node)} n ON cver.nodeId=n.id
WHERE cver.versionId NOT IN (SELECT versionId FROM {SqlSyntax.GetQuotedTableName(PreTables.Document)})");
- foreach (var t in temp)
- context.Database.Execute($@"UPDATE {PreTables.ContentVersion} SET text=@text, {SqlSyntax.GetQuotedColumnName("current")}=1, userId=0 WHERE versionId=@versionId",
- new { text = t.text, versionId=t.versionId });
- return string.Empty;
- });
+ foreach (var t in temp2)
+ Database.Execute($@"UPDATE {PreTables.ContentVersion} SET text=@text, {SqlSyntax.GetQuotedColumnName("current")}=1, userId=0 WHERE versionId=@versionId",
+ new { text = t.text, versionId=t.versionId });
// create table
Create.Table(withoutKeysAndIndexes: true);
@@ -210,34 +193,30 @@ JOIN {SqlSyntax.GetQuotedTableName(PreTables.Document)} doc ON doc.nodeId=cver.n
// need to add extra rows for where published=newest
// 'cos INSERT above has inserted the 'published' document version
// and v8 always has a 'edited' document version too
- Execute.Code(context =>
- {
- var temp = context.Database.Fetch($@"SELECT doc.nodeId, doc.updateDate, doc.documentUser, doc.text, doc.templateId, cver.id versionId
+ var temp3 = Database.Fetch($@"SELECT doc.nodeId, doc.updateDate, doc.documentUser, doc.text, doc.templateId, cver.id versionId
FROM {SqlSyntax.GetQuotedTableName(PreTables.Document)} doc
JOIN {SqlSyntax.GetQuotedTableName(PreTables.ContentVersion)} cver ON doc.nodeId=cver.nodeId AND doc.versionId=cver.versionId
WHERE doc.newest=1 AND doc.published=1");
- var getIdentity = context.SqlContext.DatabaseType.IsMySql()
- ? "LAST_INSERT_ID()"
- : "@@@@IDENTITY";
- foreach (var t in temp)
- {
- context.Database.Execute($@"INSERT INTO {SqlSyntax.GetQuotedTableName(PreTables.ContentVersion)} (nodeId, versionId, versionDate, userId, {SqlSyntax.GetQuotedColumnName("current")}, text)
+ var getIdentity = Database.SqlContext.DatabaseType.IsMySql()
+ ? "LAST_INSERT_ID()"
+ : "@@@@IDENTITY";
+ foreach (var t in temp3)
+ {
+ Database.Execute($@"INSERT INTO {SqlSyntax.GetQuotedTableName(PreTables.ContentVersion)} (nodeId, versionId, versionDate, userId, {SqlSyntax.GetQuotedColumnName("current")}, text)
VALUES (@nodeId, @versionId, @versionDate, @userId, 1, @text)", new { nodeId=t.nodeId, versionId=Guid.NewGuid(), versionDate=t.updateDate, userId=t.documentUser, text=t.text });
- var id = context.Database.ExecuteScalar("SELECT " + getIdentity);
- context.Database.Execute($"UPDATE {SqlSyntax.GetQuotedTableName(PreTables.ContentVersion)} SET {SqlSyntax.GetQuotedColumnName("current")}=0 WHERE nodeId=@0 AND id<>@1", (int) t.nodeId, id);
- context.Database.Execute($@"INSERT INTO {SqlSyntax.GetQuotedTableName(Constants.DatabaseSchema.Tables.DocumentVersion)} (id, templateId, published)
+ var id = Database.ExecuteScalar("SELECT " + getIdentity);
+ Database.Execute($"UPDATE {SqlSyntax.GetQuotedTableName(PreTables.ContentVersion)} SET {SqlSyntax.GetQuotedColumnName("current")}=0 WHERE nodeId=@0 AND id<>@1", (int) t.nodeId, id);
+ Database.Execute($@"INSERT INTO {SqlSyntax.GetQuotedTableName(Constants.DatabaseSchema.Tables.DocumentVersion)} (id, templateId, published)
VALUES (@id, @templateId, 0)", new { id=id, templateId=t.templateId });
- var versionId = (int) t.versionId;
- var pdatas = context.Database.Fetch(Sql().Select().From().Where(x => x.VersionId == versionId));
- foreach (var pdata in pdatas)
- {
- pdata.VersionId = id;
- context.Database.Insert(pdata);
- }
+ var versionId = (int) t.versionId;
+ var pdatas = Database.Fetch(Sql().Select().From().Where(x => x.VersionId == versionId));
+ foreach (var pdata in pdatas)
+ {
+ pdata.VersionId = id;
+ Database.Insert(pdata);
}
- return string.Empty;
- });
+ }
// reduce document to 1 row per content
Execute.Sql($@"DELETE FROM {PreTables.Document}
@@ -260,12 +239,10 @@ WHERE versionId NOT IN (SELECT (versionId) FROM {PreTables.ContentVersion} WHERE
}
// set 'edited' to true whenever a 'non-published' property data is != a published one
- Execute.Code(context =>
- {
- // cannot compare NTEXT values in TSQL
- // cannot cast NTEXT to NVARCHAR(MAX) in SQLCE
- // ... bah ...
- var temp = context.Database.Fetch($@"SELECT n.id,
+ // cannot compare NTEXT values in TSQL
+ // cannot cast NTEXT to NVARCHAR(MAX) in SQLCE
+ // ... bah ...
+ var temp = Database.Fetch($@"SELECT n.id,
v1.intValue intValue1, v1.decimalValue decimalValue1, v1.dateValue dateValue1, v1.varcharValue varcharValue1, v1.textValue textValue1,
v2.intValue intValue2, v2.decimalValue decimalValue2, v2.dateValue dateValue2, v2.varcharValue varcharValue2, v2.textValue textValue2
FROM {Constants.DatabaseSchema.Tables.Node} n
@@ -276,12 +253,9 @@ JOIN {Constants.DatabaseSchema.Tables.DocumentVersion} dv ON cv2.id=dv.id AND dv
JOIN {Constants.DatabaseSchema.Tables.PropertyData} v2 ON cv2.id=v2.versionId
WHERE v1.propertyTypeId=v2.propertyTypeId AND v1.languageId=v2.languageId AND v1.segment=v2.segment");
- foreach (var t in temp)
- if (t.intValue1 != t.intValue2 || t.decimalValue1 != t.decimalValue2 || t.dateValue1 != t.dateValue2 || t.varcharValue1 != t.varcharValue2 || t.textValue1 != t.textValue2)
- context.Database.Execute("UPDATE {SqlSyntax.GetQuotedTableName(PreTables.Document)} SET edited=1 WHERE nodeId=@nodeIdd", new { t.id });
-
- return string.Empty;
- });
+ foreach (var t in temp)
+ if (t.intValue1 != t.intValue2 || t.decimalValue1 != t.decimalValue2 || t.dateValue1 != t.dateValue2 || t.varcharValue1 != t.varcharValue2 || t.textValue1 != t.textValue2)
+ Database.Execute("UPDATE {SqlSyntax.GetQuotedTableName(PreTables.Document)} SET edited=1 WHERE nodeId=@nodeIdd", new { t.id });
// drop more columns
Delete.Column("versionId").FromTable(PreTables.ContentVersion);
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 1a89bffa0a..853e91c8f4 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -898,113 +898,105 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs
index 7b71201a66..92ec8c6cf9 100644
--- a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs
+++ b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs
@@ -4,8 +4,8 @@ using NUnit.Framework;
using Semver;
using Umbraco.Core.Logging;
using Umbraco.Core.Migrations;
+using Umbraco.Core.Migrations.Expressions.Execute;
using Umbraco.Core.Migrations.Install;
-using Umbraco.Core.Migrations.Syntax.Execute;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
@@ -208,7 +208,7 @@ namespace Umbraco.Tests.Migrations
//Execute.DropKeysAndIndexes("umbracoNode");
// drops *all* tables keys and indexes
- Execute.DropKeysAndIndexes();
+ Delete.KeysAndIndexes();
}
}
@@ -256,7 +256,7 @@ namespace Umbraco.Tests.Migrations
public override void Up()
{
// cannot delete the column without this, of course
- Execute.DropKeysAndIndexes();
+ Delete.KeysAndIndexes();
Delete.Column("id").FromTable("umbracoNode");
diff --git a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs
index fb73ea6270..9799553ed2 100644
--- a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs
+++ b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs
@@ -8,7 +8,7 @@ using Semver;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Migrations;
-using Umbraco.Core.Migrations.Syntax.Alter.Expressions;
+using Umbraco.Core.Migrations.Expressions.Alter.Expressions;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Services;
diff --git a/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs b/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs
index cf9f8d791b..dec861dc37 100644
--- a/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs
+++ b/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs
@@ -6,8 +6,8 @@ using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Migrations;
-using Umbraco.Core.Migrations.Syntax.Create.Index;
-using Umbraco.Core.Migrations.Syntax.Expressions;
+using Umbraco.Core.Migrations.Expressions.Common.Expressions;
+using Umbraco.Core.Migrations.Expressions.Create.Index;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseAnnotations;