From bff35b1e039955593c8e648e58d499dbeb259c71 Mon Sep 17 00:00:00 2001 From: Datze Date: Fri, 11 Nov 2022 15:13:48 +0100 Subject: [PATCH 1/3] add gt and lt filters for datetime --- odata-helpers.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/odata-helpers.js b/odata-helpers.js index 30496f60..fa84e7a6 100644 --- a/odata-helpers.js +++ b/odata-helpers.js @@ -36,6 +36,14 @@ function applyFilter(result, singleFilter) { const filterRegex = /^\(?(\w+) le datetime'(.*)'\)?$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyLeFilter(result, filterProperty, transformDateTime(filterValue)); + } else if (singleFilter.includes(' gt datetime\'')) { + const filterRegex = /^\(?(\w+) gt datetime'(.*)'\)?$/; + const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); + return applyGtFilter(result, filterProperty, transformDateTime(filterValue)); + } else if (singleFilter.includes(' lt datetime\'')) { + const filterRegex = /^\(?(\w+) lt datetime'(.*)'\)?$/; + const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); + return applyLtFilter(result, filterProperty, transformDateTime(filterValue)); } } @@ -65,6 +73,14 @@ function applyLeFilter(result, filterProperty, filterValue) { return result.filter(item => item[filterProperty] <= filterValue); } +function applyGtFilter(result, filterProperty, filterValue) { + return result.filter(item => item[filterProperty] > filterValue); +} + +function applyLtFilter(result, filterProperty, filterValue) { + return result.filter(item => item[filterProperty] < filterValue); +} + /** * Deals with navigation properties of the supplied entity per the expand specification. * Navigation properties that are part of the expanded properties are included in the result object. From 0f73aa7dcd18c8bc64ee2e07c11a70cb6c94d8b0 Mon Sep 17 00:00:00 2001 From: Datze Date: Mon, 14 Nov 2022 09:10:06 +0100 Subject: [PATCH 2/3] Update regex for filters (* and )* supports nested AND queries like (((a eq '1') and (b eq = '2')) and (c eq '3')) --- odata-helpers.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/odata-helpers.js b/odata-helpers.js index fa84e7a6..7ed54efe 100644 --- a/odata-helpers.js +++ b/odata-helpers.js @@ -21,27 +21,27 @@ function removeFirstNavigationPath(propertyName) { */ function applyFilter(result, singleFilter) { if (singleFilter.includes(' eq \'')) { - const filterRegex = /^\(?(\w+) eq '(.*)'\)?$/; + const filterRegex = /^\(*(\w+) eq '(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyEqFilter(result, filterProperty, filterValue); } else if (singleFilter.includes(' ne \'')) { - const filterRegex = /^\(?(\w+) ne '(.*)'\)?$/; + const filterRegex = /^\(*(\w+) ne '(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyNeFilter(result, filterProperty, filterValue); } else if (singleFilter.includes(' ge datetime\'')) { - const filterRegex = /^\(?(\w+) ge datetime'(.*)'\)?$/; + const filterRegex = /^\(*(\w+) ge datetime'(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyGeFilter(result, filterProperty, transformDateTime(filterValue)); } else if (singleFilter.includes(' le datetime\'')) { - const filterRegex = /^\(?(\w+) le datetime'(.*)'\)?$/; + const filterRegex = /^\(*(\w+) le datetime'(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyLeFilter(result, filterProperty, transformDateTime(filterValue)); } else if (singleFilter.includes(' gt datetime\'')) { - const filterRegex = /^\(?(\w+) gt datetime'(.*)'\)?$/; + const filterRegex = /^\(*(\w+) gt datetime'(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyGtFilter(result, filterProperty, transformDateTime(filterValue)); } else if (singleFilter.includes(' lt datetime\'')) { - const filterRegex = /^\(?(\w+) lt datetime'(.*)'\)?$/; + const filterRegex = /^\(*(\w+) lt datetime'(.*)'\)*$/; const [, filterProperty, filterValue] = filterRegex.exec(singleFilter); return applyLtFilter(result, filterProperty, transformDateTime(filterValue)); } From 423dcc3a381ee809b478546c1b5a5bbb8b3c8bd2 Mon Sep 17 00:00:00 2001 From: Datze Date: Mon, 14 Nov 2022 12:15:00 +0100 Subject: [PATCH 3/3] Fix selection for select like select=Object/*,ExpandObject/* --- odata-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odata-helpers.js b/odata-helpers.js index 7ed54efe..31a39828 100644 --- a/odata-helpers.js +++ b/odata-helpers.js @@ -146,7 +146,7 @@ const reduceEntityToSelect = function(entity, selectedProperties = []) { return Object.entries(entity).reduce(function(result, [key, value]) { const isNavProperty = isNavigationProperty(key); if('__metadata' === key || selectedProperties.includes(key) || - (selectedProperties.includes('*')) && !isNavProperty) { + (selectedProperties.filter(a => a.includes("*")).length > 0) && !isNavProperty){ result[key] = value; } else if(isNavProperty) {