diff --git a/google-cloud-clients/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Query.java b/google-cloud-clients/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Query.java index 5288ee0109a2..2cbb6d6f370e 100644 --- a/google-cloud-clients/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Query.java +++ b/google-cloud-clients/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Query.java @@ -291,12 +291,15 @@ public boolean equals(Object o) { } Query query = (Query) o; return Objects.equal(tableId, query.tableId) - && Objects.equal(builder.build(), query.builder.build()); + && Objects.equal(builder.getRows(), query.builder.getRows()) + && Objects.equal(builder.getFilter(), query.builder.getFilter()) + && Objects.equal(builder.getRowsLimit(), query.builder.getRowsLimit()); } @Override public int hashCode() { - return Objects.hashCode(tableId, builder.build()); + return Objects.hashCode( + tableId, builder.getRows(), builder.getFilter(), builder.getRowsLimit()); } @Override @@ -308,6 +311,7 @@ public String toString() { .add("keys", request.getRows().getRowKeysList()) .add("ranges", request.getRows().getRowRangesList()) .add("filter", request.getFilter()) + .add("limit", request.getRowsLimit()) .toString(); } } diff --git a/google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/QueryTest.java b/google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/QueryTest.java index 857a90916d14..7cf424694337 100644 --- a/google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/QueryTest.java +++ b/google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/QueryTest.java @@ -258,4 +258,32 @@ public void testFromProtoWithEmptyTableId() { expect.expect(IllegalArgumentException.class); expect.expectMessage("Invalid table name:"); } + + @Test + public void testEquality() { + Query request = + Query.create(TABLE_ID) + .rowKey("row-key") + .range("a", "z") + .limit(3) + .filter(FILTERS.family().exactMatch("test")); + + // Query#toProto should not change the Query instance state + request.toProto(requestContext); + assertThat(request) + .isEqualTo( + Query.create(TABLE_ID) + .rowKey("row-key") + .range("a", "z") + .limit(3) + .filter(FILTERS.family().exactMatch("test"))); + + assertThat(Query.create(TABLE_ID).rowKey("row-key")) + .isNotEqualTo(Query.create(TABLE_ID).rowKey("row-key-1")); + assertThat(Query.create(TABLE_ID).range("a", "z")) + .isNotEqualTo(Query.create(TABLE_ID).range("a", "s")); + assertThat(Query.create(TABLE_ID).filter(FILTERS.family().regex("test"))) + .isNotEqualTo(Query.create(TABLE_ID).filter(FILTERS.family().exactMatch("test-one"))); + assertThat(Query.create(TABLE_ID).limit(4)).isNotEqualTo(Query.create(TABLE_ID).limit(5)); + } }