Browse Source

Null fixes for odata.

pull/662/head
Sebastian 5 years ago
parent
commit
1eaf238049
  1. 77
      backend/src/Squidex.Infrastructure/Queries/OData/ConstantWithTypeVisitor.cs
  2. 41
      backend/tests/Squidex.Infrastructure.Tests/Queries/QueryFromODataTests.cs

77
backend/src/Squidex.Infrastructure/Queries/OData/ConstantWithTypeVisitor.cs

@ -40,24 +40,25 @@ namespace Squidex.Infrastructure.Queries.OData
public override ClrValue Visit(ConvertNode nodeIn)
{
if (nodeIn.TypeReference.Definition == BooleanType)
var value = ConstantVisitor.Visit(nodeIn.Source);
if (value == null)
{
var value = ConstantVisitor.Visit(nodeIn.Source);
return ClrValue.Null;
}
if (nodeIn.TypeReference.Definition == BooleanType)
{
return bool.Parse(value.ToString()!);
}
if (nodeIn.TypeReference.Definition == GuidType)
{
var value = ConstantVisitor.Visit(nodeIn.Source);
return Guid.Parse(value.ToString()!);
}
if (nodeIn.TypeReference.Definition == DateTimeType || nodeIn.TypeReference.Definition == DateType)
{
var value = ConstantVisitor.Visit(nodeIn.Source);
return ParseInstant(value);
}
@ -116,44 +117,52 @@ namespace Squidex.Infrastructure.Queries.OData
public override ClrValue Visit(ConstantNode nodeIn)
{
if (nodeIn.TypeReference.Definition == DateTimeType || nodeIn.TypeReference.Definition == DateType)
if (nodeIn.Value == null)
{
return ParseInstant(nodeIn.Value);
return ClrValue.Null;
}
if (nodeIn.TypeReference.Definition == GuidType)
if (nodeIn.TypeReference != null)
{
return (Guid)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == DateTimeType || nodeIn.TypeReference.Definition == DateType)
{
return ParseInstant(nodeIn.Value);
}
if (nodeIn.TypeReference.Definition == BooleanType)
{
return (bool)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == GuidType)
{
return (Guid)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == SingleType)
{
return (float)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == BooleanType)
{
return (bool)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == DoubleType)
{
return (double)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == SingleType)
{
return (float)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == Int32Type)
{
return (int)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == DoubleType)
{
return (double)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == Int64Type)
{
return (long)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == Int32Type)
{
return (int)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == StringType)
{
return (string)nodeIn.Value;
if (nodeIn.TypeReference.Definition == Int64Type)
{
return (long)nodeIn.Value;
}
if (nodeIn.TypeReference.Definition == StringType)
{
return (string)nodeIn.Value;
}
}
throw new NotSupportedException();

41
backend/tests/Squidex.Infrastructure.Tests/Queries/QueryFromODataTests.cs

@ -67,7 +67,7 @@ namespace Squidex.Infrastructure.Queries
[InlineData("created")]
[InlineData("createdNullable")]
[InlineData("properties/datetime")]
[InlineData("properties/nested/dateime")]
[InlineData("properties/nested/datetime")]
public void Should_parse_filter_when_type_is_datetime(string field)
{
var i = _Q($"$filter={field} eq 1988-01-19T12:00:00Z");
@ -76,6 +76,19 @@ namespace Squidex.Infrastructure.Queries
Assert.Equal(o, i);
}
[Theory]
[InlineData("created")]
[InlineData("createdNullable")]
[InlineData("properties/datetime")]
[InlineData("properties/nested/datetime")]
public void Should_parse_filter_when_type_is_datetime_and_value_is_null(string field)
{
var i = _Q($"$filter={field} eq null");
var o = _C($"Filter: {field} == null");
Assert.Equal(o, i);
}
[Fact]
public void Should_parse_filter_when_type_is_datetime_list()
{
@ -129,6 +142,19 @@ namespace Squidex.Infrastructure.Queries
Assert.Equal(o, i);
}
[Theory]
[InlineData("id")]
[InlineData("idNullable")]
[InlineData("properties/uid")]
[InlineData("properties/nested/guid")]
public void Should_parse_filter_when_type_is_guid_and_value_is_null(string field)
{
var i = _Q($"$filter={field} eq null");
var o = _C($"Filter: {field} == null");
Assert.Equal(o, i);
}
[Fact]
public void Should_parse_filter_when_type_is_guid_list()
{
@ -182,6 +208,19 @@ namespace Squidex.Infrastructure.Queries
Assert.Equal(o, i);
}
[Theory]
[InlineData("isComicFigure")]
[InlineData("isComicFigureNullable")]
[InlineData("properties/boolean")]
[InlineData("properties/nested/boolean")]
public void Should_parse_filter_when_type_is_boolean_and_value_is_null(string field)
{
var i = _Q($"$filter={field} eq null");
var o = _C($"Filter: {field} == null");
Assert.Equal(o, i);
}
[Fact]
public void Should_parse_filter_when_type_is_boolean_list()
{

Loading…
Cancel
Save