示例#1
0
 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);
 }
示例#2
0
        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);
            }
        }