Пример #1
0
        private static string[] CreateNewStatements(JMXSchema schema)
        {
            List <string> sql = new List <string>();

            using (SQLStatementWriter sb = new SQLStatementWriter(SqlServerHelper.TypeMapping, schema))
            {
                sb.WriteCreateNewTableStatements();
                sql.Add(sb.ToString());
            }
            return(sql.ToArray());
        }
Пример #2
0
        /// <summary>
        /// !!! Add to GetTableSchema detail references as attributes for cascade delete FK
        /// </summary>
        /// <param name="sb"></param>
        /// <param name="schema"></param>
        /// <param name="fromDbSchema"></param>
        /// <returns></returns>
        private async Task CompareSchemasStatementsAsync(SQLStatementWriter sb, JMXSchema schema, JMXSchema fromDbSchema)
        {
            MdbContext mdb      = Factory.GetMdbContext();
            bool       recreate = false;

            foreach (var att in fromDbSchema.Attributes.Where(a => a.FieldName.StartsWith(JMXFactory.DETAIL_FIELD_PREFIX)))
            {
                if (!schema.Attributes.Any(a => a.FieldName == att.FieldName))
                {
                    string[] names        = att.FieldName.Split('_');
                    var      schemaFromDb = await GetObjectSchemaAsync(new JMXObjectName(names[1], names[2]).ToString());

                    if (schemaFromDb != null)
                    {
                        await WriteDropStatementsAsync(sb, schemaFromDb);
                    }
                }
            }

            recreate = CompareAttributes(sb, schema, fromDbSchema);
            if (!recreate)
            {
                recreate = ComparePK(sb, schema, fromDbSchema);
            }

            if (!recreate)
            {
                CompareIndexes(sb, schema, fromDbSchema);
                CompareFK(sb, schema, fromDbSchema);
            }
            else
            {
                await RecreateSchemaAsync(mdb, sb, schema, fromDbSchema);
            }

            foreach (var att in schema.Attributes.Where(a => a.DataType == MdbType.@object))
            {
                var schemaFromDb = await GetObjectSchemaAsync(att.ObjectSchema.DbObjectName.ToString());

                if (schemaFromDb != null)
                {
                    await CompareSchemasStatementsAsync(sb, att.ObjectSchema, schemaFromDb);
                }
                else
                {
                    sb.WriteCreateNewTableStatements(att.ObjectSchema);
                }
            }
        }