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.
119 lines
5.6 KiB
119 lines
5.6 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SqlClient;
|
|
using OpenDBDiff.Schema.Errors;
|
|
using OpenDBDiff.Schema.Model;
|
|
using OpenDBDiff.Schema.SQLServer.Generates.Model;
|
|
|
|
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates
|
|
{
|
|
public class GenerateExtendedProperties
|
|
{
|
|
private Generate root;
|
|
|
|
public GenerateExtendedProperties(Generate root)
|
|
{
|
|
this.root = root;
|
|
}
|
|
|
|
private static string GetSQL()
|
|
{
|
|
return SQLQueries.SQLQueryFactory.Get("GetExtendedProperties");
|
|
}
|
|
|
|
private static string GetTypeDescription(string type)
|
|
{
|
|
if (type.Equals("PC")) return "PROCEDURE";
|
|
if (type.Equals("P")) return "PROCEDURE";
|
|
if (type.Equals("V")) return "VIEW";
|
|
if (type.Equals("U")) return "TABLE";
|
|
if (type.Equals("TR")) return "TRIGGER";
|
|
if (type.Equals("TA")) return "TRIGGER";
|
|
if (type.Equals("FS")) return "FUNCTION";
|
|
if (type.Equals("FN")) return "FUNCTION";
|
|
if (type.Equals("IF")) return "FUNCTION";
|
|
if (type.Equals("TF")) return "FUNCTION";
|
|
return "";
|
|
}
|
|
|
|
public void Fill(Database database, string connectionString, List<MessageLog> messages)
|
|
{
|
|
ISQLServerSchemaBase parent;
|
|
try
|
|
{
|
|
if (database.Options.Ignore.FilterExtendedProperties)
|
|
{
|
|
using (SqlConnection conn = new SqlConnection(connectionString))
|
|
{
|
|
using (SqlCommand command = new SqlCommand(GetSQL(), conn))
|
|
{
|
|
conn.Open();
|
|
command.CommandTimeout = 0;
|
|
using (SqlDataReader reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
ExtendedProperty item = new ExtendedProperty(null);
|
|
if (((byte)reader["Class"]) == 5)
|
|
{
|
|
item.Level0type = "ASSEMBLY";
|
|
item.Level0name = reader["AssemblyName"].ToString();
|
|
}
|
|
if (((byte)reader["Class"]) == 1)
|
|
{
|
|
string ObjectType = GetTypeDescription(reader["type"].ToString().Trim());
|
|
item.Level0type = "SCHEMA";
|
|
item.Level0name = reader["Owner"].ToString();
|
|
if (!ObjectType.Equals("TRIGGER"))
|
|
{
|
|
item.Level1name = reader["ObjectName"].ToString();
|
|
item.Level1type = ObjectType;
|
|
}
|
|
else
|
|
{
|
|
item.Level1type = "TABLE";
|
|
item.Level1name = reader["ParentName"].ToString();
|
|
item.Level2name = reader["ObjectName"].ToString();
|
|
item.Level2type = ObjectType;
|
|
}
|
|
}
|
|
if (((byte)reader["Class"]) == 6)
|
|
{
|
|
item.Level0type = "SCHEMA";
|
|
item.Level0name = reader["OwnerType"].ToString();
|
|
item.Level1name = reader["TypeName"].ToString();
|
|
item.Level1type = "TYPE";
|
|
}
|
|
if (((byte)reader["Class"]) == 7)
|
|
{
|
|
item.Level0type = "SCHEMA";
|
|
item.Level0name = reader["Owner"].ToString();
|
|
item.Level1type = "TABLE";
|
|
item.Level1name = reader["ObjectName"].ToString();
|
|
item.Level2type = reader["class_desc"].ToString();
|
|
item.Level2name = reader["IndexName"].ToString();
|
|
}
|
|
item.Value = reader["Value"].ToString();
|
|
item.Name = reader["Name"].ToString();
|
|
parent = ((ISQLServerSchemaBase)database.Find(item.FullName));
|
|
if (parent != null)
|
|
{
|
|
item.Parent = (ISchemaBase)parent;
|
|
parent.ExtendedProperties.Add(item);
|
|
}
|
|
else
|
|
messages.Add(new MessageLog(item.FullName + " not found in extended properties.", "", MessageLog.LogType.Error));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
messages.Add(new MessageLog(ex.Message, ex.StackTrace, MessageLog.LogType.Error));
|
|
}
|
|
}
|
|
}
|
|
}
|