Added CreateIndex to Migrator

This commit is contained in:
kay.one 2011-06-04 23:01:45 -07:00
parent a1653022ad
commit 76d029361b
3 changed files with 902 additions and 842 deletions

View File

@ -194,6 +194,15 @@ namespace Migrator.Framework
/// <param name="constraint"></param> /// <param name="constraint"></param>
void GenerateForeignKey(string foreignTable, string primaryTable, ForeignKeyConstraint constraint); void GenerateForeignKey(string foreignTable, string primaryTable, ForeignKeyConstraint constraint);
/// <summary>
/// Add an Index to a table
/// </summary>
/// <param name="name">The name of the index to add.</param>
/// <param name="table">The name of the table that will get the index.</param>
/// <param name="unique">If the index will be unique</param>
/// <param name="columns">The name of the column or columns that are in the index.</param>
void AddIndex(string name, string table, bool unique, params string[] columns);
/// <summary> /// <summary>
/// Add a primary key to a table /// Add a primary key to a table
/// </summary> /// </summary>
@ -376,6 +385,13 @@ namespace Migrator.Framework
/// <param name="name">The name of the constraint to remove</param> /// <param name="name">The name of the constraint to remove</param>
void RemoveConstraint(string table, string name); void RemoveConstraint(string table, string name);
/// <summary>
/// Remove an existing index
/// </summary>
/// <param name="table">The table that contains the index.</param>
/// <param name="name">The name of the index to remove</param>
void RemoveIndex(string table, string name);
/// <summary> /// <summary>
/// Remove an existing table /// Remove an existing table
/// </summary> /// </summary>

View File

@ -1,3 +1,4 @@
using System;
using System.Data; using System.Data;
using Migrator.Framework; using Migrator.Framework;
using ForeignKeyConstraint=Migrator.Framework.ForeignKeyConstraint; using ForeignKeyConstraint=Migrator.Framework.ForeignKeyConstraint;
@ -54,6 +55,11 @@ namespace Migrator.Providers
// No Op // No Op
} }
public void RemoveIndex(string table, string name)
{
// No Op
}
public void AddTable(string name, params Column[] columns) public void AddTable(string name, params Column[] columns)
{ {
// No Op // No Op
@ -129,6 +135,16 @@ namespace Migrator.Providers
// No Op // No Op
} }
public void AddIndex(string name, string table, params string[] columns)
{
//No Op
}
public void AddIndex(string name, string table, bool unique, params string[] columns)
{
//No Op
}
public void AddPrimaryKey(string name, string table, params string[] columns) public void AddPrimaryKey(string name, string table, params string[] columns)
{ {
// No Op // No Op

View File

@ -134,6 +134,11 @@ namespace Migrator.Providers
} }
} }
public void RemoveIndex(string table, string name)
{
throw new NotImplementedException();
}
public virtual void AddTable(string table, string engine, string columns) public virtual void AddTable(string table, string engine, string columns)
{ {
table = _dialect.TableNameNeedsQuote ? _dialect.Quote(table) : table; table = _dialect.TableNameNeedsQuote ? _dialect.Quote(table) : table;
@ -409,6 +414,23 @@ namespace Migrator.Providers
AddColumn(table, column, type, size, property, null); AddColumn(table, column, type, size, property, null);
} }
public void AddIndex(string name, string table, bool unique, params string[] columns)
{
try
{
var uniqueText = "";
if (unique) uniqueText = "UNIQUE";
var command = String.Format("CREATE {0} INDEX {1} ON {2} ({3})", uniqueText, name, table, String.Join(",", columns));
ExecuteNonQuery(command);
}
catch (Exception e)
{
Logger.Exception("Unable to add index", e);
}
}
/// <summary> /// <summary>
/// Append a primary key to a table. /// Append a primary key to a table.
/// </summary> /// </summary>
@ -562,7 +584,8 @@ namespace Migrator.Providers
Logger.Warn(ex.Message); Logger.Warn(ex.Message);
throw; throw;
} }
} } }
}
private IDbCommand BuildCommand(string sql) private IDbCommand BuildCommand(string sql)
{ {
@ -595,7 +618,8 @@ namespace Migrator.Providers
Logger.Warn("query failed: {0}", cmd.CommandText); Logger.Warn("query failed: {0}", cmd.CommandText);
throw; throw;
} }
} } }
}
public object ExecuteScalar(string sql) public object ExecuteScalar(string sql)
{ {
@ -611,7 +635,8 @@ namespace Migrator.Providers
Logger.Warn("Query failed: {0}", cmd.CommandText); Logger.Warn("Query failed: {0}", cmd.CommandText);
throw; throw;
} }
} } }
}
public IDataReader Select(string what, string from) public IDataReader Select(string what, string from)
{ {
@ -747,8 +772,10 @@ namespace Migrator.Providers
{ {
_appliedMigrations = new List<long>(); _appliedMigrations = new List<long>();
CreateSchemaInfoTable(); CreateSchemaInfoTable();
using(IDataReader reader = Select("version","SchemaInfo")){ using (IDataReader reader = Select("version", "SchemaInfo"))
while(reader.Read()){ {
while (reader.Read())
{
_appliedMigrations.Add(Convert.ToInt64(reader.GetValue(0))); _appliedMigrations.Add(Convert.ToInt64(reader.GetValue(0)));
} }
} }
@ -822,7 +849,8 @@ namespace Migrator.Providers
public virtual string[] QuoteValues(string[] values) public virtual string[] QuoteValues(string[] values)
{ {
return Array.ConvertAll<string, string>(values, return Array.ConvertAll<string, string>(values,
delegate(string val) { delegate(string val)
{
if (null == val) if (null == val)
return "null"; return "null";
else else