Skip to content

Commit 519e8c2

Browse files
authored
Merge pull request #3081 from perspective-dev/fix-posix-datetime-filters
Fix `datetime` filters against numeric parameters
2 parents 9d6a126 + 5c9c3df commit 519e8c2

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

rust/perspective-js/test/js/filters.spec.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,8 @@ const datetime_data_local = [
395395
});
396396

397397
test("w == datetime as Date() object", async function () {
398-
const table = await perspective.table(datetime_data);
398+
const table = await perspective.table({ x: "datetime" });
399+
await table.update(datetime_data);
399400
expect(await table.schema()).toEqual({
400401
x: "datetime",
401402
});
@@ -413,8 +414,33 @@ const datetime_data_local = [
413414
await table.delete();
414415
});
415416

416-
test.skip("w == datetime as US locale string", async function () {
417-
const table = await perspective.table(datetime_data);
417+
test("w == datetime as Number", async function () {
418+
const table = await perspective.table({ x: "datetime" });
419+
await table.update(datetime_data);
420+
expect(await table.schema()).toEqual({
421+
x: "datetime",
422+
});
423+
424+
const view = await table.view({
425+
filter: [["x", "==", +datetime_data[0]["x"]]],
426+
});
427+
428+
expect(await view.num_rows()).toBe(1);
429+
let data = await view.to_json();
430+
data = data.map((d) => {
431+
d.x = new Date(d.x);
432+
return d;
433+
});
434+
435+
expect(data).toEqual(datetime_data.slice(0, 1));
436+
await view.delete();
437+
await table.delete();
438+
});
439+
440+
test("w == datetime as US locale string", async function () {
441+
const table = await perspective.table({ x: "datetime" });
442+
await table.update(datetime_data);
443+
418444
expect(await table.schema()).toEqual({
419445
x: "datetime",
420446
});

rust/perspective-python/perspective/tests/table/test_view.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,31 @@ def test_view_filter_datetime_np_neq(self, util):
14741474
{"a": util.to_timestamp(datetime(2019, 7, 11, () * 1000)), "b": 4}
14751475
]
14761476

1477+
def test_view_filter_datetime_as_number_eq(self, util):
1478+
data = [
1479+
{"a": datetime(2019, 7, 11, 8, 15).timestamp(), "b": 2},
1480+
{"a": datetime(2019, 7, 11, 8, 16).timestamp(), "b": 4},
1481+
]
1482+
1483+
tbl = Table({"a": "datetime", "b": "integer"})
1484+
tbl.update(data)
1485+
view = tbl.view(filter=[["a", "==", datetime(2019, 7, 11, 8, 15).timestamp()]])
1486+
assert view.to_records() == [
1487+
{"a": datetime(2019, 7, 11, 8, 15).timestamp(), "b": 2}
1488+
]
1489+
1490+
def test_view_filter_datetime_as_number_neq(self, util):
1491+
data = [
1492+
{"a": datetime(2019, 7, 11, 8, 15).timestamp(), "b": 2},
1493+
{"a": datetime(2019, 7, 11, 8, 16).timestamp(), "b": 4},
1494+
]
1495+
tbl = Table({"a": "datetime", "b": "integer"})
1496+
tbl.update(data)
1497+
view = tbl.view(filter=[["a", "!=", datetime(2019, 7, 11, 8, 15).timestamp()]])
1498+
assert view.to_records() == [
1499+
{"a": datetime(2019, 7, 11, 8, 16).timestamp(), "b": 4}
1500+
]
1501+
14771502
def test_view_filter_datetime_str_eq(self, util):
14781503
data = [
14791504
{"a": datetime(2019, 7, 11, 8, 15), "b": 2},

rust/perspective-server/cpp/perspective/src/cpp/server.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,7 @@ coerce_to(const t_dtype dtype, const A& val) {
12971297
return scalar;
12981298
}
12991299
case DTYPE_TIME: {
1300-
t_time time{std::chrono::milliseconds((long)val).count()};
1300+
t_time time{std::chrono::milliseconds((long long)val).count()};
13011301
scalar.set(time);
13021302
return scalar;
13031303
}

0 commit comments

Comments
 (0)