Example #1
0
        private static IEnumerable <PrimaryKeyOperation> BuildChangePrimaryKeyOperations(
            string oldTable, string newTable, XElement oldKey, XElement newKey)
        {
            var dropPrimaryKeyOperation
                = new DropPrimaryKeyOperation
                {
                Table    = oldTable,
                IsSystem = oldKey.IsSystem()
                };

            oldKey.Descendants(EdmXNames.Ssdl.PropertyRefNames).Each(
                pr => dropPrimaryKeyOperation.Columns.Add(pr.NameAttribute()));

            yield return(dropPrimaryKeyOperation);

            var addPrimaryKeyOperation
                = new AddPrimaryKeyOperation
                {
                Table    = newTable,
                IsSystem = newKey.IsSystem()
                };

            newKey.Descendants(EdmXNames.Ssdl.PropertyRefNames).Each(
                pr => addPrimaryKeyOperation.Columns.Add(pr.NameAttribute()));

            yield return(addPrimaryKeyOperation);
        }
Example #2
0
        protected virtual void Generate([NotNull] DropPrimaryKeyOperation operation, [NotNull] IndentedStringBuilder builder)
        {
            Check.NotNull(operation, nameof(operation));
            Check.NotNull(builder, nameof(builder));

            builder
            .Append(".DropPrimaryKey(name: ")
            .Append(_code.Literal(operation.Name));

            if (operation.Schema != null)
            {
                builder
                .Append(", schema: ")
                .Append(_code.Literal(operation.Schema));
            }

            builder
            .Append(", table: ")
            .Append(_code.Literal(operation.Table))
            .Append(")");

            using (builder.Indent())
            {
                Annotations(operation.Annotations, builder);
            }
        }
Example #3
0
        /// <summary>
        /// Generates a migration operation to drpo an existing primary key.
        /// </summary>
        /// <param name="op">The operation that represents dropping an existing primary key.</param>
        /// <returns>A migration operation to drop an existing primary key.</returns>
        protected virtual MigrationStatement Generate(DropPrimaryKeyOperation op)
        {
            object        obj2;
            bool          deleteAutoIncrement = false;
            StringBuilder sb = new StringBuilder();


            op.AnonymousArguments.TryGetValue("DeleteAutoIncrement", out obj2);
            if (obj2 != null)
            {
                bool.TryParse(obj2.ToString(), out deleteAutoIncrement);
            }

            if (deleteAutoIncrement && op.Columns.Count == 1)
            {
                var newColumn = new ColumnModel(PrimitiveTypeKind.Int32, null);
                newColumn.Name = op.Columns[0];
                var alterColumn = new AlterColumnOperation(op.Table, newColumn, false);
                var ms          = Generate(alterColumn);
                sb.Append(ms.Sql + "; ");
            }

            return(new MigrationStatement {
                Sql = sb.ToString() + " alter table `" + op.Table + "` drop primary key "
            });
        }
 public override void Generate(
     DropPrimaryKeyOperation dropPrimaryKeyOperation,
     IndentedStringBuilder stringBuilder)
 {
     // TODO: Rebuild table
     throw new NotImplementedException();
 }
Example #5
0
 private HistoryRebuildOperationSequence(
     AddColumnOperation addColumnOperation,
     DropPrimaryKeyOperation dropPrimaryKeyOperation)
     : base(null)
 {
     AddColumnOperation      = addColumnOperation;
     DropPrimaryKeyOperation = dropPrimaryKeyOperation;
 }
Example #6
0
        public void Create_and_initialize_operation()
        {
            var dropPrimaryKeyOperation = new DropPrimaryKeyOperation("dbo.MyTable", "MyPK");

            Assert.Equal("dbo.MyTable", dropPrimaryKeyOperation.TableName);
            Assert.Equal("MyPK", dropPrimaryKeyOperation.PrimaryKeyName);
            Assert.True(dropPrimaryKeyOperation.IsDestructiveChange);
        }
        protected override void Generate([NotNull] DropPrimaryKeyOperation operation, [CanBeNull] IModel model, [NotNull] MigrationCommandListBuilder builder)
        {
            Check.NotNull(operation, nameof(operation));
            Check.NotNull(builder, nameof(builder));
            //future implementation

            EndStatement(builder);
        }
