Refactoring in Migration.cs: "using()" instead of explicit Dispose()

This ensures that 'cmd' gets disposed on errors
slimupdates
AlexRa 2010-04-28 13:40:35 +03:00
parent b49e9eff56
commit be1141f0f7
1 changed files with 56 additions and 52 deletions

View File

@ -110,10 +110,11 @@ namespace OpenSim.Data
return; return;
// If not, create the migration tables // If not, create the migration tables
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
cmd.CommandText = _migrations_create; {
cmd.ExecuteNonQuery(); cmd.CommandText = _migrations_create;
cmd.Dispose(); cmd.ExecuteNonQuery();
}
InsertVersion("migrations", 1); InsertVersion("migrations", 1);
} }
@ -131,37 +132,37 @@ namespace OpenSim.Data
m_log.InfoFormat("[MIGRATIONS] Upgrading {0} to latest revision {1}.", _type, migrations.Keys[migrations.Count - 1]); m_log.InfoFormat("[MIGRATIONS] Upgrading {0} to latest revision {1}.", _type, migrations.Keys[migrations.Count - 1]);
m_log.Info("[MIGRATIONS] NOTE: this may take a while, don't interupt this process!"); m_log.Info("[MIGRATIONS] NOTE: this may take a while, don't interupt this process!");
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
foreach (KeyValuePair<int, string> kvp in migrations)
{ {
int newversion = kvp.Key; foreach (KeyValuePair<int, string> kvp in migrations)
cmd.CommandText = kvp.Value;
// we need to up the command timeout to infinite as we might be doing long migrations.
cmd.CommandTimeout = 0;
try
{ {
cmd.ExecuteNonQuery(); int newversion = kvp.Key;
} cmd.CommandText = kvp.Value;
catch (Exception e) // we need to up the command timeout to infinite as we might be doing long migrations.
{ cmd.CommandTimeout = 0;
m_log.DebugFormat("[MIGRATIONS] Cmd was {0}", cmd.CommandText); try
m_log.DebugFormat("[MIGRATIONS]: An error has occurred in the migration {0}.\n This may mean you could see errors trying to run OpenSim. If you see database related errors, you will need to fix the issue manually. Continuing.", e.Message); {
cmd.CommandText = "ROLLBACK;"; cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery(); }
} catch (Exception e)
{
m_log.DebugFormat("[MIGRATIONS] Cmd was {0}", cmd.CommandText);
m_log.DebugFormat("[MIGRATIONS]: An error has occurred in the migration {0}.\n This may mean you could see errors trying to run OpenSim. If you see database related errors, you will need to fix the issue manually. Continuing.", e.Message);
cmd.CommandText = "ROLLBACK;";
cmd.ExecuteNonQuery();
}
if (version == 0) if (version == 0)
{ {
InsertVersion(_type, newversion); InsertVersion(_type, newversion);
}
else
{
UpdateVersion(_type, newversion);
}
version = newversion;
} }
else
{
UpdateVersion(_type, newversion);
}
version = newversion;
} }
cmd.Dispose();
} }
// private int MaxVersion() // private int MaxVersion()
@ -200,43 +201,46 @@ namespace OpenSim.Data
protected virtual int FindVersion(DbConnection conn, string type) protected virtual int FindVersion(DbConnection conn, string type)
{ {
int version = 0; int version = 0;
DbCommand cmd = conn.CreateCommand(); using (DbCommand cmd = conn.CreateCommand())
try
{ {
cmd.CommandText = "select version from migrations where name='" + type +"' order by version desc"; try
using (IDataReader reader = cmd.ExecuteReader())
{ {
if (reader.Read()) cmd.CommandText = "select version from migrations where name='" + type + "' order by version desc";
using (IDataReader reader = cmd.ExecuteReader())
{ {
version = Convert.ToInt32(reader["version"]); if (reader.Read())
{
version = Convert.ToInt32(reader["version"]);
}
reader.Close();
} }
reader.Close(); }
catch
{
// Something went wrong, so we're version 0
} }
} }
catch
{
// Something went wrong, so we're version 0
}
cmd.Dispose();
return version; return version;
} }
private void InsertVersion(string type, int version) private void InsertVersion(string type, int version)
{ {
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")"; {
m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version); cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")";
cmd.ExecuteNonQuery(); m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version);
cmd.Dispose(); cmd.ExecuteNonQuery();
}
} }
private void UpdateVersion(string type, int version) private void UpdateVersion(string type, int version)
{ {
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'"; {
m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version); cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'";
cmd.ExecuteNonQuery(); m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version);
cmd.Dispose(); cmd.ExecuteNonQuery();
}
} }
// private SortedList<int, string> GetAllMigrations() // private SortedList<int, string> GetAllMigrations()