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; bool LOG_SENSITIVE_DATA = false;
#if (DEBUG) #if (DEBUG)
// LOG_SENSITIVE_DATA = true; LOG_SENSITIVE_DATA = false;
#endif #endif

View File

@@ -285,48 +285,93 @@ namespace AyaNova.Biz
"; ";
//BUILD THE QUERY //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 //SELECT FRAGMENT COLUMNS FROM TEMPLATE
//Build the select fragment from the template so only selected columns get fetched //"select clm,clm,clm"
//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 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) if (listOptions.DataFilterId > 0)
{ {
var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId); var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId);
//BUILD WHERE AND APPEND IT //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 //BUILD ORDER BY AND APPEND IT
q = q + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter); qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
} }
else else
{ {
//GET DEFAULT ORDER BY //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 ct.Database.OpenConnection();
var items = await ct.Widget command.CommandText = qQuery;
.FromSqlRaw(q) using (var dr = command.ExecuteReader())
.AsNoTracking() {
.Skip(listOptions.Offset.Value) while (dr.Read())
.Take(listOptions.Limit.Value) {
.ToArrayAsync(); //Build return here row by row
//GET THE RECORD COUNT }
var totalRecordCount = await ct.Widget }
.FromSqlRaw(q)
.AsNoTracking() }
.CountAsync();
#pragma warning restore EF1000 /*
//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 //BUILD THE PAGING LINKS PORTION
var pageLinks = new PaginationLinkBuilder(Url, routeName, null, listOptions, totalRecordCount).PagingLinksObject(); var pageLinks = new PaginationLinkBuilder(Url, routeName, null, listOptions, totalRecordCount).PagingLinksObject();