Exemple #1
0
        private static string GetDiffs(AttribCompareDiff diff)
        {
            List <string> l = new List <string>();

            if (((diff & AttribCompareDiff.notFound) == AttribCompareDiff.notFound))
            {
                l.Add(AttribCompareDiff.notFound.ToString());
            }
            if (((diff & AttribCompareDiff.name) == AttribCompareDiff.name))
            {
                l.Add(AttribCompareDiff.name.ToString());
            }
            if (((diff & AttribCompareDiff.dataTtype) == AttribCompareDiff.dataTtype))
            {
                l.Add(AttribCompareDiff.dataTtype.ToString());
            }
            if (((diff & AttribCompareDiff.size) == AttribCompareDiff.size))
            {
                l.Add(AttribCompareDiff.size.ToString());
            }
            if (((diff & AttribCompareDiff.nullOptions) == AttribCompareDiff.nullOptions))
            {
                l.Add(AttribCompareDiff.nullOptions.ToString());
            }
            if (((diff & AttribCompareDiff.identity) == AttribCompareDiff.identity))
            {
                l.Add(AttribCompareDiff.identity.ToString());
            }
            if (l.Count == 0)
            {
                l.Add(AttribCompareDiff.none.ToString());
            }
            return(string.Join('\t', l.ToArray()));
        }
Exemple #2
0
        private static bool CompareAttributes(SQLStatementWriter sb, JMXSchema schema, JMXSchema fromDbSchema)
        {
            bool recreate = false;
            int  count    = schema.Attributes.Count;
            List <(JMXAttribute att, JMXAttribute att2, AttribCompareDiff diff)> l =
                new List <(JMXAttribute, JMXAttribute, AttribCompareDiff)>();

            for (int i = 0; i < count; i++)
            {
                var att  = schema.Attributes[i];
                var att2 = fromDbSchema.Attributes.FirstOrDefault(a =>
                                                                  a.FieldName.Equals(att.FieldName, StringComparison.OrdinalIgnoreCase));

                bool found             = (att2 != null);
                AttribCompareDiff diff = AttribCompareDiff.none;
                if (found)
                {
                    if (!att.ServerDataType.Equals(att2.ServerDataType, StringComparison.OrdinalIgnoreCase))
                    {
                        diff = AttribCompareDiff.dataTtype;
                    }
                    if (att.Required != att2.Required)
                    {
                        diff |= AttribCompareDiff.nullOptions;
                    }
                    if (att.Identity.IsIdentity != att2.Identity.IsIdentity ||
                        att.Identity.Seed != att2.Identity.Seed ||
                        att.Identity.Increment != att2.Identity.Increment)
                    {
                        diff |= AttribCompareDiff.identity;
                    }

                    if (att.DataType != MdbType.@object &&
                        !att.AttribName.Equals(att2.FieldName, StringComparison.OrdinalIgnoreCase))
                    {
                        diff |= AttribCompareDiff.name;
                    }

                    //Server DataTypes is equals
                    if ((diff & AttribCompareDiff.dataTtype) != AttribCompareDiff.dataTtype)
                    {
                        MdbTypeInfo ti = SqlServerHelper.TypeInfo[att.ServerDataType];
                        if (!ti.FixedSize)
                        {
                            if (SqlServerHelper.TypeMapping.GetVariableLenghtDataTypes().Contains(att.ServerDataType) && att.DataSize.Size != att2.DataSize.Size)
                            {
                                diff |= AttribCompareDiff.size;
                            }
                            else if (ti.MdbType == MdbType.@decimal && (att.DataSize.Precision != att2.DataSize.Precision ||
                                                                        att.DataSize.Scale != att2.DataSize.Scale))
                            {
                                diff |= AttribCompareDiff.size;
                            }
                        }
                    }
                    if (!att.CheckConstraint
                        .Definition
                        .RemoveChar("[( )]".ToCharArray())
                        .Equals(att2.CheckConstraint
                                .Definition
                                .RemoveChar("[( )]".ToCharArray()),
                                StringComparison.OrdinalIgnoreCase))
                    {
                        diff |= AttribCompareDiff.constraint;
                    }
                    else if (!att.DefaultConstraint
                             .Definition.RemoveChar("[( )]".ToCharArray())
                             .Equals(att2.DefaultConstraint
                                     .Definition
                                     .RemoveChar("[( )]".ToCharArray()),
                                     StringComparison.OrdinalIgnoreCase))
                    {
                        diff |= AttribCompareDiff.constraint;
                    }
                }
                //else if (att2 != null)
                //	diff |= AttribCompareDiff.name;
                else
                {
                    diff = AttribCompareDiff.notFound;
                }
                l.Add((att, att2, diff));
            }
            foreach (var att2 in fromDbSchema.Attributes)
            {
                //var att = schema.Attributes.FirstOrDefault(a => a.ID == att2.ID);
                var att = schema.Attributes.FirstOrDefault(a =>
                                                           a.FieldName.Equals(att2.FieldName, StringComparison.OrdinalIgnoreCase));
                if (att == null)
                {
                    l.Add((att, att2, AttribCompareDiff.remove));
                }
            }

            foreach (var(att, att2, diff) in l)
            {
                if ((diff & AttribCompareDiff.remove) == AttribCompareDiff.remove)
                {
                    sb.WriteDropColumnStatement(att2);
                    continue;
                }
                if ((diff & AttribCompareDiff.constraint) == AttribCompareDiff.constraint)
                {
                    sb.WriteDropConstraintStatement(att2, fromDbSchema);
                    sb.WriteCreateConstraintStatement(att);
                }
                if ((diff & AttribCompareDiff.dataTtype) == AttribCompareDiff.dataTtype ||
                    (diff & AttribCompareDiff.size) == AttribCompareDiff.size ||
                    (diff & AttribCompareDiff.nullOptions) == AttribCompareDiff.nullOptions)
                {
                    sb.WriteAlterColumnStatement(att);
                }
                else if ((diff & AttribCompareDiff.notFound) == AttribCompareDiff.notFound)
                {
                    sb.WriteAlterColumnStatement(att, true);
                }
                else if ((diff & AttribCompareDiff.name) == AttribCompareDiff.name)
                {
                    att.FieldName = att.AttribName;
                    sb.WriteRenameColumnStatement(att2.FieldName, att.FieldName);
                }
                else if ((diff & AttribCompareDiff.identity) == AttribCompareDiff.identity)
                {
                    recreate = true;
                }
            }
            return(recreate);
        }