Example #8
0
        protected override void Generate(DropPrimaryKeyOperation operation, IModel model, MigrationCommandListBuilder builder)
        {
            builder.Append("ALTER TABLE ")
            .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema))
            .Append(" DROP CONSTRAINT ")
            .Append(operation.Name);

            EndStatement(builder);
        }
 protected virtual IEnumerable <MigrationStatement> Generate(DropPrimaryKeyOperation operation)
 {
     using (var writer = SqlWriter())
     {
         writer.Write("DROP INDEX ");
         writer.Write(Quote(string.Format("{0}.{1}", SchemaName(operation.Table), FixName(operation.Name))));
         yield return(Statement(writer));
     }
 }
        public void DropPrimaryKeyOperation()
        {
            var migrationOperations = new List <MigrationOperation>();

            // create table where the PK exists
            var createTableOperation = CreateTableOperation();

            migrationOperations.Add(createTableOperation);

            var createDropPKOperation = new DropPrimaryKeyOperation(anonymousArguments: new { DeleteAutoIncrement = true });

            createDropPKOperation.Table = "Posts";
            createDropPKOperation.Columns.Add("PostId");
            migrationOperations.Add(createDropPKOperation);

            using (BlogContext context = new BlogContext())
            {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }
                context.Database.Create();


                Assert.Equal(true, GenerateAndExecuteMySQLStatements(migrationOperations));

                using (var conn = new MySqlConnection(context.Database.Connection.ConnectionString))
                {
                    if (conn.State == System.Data.ConnectionState.Closed)
                    {
                        conn.Open();
                    }

                    // check for table creation
                    var query = new MySqlCommand("select Count(*) from information_schema.Tables WHERE `table_name` = 'Posts' and `table_schema` = '" + conn.Database + "' ", conn);
                    int rows  = Convert.ToInt32(query.ExecuteScalar());
                    Assert.Equal(1, rows);

                    // check if PK exists
                    query = new MySqlCommand("select Count(*) from information_schema.table_constraints where `constraint_type` = 'primary key' and `constraint_schema` = '" + conn.Database + "' and table_name= 'Posts'", conn);
                    rows  = Convert.ToInt32(query.ExecuteScalar());
                    Assert.Equal(0, rows);

                    //check the definition of the column that was PK
                    query = new MySqlCommand("Select Column_name, Is_Nullable, Data_Type from information_schema.Columns where table_schema ='" + conn.Database + "' and table_name = 'Posts' and column_name ='PostId'", conn);
                    MySqlDataReader reader = query.ExecuteReader();
                    while (reader.Read())
                    {
                        Assert.Equal("PostId", reader[0].ToString());
                        Assert.Equal("NO", reader[1].ToString());
                        Assert.Equal("int", reader[2].ToString());
                    }
                    reader.Close();
                    conn.Close();
                }
            }
        }
        protected override void Generate([NotNull] DropPrimaryKeyOperation operation, [CanBeNull] IModel model, [NotNull] MigrationCommandListBuilder builder)
        {
            Check.NotNull(operation, nameof(operation));
            Check.NotNull(builder, nameof(builder));
            builder.Append(@"DROP PROCEDURE IF EXISTS POMELO_BEFORE_DROP_PRIMARY_KEY;
CREATE PROCEDURE POMELO_BEFORE_DROP_PRIMARY_KEY(IN `TABLE_NAME_ARGUMENT` VARCHAR(255))
BEGIN
	DECLARE HAS_AUTO_INCREMENT_ID TINYINT(1);
	DECLARE PRIMARY_KEY_COLUMN_NAME VARCHAR(255);
	DECLARE PRIMARY_KEY_TYPE VARCHAR(255);
	DECLARE SQL_EXP VARCHAR(1000);

	SELECT COUNT(*) 
		INTO HAS_AUTO_INCREMENT_ID 
		FROM `information_schema`.`COLUMNS`
		WHERE `TABLE_SCHEMA` = (SELECT SCHEMA())
			AND `TABLE_NAME` = TABLE_NAME_ARGUMENT
			AND `Extra` = 'auto_increment'
			AND `COLUMN_KEY` = 'PRI'
			LIMIT 1;
	IF HAS_AUTO_INCREMENT_ID THEN
		SELECT `COLUMN_TYPE`
			INTO PRIMARY_KEY_TYPE
			FROM `information_schema`.`COLUMNS`
			WHERE `TABLE_SCHEMA` = (SELECT SCHEMA())
				AND `TABLE_NAME` = TABLE_NAME_ARGUMENT
				AND `COLUMN_KEY` = 'PRI'
			LIMIT 1;
		SELECT `COLUMN_NAME`
			INTO PRIMARY_KEY_COLUMN_NAME
			FROM `information_schema`.`COLUMNS`
			WHERE `TABLE_SCHEMA` = (SELECT SCHEMA())
				AND `TABLE_NAME` = TABLE_NAME_ARGUMENT
				AND `COLUMN_KEY` = 'PRI'
			LIMIT 1;
		SET SQL_EXP = CONCAT('ALTER TABLE `', (SELECT SCHEMA()), '`.`', TABLE_NAME_ARGUMENT, '` MODIFY COLUMN `', PRIMARY_KEY_COLUMN_NAME, '` ', PRIMARY_KEY_TYPE, ' NOT NULL;');
		SET @SQL_EXP = SQL_EXP;
		PREPARE SQL_EXP_EXECUTE FROM @SQL_EXP;
		EXECUTE SQL_EXP_EXECUTE;
		DEALLOCATE PREPARE SQL_EXP_EXECUTE;
	END IF;
END;");
            builder.AppendLine();

            builder.Append($"CALL POMELO_BEFORE_DROP_PRIMARY_KEY('{ operation.Table }');");
            builder.AppendLine();
            builder.Append($"DROP PROCEDURE IF EXISTS POMELO_BEFORE_DROP_PRIMARY_KEY;");
            builder.AppendLine();

            builder
            .Append("ALTER TABLE ")
            .Append(SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema))
            .Append(" DROP PRIMARY KEY;")
            .AppendLine();

            EndStatement(builder);
        }
        private string GenerateSqlStatementConcrete(DropPrimaryKeyOperation migrationOperation)
        {
            DB2DdlBuilder ddlBuilder = new DB2DdlBuilder();

            ddlBuilder.AppendSql("ALTER TABLE ");
            ddlBuilder.AppendIdentifier(migrationOperation.Table);
            ddlBuilder.AppendSql(" DROP PRIMARY KEY ");
            return(ddlBuilder.GetCommandText());
        }
        public override void Visit(DropPrimaryKeyOperation operation, Context context)
        {
            Check.NotNull(operation, "operation");
            Check.NotNull(context, "context");

            var handler = context.EnsureHandler(operation.TableName, supported: false);

            handler.AddOperation(operation);
        }
 protected override void Generate(
     DropPrimaryKeyOperation operation,
     IModel model,
     MigrationCommandListBuilder builder,
     bool terminate = true)
 {
     // It does nothing due to this operation should not be isolated for MySQL
     EndStatement(builder);
 }
        public void Dispatches_visitor()
        {
            var dropPrimaryKeyOperation = new DropPrimaryKeyOperation("dbo.MyTable", "MyPK");
            var mockVisitor             = new Mock <MigrationOperationSqlGenerator>(new RelationalTypeMapper());
            var builder = new Mock <IndentedStringBuilder>();

            dropPrimaryKeyOperation.GenerateSql(mockVisitor.Object, builder.Object);

            mockVisitor.Verify(g => g.Generate(dropPrimaryKeyOperation, builder.Object), Times.Once());
        }
