SenseNet / sensenet

Open Source Content Services Platform written in .NET
https://sensenet.com
GNU General Public License v2.0
174 stars 111 forks source link

Cannot query negative numbers #2104

Open kavics opened 1 month ago

kavics commented 1 month ago

The content query clause "NumberField:-0.2" does not work. The escaping is ineffective: "NumberField:\-0.2" also not working. Example URL: /odata.svc/Root?metadata=no&$select=NumberField,Index,Id,Name,Type&query=NumberField:-0.2 Response:


{
"error": {
"code": "RequestError",
"exceptiontype": "ParserException",
"message": {
"lang": "en-us",
"value": "Unexpected  - , (query:  +(NumberField:-0.2) +(InTree: /Root ) ) [Line: 1, Col: 15]"
},
"innererror": {
"trace": "ODataException: Unexpected '-', (query: \"+(NumberField:-0.2) +(InTree:'/Root')\") [Line: 1, Col: 15]\r\n
  at SenseNet.OData.Writers.ODataWriter.WriteChildrenCollectionAsync(String path, HttpContext httpContext, ODataRequest req) in D:\\dev\\github\\sensenet\\src\\OData\\Writers\\ODataWriter.cs:line 217\r\n
  at SenseNet.OData.ODataMiddleware.ProcessRequestAsync(HttpContext httpContext, ODataRequest odataRequest) in D:\\dev\\github\\sensenet\\src\\OData\\ODataMiddleware.cs:line 214\r\n---- Inner Exception:\r\nParserException: Unexpected '-', (query: \"+(NumberField:-0.2) +(InTree:'/Root')\") [Line: 1, Col: 15]\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseUnaryTermExp() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 342\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseTermExp() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 284\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseQueryExpGroup() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 262\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseClause() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 232\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseUnaryNot() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 222\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseBinaryAnd() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 201\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseBinaryOr() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 185\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseQueryExp() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 180\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseQueryExpList() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 156\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseQueryExpGroup() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 265\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseClause() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 232\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseUnaryNot() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 222\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseBinaryAnd() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 201\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseBinaryOr() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 185\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseQueryExp() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 180\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParseTopLevelQueryExpList() in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 132\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.ParsePredicate(String queryText) in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 96\r\n
  at SenseNet.Search.Querying.Parser.CqlParser.Parse(String queryText, IQueryContext context) in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\Parser\\CqlParser.cs:line 42\r\n
  at SenseNet.Search.Querying.SnQuery.Parse(String queryText, IQueryContext context) in D:\\dev\\github\\sensenet\\src\\Search\\Querying\\SnQueryController.cs:line 310\r\n
  at SenseNet.ContentRepository.Linq.SnExpression.BuildSnQuery(Expression expression, Type sourceCollectionItemType, String contextPath, ChildrenDefinition childrenDef, String& elementSelection) in D:\\dev\\github\\sensenet\\src\\ContentRepository\\Linq\\SnExpression.cs:line 64\r\n
  at SenseNet.ContentRepository.Linq.SnExpression.BuildQuery(Expression expression, Type sourceCollectionItemType, String contextPath, ChildrenDefinition childrenDef) in D:\\dev\\github\\sensenet\\src\\ContentRepository\\Linq\\SnExpression.cs:line 29\r\n
  at SenseNet.OData.Writers.ODataWriter.ProcessOperationQueryResponse(ChildrenDefinition qdef, ODataRequest req, HttpContext httpContext, Int32& count) in D:\\dev\\github\\sensenet\\src\\OData\\Writers\\ODataWriter.cs:line 617\r\n
  at SenseNet.OData.Writers.ODataWriter.WriteChildrenCollectionAsync(String path, HttpContext httpContext, ODataRequest req) in D:\\dev\\github\\sensenet\\src\\OData\\Writers\\ODataWriter.cs:line 209\r\n=====================\r\n"
}
}
}```