public ActionResult Details(Table id)
{
var isTable = true;
var linkedServerName = id.LinkedServerName ?? "SIS";
var databaseOwner = id.Owner ?? "SATURN";
var tableName = id.TableName;
var viewModel = new TableDetailsModel {
LinkedServerName = linkedServerName,
Owner = databaseOwner,
TableName = tableName
};
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MainDb"].ConnectionString))
{
conn.Open();
var loginId = User.Identity.Name;
var bannerUserList = conn.Query(string.Format("SELECT LoginId FROM BannerLoginIds WHERE LoginId = '{0}'", loginId)).ToList();
var includeBannerItems = bannerUserList.Count() == 1 ? true : false;
IList<Table> tables = conn.Query<Table>(@"EXEC usp_GetLinkedServerTableNamesAndComments @TableNames = @tableName, @LinkedServerNames = @linkedServerName, @Owners = @databaseOwner, @IncludeBannerItems = @includeBannerItems", new { @tableName = tableName, @linkedServerName = linkedServerName, @databaseOwner = databaseOwner, @includeBannerItems = includeBannerItems }).ToList();
IList<Column> columnsList = conn.Query<Column>(@"EXEC usp_GetLinkedServerColumnNamesCommentsAndDataTypes @TableNames = @tableName, @LinkedServerNames = @linkedServerName, @Owners = @databaseOwner, @IncludeBannerItems = @includeBannerItems", new { @tableName = tableName, @linkedServerName = linkedServerName, @databaseOwner = databaseOwner, @includeBannerItems = includeBannerItems }).ToList();
// This returns a list of index columns for every index.
IList<DapperIndex> dapperIndexColumns = conn.Query<DapperIndex>(@"EXEC usp_GetLinkedServerIndexColumnNames @TableNames = @tableName, @LinkedServerNames = @linkedServerName, @Owners = @databaseOwner, @IncludeBannerItems = @includeBannerItems", new { @tableName = tableName, @linkedServerName = linkedServerName, @databaseOwner = databaseOwner, @includeBannerItems = includeBannerItems }).ToList();
// This returns a list of constraint columns for every constraint.
IList<DapperConstraint> dapperConstraintColumns = conn.Query<DapperConstraint>(@"EXEC usp_GetLinkedServerConstraintColumnNames @TableNames = @tableName, @LinkedServerNames = @linkedServerName, @Owners = @databaseOwner, @IncludeBannerItems = @includeBannerItems", new { @tableName = tableName, @linkedServerName = linkedServerName, @databaseOwner = databaseOwner, @includeBannerItems = includeBannerItems }).ToList();
var firstOrDefault = tables.FirstOrDefault();
if (firstOrDefault != null)
{
viewModel.Owner = firstOrDefault.Owner;
viewModel.TableComments = firstOrDefault.Comments ?? String.Empty;
viewModel.Text = firstOrDefault.Text ?? String.Empty;
viewModel.NumRows = firstOrDefault.NumRows;
viewModel.TableType = firstOrDefault.TableType;
if (!firstOrDefault.TableType.Equals("TABLE"))
isTable = false;
}
viewModel.Columns = columnsList.ToList();
//Indexes:
viewModel.Indexes = new List<DapperIndex>();
var distinctIndexes =
dapperIndexColumns.GroupBy(idx => idx.IndexName,(key, group) => group.First()).Select(
col => new DapperIndex
{
IndexName = col.IndexName,
Owner = col.Owner,
TableName = col.TableName,
Uniqueness = col.Uniqueness,
ColumnName = string.Empty ,
ColumnPosition = string.Empty,
DistinctKeys = col.DistinctKeys,
SortOrder = string.Empty
}).ToList();
foreach (var distinctIndex in distinctIndexes)
{
viewModel.Indexes.Add(distinctIndex);
var indexColumns = dapperIndexColumns.Where(x => (x.IndexName == distinctIndex.IndexName)).ToList();
foreach (var indexColumn in indexColumns)
{
viewModel.Indexes.Add(new DapperIndex
{
IndexName = string.Empty,
Owner = indexColumn.Owner,
TableName = indexColumn.TableName,
Uniqueness = string.Empty,
ColumnName = indexColumn.ColumnName,
ColumnPosition = indexColumn.ColumnPosition,
DistinctKeys = string.Empty,
SortOrder = indexColumn.SortOrder
});
}
}
// Constraints:
viewModel.Constraints = new List<DapperConstraint>();
var distinctConstraints =
dapperConstraintColumns.GroupBy(cnstrnt => cnstrnt.ConstraintName, (key, group) => group.First()).Select(
col => new DapperConstraint()
{
ConstraintName = col.ConstraintName,
Owner = col.Owner,
TableName = col.TableName,
ColumnName = string.Empty,
ColumnPosition = string.Empty,
ConstraintType = col.ConstraintType,
Status =col.Status
}).ToList();
foreach (var constraint in distinctConstraints)
{
viewModel.Constraints.Add(constraint);
var constraintColumns =
dapperConstraintColumns.Where(x => (x.ConstraintName == constraint.ConstraintName)).ToList();
foreach (var constraintColumn in constraintColumns)
{
viewModel.Constraints.Add(new DapperConstraint()
{
ConstraintName = string.Empty,
Owner = constraintColumn.Owner,
TableName = constraintColumn.TableName,
ColumnName = constraintColumn.ColumnName,
ColumnPosition = constraintColumn.ColumnPosition,
ConstraintType = string.Empty,
Status = string.Empty
});
}
}
ViewBag.Message = (isTable ? "Table" : "View") + " Details";
return View(viewModel);
}
}