protected virtual void Generate(CreateUserDefinedTypeOperation operation, IModel model, MigrationCommandListBuilder builder, bool terminate = true) { builder .Append("CREATE TYPE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { for (var i = 0; i < operation.Columns.Count; i++) { var column = operation.Columns[i]; ColumnDefinition(column, model, builder); if (i != operation.Columns.Count - 1) { builder.AppendLine(","); } } builder.AppendLine(); } builder.Append(")"); if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } }
public static CassandraUserDefinedTypeBuilder <TColumns> CreateUserDefinedType <TColumns>(this MigrationBuilder migrationBuilder, string name, Func <CassandraUserDefinedTypeColumnsBuilder, TColumns> columns, string schema = null) { var createUserDefinedOperation = new CreateUserDefinedTypeOperation { Name = name, Schema = schema }; var columnsBuilder = new CassandraUserDefinedTypeColumnsBuilder(createUserDefinedOperation); var columnsObject = columns(columnsBuilder); var columnMap = new Dictionary <PropertyInfo, AddColumnOperation>(); foreach (var property in typeof(TColumns).GetTypeInfo().DeclaredProperties) { var addColumnOperation = ((IInfrastructure <AddColumnOperation>)property.GetMethod.Invoke(columnsObject, null)).Instance; if (addColumnOperation.Name == null) { addColumnOperation.Name = property.Name; } columnMap.Add(property, addColumnOperation); } var builder = new CassandraUserDefinedTypeBuilder <TColumns>(createUserDefinedOperation, columnMap); migrationBuilder.Operations.Add(createUserDefinedOperation); return(builder); }
protected override IEnumerable <MigrationOperation> Add(TableMapping target, DiffContext diffContext) { var schema = _cassandraOptionsExtension.DefaultKeyspace; var result = new List <MigrationOperation>(); var type = target.GetRootType(); if (!type.IsUserDefinedType()) { var entityType = target.EntityTypes[0]; var createTableOperation = new CreateTableOperation { Schema = schema, Name = target.Name, Comment = target.GetComment() }; createTableOperation.AddAnnotations(MigrationsAnnotations.For(entityType)); createTableOperation.Columns.AddRange(GetSortedProperties(target).SelectMany(p => Add(p, diffContext, inline: true)).Cast <AddColumnOperation>()); var primaryKey = target.EntityTypes[0].FindPrimaryKey(); if (primaryKey != null) { createTableOperation.PrimaryKey = Add(primaryKey, diffContext).Cast <AddPrimaryKeyOperation>().Single(); } createTableOperation.UniqueConstraints.AddRange( target.GetKeys().Where(k => !k.IsPrimaryKey()).SelectMany(k => Add(k, diffContext)) .Cast <AddUniqueConstraintOperation>()); createTableOperation.CheckConstraints.AddRange( target.GetCheckConstraints().SelectMany(c => Add(c, diffContext)) .Cast <CreateCheckConstraintOperation>()); foreach (var targetEntityType in target.EntityTypes) { diffContext.AddCreate(targetEntityType, createTableOperation); } result.Add(createTableOperation); foreach (var operation in target.GetIndexes().SelectMany(i => Add(i, diffContext))) { result.Add(operation); } return(result.ToArray()); } var createUserDefinedOperation = new CreateUserDefinedTypeOperation { Schema = schema, Name = target.Name, }; createUserDefinedOperation.Columns.AddRange(type.GetProperties().SelectMany(p => Add(p, diffContext, inline: true)).Cast <AddColumnOperation>()); result.Add(createUserDefinedOperation); foreach (var operation in target.GetIndexes().SelectMany(i => Add(i, diffContext))) { result.Add(operation); } return(result.ToArray()); }
protected virtual void Generate(CreateUserDefinedTypeOperation operation, IndentedStringBuilder builder) { builder.AppendLine(".CreateUserDefinedType("); using (builder.Indent()) { builder .Append("name: ") .Append(Code.Literal(operation.Name)); if (!string.IsNullOrWhiteSpace(operation.Schema)) { builder .AppendLine(",") .Append("schema: ") .Append(Code.Literal(operation.Schema)); } builder .AppendLine(",") .AppendLine("columns: table => new") .AppendLine("{"); var map = new Dictionary <string, string>(); using (builder.Indent()) { var scope = new List <string>(); for (int i = 0; i < operation.Columns.Count(); i++) { var column = operation.Columns[i]; var propertyName = Code.Identifier(column.Name, scope); map.Add(column.Name, propertyName); builder .Append(propertyName) .Append(" = table.Column<") .Append(Code.Reference(column.ClrType)) .Append(">("); builder.Append("nullable: ") .Append(Code.Literal(column.IsNullable)); builder.Append(")"); if (i != operation.Columns.Count - 1) { builder.Append(","); } builder.AppendLine(); } } builder.Append("}"); builder.Append(")"); } }
public CassandraUserDefinedTypeColumnsBuilder(CreateUserDefinedTypeOperation createUserDefinedTypeOperation) { _createUserDefinedTypeOperation = createUserDefinedTypeOperation; }
public CassandraUserDefinedTypeBuilder(CreateUserDefinedTypeOperation operation, IReadOnlyDictionary <PropertyInfo, AddColumnOperation> columnMap) : base(operation) { _columnMap = columnMap; }