This commit is contained in:
@@ -134,7 +134,7 @@ namespace AyaNova
|
||||
bool LOG_SENSITIVE_DATA = false;
|
||||
|
||||
#if (DEBUG)
|
||||
// LOG_SENSITIVE_DATA = true;
|
||||
LOG_SENSITIVE_DATA = false;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user