You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2019/05/22 07:38:42 UTC
[olingo-odata2] branch master updated: [OLINGO-1359] Support
replace as a operator
This is an automated email from the ASF dual-hosted git repository.
ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git
The following commit(s) were added to refs/heads/master by this push:
new 5245762 [OLINGO-1359] Support replace as a operator
5245762 is described below
commit 5245762de3d300e548c41f1ddb5ff57127075957
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Wed May 22 13:08:32 2019 +0530
[OLINGO-1359] Support replace as a operator
---
.../odata2/api/uri/expression/MethodOperator.java | 2 +-
.../core/uri/expression/FilterParserImpl.java | 6 +++++
.../core/uri/expression/TestAbapCompatibility.java | 28 ++++++++++------------
.../odata2/core/uri/expression/TestParser.java | 1 +
.../odata2/ref/processor/ListsProcessor.java | 2 ++
5 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/expression/MethodOperator.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/expression/MethodOperator.java
index f0f9638..b16fe31 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/expression/MethodOperator.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/expression/MethodOperator.java
@@ -27,7 +27,7 @@ public enum MethodOperator {
ENDSWITH("endswith"), INDEXOF("indexof"), STARTSWITH("startswith"), TOLOWER("tolower"), TOUPPER("toupper"), TRIM(
"trim"), SUBSTRING("substring"), SUBSTRINGOF("substringof"), CONCAT("concat"), LENGTH("length"), YEAR("year"),
MONTH("month"), DAY("day"), HOUR("hour"), MINUTE("minute"), SECOND("second"), ROUND("round"), FLOOR("floor"),
- CEILING("ceiling");
+ CEILING("ceiling"), REPLACE("replace");
private String syntax;
private String stringRespresentation;
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
index 2741d50..6623a75 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
@@ -862,6 +862,12 @@ public class FilterParserImpl implements FilterParser {
combination.add(new ParameterSet(boolean_, string, string));
lAvailableMethods.put(MethodOperator.SUBSTRINGOF.toUriLiteral(), new InfoMethod(MethodOperator.SUBSTRINGOF, 1, -1,
combination));
+
+ // replace
+ combination = new ParameterSetCombination.PSCflex();
+ combination.add(new ParameterSet(string, string, string, string));
+ lAvailableMethods.put(MethodOperator.REPLACE.toUriLiteral(), new InfoMethod(MethodOperator.REPLACE, 3, 3,
+ combination));
// concat
combination = new ParameterSetCombination.PSCflex();
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestAbapCompatibility.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestAbapCompatibility.java
index 0b9c17c..7e13ff2 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestAbapCompatibility.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestAbapCompatibility.java
@@ -385,6 +385,8 @@ public class TestAbapCompatibility extends TestBase {
// lcl_helper=>veri_type( iv_expression = `second(datetimeoffset'2002-10-10T12:00:00-05:00')` io_expected_type =
// lo_simple_type ).
GetPTF("second(datetimeoffset'2002-10-10T12:00:00-05:00')").aEdmType(EdmInt32.getInstance());
+
+ GetPTF("replace('aBa','B','CCC')").aEdmType(EdmString.getInstance());
}
@Test
@@ -595,22 +597,16 @@ public class TestAbapCompatibility extends TestBase {
// iv_expected_textid = /iwcor/cx_ds_expr_syntax_error=>function_invalid
// iv_expected_msg = `Invalid function 'replace' detected` ).
// -->see test method abapMethodRleplaceNotAllowed()
- }
-
- @Test
- public void abapMethodRleplaceNotAllowed() // copy of ABAP method test_filter_parser
- {
- // Filter method is NOT allowed
- // lcl_helper=>veri_expression_ex(
- // iv_expression = `replace('aBa','B','CCC')`
- // iv_expected_textid = /iwcor/cx_ds_expr_syntax_error=>function_invalid
- // iv_expected_msg = `Invalid function 'replace' detected` ).
-
- // http://services.odata.org/Northwind/Northwind.svc/Products/?$filter=replace('aBa','B','CCC')
- // -->Unknown function 'replace' at position 0.
- GetPTF("replace('aBa','B','CCC')").aExMsgText(
- "Unknown function \"replace\" at position 1 in \"replace('aBa','B','CCC')\".");
-
+
+ GetPTF("replace('a','b')")
+ .aExMsgText(
+ "No applicable method found for \"replace\" at position 1 in \"replace('a','b')\" "
+ + "with the specified arguments. Method \"replace\" requires exact 3 argument(s).");
+
+ GetPTF("replace('a',1,2)")
+ .aExMsgText(
+ "No applicable method found for \"replace\" at position 1 in "
+ + "\"replace('a',1,2)\" for the specified argument types.");
}
}
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestParser.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestParser.java
index 637287c..7d1bb5a 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestParser.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/expression/TestParser.java
@@ -179,6 +179,7 @@ public class TestParser extends TestBase {
GetPTF("startswith('Test','Te')").aSerialized("{startswith('Test','Te')}");
GetPTF("startswith('Test', concat('A','B'))").aSerialized("{startswith('Test',{concat('A','B')})}");
GetPTF("substring('Test', 1 add 2)").aSerialized("{substring('Test',{1 add 2})}");
+ GetPTF("replace('Test', ' ', '')").aSerialized("{replace('Test',' ','')}");
}
@Test
diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java
index a64ab9a..913f1b4 100644
--- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java
+++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java
@@ -1471,6 +1471,8 @@ public class ListsProcessor extends ODataSingleProcessor {
final int offset = second.length() == 0 ? 0 : Integer.parseInt(second);
final int length = third.length() == 0 ? 0 : Integer.parseInt(second);
return first.substring(offset, offset + length);
+ case REPLACE:
+ return first.replace(second, third);
case SUBSTRINGOF:
return Boolean.toString(second.contains(first));
case CONCAT: