private static bool ComparePK(SQLStatementWriter sb, JMXSchema schema, JMXSchema fromDbSchema) { ///Add PK compare ///writeDropPKStatement ///writeCreatePKStatement ///The constraint 'XPK1Requests' is being referenced by table 'PaymentStateHists', ///foreign key constraint 'FK_PAYMENTSTATEHISTS_REQUESTS'. ///Could not drop constraint. See previous errors. if (schema.PrimaryKey == null && fromDbSchema.PrimaryKey != null) { //writeDropPKStatement(sb, fromDbSchema); return(true); } else if (schema.PrimaryKey != null && fromDbSchema.PrimaryKey == null) { sb.WriteCreatePKStatement(); } else if (schema.PrimaryKey != null && schema.PrimaryKey.KeyName != fromDbSchema.PrimaryKey.KeyName || schema.PrimaryKey.KeyMembers == fromDbSchema.PrimaryKey.KeyMembers) { //writeDropPKStatement(sb, fromDbSchema); //writeCreatePKStatement(sb, schema); return(true); } return(false); }
private static async Task RecreateSchemaAsync(MdbContext mdb, SQLStatementWriter sb, JMXSchema schema, JMXSchema fromDbSchema) { int recCount = await mdb.ExecuteAsync <int>($"select count(*) from {fromDbSchema.DbObjectName}"); foreach (var fk in fromDbSchema.ParentRelations) { sb.WriteDropParentRelationStatement(fk); } foreach (var fk in fromDbSchema.ForeignKeys) { sb.WriteDropFKStatement(fk, fromDbSchema); } string tmpTableName = fromDbSchema.DbObjectName.ObjectName + "_" + DateTime.Now.Subtract(vbo.Date()).Seconds.ToString(); if (recCount > 0) { sb.WriteRenameTableStatement(tmpTableName, fromDbSchema); } else { sb.WriteDropTableStatement(null, fromDbSchema); } sb.WriteCreateTableStatements(schema); if (recCount > 0) { sb.WriteInsertRowsStatement(tmpTableName, schema); sb.WriteDropTableStatement(tmpTableName, fromDbSchema); } sb.WriteCreatePKStatement(schema); foreach (var att in schema.Attributes) { sb.WriteCreateConstraintStatement(att, schema); } foreach (var index in schema.Indexes) { sb.WriteCreateIndexStatement(index, schema); } foreach (var fk in schema.ForeignKeys) { sb.WriteCreateFKStatement(fk, schema); } /// Need test foreach (var fk in fromDbSchema.ParentRelations) { sb.WriteCreateParentRelationStatement(fk); } }