Example #16
0
        public void Dispatches_visitor()
        {
            var dropPrimaryKeyOperation = new DropPrimaryKeyOperation("dbo.MyTable", "MyPK");
            var mockVisitor             = MigrationsTestHelpers.MockSqlGenerator();
            var builder = new Mock <SqlBatchBuilder>();

            dropPrimaryKeyOperation.GenerateSql(mockVisitor.Object, builder.Object);

            mockVisitor.Verify(g => g.Generate(dropPrimaryKeyOperation, builder.Object), Times.Once());
        }
Example #17
0
        protected override void Generate(
            DropPrimaryKeyOperation operation,
            IModel model,
            MigrationCommandListBuilder builder)
        {
            ThrowIf.Argument.IsNull(operation, "operation");
            ThrowIf.Argument.IsNull(builder, "builder");

            throw new NotImplementedException();
        }
        public virtual void Visit(DropPrimaryKeyOperation dropPrimaryKeyOperation, DatabaseModel databaseModel)
        {
            var table = databaseModel.GetTable(dropPrimaryKeyOperation.TableName);

            Contract.Assert(
                table.PrimaryKey != null &&
                table.PrimaryKey.Name == dropPrimaryKeyOperation.PrimaryKeyName);

            table.PrimaryKey = null;
        }
Example #19
0
        public virtual void Generate([NotNull] DropPrimaryKeyOperation dropPrimaryKeyOperation, [NotNull] IndentedStringBuilder stringBuilder, bool generateIdempotentSql)
        {
            Check.NotNull(dropPrimaryKeyOperation, "dropPrimaryKeyOperation");

            stringBuilder
            .Append("ALTER TABLE ")
            .Append(DelimitIdentifier(dropPrimaryKeyOperation.TableName))
            .Append(" DROP CONSTRAINT ")
            .Append(DelimitIdentifier(dropPrimaryKeyOperation.PrimaryKeyName));
        }
        public void Generate_when_drop_primary_key_operation()
        {
            var operation = new DropPrimaryKeyOperation("dbo.MyTable", "MyPK");

            Assert.Equal(
                @"DropPrimaryKey(""dbo.MyTable"", ""MyPK"")",
                CSharpMigrationCodeGenerator.Generate(operation));

            GenerateAndValidateCode(operation);
        }
