From 77740c52c8d73dce764635853487816354248d4a Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:00:13 -0500 Subject: [PATCH 1/8] Add 'Contains' function name alias --- src/format.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/format.js b/src/format.js index f677392..b904dfa 100644 --- a/src/format.js +++ b/src/format.js @@ -480,7 +480,7 @@ var SqlFormatter = types.deriveClass(ExpressionVisitor, ctor, { _formatMappedStringMember: function (instance, mappedMemberInfo, args) { var functionName = mappedMemberInfo.memberName; - if (functionName == 'substringof') { + if (functionName == 'substringof' || functionName == 'contains') { this.statement.sql += '('; this.visit(instance); From 9a14e30f6d3e81513eccbd6ccdc1ab2a58130f2c Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:00:21 -0500 Subject: [PATCH 2/8] 0.2.1 --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1e54469..0cd4b82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azure-odata-sql", - "version": "0.2.0", + "version": "0.2.1", "description": "Convert OData queries into SQL statements", "main": "src/index.js", "author": "Microsoft", @@ -10,8 +10,7 @@ "test": "npm run lint & mocha", "lint": "jshint src" }, - "dependencies": { - }, + "dependencies": {}, "devDependencies": { "chai": "^3.0.0", "jshint": "^2.9.1", From c46b29898ce721ece584b777476f8fdd893a30ac Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:17:13 -0500 Subject: [PATCH 3/8] Declare contains as a string-mapped function --- src/parseOData.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/parseOData.js b/src/parseOData.js index 38df82a..505c2c2 100644 --- a/src/parseOData.js +++ b/src/parseOData.js @@ -371,6 +371,9 @@ var ODataParser = types.defineClass(ctor, { else if (functionName == 'endswith') { return new expressions.MappedMemberInfo('string', functionName, false, true); } + else if (functionName == 'contains') { + return new expressions.MappedMemberInfo('string', functionName, false, true); + } else if (functionName == 'length') { return new expressions.MappedMemberInfo('string', functionName, false, false); } From ca4dacd71665368d9a71c66fab06da1833df3ca1 Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:17:17 -0500 Subject: [PATCH 4/8] 0.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0cd4b82..90a2b52 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azure-odata-sql", - "version": "0.2.1", + "version": "0.2.2", "description": "Convert OData queries into SQL statements", "main": "src/index.js", "author": "Microsoft", From 321b4285e8c94f6faca4301e6df24e92584373f7 Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:19:59 -0500 Subject: [PATCH 5/8] move contains to substringof --- src/parseOData.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/parseOData.js b/src/parseOData.js index 505c2c2..8d212ba 100644 --- a/src/parseOData.js +++ b/src/parseOData.js @@ -371,9 +371,6 @@ var ODataParser = types.defineClass(ctor, { else if (functionName == 'endswith') { return new expressions.MappedMemberInfo('string', functionName, false, true); } - else if (functionName == 'contains') { - return new expressions.MappedMemberInfo('string', functionName, false, true); - } else if (functionName == 'length') { return new expressions.MappedMemberInfo('string', functionName, false, false); } @@ -386,7 +383,7 @@ var ODataParser = types.defineClass(ctor, { else if (functionName == 'trim') { return new expressions.MappedMemberInfo('string', functionName, false, true); } - else if (functionName == 'substringof') { + else if (functionName == 'substringof' || functionName == 'contains') { var memberInfo = new expressions.MappedMemberInfo('string', functionName, false, true); memberInfo.mapParams = function (args) { // reverse the order of arguments for string.Contains From a7d4d96df4604994cbb9247de0acc9c3baf60d32 Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 11:20:01 -0500 Subject: [PATCH 6/8] 0.2.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 90a2b52..d2d87ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azure-odata-sql", - "version": "0.2.2", + "version": "0.2.3", "description": "Convert OData queries into SQL statements", "main": "src/index.js", "author": "Microsoft", From 7f0b82560fd2e5085a369ead2b3dace23a4e0cde Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 12:26:14 -0500 Subject: [PATCH 7/8] Fix contains not working as intended. --- src/booleanize.js | 1 + src/format.js | 15 ++++++++++++++- src/parseOData.js | 6 +++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/booleanize.js b/src/booleanize.js index faef242..4181753 100644 --- a/src/booleanize.js +++ b/src/booleanize.js @@ -110,6 +110,7 @@ function isBooleanExpression(expr) { switch (expr.memberInfo.memberName) { case 'startswith': case 'endswith': + case 'contains': case 'substringof': return true; default: diff --git a/src/format.js b/src/format.js index b904dfa..946f88c 100644 --- a/src/format.js +++ b/src/format.js @@ -480,7 +480,20 @@ var SqlFormatter = types.deriveClass(ExpressionVisitor, ctor, { _formatMappedStringMember: function (instance, mappedMemberInfo, args) { var functionName = mappedMemberInfo.memberName; - if (functionName == 'substringof' || functionName == 'contains') { + if (functionName == 'substringof') { + this.statement.sql += '('; + this.visit(instance); + + this.statement.sql += ' LIKE '; + + // form '%' + + '%' + this.statement.sql += "('%' + "; + this.visit(args[0]); + this.statement.sql += " + '%')"; + + this.statement.sql += ')'; + } + else if (functionName == 'contains') { this.statement.sql += '('; this.visit(instance); diff --git a/src/parseOData.js b/src/parseOData.js index 8d212ba..0ec81ee 100644 --- a/src/parseOData.js +++ b/src/parseOData.js @@ -290,6 +290,7 @@ var ODataParser = types.defineClass(ctor, { this._validateFunctionParameters(functionName, functionArgs, 1); break; case 'substringof': + case 'contains': case 'startswith': case 'endswith': case 'concat': @@ -371,6 +372,9 @@ var ODataParser = types.defineClass(ctor, { else if (functionName == 'endswith') { return new expressions.MappedMemberInfo('string', functionName, false, true); } + else if (functionName == 'contains') { + return new expressions.MappedMemberInfo('string', functionName, false, true); + } else if (functionName == 'length') { return new expressions.MappedMemberInfo('string', functionName, false, false); } @@ -383,7 +387,7 @@ var ODataParser = types.defineClass(ctor, { else if (functionName == 'trim') { return new expressions.MappedMemberInfo('string', functionName, false, true); } - else if (functionName == 'substringof' || functionName == 'contains') { + else if (functionName == 'substringof') { var memberInfo = new expressions.MappedMemberInfo('string', functionName, false, true); memberInfo.mapParams = function (args) { // reverse the order of arguments for string.Contains From c0e9cc0029354adbf2455d5708e4de07bec65675 Mon Sep 17 00:00:00 2001 From: "Andrew G. Knackstedt" Date: Mon, 9 Jan 2023 12:26:17 -0500 Subject: [PATCH 8/8] 0.2.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2d87ab..059d180 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azure-odata-sql", - "version": "0.2.3", + "version": "0.2.4", "description": "Convert OData queries into SQL statements", "main": "src/index.js", "author": "Microsoft",