99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Dbas.Data;
|
|
using Saxonite.Net.Core.Web.Admin.Models;
|
|
using Saxonite.Net.Standard.Base.App;
|
|
using Saxonite.Net.Standard.Base.Bus;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Saxonite.Net.Core.Web.Admin.Controllers
|
|
{
|
|
//=======================================================================
|
|
// System - Ajax - Database controller
|
|
//=======================================================================
|
|
partial class SystemController
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Database data.
|
|
public class DatabaseTableData
|
|
{
|
|
public String SchemaName { get; set; }
|
|
public String TableName { get; set; }
|
|
public String QualifiedName { get; set; }
|
|
public int RowCount { get; set; }
|
|
public int ColumnCount { get; set; }
|
|
public int IndexCount { get; set; }
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Database Table List ajax request.
|
|
//-------------------------------------------------------------------
|
|
public class AjaxResponse_DatabaseTableList : AjaxResponse_Data
|
|
{
|
|
public List<DatabaseTableData> Tables { get; } = new List<DatabaseTableData>();
|
|
}
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("System/Ajax/GetDatabaseTables")]
|
|
public IActionResult Ajax_GetDatabaseTables(Model_Sport model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_GetDatabaseTables";
|
|
String messageTitle = Localiser["system.caption.database"];
|
|
AjaxResponse_DatabaseTableList responseData = new AjaxResponse_DatabaseTableList();
|
|
|
|
// Validate session.
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Core Database connection.
|
|
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
|
|
|
|
// Database table row counts.
|
|
Dictionary<String, int> tableRowCounts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
|
String query =
|
|
"SELECT QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.name) AS[TableName], SUM(sPTN.Rows) AS[RowCount] " +
|
|
"FROM sys.objects AS sOBJ " +
|
|
"INNER JOIN sys.partitions AS sPTN ON sOBJ.object_id = sPTN.object_id " +
|
|
"WHERE sOBJ.type = 'U' AND sOBJ.is_ms_shipped = 0x0 AND index_id< 2 /*Index Id: 0:Heap,1:Clustered*/ " +
|
|
"GROUP BY sOBJ.schema_id, sOBJ.name";
|
|
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, query))
|
|
{
|
|
while (dbResultSet != null && dbResultSet.NextRecord())
|
|
{
|
|
tableRowCounts.Add(dbResultSet.GetRecordValues().GetValue("TableName").ToString(), (int)dbResultSet.GetRecordValues().GetValue("RowCount").AsLong());
|
|
}
|
|
}
|
|
|
|
// Core database tables.
|
|
List<DbDfnTable> tableDfns = db.GetTableDfns();
|
|
foreach (DbDfnTable tableDfn in tableDfns.OrderBy(item => item.Name))
|
|
{
|
|
DatabaseTableData tableData = new DatabaseTableData();
|
|
tableData.SchemaName = tableDfn.Schema;
|
|
tableData.TableName = tableDfn.Name;
|
|
tableData.QualifiedName = tableDfn.QualifiedName;
|
|
tableData.ColumnCount = tableDfn.ColumnCount;
|
|
tableData.IndexCount = tableDfn.IndexCount;
|
|
|
|
// Row count.
|
|
tableData.RowCount = tableRowCounts.GetValueOrDefault(tableDfn.QuotedQualifiedName, 0);
|
|
|
|
responseData.Tables.Add(tableData);
|
|
}
|
|
|
|
// Complete response.
|
|
responseData.Success = true;
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|