diff --git a/.vscode/launch.json b/.vscode/launch.json index f994e0f9..379d2046 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -49,7 +49,7 @@ "AYANOVA_USE_URLS": "http://*:7575;", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", - "AYANOVA_SERVER_TEST_MODE":"true", + "AYANOVA_SERVER_TEST_MODE":"false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL":"small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET":"-7", "AYANOVA_BACKUP_PG_DUMP_PATH":"C:\\data\\code\\PostgreSQLPortable_12.0\\App\\PgSQL\\bin\\" diff --git a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs index 9fca1403..aa71b682 100644 --- a/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs +++ b/server/AyaNova/DataList/DataListSqlFilterCriteriaBuilder.cs @@ -4,7 +4,6 @@ using System.Globalization; using System.Text; using Newtonsoft.Json.Linq; using System.Linq; -using Microsoft.EntityFrameworkCore; using AyaNova.Biz; namespace AyaNova.DataList @@ -406,52 +405,56 @@ code from picklist in case I decide to do it later //https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#Roundtrip System.DateTime dtData = DateTime.Parse(sValue); - string sHighEnd = PostgresDateFormat(MaxMilliseconds(dtData)); - string sLowEnd = PostgresDateFormat(ZeroMilliseconds(dtData)); + //THis is because we don't want milliseconds to alter the value in any way, AyaNova resolution for time is seconds not milliseconds to allow for some sloppiness + //so no date is exact and we work around that with ranges that rule out milliseconds affecting query + //also this needs to work in conjunction with client filters for date ranges that provide a value one second before the range in question as START timestamp + //and exactly the end of range in question as END timestamp + string sDateValueWithMaxMilliseconds = PostgresDateFormat(MaxMilliseconds(dtData)); + string sDateValueWithZeroMilliseconds = PostgresDateFormat(ZeroMilliseconds(dtData)); switch (sOperator) { case DataListFilterComparisonOperator.Equality: sb.Append(">='"); - sb.Append(sLowEnd); + sb.Append(sDateValueWithZeroMilliseconds); sb.Append("' AND "); sb.Append(SqlColumnNameToFilter); sb.Append(" "); sb.Append("<='"); - sb.Append(sHighEnd); + sb.Append(sDateValueWithMaxMilliseconds); sb.Append("'"); break; case DataListFilterComparisonOperator.GreaterThan: sb.Append(">'"); - sb.Append(sLowEnd); + sb.Append(sDateValueWithMaxMilliseconds); sb.Append("'"); break; case DataListFilterComparisonOperator.GreaterThanOrEqualTo: sb.Append(">='"); - sb.Append(sLowEnd); + sb.Append(sDateValueWithZeroMilliseconds); sb.Append("'"); break; case DataListFilterComparisonOperator.LessThan: sb.Append("<'"); - sb.Append(sHighEnd); + sb.Append(sDateValueWithZeroMilliseconds); sb.Append("'"); break; case DataListFilterComparisonOperator.LessThanOrEqualTo: sb.Append("<='"); - sb.Append(sHighEnd); + sb.Append(sDateValueWithMaxMilliseconds); sb.Append("'"); break; case DataListFilterComparisonOperator.NotEqual: sb.Append("<'"); - sb.Append(sLowEnd); + sb.Append(sDateValueWithZeroMilliseconds); sb.Append("' OR "); sb.Append(SqlColumnNameToFilter); sb.Append(" "); sb.Append(">'"); - sb.Append(sHighEnd); + sb.Append(sDateValueWithMaxMilliseconds); sb.Append("'"); break;