Example #1
0
        /// <inheritdoc />
        public Task SaveAppliedMigrationVersionAsync(string migrationName, DbVersion version, CancellationToken token = default)
        {
            AssertConnection(NpgsqlConnection);

            var script = $"INSERT INTO \"{_options.MigrationHistoryTableName}\" (name, version) "
                         + $"VALUES ('{migrationName}', '{version.ToString()}');";

            return(TryExecuteAsync(
                       () => InternalExecuteScriptAsync(NpgsqlConnection, script, token),
                       MigrationError.MigratingError,
                       $"Can not save applied migration version to database \"{DbName}\" (version = {version})"));
        }
Example #2
0
        private ProjectMetadata GetDbProjectMetadata(DbProjectInfo dbProjectInfo, EnvironmentInfo environmentInfo)
        {
            var projectVersions = new List <MachineSpecificProjectVersion>();

            DbProjectConfiguration dbProjectConfiguration =
                environmentInfo.GetDbProjectConfiguration(dbProjectInfo);

            DatabaseServer databaseServer =
                environmentInfo.GetDatabaseServer(dbProjectConfiguration.DatabaseServerId);

            var dbVersions =
                _dbVersionProvider.GetVersions(
                    dbProjectInfo.DbName,
                    databaseServer.MachineName);

            DbVersion latestDbVersion =
                dbVersions
                .Select(s => DbVersion.FromString(s.Version))
                .OrderByDescending(v => v)
                .FirstOrDefault();

            if (latestDbVersion != null)
            {
                projectVersions.Add(new MachineSpecificProjectVersion(databaseServer.MachineName, latestDbVersion.ToString()));
            }

            return(new ProjectMetadata(dbProjectInfo.Name, environmentInfo.Name, projectVersions));
        }
