[ 
https://issues.apache.org/jira/browse/OLINGO-897?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jacek Sputowski updated OLINGO-897:
-----------------------------------
    Description: 
According to [Addressing Derived 
Types|http://docs.oasis-open.org/odata/odata/v4.0/cs01/part2-url-conventions/odata-v4.0-cs01-part2-url-conventions.html#_Toc365046429]
 user should be able to filter on derived field
Example: 
http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered
 gt 80

Information about type (e.g. Model.VipCustomer) is stored in field 
*startTypeFilter*(in MemberImpl), but it is not passed to ExpressionVisitor in 
*accept* method. ExpressionVisitor get only path. startTypeFilter is ignored, 
so it can't be used in *visitMember* method.

Suggested changes - patch in attachment.

  was:
According to [Addressing Derived 
Types|http://docs.oasis-open.org/odata/odata/v4.0/cs01/part2-url-conventions/odata-v4.0-cs01-part2-url-conventions.html#_Toc365046429]
 user should be able to filter on derived field
Example: 
http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered
 gt 80

Information about type (e.g. Model.VipCustomer) is stored in field 
*startTypeFilter*(in MemberImpl), but it is not passed to ExpressionVisitor in 
*accept* method. ExpressionVisitor get only path. startTypeFilter is ignored, 
so it can't be used in *visitMember* method.

Suggested changes (please verify):
* in org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor
{code:java}
T visitMember(Member member) throws ExpressionVisitException, 
ODataApplicationException;
//current version:   T visitMember(UriInfoResource member) throws 
ExpressionVisitException, ODataApplicationException;
{code}
* in org.apache.olingo.server.core.uri.queryoption.expression.MemberImpl
{code:java}
 @Override
  public <T> T accept(final ExpressionVisitor<T> visitor) throws 
ExpressionVisitException, ODataApplicationException {
    return visitor.visitMember(this);
   //current version: return visitor.visitMember(path);
  }
{code}



> Cannot filter on derived properties - startTypeFilter in MemberImpl is ignored
> ------------------------------------------------------------------------------
>
>                 Key: OLINGO-897
>                 URL: https://issues.apache.org/jira/browse/OLINGO-897
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata4-server
>    Affects Versions: (Java) V4 4.2.0
>            Reporter: Jacek Sputowski
>            Priority: Critical
>         Attachments: 
> 0001-OLINGO-897-Cannot-filter-on-derived-properties-start.patch
>
>
> According to [Addressing Derived 
> Types|http://docs.oasis-open.org/odata/odata/v4.0/cs01/part2-url-conventions/odata-v4.0-cs01-part2-url-conventions.html#_Toc365046429]
>  user should be able to filter on derived field
> Example: 
> http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered
>  gt 80
> Information about type (e.g. Model.VipCustomer) is stored in field 
> *startTypeFilter*(in MemberImpl), but it is not passed to ExpressionVisitor 
> in *accept* method. ExpressionVisitor get only path. startTypeFilter is 
> ignored, so it can't be used in *visitMember* method.
> Suggested changes - patch in attachment.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to