This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user