Example #3
0
        public static void CheckUpdate()
        {
            var settings = new XmlReaderSettings
            {
                XmlResolver   = null,
                DtdProcessing = DtdProcessing.Ignore
            };

            //MessageBox.Show(MidsContext.Config.UpdatePath);
            using var xmlReader = XmlReader.Create(MidsContext.Config.UpdatePath, settings);
            while (xmlReader.Read())
            {
                try
                {
                    switch (xmlReader.Name)
                    {
                    case "app-version":
                    {
                        AppVersion = new Version(xmlReader.ReadElementContentAsString());
                        break;
                    }

                    case "db-version":
                    {
                        DbVersion = xmlReader.ReadElementContentAsFloat();
                        break;
                    }

                    case "changelog":
                    {
                        ChangeLog = xmlReader.ReadElementContentAsString();
                        break;
                    }

                    case "mandatory":
                    {
                        Mandatory = bool.Parse(xmlReader.ReadElementContentAsString());
                        break;
                    }
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show($"{e.Message}\n{e.StackTrace}", "Error");
                }
            }
            var cDbVersion = DatabaseAPI.Database.Version;

            if (AppVersion > MidsContext.AppVersion)
            {
                if (!Mandatory)
                {
                    var appResult = MessageBox.Show($@"A new application update is available. Do you wish to update to v{AppVersion}?", @"Application Update available!", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    //MessageBox.Show(ChangeLog);
                    if (appResult == DialogResult.Yes)
                    {
                        Update(UpdateType.App, AppVersion.ToString(), ChangeLog);
                    }
                }
                else
                {
                    Update(UpdateType.App, AppVersion.ToString(), ChangeLog);
                }
            }
            else if (DbVersion > cDbVersion && AppVersion < MidsContext.AppVersion)
            {
                if (!Mandatory)
                {
                    var dbResult = MessageBox.Show($@"A new database update is available. Do you wish to update to v{DbVersion}?", @"Database Update Available!", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (dbResult == DialogResult.Yes)
                    {
                        Update(UpdateType.Database, DbVersion.ToString(CultureInfo.InvariantCulture), ChangeLog);
                    }
                }
                else
                {
                    Update(UpdateType.Database, DbVersion.ToString(CultureInfo.InvariantCulture), ChangeLog);
                }
            }
            else
            {
                MessageBox.Show($@"No update is available at this time.", @"Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Example #4
0
        public static void CheckUpdate(frmMain parent)
        {
            var settings = new XmlReaderSettings
            {
                XmlResolver   = null,
                DtdProcessing = DtdProcessing.Ignore
            };

            using var xmlReader = XmlReader.Create(MidsContext.Config.UpdatePath, settings);
            while (xmlReader.Read())
            {
                try
                {
                    switch (xmlReader.Name)
                    {
                    case "app-version":
                    {
                        AppVersion = new Version(xmlReader.ReadElementContentAsString());
                        break;
                    }

                    case "db-version":
                    {
                        DbVersion = xmlReader.ReadElementContentAsFloat();
                        break;
                    }

                    case "changelog":
                    {
                        ChangeLog = xmlReader.ReadElementContentAsString();
                        break;
                    }

                    case "mandatory":
                    {
                        Mandatory = bool.Parse(xmlReader.ReadElementContentAsString());
                        break;
                    }
                    }
                }
                catch (XmlException e)
                {
                    MessageBox.Show($"{e.Message}\r\n{e.StackTrace}", "Error");
                }
            }

            var cDbVersion = DatabaseAPI.Database.Version;

            if (AppVersion > MidsContext.AppVersion)
            {
                if (!Mandatory)
                {
                    var appResult = new UpdateQuery(parent)
                    {
                        Type = UpdateType.App.ToString()
                    };
                    appResult.ShowDialog();
                    switch (appResult.DialogResult)
                    {
                    case DialogResult.Yes:
                    {
                        var patchNotes = new PatchNotes(parent, true)
                        {
                            Type    = UpdateType.App.ToString(),
                            Version = AppVersion.ToString()
                        };
                        patchNotes.ShowDialog();
                        break;
                    }

                    case DialogResult.No:
                        appResult.Close();
                        break;

                    case DialogResult.OK:
                        Update(UpdateType.App, AppVersion.ToString(), parent);
                        break;
                    }
                }
                else
                {
                    Update(UpdateType.App, AppVersion.ToString(), parent);
                }
            }
            else if (DbVersion > cDbVersion && AppVersion < MidsContext.AppVersion)
            {
                if (!Mandatory)
                {
                    var dbResult = new UpdateQuery(parent)
                    {
                        Type = UpdateType.Database.ToString()
                    };
                    switch (dbResult.DialogResult)
                    {
                    case DialogResult.Yes:
                    {
                        var patchNotes = new PatchNotes(parent, true)
                        {
                            Type    = UpdateType.Database.ToString(),
                            Version = DbVersion.ToString(CultureInfo.InvariantCulture)
                        };
                        patchNotes.ShowDialog();
                        break;
                    }

                    case DialogResult.No:
                        dbResult.Close();
                        break;

                    case DialogResult.OK:
                        Update(UpdateType.Database, DbVersion.ToString(CultureInfo.InvariantCulture), parent);
                        break;
                    }
                }
                else
                {
                    Update(UpdateType.Database, DbVersion.ToString(CultureInfo.InvariantCulture), parent);
                }
            }
            else
            {
                MessageBox.Show(@"No update is available at this time.", @"Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Example #5
0
        /// <inheritdoc />
        public Task DeleteAppliedMigrationVersionAsync(DbVersion version, CancellationToken token = default)
        {
            AssertConnection(NpgsqlConnection);

            var script = $"DELETE FROM \"{_options.MigrationHistoryTableName}\" WHERE version = {version.ToString()}";

            return(TryExecuteAsync(
                       () => InternalExecuteScriptAsync(NpgsqlConnection, script, token),
                       MigrationError.MigratingError,
                       $"Can not delete applied migration version from database \"{DbName}\" (version = {version})"));
        }