Skip to content

Commit a6462e4

Browse files
Support long, DateTime, and DateTimeOffset criteria in filter expressions.
1 parent 3e234f5 commit a6462e4

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

Postgrest/Table.cs

+10-1
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ public IPostgrestTable<TModel> Filter<TCriterion>(string columnName, Operator op
144144
case int intCriterion:
145145
_filters.Add(new QueryFilter(columnName, op, intCriterion));
146146
return this;
147+
case long longCriterion:
148+
_filters.Add(new QueryFilter(columnName, op, longCriterion));
149+
return this;
147150
case float floatCriterion:
148151
_filters.Add(new QueryFilter(columnName, op, floatCriterion));
149152
return this;
@@ -159,9 +162,15 @@ public IPostgrestTable<TModel> Filter<TCriterion>(string columnName, Operator op
159162
case FullTextSearchConfig fullTextSearchCriteria:
160163
_filters.Add(new QueryFilter(columnName, op, fullTextSearchCriteria));
161164
return this;
165+
case DateTime dtSearchCriteria:
166+
_filters.Add(new QueryFilter(columnName, op, dtSearchCriteria));
167+
return this;
168+
case DateTimeOffset dtoSearchCriteria:
169+
_filters.Add(new QueryFilter(columnName, op, dtoSearchCriteria));
170+
return this;
162171
default:
163172
throw new PostgrestException(
164-
"Unknown criterion type, is it of type `string`, `int`, `float`, `List`, `Dictionary<string, object>`, `FullTextSearchConfig`, or `Range`?")
173+
"Unknown criterion type, is it of type `string`, `int`, `long`, `float`, `List`, `DateTime`, `DateTimeOffset`, `Dictionary<string, object>`, `FullTextSearchConfig`, or `Range`?")
165174
{
166175
Reason = FailureHint.Reason.InvalidArgument
167176
};

PostgrestTests/ClientTests.cs

+31
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,37 @@ public async Task TestMatchFilter()
959959
CollectionAssert.AreEqual(expected, filteredResponse.Models);
960960
}
961961

962+
[TestMethod("filters: dt")]
963+
public async Task TestDateTimeFilter()
964+
{
965+
var client = new Client(BaseUrl);
966+
var filteredResponse = await client.Table<Movie>().Filter("created_at", Operator.GreaterThan, new DateTime(2022, 08, 20))
967+
.Filter("created_at", Operator.LessThan, new DateTime(2022, 08, 21))
968+
.Get();
969+
Assert.AreEqual(1, filteredResponse.Models.Count);
970+
Assert.AreEqual("ea07bd86-a507-4c68-9545-b848bfe74c90", filteredResponse.Models[0].Id);
971+
}
972+
973+
[TestMethod("filters: dto")]
974+
public async Task TestDateTimeOffsetFilter()
975+
{
976+
var client = new Client(BaseUrl);
977+
var filteredResponse = await client.Table<Movie>().Filter("created_at", Operator.GreaterThan, new DateTimeOffset(new DateTime(2022, 08, 20)))
978+
.Filter("created_at", Operator.LessThan, new DateTimeOffset(new DateTime(2022, 08, 21)))
979+
.Get();
980+
Assert.AreEqual(1, filteredResponse.Models.Count);
981+
Assert.AreEqual("ea07bd86-a507-4c68-9545-b848bfe74c90", filteredResponse.Models[0].Id);
982+
}
983+
984+
[TestMethod("filters: long")]
985+
public async Task TestLongIntFilter()
986+
{
987+
var client = new Client(BaseUrl);
988+
var filteredResponse = await client.Table<KitchenSink>().Filter("long_value", Operator.Equals, 2147483648L)
989+
.Get();
990+
Assert.AreEqual(1, filteredResponse.Models.Count);
991+
}
992+
962993
[TestMethod("select: basic")]
963994
public async Task TestSelect()
964995
{

0 commit comments

Comments
 (0)