Example #21
0
        private string GenerateSqlStatementConcrete(DropPrimaryKeyOperation migrationOperation)
        {
            var ddlBuilder = new SQLiteDdlBuilder();

            ddlBuilder.AppendSql("ALTER TABLE ");
            ddlBuilder.AppendIdentifier(migrationOperation.Table);
            ddlBuilder.AppendSql(" DROP CONSTRAINT ");
            ddlBuilder.AppendIdentifier(migrationOperation.Name);
            return(ddlBuilder.GetCommandText());
        }
Example #22
0
        protected override void Generate(
            DropPrimaryKeyOperation operation,
            IModel model,
            MigrationCommandListBuilder builder)
        {
            base.Generate(operation, model, builder, terminate: false);

            builder
            .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator)
            .EndCommand();
        }
Example #23
0
        protected internal void DropPrimaryKey(string table, string schema = "dbo", object anonymousArguments = null)
        {
            RuntimeFailureMethods.Requires(!string.IsNullOrWhiteSpace(table), null, "!string.IsNullOrWhiteSpace(table)");
            table = string.Format("{0}.{1}", schema, table);
            var migrationOperation = new DropPrimaryKeyOperation(anonymousArguments)
            {
                Table = table
            };

            AddOperation(migrationOperation);
        }
 protected virtual IEnumerable <MigrationStatement> Generate(DropPrimaryKeyOperation operation)
 {
     using (var writer = SqlWriter())
     {
         writer.Write("ALTER TABLE ");
         writer.Write(Quote(CheckName(ExtractName(operation.Table))));
         writer.Write(" DROP CONSTRAINT ");
         writer.Write(Quote(CheckName(CreateItemName(operation.Name))));
         yield return(Statement(writer));
     }
 }
Example #25
0
        private void Convert(DropPrimaryKeyOperation dropPrimaryKeyOperation)
        {
            StringBuilder sql = new StringBuilder();

            sql.Append("ALTER TABLE ");
            AppendTableName(dropPrimaryKeyOperation.Table, sql);
            sql.Append(" DROP CONSTRAINT \"");
            sql.Append(dropPrimaryKeyOperation.Name);
            sql.Append('"');
            AddStatment(sql);
        }
Example #26
0
        protected override void Generate(
            DropPrimaryKeyOperation operation,
            IModel model,
            MigrationCommandListBuilder builder)
        {
            base.Generate(operation, model, builder, terminate: false);

            builder
            .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator)
            .EndCommand(suppressTransaction: IsMemoryOptimized(operation, model, operation.Schema, operation.Table));
        }
        public virtual void Generate([NotNull] DropPrimaryKeyOperation dropPrimaryKeyOperation, [NotNull] SqlBatchBuilder batchBuilder)
        {
            Check.NotNull(dropPrimaryKeyOperation, "dropPrimaryKeyOperation");
            Check.NotNull(batchBuilder, "batchBuilder");

            batchBuilder
            .Append("ALTER TABLE ")
            .Append(DelimitIdentifier(dropPrimaryKeyOperation.TableName))
            .Append(" DROP CONSTRAINT ")
            .Append(DelimitIdentifier(dropPrimaryKeyOperation.PrimaryKeyName));
        }
        protected virtual void Generate(DropPrimaryKeyOperation opeDropPrimaryKey)
        {
            using (var ltextWriter = TextWriter())
            {
                ltextWriter.Write("ALTER TABLE ");
                ltextWriter.Write(RemoveDBO(opeDropPrimaryKey.Table));
                ltextWriter.Write(" DROP CONSTRAINT ");
                ltextWriter.Write(opeDropPrimaryKey.Name);

                ComandoSQL(ltextWriter);
            }
        }
        public override void Generate([NotNull] DropPrimaryKeyOperation dropPrimaryKeyOperation, [NotNull] IndentedStringBuilder stringBuilder)
        {
            Check.NotNull(dropPrimaryKeyOperation, "dropPrimaryKeyOperation");
            Check.NotNull(stringBuilder, "stringBuilder");

            stringBuilder
            .Append("DropPrimaryKey(")
            .Append(GenerateLiteral(dropPrimaryKeyOperation.TableName))
            .Append(", ")
            .Append(GenerateLiteral(dropPrimaryKeyOperation.PrimaryKeyName))
            .Append(")");
        }
    public async Task DropPrimaryKey()
    {
        var operation = new DropPrimaryKeyOperation()
        {
            Table = "People",
            Name  = "PK_People",
        };
        var batch = await Generate(new[] { operation });

        Assert.AreEqual(1, batch.Count());
        Assert.AreEqual(NewLineEnd(@"ALTER TABLE ""People"" DROP CONSTRAINT ""PK_People"";"), batch[0].CommandText);
    }