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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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;
 }
Пример #6
0
 public CassandraUserDefinedTypeBuilder(CreateUserDefinedTypeOperation operation,
                                        IReadOnlyDictionary <PropertyInfo, AddColumnOperation> columnMap) : base(operation)
 {
     _columnMap = columnMap;
 }