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.
78 lines
3.2 KiB
78 lines
3.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SqlClient;
|
|
using OpenDBDiff.Schema.Errors;
|
|
using OpenDBDiff.Schema.Events;
|
|
using OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands;
|
|
using OpenDBDiff.Schema.SQLServer.Generates.Generates.Util;
|
|
using OpenDBDiff.Schema.SQLServer.Generates.Model;
|
|
|
|
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates
|
|
{
|
|
public class GenerateViews
|
|
{
|
|
private Generate root;
|
|
|
|
public GenerateViews(Generate root)
|
|
{
|
|
this.root = root;
|
|
}
|
|
|
|
public void Fill(Database database, string connectionString, List<MessageLog> messages)
|
|
{
|
|
try
|
|
{
|
|
root.RaiseOnReading(new ProgressEventArgs("Reading views...", Constants.READING_VIEWS));
|
|
if (database.Options.Ignore.FilterView)
|
|
{
|
|
FillView(database, connectionString);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
messages.Add(new MessageLog(ex.Message, ex.StackTrace, MessageLog.LogType.Error));
|
|
}
|
|
}
|
|
|
|
private void FillView(Database database, string connectionString)
|
|
{
|
|
int lastViewId = 0;
|
|
using (SqlConnection conn = new SqlConnection(connectionString))
|
|
{
|
|
using (SqlCommand command = new SqlCommand(ViewSQLCommand.GetView(database.Info.Version, database.Info.Edition), conn))
|
|
{
|
|
conn.Open();
|
|
command.CommandTimeout = 0;
|
|
using (SqlDataReader reader = command.ExecuteReader())
|
|
{
|
|
View item = null;
|
|
while (reader.Read())
|
|
{
|
|
root.RaiseOnReadingOne(reader["name"]);
|
|
if (lastViewId != (int)reader["object_id"])
|
|
{
|
|
item = new View(database);
|
|
item.Id = (int)reader["object_id"];
|
|
item.Name = reader["name"].ToString();
|
|
item.Owner = reader["owner"].ToString();
|
|
item.IsSchemaBinding = reader["IsSchemaBound"].ToString().Equals("1");
|
|
database.Views.Add(item);
|
|
lastViewId = item.Id;
|
|
}
|
|
if (item.IsSchemaBinding)
|
|
{
|
|
if (!reader.IsDBNull(reader.GetOrdinal("referenced_major_id")))
|
|
database.Dependencies.Add(database, (int)reader["referenced_major_id"], item);
|
|
if (!String.IsNullOrEmpty(reader["TableName"].ToString()))
|
|
item.DependenciesIn.Add(reader["TableName"].ToString());
|
|
if (!String.IsNullOrEmpty(reader["DependOut"].ToString()))
|
|
item.DependenciesOut.Add(reader["DependOut"].ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|