Beispiel #1
0
        private bool CheckCanUpgrade(DbVersionInfo oldDbVersion)
        {
            var appVersion = _database.DbModel.EntityApp.Version;

            if (oldDbVersion != null && oldDbVersion.Version > appVersion)
            {
                _upgradeInfo.Status = UpgradeStatus.HigherVersionDetected;
                OnHigherVersionDetected();
                var error = StringHelper.SafeFormat(
                    "Downgrade detected: database version ({0}) is higher than EntityApp version ({1}). Activation canceled.", oldDbVersion.Version, appVersion);
                _log.Error(error);
                return(false);
            }
            switch (_database.Settings.UpgradeMode)
            {
            case DbUpgradeMode.Always:
                return(true);

            case DbUpgradeMode.NonProductionOnly:
                if (oldDbVersion != null && oldDbVersion.InstanceType == DbInstanceType.Production)
                {
                    _upgradeInfo.Status = UpgradeStatus.NotAllowed;
                    return(false);
                }
                return(true);

            case DbUpgradeMode.Never:
            default:
                _upgradeInfo.Status = UpgradeStatus.NotAllowed;
                return(false);
            }
        }
Beispiel #2
0
 private string SerializeValues(DbVersionInfo versionInfo)
 {
     if (versionInfo.Values == null || versionInfo.Values.Count == 0)
     {
         return(null);
     }
     return(string.Join(Environment.NewLine, versionInfo.Values.Select(de => de.Key + "=" + de.Value)));
 }
Beispiel #3
0
        // We cannot use regular access thru EntitySession - db info/version loads at the very start of connecting to db;
        // the entity app is not ready yet (schema not updated, etc).
        public DbVersionInfo LoadDbInfo(DbSettings settings, string appName, Vita.Data.Driver.DbModelLoader loader)
        {
            var thisSchema       = settings.ModelConfig.GetSchema(this.Area);
            var prefix           = settings.ModelConfig.Options.IsSet(DbOptions.AddSchemaToTableNames) ? thisSchema + "_" : string.Empty;
            var dbInfoName       = prefix + "DbInfo";
            var dbModuleInfoName = prefix + "DbModuleInfo";

            if (!loader.TableExists(thisSchema, dbInfoName))
            {
                return(null);
            }
            try {
                var dbInfo = new DbVersionInfo();
                var sql    = settings.Driver.GetDirectSelectAllSql(thisSchema, dbInfoName);
                var dt     = loader.ExecuteSelect(sql);
                var appRow = dt.FindRow("AppName", appName);
                if (appRow != null)
                {
                    dbInfo.InstanceType = (DbInstanceType)appRow.GetAsInt("InstanceType");
                    var     strVersion = appRow.GetAsString("Version");
                    Version dbVersion;
                    if (Version.TryParse(strVersion, out dbVersion))
                    {
                        dbInfo.Version = dbVersion;
                    }
                    // 'Values' column appears in v 1.1
                    if (dt.HasColumn("Values"))
                    {
                        var strValues = appRow.GetAsString("Values");
                        DeserializeValues(dbInfo, strValues);
                    }
                } //if appRow
                //Read modules
                sql = settings.Driver.GetDirectSelectAllSql(thisSchema, dbModuleInfoName);
                dt  = loader.ExecuteSelect(sql);
                foreach (DbRow row in dt.Rows)
                {
                    var     moduleName       = row.GetAsString("ModuleName");
                    var     schema           = row.GetAsString("Schema");
                    var     strModuleVersion = row.GetAsString("Version");
                    Version v;
                    if (!Version.TryParse(strModuleVersion, out v))
                    {
                        v = null;
                    }
                    dbInfo.Modules.Add(new ModuleDbVersionInfo(schema, moduleName, v));
                }
                return(dbInfo);
            } catch (Exception ex) {
                Trace.WriteLine("Failed to load DbInfo record:  " + ex.ToLogString());
                //Debugger.Break();
                return(null);
            }
        } //method
