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.Threading.Tasks;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.JsonPatch;
using EnumsNET;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using AyaNova.Util; using AyaNova.Util;
using AyaNova.Api.ControllerHelpers; using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
using AyaNova.Models; using AyaNova.Models;

View File

@@ -2,16 +2,47 @@ using System.Collections.Generic;
using System; using System;
using System.Globalization; using System.Globalization;
using System.Text; using System.Text;
using Newtonsoft.Json.Linq;
namespace AyaNova.Biz namespace AyaNova.Biz
{ {
public static class FilterSqlCriteriaBuilder 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> /// <summary>
/// Translate DataFilter to Postgres friendly SQL criteria /// Translate DataFilter to Postgres friendly SQL criteria
/// </summary> /// </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(); StringBuilder sb = new StringBuilder();
@@ -73,8 +104,8 @@ namespace AyaNova.Biz
//so.... //so....
//Special addition to handle nulls //Special addition to handle nulls
if (!IsCompound) // if (!IsCompound)
{ // {
switch (sOperator) switch (sOperator)
{ {
case "Equals": case "Equals":
@@ -110,7 +141,7 @@ namespace AyaNova.Biz
sb.Append(" "); sb.Append(" ");
break; break;
} }
} // }
#region Build for specific type #region Build for specific type
switch (sDataType) 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; if (d.Millisecond == 0) return d;
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, DateTimeKind.Utc); 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; if (d.Millisecond == 0) return d;
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, 999, DateTimeKind.Utc); 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 /// https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE
/// </summary> /// </summary>
/// <returns></returns> /// <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 //If this was used it should be like this for a UTC date to iso8601
// ISO8601 with 7 decimal places // ISO8601 with 7 decimal places

View File

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