From f904e74ba87215be2c3be12b235761bfa6c9ca98 Mon Sep 17 00:00:00 2001 From: Vasilios Daskalopoulos Date: Mon, 20 May 2019 16:32:44 -0400 Subject: [PATCH] make an automated script for converting to v0.3 --- lib/convertToV3/convertToV3.js | 54 +++++++++++++++++++++++ test/convertToV3.js | 79 ++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 lib/convertToV3/convertToV3.js create mode 100644 test/convertToV3.js diff --git a/lib/convertToV3/convertToV3.js b/lib/convertToV3/convertToV3.js new file mode 100644 index 0000000..0e328a4 --- /dev/null +++ b/lib/convertToV3/convertToV3.js @@ -0,0 +1,54 @@ +function swapFieldName(o, oldname, newname) { + if (oldname in o) { + o[newname] = o[oldname]; + delete o[oldname]; + } +} + +function convertToV3 (query) { + // handle an array of queries + if (Array.isArray(query)) { + let newArray = []; + for (let q of query) { + newArray.push(convertToV3(q)); + } + return newArray; + } else { + query.version = '0.3'; + + // invoke -> operation + swapFieldName(query, 'invoke', 'operation'); + + // 'cardinality' -> 'unique' + if (query.operation.method === 'cardinality') { + query.operation.method = 'unique'; + } + + // group_by -> groups + swapFieldName(query, 'group_by', 'groups'); + + // the distinct operator now becomes a count with the field being added to the "groups" section + if (query.operation.method === 'distinct') { + if (!query.groups) { + query.groups = []; + } + query.groups.push(query.operation.field); + delete query.operation.field; + if (query.operation.params) { + if ('limit' in query.operation.params) { + delete query.operation.params.limit; + } + if ('count' in query.operation.params) { + delete query.operation.params.count; + } + if (Object.keys(query.operation.params).length === 0) { + delete query.operation.params; + } + } + query.operation.method = 'count'; + } + } + return query; +} + +module.exports = convertToV3; diff --git a/test/convertToV3.js b/test/convertToV3.js new file mode 100644 index 0000000..36ee7b8 --- /dev/null +++ b/test/convertToV3.js @@ -0,0 +1,79 @@ +const should = require('should'); +const convertToV3 = require('../lib/convertToV3/convertToV3'); +/* eslint-disable */ +const testQueries = { + v2: [ + [{"version": "0.2", "invoke": {"method": "count"}}, {"version": "0.2", "invoke": {"method": "count"}, "group_by": ["platform"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": ["platform"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": ["platform", "deploytype"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$match": {"event": "ti.start"}}, "group_by": ["platform", "deploytype"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$range": {"time": {"gte": 1522096142034, "lte": 1522096142036}}}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$range": {"time": {"gt": 1522096142034, "lte": 1522096142036}}}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$prefix": {"event": "ti.en"}}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$not": [{"$match": {"id": "127"}}]}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$or": [{"$match": {"id": "127"}}, {"$match": {"id": "129"}}]}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$and": [{"$match": {"id": "127"}}, {"$match": {"time": 1522096142037}}]}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$suffix": {"event": "end"}}}], + [{"version": "0.2", "invoke": {"method": "distinct", "field": "event"}}], + [{"version": "0.2", "invoke": {"method": "distinct", "field": "data.comp", "params": {"limit": 1}}}], + [{"version": "0.2", "invoke": {"method": "cardinality", "field": "event"}}], + [{"version": "0.2", "invoke": {"method": "find", "params": {"limit": 2, "include": ["id", "time", "event"]}}}], + // [{"version": "0.2", "invoke": {"method": "find", "params": {"limit": 2, "offset": 1, "include": ["id", "time", "event"]}}}], + [{"version": "0.2", "invoke": {"method": "count"}, "filters": {"$exists": {"foobar": true}}}], + [{"version": "0.2", "invoke": {"method": "count"}}], + [{"version": "0.2", "invoke": {"method": "find", "params": {"limit": 2, "include": ["id", "time", "event"]}}, "group_by": ["event"]}], + [{"version": "0.2", "invoke": {"method": "sum", "field": "temp"}}], + [{"version": "0.2", "invoke": {"method": "avg", "field": "temp"}}], + [{"version": "0.2", "invoke": {"method": "min", "field": "temp"}}], + [{"version": "0.2", "invoke": {"method": "max", "field": "temp"}}], + [{"version": "0.2", "invoke": {"method": "distinct", "field": "event", "params": {"count": false}}}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": ["data.comp"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": ["data.comp", "data.level"]}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": [{"type": "date", "field": "time", "params": {"interval": "day"}}]}], + [{"version": "0.2", "invoke": {"method": "count"}, "group_by": [{"type": "numeric", "field": "temp", "params": {"interval": 3}}]}] + ], + v3: [ + [{"version": "0.3", "operation": {"method": "count"}}, {"version": "0.3", "operation": {"method": "count"}, "groups": ["platform"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["platform"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["platform", "deploytype"]}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$match": {"event": "ti.start"}}, "groups": ["platform", "deploytype"]}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$range": {"time": {"gte": 1522096142034, "lte": 1522096142036}}}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$range": {"time": {"gt": 1522096142034, "lte": 1522096142036}}}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$prefix": {"event": "ti.en"}}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$not": [{"$match": {"id": "127"}}]}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$or": [{"$match": {"id": "127"}}, {"$match": {"id": "129"}}]}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$and": [{"$match": {"id": "127"}}, {"$match": {"time": 1522096142037}}]}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$suffix": {"event": "end"}}}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["event"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["data.comp"]}], + [{"version": "0.3", "operation": {"method": "unique", "field": "event"}}], + [{"version": "0.3", "operation": {"method": "find", "params": {"limit": 2, "include": ["id", "time", "event"]}}}], + // [{"version": "0.3", "operation": {"method": "find", "params": {"limit": 2, "offset": 1, "include": ["id", "time", "event"]}}}], + [{"version": "0.3", "operation": {"method": "count"}, "filters": {"$exists": {"foobar": true}}}], + [{"version": "0.3", "operation": {"method": "count"}}], + [{"version": "0.3", "operation": {"method": "find", "params": {"limit": 2, "include": ["id", "time", "event"]}}, "groups": ["event"]}], + [{"version": "0.3", "operation": {"method": "sum", "field": "temp"}}], + [{"version": "0.3", "operation": {"method": "avg", "field": "temp"}}], + [{"version": "0.3", "operation": {"method": "min", "field": "temp"}}], + [{"version": "0.3", "operation": {"method": "max", "field": "temp"}}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["event"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["data.comp"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": ["data.comp", "data.level"]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": [{"type": "date", "field": "time", "params": {"interval": "day"}}]}], + [{"version": "0.3", "operation": {"method": "count"}, "groups": [{"type": "numeric", "field": "temp", "params": {"interval": 3}}]}] + ] +}; +/* eslint-enable */ + +suite('convertToV3', () => { + test('test arrays are same length', (done) => { + should(testQueries.v2.length).equal(testQueries.v3.length); + done(); + }); + test('convert each query', (done) => { + for (let i = 0; i < testQueries.v2.length; i += 1) { + should(convertToV3(testQueries.v2[i])).deepEqual(testQueries.v3[i]); + } + done(); + }); +});