Example #1
0
        private void XRevisions_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (xRevisionList.SelectedItem == null)
            {
                xRevisionDetail.ItemsSource = null;
                XRevisionDetail_SelectionChanged(null, null);
                return;
            }

            _revision = _noDbService.RevisionService.ReadRevision(xRevisionList.SelectedItem.ToString());

            xRevisionDetail.ItemsSource = _revision.Revisions;
            XRevisionDetail_SelectionChanged(null, null);
        }
Example #2
0
        public void SaveRevision(NoDbRevision revision)
        {
            if (revision == null)
            {
                return;
            }
            var revisionPath = RevisionFolder;

            if (!Directory.Exists(revisionPath))
            {
                Directory.CreateDirectory(revisionPath);
            }
            revisionPath += Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyyMMdd_HHmmss") + "_" + (revision.NewTable ?? revision.OldTable)?.Detail.Name + ".json";
            var jsonRev = ConversionHelper.Serialize(revision, isIndented: true);

            File.WriteAllText(revisionPath, jsonRev);
        }
Example #3
0
        public static NoDbRevision CheckRevision(NoDbTable oldTable, NoDbTable newTable)
        {
            var revision = new NoDbRevision
            {
                OldTable = oldTable,
                NewTable = newTable
            };

            if (oldTable == null)
            {
                revision.Revisions.Add(new NoDbRevisionDetail
                {
                    Action     = NoDbRevisionAction.Added,
                    ObjectType = NoDbRevisionType.Table,
                    NewValue   = newTable
                });
                return(revision);
            }

            if (newTable == null)
            {
                revision.Revisions.Add(new NoDbRevisionDetail
                {
                    Action     = NoDbRevisionAction.Removed,
                    ObjectType = NoDbRevisionType.Table,
                    OldValue   = oldTable
                });
                return(revision);
            }

            foreach (var oldColumn in oldTable.Columns)
            {
                var newColumn = newTable.Columns.FirstOrDefault(x => x.Hash == oldColumn.Hash);
                if (newColumn == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Removed,
                        ObjectType = NoDbRevisionType.Column,
                        OldValue   = oldColumn
                    });
                    continue;
                }
                if (oldColumn.Name != newColumn.Name)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Renamed,
                        ObjectType = NoDbRevisionType.Column,
                        OldValue   = oldColumn,
                        NewValue   = newColumn,
                    });
                    // check other revisions after renaming
                }
                if (oldColumn.DataType != newColumn.DataType ||
                    oldColumn.Length != newColumn.Length ||
                    oldColumn.Precision != newColumn.Precision ||
                    oldColumn.Scale != newColumn.Scale ||
                    oldColumn.Required != newColumn.Required ||
                    oldColumn.IsAutoIncrement != newColumn.IsAutoIncrement
                    )
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Updated,
                        ObjectType = NoDbRevisionType.Column,
                        OldValue   = oldColumn,
                        NewValue   = newColumn,
                    });
                }
                // TODO: default value
            }

            foreach (var newColumn in newTable.Columns)
            {
                var oldColum = oldTable.Columns.FirstOrDefault(x => x.Hash == newColumn.Hash);
                if (oldColum == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Added,
                        ObjectType = NoDbRevisionType.Column,
                        NewValue   = newColumn
                    });
                }
            }

            foreach (var oldIndex in oldTable.Indices)
            {
                var newIndex = newTable.Indices.FirstOrDefault(x => x.Hash == oldIndex.Hash);
                if (newIndex == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Removed,
                        ObjectType = NoDbRevisionType.Index,
                        OldValue   = oldIndex
                    });
                    continue;
                }
                if (oldIndex.Name != newIndex.Name)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Renamed,
                        ObjectType = NoDbRevisionType.Index,
                        OldValue   = oldIndex,
                        NewValue   = newIndex
                    });
                    // güncelleme olmuşsa aşağıdaki gibi update ekle
                }

                if (oldIndex.IsPrimaryKey != newIndex.IsPrimaryKey ||
                    oldIndex.IsUnique != newIndex.IsUnique ||
                    oldIndex.Columns.Any(x => newIndex.Columns.FirstOrDefault(y => y.ColumnName == x.ColumnName && y.Sort == x.Sort) == null)
                    )
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Updated,
                        ObjectType = NoDbRevisionType.Index,
                        OldValue   = oldIndex,
                        NewValue   = newIndex
                    });
                }
            }

            foreach (var newIndex in newTable.Indices)
            {
                var oldIndex = oldTable.Indices.FirstOrDefault(x => x.Hash == newIndex.Hash);
                if (oldIndex == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Added,
                        ObjectType = NoDbRevisionType.Index,
                        NewValue   = newIndex
                    });
                }
            }

            foreach (var oldRelation in oldTable.Relations)
            {
                var newRelation = newTable.Relations.FirstOrDefault(x => x.Hash == oldRelation.Hash);
                if (newRelation == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Removed,
                        ObjectType = NoDbRevisionType.Relation,
                        OldValue   = oldRelation
                    });
                    continue;
                }
                if (oldRelation.Name != newRelation.Name)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Renamed,
                        ObjectType = NoDbRevisionType.Relation,
                        OldValue   = oldRelation,
                        NewValue   = newRelation
                    });
                    // güncelleme varsa sonra ekle
                }

                string itemsOld = string.Join(",", oldRelation.Items.Select(x => x.ToString()));
                string itemsNew = string.Join(",", newRelation.Items.Select(x => x.ToString()));

                if (
                    oldRelation.ForeignTable != newRelation.ForeignTable ||
                    oldRelation.DeleteRule != newRelation.DeleteRule ||
                    oldRelation.UpdateRule != newRelation.UpdateRule ||
                    itemsOld != itemsNew
                    )
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Updated,
                        ObjectType = NoDbRevisionType.Relation,
                        OldValue   = oldRelation,
                        NewValue   = newRelation
                    });
                }
            }

            foreach (var newRelation in newTable.Relations)
            {
                var oldRelation = oldTable.Relations.FirstOrDefault(x => x.Hash == newRelation.Hash);
                if (oldRelation == null)
                {
                    revision.Revisions.Add(new NoDbRevisionDetail
                    {
                        Action     = NoDbRevisionAction.Added,
                        ObjectType = NoDbRevisionType.Relation,
                        NewValue   = newRelation
                    });
                }
            }

            return(revision);
        }
