This commit is contained in:
2020-01-16 18:24:42 +00:00
parent 5362a37dd3
commit 3fa7fb42ab
2 changed files with 70 additions and 25 deletions

View File

@@ -134,7 +134,7 @@ namespace AyaNova
bool LOG_SENSITIVE_DATA = false;
#if (DEBUG)
// LOG_SENSITIVE_DATA = true;
LOG_SENSITIVE_DATA = false;
#endif

View File

@@ -285,48 +285,93 @@ namespace AyaNova.Biz
";
//BUILD THE QUERY
var qSelect = SqlSelectBuilder.Build(ObjectFields.WIDGET_KEY, MOCK_WIDGET_DISPLAY_TEMPLATE_JSON, listOptions.Mini);
//TODO: Turn this into a raw direct query
//Build the select fragment from the template so only selected columns get fetched
//instead of projecting it onto a c# object EF style, bypass that and use a SQL data reader instead then create the result set as per the spec doc
//SELECT FRAGMENT COLUMNS FROM TEMPLATE
//"select clm,clm,clm"
var qSelectColumns = SqlSelectBuilder.Build(ObjectFields.WIDGET_KEY, MOCK_WIDGET_DISPLAY_TEMPLATE_JSON, listOptions.Mini);
var qFrom = " FROM AWIDGET";
//base query
var q = "SELECT *, xmin FROM AWIDGET ";
//GET THE FILTER / SORT
//WHERE CLAUSE and SORT CLAUSE - FILTER / SORT
var qWhereAndOrderBy = string.Empty;
if (listOptions.DataFilterId > 0)
{
var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId);
//BUILD WHERE AND APPEND IT
q = q + SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId);
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId);
//BUILD ORDER BY AND APPEND IT
q = q + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
}
else
{
//GET DEFAULT ORDER BY
q = q + SqlFilterOrderByBuilder.DefaultGetManyOrderBy();
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DefaultGetManyOrderBy();
}
var qQuery = qSelectColumns + qFrom + qWhereAndOrderBy;
#pragma warning disable EF1000
using (var command = ct.Database.GetDbConnection().CreateCommand())
{
//GET THE FULL LIST OF ITEMS
var items = await ct.Widget
.FromSqlRaw(q)
.AsNoTracking()
.Skip(listOptions.Offset.Value)
.Take(listOptions.Limit.Value)
.ToArrayAsync();
//GET THE RECORD COUNT
var totalRecordCount = await ct.Widget
.FromSqlRaw(q)
.AsNoTracking()
.CountAsync();
#pragma warning restore EF1000
ct.Database.OpenConnection();
command.CommandText = qQuery;
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
//Build return here row by row
}
}
}
/*
//PAGED FETCH LIST QUERY
SELECT a.id, a.active, a.xmin, a.count, a.customfields, a.dollaramount, a.enddate, a.name, a.notes, a.roles, a.serial, a.startdate, a.tags
FROM (
SELECT *, xmin FROM AWIDGET ORDER BY ID DESC
) AS a
ORDER BY (SELECT 1)
LIMIT @__p_2 OFFSET @__p_1
2020-01-16 10:10:28.8786|INFO|Microsoft.EntityFrameworkCore.Database.Command|Executed DbCommand (1ms) [Parameters=[@__p_2='2', @__p_1='1'], CommandType='Text', CommandTimeout='30']
SELECT a.id, a.active, a.xmin, a.count, a.customfields, a.dollaramount, a.enddate, a.name, a.notes, a.roles, a.serial, a.startdate, a.tags
FROM (
SELECT *, xmin FROM AWIDGET ORDER BY ID DESC
) AS a
ORDER BY (SELECT 1)
LIMIT @__p_2 OFFSET @__p_1
//COUNT QUERY
SELECT COUNT(*)::INT
FROM (
SELECT *, xmin FROM AWIDGET ORDER BY ID DESC
) AS a
2020-01-16 10:10:28.8991|INFO|Microsoft.EntityFrameworkCore.Database.Command|Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*)::INT
FROM (
SELECT *, xmin FROM AWIDGET ORDER BY ID DESC
) AS a
*/
// #pragma warning disable EF1000
// //GET THE FULL LIST OF ITEMS
// var items = await ct.Widget
// .FromSqlRaw(q)
// .AsNoTracking()
// .Skip(listOptions.Offset.Value)
// .Take(listOptions.Limit.Value)
// .ToArrayAsync();
// //GET THE RECORD COUNT
// var totalRecordCount = await ct.Widget
// .FromSqlRaw(q)
// .AsNoTracking()
// .CountAsync();
// #pragma warning restore EF1000
//BUILD THE PAGING LINKS PORTION
var pageLinks = new PaginationLinkBuilder(Url, routeName, null, listOptions, totalRecordCount).PagingLinksObject();