Beispiel #4
0
        public DbVersionInfo LoadDbVersionInfo(DbModel dbModel, DbSettings settings, ILog log)
        {
            var tblDbInfo = dbModel.GetTable(typeof(IDbInfo), throwIfNotFound: false);

            Util.Check(tblDbInfo != null, "DbInfo table not defined in DB Model.");

            // Empty/zero verson
            var versionInfo = new DbVersionInfo();
            // Check that table actually exists in the database
            var driver = settings.Driver;

            if (!TableExists(settings, tblDbInfo))
            {
                return(versionInfo); //zero version
            }
            try {
                var dt     = SelectAllFrom(settings, tblDbInfo);
                var appRow = dt.FindRow(nameof(IDbInfo.AppName), dbModel.EntityApp.AppName);
                if (appRow != null)
                {
                    versionInfo.InstanceType = (DbInstanceType)appRow.GetAsInt(nameof(IDbInfo.InstanceType));
                    var     strVersion = appRow.GetAsString(nameof(IDbInfo.Version));
                    Version dbVersion;
                    if (Version.TryParse(strVersion, out dbVersion))
                    {
                        versionInfo.Version = dbVersion;
                    }
                    var strValues = appRow.GetAsString(nameof(IDbInfo.Values));
                    DeserializeValues(versionInfo, strValues);
                } //if appRow
                //Read modules
                var tblDbModuleInfo = dbModel.GetTable(typeof(IDbModuleInfo));
                dt = SelectAllFrom(settings, tblDbModuleInfo);
                foreach (var row in dt.Rows)
                {
                    var moduleName       = row.GetAsString(nameof(IDbModuleInfo.ModuleName));
                    var schema           = row.GetAsString(nameof(IDbModuleInfo.Schema));
                    var strModuleVersion = row.GetAsString(nameof(IDbModuleInfo.Version));
                    if (!Version.TryParse(strModuleVersion, out Version v))
                    {
                        v = null;
                    }
                    versionInfo.Modules.Add(new ModuleDbVersionInfo(schema, moduleName, v));
                }
                return(versionInfo);
            } catch (Exception ex) {
                log.LogError("Failed to load DbInfo record:  " + ex.ToLogString());
                //Debugger.Break();
                throw;
            }
        }
Beispiel #5
0
        private void SaveModulesInfo(IEntitySession session, DbVersionInfo dbVersion)
        {
            // important - should use EntitySet here; otherwise MySql fails
            var moduleRecs = session.EntitySet <IDbModuleInfo>().ToList();

            foreach (var mi in dbVersion.Modules)
            {
                var mrec = moduleRecs.FirstOrDefault(r => r.ModuleName == mi.ModuleName && r.Schema == mi.Schema);
                if (mrec == null)
                {
                    mrec            = session.NewEntity <IDbModuleInfo>();
                    mrec.ModuleName = mi.ModuleName;
                    mrec.Schema     = mi.Schema;
                }
                mrec.Version = mi.Version.ToString();
            }
        }
Beispiel #6
0
        private void DeserializeValues(DbVersionInfo version, string str)
        {
            version.Values.Clear();
            if (string.IsNullOrWhiteSpace(str))
            {
                return;
            }
            var lines = str.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var line in lines)
            {
                var arr = line.Split('=');
                if (arr.Length < 2)
                {
                    continue;
                }
                version.Values[arr[0]] = arr[1];
            }
        }
Beispiel #7
0
 private bool CheckCanUpgrade(DbVersionInfo oldDbVersion)
 {
     var appVersion = _database.DbModel.EntityApp.Version;
       if (oldDbVersion != null && oldDbVersion.Version > appVersion) {
     _upgradeInfo.Status = UpgradeStatus.HigherVersionDetected;
     OnHigherVersionDetected();
     var error = StringHelper.SafeFormat(
       "Downgrade detected: database version ({0}) is higher than EntityApp version ({1}). Activation canceled.", oldDbVersion.Version, appVersion);
     _log.Error(error);
     return false;
       }
       switch (_database.Settings.UpgradeMode) {
     case DbUpgradeMode.Always:
       return true;
     case DbUpgradeMode.NonProductionOnly:
       if (oldDbVersion != null && oldDbVersion.InstanceType == DbInstanceType.Production) {
     _upgradeInfo.Status = UpgradeStatus.NotAllowed;
     return false;
       }
       return true;
     case DbUpgradeMode.Never:
     default:
       _upgradeInfo.Status = UpgradeStatus.NotAllowed;
       return false;
       }
 }