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: