This commit is contained in:
2018-12-03 20:09:10 +00:00
parent 51941a958e
commit 59beefd3a4
3 changed files with 89 additions and 61 deletions

View File

@@ -2,13 +2,9 @@ using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.JsonPatch;
using EnumsNET;
using Newtonsoft.Json.Linq;
using AyaNova.Util;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
using AyaNova.Models;

View File

@@ -2,16 +2,47 @@ using System.Collections.Generic;
using System;
using System.Globalization;
using System.Text;
using Newtonsoft.Json.Linq;
namespace AyaNova.Biz
{
public static class FilterSqlCriteriaBuilder
{
public static string DataFilterToSQLCriteria(AyaNova.Models.DataFilter dataFilter, FilterOptions filterOptions)
{
if (string.IsNullOrWhiteSpace(dataFilter.Filter))
{
return "";
}
StringBuilder sb = new StringBuilder();
//iterate the datafilter and concatenate a sql query from it
var FilterArray = JArray.Parse(dataFilter.Filter);
for (int i = 0; i < FilterArray.Count; i++)
{
var filterItem = FilterArray[i];
var fld = filterItem["fld"].Value<string>();
var opType = filterItem["op"].Value<string>();
var val = filterItem["value"].Value<string>();
var dataType = filterOptions.Flds.Find(x => x.Fld == fld).Type;
sb.Append(DataFilterToColumnCriteria(fld, dataType, opType, val));
}
return sb.ToString();
}
/// <summary>
/// Translate DataFilter to Postgres friendly SQL criteria
/// </summary>
private static string GridToSqlCriteria(string sColumn, string sDataType, string sOperator, string sValue, bool IsCompound)
private static string DataFilterToColumnCriteria(string sColumn, string sDataType, string sOperator, string sValue)//, bool IsCompound)
{
StringBuilder sb = new StringBuilder();
@@ -73,8 +104,8 @@ namespace AyaNova.Biz
//so....
//Special addition to handle nulls
if (!IsCompound)
{
// if (!IsCompound)
// {
switch (sOperator)
{
case "Equals":
@@ -110,7 +141,7 @@ namespace AyaNova.Biz
sb.Append(" ");
break;
}
}
// }
#region Build for specific type
switch (sDataType)
@@ -817,12 +848,12 @@ namespace AyaNova.Biz
// }
public static DateTime ZeroMilliseconds(DateTime d)
private static DateTime ZeroMilliseconds(DateTime d)
{
if (d.Millisecond == 0) return d;
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, DateTimeKind.Utc);
}
public static DateTime MaxMilliseconds(DateTime d)
private static DateTime MaxMilliseconds(DateTime d)
{
if (d.Millisecond == 0) return d;
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, 999, DateTimeKind.Utc);
@@ -833,7 +864,7 @@ namespace AyaNova.Biz
/// https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE
/// </summary>
/// <returns></returns>
public static string PostgresDateFormat(DateTime theDate)
private static string PostgresDateFormat(DateTime theDate)
{
//If this was used it should be like this for a UTC date to iso8601
// ISO8601 with 7 decimal places

View File

@@ -175,6 +175,7 @@ namespace AyaNova.Biz
var q = "SELECT *, xmin FROM AWIDGET ";
//BUILD WHERE AND APPEND IT
q=q+FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(theFilter,WidgetBiz.FilterOptions);
//BUILD ORDER BY AND APPEND IT