From 90b5243eb58f4e1ea7c3eaeccbde08a7bf6e9e4e Mon Sep 17 00:00:00 2001 From: Kyriakos Barbounakis Date: Fri, 11 Oct 2024 15:55:38 +0300 Subject: [PATCH] use OpenDataParser.parseSelectSeqence while parsing filter --- data-model.js | 91 +++++++++++++++++++++-------------------------- package-lock.json | 49 +++++++++++++++++-------- package.json | 4 +-- 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/data-model.js b/data-model.js index 2578a34..0481b28 100644 --- a/data-model.js +++ b/data-model.js @@ -825,70 +825,61 @@ function filterInternal(params, callback) { q.query.$expand = $joinExpressions; //prepare q.query.prepare(); - if (typeof params === 'object') { //apply query parameters var select = params.$select, skip = params.$skip || 0, - orderBy = params.$orderby || params.$order, - groupBy = params.$groupby || params.$group, + orderBy = params.$orderby || params.$orderBy || params.$order, + groupBy = params.$groupby || params.$groupBy || params.$group, expand = params.$expand, levels = parseInt(params.$levels), top = params.$top || params.$take; //select fields - if (typeof select === 'string') { - q.select.apply(q, select.split(',').map(function(x) { - return x.replace(/^\s+|\s+$/g, ''); - })); - } - //apply group by fields - if (typeof groupBy === 'string') { - q.groupBy.apply(q, groupBy.split(',').map(function(x) { - return x.replace(/^\s+|\s+$/g, ''); - })); - } - if ((typeof levels === 'number') && !isNaN(levels)) { - //set expand levels - q.levels(levels); - } - //set $skip - q.skip(skip); - if (top) - q.query.take(top); - //set caching - if (params.$cache && self.caching === 'conditional') { - q.cache(true); - } - //set $orderby - if (orderBy) { - orderBy.split(',').map(function(x) { - return x.replace(/^\s+|\s+$/g, ''); - }).forEach(function(x) { - if (/\s+desc$/i.test(x)) { - q.orderByDescending(x.replace(/\s+desc$/i, '')); + + void async.series( + [ + function(cb) { return parser.parseSelectSequence(select, cb) }, + function(cb) { return parser.parseOrderBySequence(orderBy, cb) }, + function(cb) { return parser.parseSelectSequence(groupBy, cb) }, + function(cb) { + return cb(null, parser.parseExpandSequence(expand)); } - else if (/\s+asc/i.test(x)) { - q.orderBy(x.replace(/\s+asc/i, '')); + ], function (err, results) { + if (err) { + return callback(err); } - else { - q.orderBy(x); + // get select, orderby and groupby system query options + var [$select, $orderBy, $groupBy, $expand] = results; + Object.assign(q.query, { + $select, + $orderBy, + $groupBy + }); + // set levels + if ((typeof levels === 'number') && !isNaN(levels)) { + q.levels(levels); } - }); - } - if (expand) { - - var resolver = require('./data-expand-resolver'); - var matches = resolver.testExpandExpression(expand); - if (matches && matches.length>0) { - q.expand.apply(q, matches); + // set top + if (top) { + q.take(top); + } + // set skip + q.skip(skip); + //set caching + var { $cache } = params; + if ($cache && self.caching === 'conditional') { + q.cache(true); + } + // set expand + if ($expand) { + q.expand.apply(q, $expand); + } + return callback(null, q); } - } - //return - callback(null, q); + ) } else { - //and finally return DataQueryable instance - callback(null, q); + return callback(null, q); } } diff --git a/package-lock.json b/package-lock.json index 8268219..4ef2d38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@themost/common": "^2.5.11", "@themost/json-logger": "^1.1.0", "@themost/peers": "^1.0.2", - "@themost/query": "^2.5.27", + "@themost/query": "^2.5.29", "@themost/sqlite": "^2.6.16", "@themost/xml": "^2.5.2", "@types/core-js": "^2.5.0", @@ -5194,15 +5194,17 @@ "integrity": "sha512-wlMYRsNWaz5EJ7AwCIA3yw2kHy4p36a4VTz8XmyYTYDYaKgmXjTi6IJPB/+di0mt/rf6NfFfsYwrmytoLseiIg==" }, "node_modules/@themost/query": { - "version": "2.5.27", - "resolved": "https://registry.npmjs.org/@themost/query/-/query-2.5.27.tgz", - "integrity": "sha512-3c8kzEEYlkxZblzqgi+Ky9anVMRgcyMCAW/WC5uIEaNIeWaE7SgNIaIi8/ksq6+r6IMQI8hcThFLwHRU30AP6w==", + "version": "2.5.29", + "resolved": "https://registry.npmjs.org/@themost/query/-/query-2.5.29.tgz", + "integrity": "sha512-tUexenuZlg0pILqoUl9vh1rSbi1tR3hXN+skP6yESFl6ILEryfQeDIlsSgs7SiodJOAAFJXxnZcoZSxkPxA+1A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@themost/events": "^1.0.5", "async": "^2.6.4", "esprima": "^4.0.1", "lodash": "^4.17.15", + "package-lock-only": "^0.0.4", "sprintf-js": "^1.1.2", "symbol": "^0.3.1" }, @@ -10821,6 +10823,17 @@ "node": ">=6" } }, + "node_modules/package-lock-only": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/package-lock-only/-/package-lock-only-0.0.4.tgz", + "integrity": "sha512-fV1YHeTMWH5LKmdVqfWskm2/SG0iF2IrxJn3ziaPVx9CnpecGJzt8xXtLV+CYINENZwPFMtbxO5qupz0asNz1A==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "chalk": "^2.4.1" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -12976,8 +12989,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} + "dev": true }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -16030,15 +16042,16 @@ "integrity": "sha512-wlMYRsNWaz5EJ7AwCIA3yw2kHy4p36a4VTz8XmyYTYDYaKgmXjTi6IJPB/+di0mt/rf6NfFfsYwrmytoLseiIg==" }, "@themost/query": { - "version": "2.5.27", - "resolved": "https://registry.npmjs.org/@themost/query/-/query-2.5.27.tgz", - "integrity": "sha512-3c8kzEEYlkxZblzqgi+Ky9anVMRgcyMCAW/WC5uIEaNIeWaE7SgNIaIi8/ksq6+r6IMQI8hcThFLwHRU30AP6w==", + "version": "2.5.29", + "resolved": "https://registry.npmjs.org/@themost/query/-/query-2.5.29.tgz", + "integrity": "sha512-tUexenuZlg0pILqoUl9vh1rSbi1tR3hXN+skP6yESFl6ILEryfQeDIlsSgs7SiodJOAAFJXxnZcoZSxkPxA+1A==", "dev": true, "requires": { "@themost/events": "^1.0.5", "async": "^2.6.4", "esprima": "^4.0.1", "lodash": "^4.17.15", + "package-lock-only": "^0.0.4", "sprintf-js": "^1.1.2", "symbol": "^0.3.1" } @@ -16294,8 +16307,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "agent-base": { "version": "6.0.2", @@ -16968,8 +16980,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} + "dev": true }, "deep-extend": { "version": "0.6.0", @@ -18862,8 +18873,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "29.6.3", @@ -20296,6 +20306,15 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-lock-only": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/package-lock-only/-/package-lock-only-0.0.4.tgz", + "integrity": "sha512-fV1YHeTMWH5LKmdVqfWskm2/SG0iF2IrxJn3ziaPVx9CnpecGJzt8xXtLV+CYINENZwPFMtbxO5qupz0asNz1A==", + "dev": true, + "requires": { + "chalk": "^2.4.1" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", diff --git a/package.json b/package.json index 7923296..16c795a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "peerDependencies": { "@themost/common": "^2.5.11", - "@themost/query": "^2.5.27", + "@themost/query": "^2.5.29", "@themost/xml": "^2.5.2" }, "engines": { @@ -43,7 +43,7 @@ "@themost/common": "^2.5.11", "@themost/json-logger": "^1.1.0", "@themost/peers": "^1.0.2", - "@themost/query": "^2.5.27", + "@themost/query": "^2.5.29", "@themost/sqlite": "^2.6.16", "@themost/xml": "^2.5.2", "@types/core-js": "^2.5.0",