Example #4
0
        public string GetRevisionQuery(NoDbRevision revision, NoDbRevisionDetail detail, NoDbConnectionType connectionType)
        {
            var           queryService  = QueryManager.GetNoDbQueryService(connectionType);
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendFormat("-- Action: {0}, Type: {1}\n", detail.Action, detail.ObjectType);
            if (detail.ObjectType == NoDbRevisionType.Table)
            {
                var oldTable = detail.OldValue is NoDbTable ? (NoDbTable)detail.OldValue : ConversionHelper.ConvertTo <NoDbTable>(detail.OldValue);
                var newTable = detail.NewValue is NoDbTable ? (NoDbTable)detail.NewValue : ConversionHelper.ConvertTo <NoDbTable>(detail.NewValue);
                if (detail.Action == NoDbRevisionAction.Removed)
                {
                    stringBuilder.Append(queryService.DropTableQuery(oldTable) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Added)
                {
                    stringBuilder.Append(queryService.CreateTableQuery(newTable) + "\n");
                }
            }
            else if (detail.ObjectType == NoDbRevisionType.Column)
            {
                var oldColumn = ConversionHelper.ConvertTo <NoDbColumn>(detail.OldValue);
                var newColumn = ConversionHelper.ConvertTo <NoDbColumn>(detail.NewValue);
                if (detail.Action == NoDbRevisionAction.Removed)
                {
                    stringBuilder.Append(queryService.DropColumnQuery(revision.NewTable, oldColumn) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Added)
                {
                    stringBuilder.Append(queryService.AddColumnQuery(revision.NewTable, newColumn) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Renamed)
                {
                    stringBuilder.Append(queryService.RenameColumnQuery(revision.NewTable, oldColumn, newColumn) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Updated)
                {
                    stringBuilder.Append(queryService.UpdateColumnQuery(revision.NewTable, newColumn) + "\n");
                }
            }
            else if (detail.ObjectType == NoDbRevisionType.Index)
            {
                var oldIndex = ConversionHelper.ConvertTo <NoDbIndex>(detail.OldValue);
                var newIndex = ConversionHelper.ConvertTo <NoDbIndex>(detail.NewValue);
                if (detail.Action == NoDbRevisionAction.Removed)
                {
                    stringBuilder.Append(queryService.DropIndexQuery(revision.NewTable, oldIndex) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Added)
                {
                    stringBuilder.Append(queryService.CreateIndexQuery(revision.NewTable, newIndex) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Renamed)
                {
                    stringBuilder.Append(queryService.RenameIndexQuery(revision.NewTable, oldIndex, newIndex) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Updated)
                {
                    stringBuilder.Append(queryService.DropIndexQuery(revision.NewTable, oldIndex) + "\n");
                    stringBuilder.Append(queryService.CreateIndexQuery(revision.NewTable, newIndex) + "\n");
                }
            }
            else if (detail.ObjectType == NoDbRevisionType.Relation)
            {
                var oldRelation = ConversionHelper.ConvertTo <NoDbRelation>(detail.OldValue);
                var newRelation = ConversionHelper.ConvertTo <NoDbRelation>(detail.NewValue);
                if (detail.Action == NoDbRevisionAction.Removed)
                {
                    stringBuilder.AppendFormat(queryService.DeleteRelationQuery(revision.NewTable, oldRelation) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Added)
                {
                    stringBuilder.AppendFormat(queryService.CreateRelationQuery(revision.NewTable, newRelation) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Renamed)
                {
                    stringBuilder.AppendFormat(queryService.RenameRelationQuery(revision.NewTable, oldRelation, newRelation) + "\n");
                }
                else if (detail.Action == NoDbRevisionAction.Updated)
                {
                    stringBuilder.AppendFormat(queryService.DeleteRelationQuery(revision.NewTable, oldRelation) + "\n");
                    stringBuilder.AppendFormat(queryService.CreateRelationQuery(revision.NewTable, newRelation) + "\n");
                }
            }
            return(stringBuilder.ToString());
        }