From e25758b3164618ac16d57fffe6ba0e4175229960 Mon Sep 17 00:00:00 2001 From: Rahul Kesharwani <42969463+rahulKQL@users.noreply.github.com> Date: Mon, 18 Nov 2019 18:33:25 +0530 Subject: [PATCH] feat: update filter to accept an exact timestamp for better accessibility (#92) This change introduces `FILTERS.timestamp().exact()`, which enable user to directly provide exact timestamp to query Bigtable. --- .../cloud/bigtable/data/v2/models/Filters.java | 9 +++++++++ .../bigtable/data/v2/models/FiltersTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java index 6ada09391..bd310cd2c 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java @@ -516,6 +516,15 @@ private TimestampFilter() {} public TimestampRangeFilter range() { return new TimestampRangeFilter(); } + + /** + * Matches cells with exact given timestamp. + * + * @return a {@link TimestampRangeFilter} with start/end closed timestamp. + */ + public TimestampRangeFilter exact(Long exactTimestamp) { + return new TimestampRangeFilter().startClosed(exactTimestamp).endClosed(exactTimestamp); + } } /** Matches only cells with microsecond timestamps within the given range. */ diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java index 509c99da7..ad7902525 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java @@ -350,6 +350,21 @@ public void timestampRange() { assertThat(actualFilter).isEqualTo(expectedFilter); } + @Test + public void timestampAtExactTime() { + RowFilter actualFilter = FILTERS.timestamp().exact(20_000L).toProto(); + + RowFilter expectedFilter = + RowFilter.newBuilder() + .setTimestampRangeFilter( + TimestampRange.newBuilder() + .setStartTimestampMicros(20_000L) + .setEndTimestampMicros(20_000L + 1)) + .build(); + + assertThat(actualFilter).isEqualTo(expectedFilter); + } + @Test public void timestampOpenClosedFakeRange() { RowFilter actualFilter =