diff --git a/server/AyaNova/biz/DataFilterBiz.cs b/server/AyaNova/biz/DataFilterBiz.cs index 78ba785f..1f0ab396 100644 --- a/server/AyaNova/biz/DataFilterBiz.cs +++ b/server/AyaNova/biz/DataFilterBiz.cs @@ -302,7 +302,7 @@ namespace AyaNova.Biz else { var opType = filterItem["op"].Value(); - if (!FilterComparisonOperator.Operators.Contains(opType)) + if (!DataFilterComparisonOperator.Operators.Contains(opType)) AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Filter", $"Filter array item {i}, \"op\" property value of \"{opType}\" is not a valid FilterComparisonOperator type"); } diff --git a/server/AyaNova/biz/FilterComparisonOperator.cs b/server/AyaNova/biz/DataFilterComparisonOperator.cs similarity index 96% rename from server/AyaNova/biz/FilterComparisonOperator.cs rename to server/AyaNova/biz/DataFilterComparisonOperator.cs index d116e7b5..08ed575b 100644 --- a/server/AyaNova/biz/FilterComparisonOperator.cs +++ b/server/AyaNova/biz/DataFilterComparisonOperator.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; namespace AyaNova.Biz { - public static class FilterComparisonOperator + public static class DataFilterComparisonOperator { //NOTE: no LIKE or NOT LIKE deliberately //StartsWith and EndsWith and Contains and NotContains cover all the most common cases and avoid needing a special set of LIKE characters people have to type and we have to document diff --git a/server/AyaNova/biz/FilterSpecialTokens.cs b/server/AyaNova/biz/DataFilterSpecialTokens.cs similarity index 98% rename from server/AyaNova/biz/FilterSpecialTokens.cs rename to server/AyaNova/biz/DataFilterSpecialTokens.cs index a2201da3..6273d54d 100644 --- a/server/AyaNova/biz/FilterSpecialTokens.cs +++ b/server/AyaNova/biz/DataFilterSpecialTokens.cs @@ -3,7 +3,7 @@ using System; namespace AyaNova.Biz { - public static class FilterSpecialToken + public static class DataFilterSpecialToken { public const string Null = "{[null]}"; public const string Yesterday = "{[yesterday]}"; diff --git a/server/AyaNova/biz/SqlFilterCriteriaBuilder.cs b/server/AyaNova/biz/SqlFilterCriteriaBuilder.cs index 424d853b..65c23712 100644 --- a/server/AyaNova/biz/SqlFilterCriteriaBuilder.cs +++ b/server/AyaNova/biz/SqlFilterCriteriaBuilder.cs @@ -63,13 +63,13 @@ namespace AyaNova.Biz sb.Append(" "); //handle null values separately - if (!TagFilter && sValue == FilterSpecialToken.Null) + if (!TagFilter && sValue == DataFilterSpecialToken.Null) { switch (DataType) { case AyaDataType.Text: { - if (sOperator == FilterComparisonOperator.Equality) + if (sOperator == DataFilterComparisonOperator.Equality) { sb.Append("Is Null"); @@ -83,7 +83,7 @@ namespace AyaNova.Biz break; default: { - if (sOperator == FilterComparisonOperator.Equality) + if (sOperator == DataFilterComparisonOperator.Equality) sb.Append("Is Null"); else sb.Append("Is Not Null"); @@ -106,25 +106,25 @@ namespace AyaNova.Biz { switch (sOperator) { - case FilterComparisonOperator.Equality: + case DataFilterComparisonOperator.Equality: //no change on equals for nulls break; - case FilterComparisonOperator.GreaterThan: + case DataFilterComparisonOperator.GreaterThan: //no change on greater than for nulls //(nulls are going to be assumed to be always at the //less than end of the scale) break; - case FilterComparisonOperator.GreaterThanOrEqualTo: + case DataFilterComparisonOperator.GreaterThanOrEqualTo: //no change on greater than for nulls //(nulls are going to be assumed to be always at the //less than end of the scale) break; - case FilterComparisonOperator.LessThan: + case DataFilterComparisonOperator.LessThan: sb.Append("Is Null OR "); sb.Append(sColumn); sb.Append(" "); break; - case FilterComparisonOperator.LessThanOrEqualTo: + case DataFilterComparisonOperator.LessThanOrEqualTo: sb.Append("Is Null OR "); sb.Append(sColumn); sb.Append(" "); @@ -132,7 +132,7 @@ namespace AyaNova.Biz // case "Like": // //No change on like // break; - case FilterComparisonOperator.NotEqual: + case DataFilterComparisonOperator.NotEqual: //This is the big one: sb.Append("Is Null OR "); sb.Append(sColumn); @@ -158,62 +158,62 @@ namespace AyaNova.Biz #region Build TEXT OPS criteria switch (sOperator) { - case FilterComparisonOperator.Equality: + case DataFilterComparisonOperator.Equality: sb.Append("='"); sb.Append(sValue); sb.Append("'"); break; - case FilterComparisonOperator.GreaterThan: + case DataFilterComparisonOperator.GreaterThan: sb.Append(">'"); sb.Append(sValue); sb.Append("'"); break; - case FilterComparisonOperator.GreaterThanOrEqualTo: + case DataFilterComparisonOperator.GreaterThanOrEqualTo: sb.Append(">='"); sb.Append(sValue); sb.Append("'"); break; - case FilterComparisonOperator.LessThan: + case DataFilterComparisonOperator.LessThan: sb.Append("<'"); sb.Append(sValue); sb.Append("'"); break; - case FilterComparisonOperator.LessThanOrEqualTo: + case DataFilterComparisonOperator.LessThanOrEqualTo: sb.Append("<='"); sb.Append(sValue); sb.Append("'"); break; - case FilterComparisonOperator.NotEqual: + case DataFilterComparisonOperator.NotEqual: sb.Append("<>'"); sb.Append(sValue); sb.Append("'"); break; //Following 7 operators added 14-June-2006 - case FilterComparisonOperator.NotContains: + case DataFilterComparisonOperator.NotContains: sb.Append("Not Like '%"); sb.Append(sValue); sb.Append("%'"); break; - case FilterComparisonOperator.Contains: + case DataFilterComparisonOperator.Contains: sb.Append("Like '%"); sb.Append(sValue); sb.Append("%'"); break; - case FilterComparisonOperator.StartsWith: + case DataFilterComparisonOperator.StartsWith: sb.Append("Like '"); sb.Append(sValue); sb.Append("%'"); break; - case FilterComparisonOperator.EndsWith: + case DataFilterComparisonOperator.EndsWith: sb.Append("Like '%"); sb.Append(sValue); sb.Append("'"); @@ -247,7 +247,7 @@ namespace AyaNova.Biz { switch (sOperator) { - case FilterComparisonOperator.Equality: + case DataFilterComparisonOperator.Equality: sb.Append("= "); if (sValue.ToLowerInvariant() == "true") sb.Append("true"); @@ -255,7 +255,7 @@ namespace AyaNova.Biz sb.Append("false"); break; - case FilterComparisonOperator.NotEqual: + case DataFilterComparisonOperator.NotEqual: sb.Append("<> "); if (sValue.ToLowerInvariant() == "true") sb.Append("true"); @@ -322,7 +322,7 @@ namespace AyaNova.Biz switch (sValue) { //Case 402 - case FilterSpecialToken.Yesterday: + case DataFilterSpecialToken.Yesterday: //Between Day before yesterday at midnight and yesterday at midnight dtAfter = RelativeToday.AddDays(-1); dtAfter = dtAfter.AddSeconds(-1); @@ -330,13 +330,13 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Today: + case DataFilterSpecialToken.Today: //Between yesterday at midnight and tommorow at midnight dtAfter = RelativeToday.AddSeconds(-1); dtBefore = RelativeToday.AddDays(1); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Tomorrow: + case DataFilterSpecialToken.Tomorrow: //Between Tonight at midnight and day after tommorow at midnight dtAfter = RelativeToday.AddDays(1); dtAfter = dtAfter.AddSeconds(-1); @@ -345,7 +345,7 @@ namespace AyaNova.Biz break; //Case 402 - case FilterSpecialToken.LastWeek: + case DataFilterSpecialToken.LastWeek: //Between two Sundays ago at midnight and last sunday at midnight dtAfter = RelativeToday; @@ -365,7 +365,7 @@ namespace AyaNova.Biz break; - case FilterSpecialToken.ThisWeek: + case DataFilterSpecialToken.ThisWeek: //Between Sunday at midnight and Next sunday at midnight dtAfter = RelativeToday; //go backwards to monday @@ -392,7 +392,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.NextWeek: + case DataFilterSpecialToken.NextWeek: //Between Next Sunday at midnight and Next Next sunday at midnight dtAfter = RelativeToday; @@ -415,7 +415,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.LastMonth: + case DataFilterSpecialToken.LastMonth: //start with the first day of this month dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00); //subtract a Month @@ -431,7 +431,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.ThisMonth: + case DataFilterSpecialToken.ThisMonth: //start with the first day of this month dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00); @@ -444,7 +444,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.NextMonth: + case DataFilterSpecialToken.NextMonth: //BUGBUG? //SERVER thinks midnight UTC is 7am our time on January 1st 2020 //TEST thinks midnight UTC is 8am our time on January 1st 2020 @@ -462,7 +462,7 @@ namespace AyaNova.Biz // log.LogInformation($"NEXT MONTH TOKEN BUILDER IMMEDIATELY BEFORE BUILDING FRAGMENT: BEFORE={dtBefore.ToString()} AND AFTER={dtAfter.ToString()}"); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.FourteenDayWindow: + case DataFilterSpecialToken.FourteenDayWindow: //start with today zero hour dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, RelativeToday.Day, RelativeToday.Hour, RelativeToday.Minute, 00); dtAfter = dtAfter.AddDays(-7); @@ -479,21 +479,21 @@ namespace AyaNova.Biz //case 2067 ADDITIONAL DATE RANGES ************ - case FilterSpecialToken.Past: + case DataFilterSpecialToken.Past: //Forever up to Now dtAfter = new DateTime(1753, 1, 2, 00, 00, 00); dtBefore = DateTime.UtcNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Future: + case DataFilterSpecialToken.Future: //From Now to forever (999 years from now) dtAfter = DateTime.UtcNow; dtBefore = DateTime.UtcNow.AddYears(999); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.LastYear: + case DataFilterSpecialToken.LastYear: //From zero hour january 1 a year ago dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); //To zero hour January 1 this year @@ -501,7 +501,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.ThisYear: + case DataFilterSpecialToken.ThisYear: //From zero hour january 1 this year dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); //To zero hour Jan 1 next year @@ -509,7 +509,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.InTheLast3Months: + case DataFilterSpecialToken.InTheLast3Months: //From Now minus 3 months dtAfter = DateTime.UtcNow.AddMonths(-3); //To Now @@ -517,7 +517,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.InTheLast6Months: + case DataFilterSpecialToken.InTheLast6Months: //From Now minus 6 months dtAfter = DateTime.UtcNow.AddMonths(-6); //To Now @@ -525,7 +525,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.InTheLastYear: + case DataFilterSpecialToken.InTheLastYear: //From Now minus 365 days dtAfter = DateTime.UtcNow.AddDays(-365); //To Now @@ -537,7 +537,7 @@ namespace AyaNova.Biz //NEW ONES FOR RAVEN - case FilterSpecialToken.YearToDate: + case DataFilterSpecialToken.YearToDate: //From zero hour january 1 this year dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; //To now @@ -545,21 +545,21 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Past90Days: + case DataFilterSpecialToken.Past90Days: //From Now minus 90 days dtAfter = DateTime.UtcNow.AddDays(-90); //To Now dtBefore = DateTime.UtcNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Past30Days: + case DataFilterSpecialToken.Past30Days: //From Now minus 30 days dtAfter = DateTime.UtcNow.AddDays(-30); //To Now dtBefore = DateTime.UtcNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.Past24Hours: + case DataFilterSpecialToken.Past24Hours: //From Now minus 24 hours dtAfter = DateTime.UtcNow.AddHours(-24); //To Now @@ -567,7 +567,7 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.January: + case DataFilterSpecialToken.January: //From zero hour january 1 this year dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); //To zero hour feb 1 this year @@ -575,67 +575,67 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.February: + case DataFilterSpecialToken.February: dtAfter = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.March: + case DataFilterSpecialToken.March: dtAfter = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.April: + case DataFilterSpecialToken.April: dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.May: + case DataFilterSpecialToken.May: dtAfter = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.June: + case DataFilterSpecialToken.June: dtAfter = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.July: + case DataFilterSpecialToken.July: dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.August: + case DataFilterSpecialToken.August: dtAfter = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.September: + case DataFilterSpecialToken.September: dtAfter = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.October: + case DataFilterSpecialToken.October: dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.November: + case DataFilterSpecialToken.November: dtAfter = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; - case FilterSpecialToken.December: + case DataFilterSpecialToken.December: //From zero hour dec 1 this year dtAfter = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); //To zero hour Jan 1 next year @@ -664,7 +664,7 @@ namespace AyaNova.Biz switch (sOperator) { - case FilterComparisonOperator.Equality: + case DataFilterComparisonOperator.Equality: sb.Append(">='"); sb.Append(sLowEnd); sb.Append("' AND "); @@ -675,29 +675,29 @@ namespace AyaNova.Biz sb.Append("'"); break; - case FilterComparisonOperator.GreaterThan: + case DataFilterComparisonOperator.GreaterThan: sb.Append(">'"); sb.Append(sLowEnd); sb.Append("'"); break; - case FilterComparisonOperator.GreaterThanOrEqualTo: + case DataFilterComparisonOperator.GreaterThanOrEqualTo: sb.Append(">='"); sb.Append(sLowEnd); sb.Append("'"); break; - case FilterComparisonOperator.LessThan: + case DataFilterComparisonOperator.LessThan: sb.Append("<'"); sb.Append(sHighEnd); sb.Append("'"); break; - case FilterComparisonOperator.LessThanOrEqualTo: + case DataFilterComparisonOperator.LessThanOrEqualTo: sb.Append("<='"); sb.Append(sHighEnd); sb.Append("'"); break; - case FilterComparisonOperator.NotEqual: + case DataFilterComparisonOperator.NotEqual: sb.Append("<'"); sb.Append(sLowEnd); sb.Append("' OR "); @@ -750,27 +750,27 @@ namespace AyaNova.Biz switch (sOperator) { - case FilterComparisonOperator.Equality: + case DataFilterComparisonOperator.Equality: sb.Append("="); sb.Append(sValue); break; - case FilterComparisonOperator.GreaterThan: + case DataFilterComparisonOperator.GreaterThan: sb.Append(">"); sb.Append(sValue); break; - case FilterComparisonOperator.GreaterThanOrEqualTo: + case DataFilterComparisonOperator.GreaterThanOrEqualTo: sb.Append(">="); sb.Append(sValue); break; - case FilterComparisonOperator.LessThan: + case DataFilterComparisonOperator.LessThan: sb.Append("<"); sb.Append(sValue); break; - case FilterComparisonOperator.LessThanOrEqualTo: + case DataFilterComparisonOperator.LessThanOrEqualTo: sb.Append("<="); sb.Append(sValue); break; - case FilterComparisonOperator.NotEqual: + case DataFilterComparisonOperator.NotEqual: sb.Append("<>"); sb.Append(sValue); break;