You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.5 KiB

using OpenDBDiff.Abstractions.Schema;
using OpenDBDiff.Abstractions.Schema.Model;
using System.Linq;
namespace OpenDBDiff.SqlServer.Schema.Model
{
public class TableType : SQLServerSchemaBase, ITable<TableType>
{
public TableType(ISchemaBase parent)
: base(parent, ObjectType.TableType)
{
Columns = new Columns<TableType>(this);
Constraints = new SchemaList<Constraint, TableType>(this, ((Database)parent).AllObjects);
Indexes = new SchemaList<Index, TableType>(this, ((Database)parent).AllObjects);
}
public override ISchemaBase Clone(ISchemaBase parent)
{
var tableType = new TableType(parent)
{
Owner = this.Owner,
Name = this.Name,
Id = this.Id,
Guid = this.Guid,
Status = this.Status,
Columns = null,
Constraints = null,
Indexes = null
};
tableType.Columns = this.Columns.Clone(tableType);
tableType.Constraints = this.Constraints.Clone(tableType);
tableType.Indexes = this.Indexes.Clone(tableType);
return tableType;
}
public Columns<TableType> Columns { get; private set; }
public SchemaList<Constraint, TableType> Constraints { get; private set; }
public SchemaList<Index, TableType> Indexes { get; private set; }
public override string ToSql()
{
string sql = "";
if (Columns.Any())
{
sql += "CREATE TYPE " + FullName + " AS TABLE\r\n(\r\n";
sql += Columns.ToSql() + "\r\n";
sql += Constraints.ToSql();
sql += ")";
sql += "\r\nGO\r\n";
}
return sql;
}
public override string ToSqlDrop()
{
return "DROP TYPE " + FullName + "\r\nGO\r\n";
}
public override string ToSqlAdd()
{
return ToSql();
}
public override SQLScript Create()
{
ScriptAction action = ScriptAction.AddTableType;
if (!GetWasInsertInDiffList(action))
{
SetWasInsertInDiffList(action);
return new SQLScript(this.ToSqlAdd(), 0, action);
}
else
return null;
}
public override SQLScript Drop()
{
ScriptAction action = ScriptAction.DropTableType;
if (!GetWasInsertInDiffList(action))
{
SetWasInsertInDiffList(action);
return new SQLScript(this.ToSqlDrop(), 0, action);
}
else
return null;
}
public override SQLScriptList ToSqlDiff(System.Collections.Generic.ICollection<ISchemaBase> schemas)
{
try
{
SQLScriptList list = new SQLScriptList();
if (this.Status == ObjectStatus.Drop)
{
list.Add(Drop());
}
if (this.HasState(ObjectStatus.Create))
{
list.Add(Create());
}
if (this.Status == ObjectStatus.Alter)
{
list.Add(ToSqlDrop() + ToSql(), 0, ScriptAction.AddTableType);
}
return list;
}
catch
{
return null;
}
}
}
}