diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml index 55b191345e..8e78bf600d 100644 --- a/.github/workflows/hermetic_library_generation.yaml +++ b/.github/workflows/hermetic_library_generation.yaml @@ -37,7 +37,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} - - uses: googleapis/google-cloud-java/sdk-platform-java/.github/scripts@google-cloud-shared-dependencies/v3.61.0 + - uses: googleapis/google-cloud-java/sdk-platform-java/.github/scripts@v1.85.0 if: env.SHOULD_RUN == 'true' with: image_tag: latest diff --git a/generation_config.yaml b/generation_config.yaml index e0d896e850..2772ea8b15 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,5 +1,5 @@ gapic_generator_version: 2.71.0 -googleapis_commitish: 939ba3bf8408af83f0f73ae35c76c4b11a8c8c8d +googleapis_commitish: 89c3153888201c9e80bc5ec78d6ffca0debe6b52 libraries_bom_version: 26.80.0 template_excludes: - .gitignore diff --git a/google-cloud-bigtable/src/main/resources/META-INF/native-image/com.google.cloud.bigtable.data.v2/reflect-config.json b/google-cloud-bigtable/src/main/resources/META-INF/native-image/com.google.cloud.bigtable.data.v2/reflect-config.json index fd3a9f86ff..21a24bbaca 100644 --- a/google-cloud-bigtable/src/main/resources/META-INF/native-image/com.google.cloud.bigtable.data.v2/reflect-config.json +++ b/google-cloud-bigtable/src/main/resources/META-INF/native-image/com.google.cloud.bigtable.data.v2/reflect-config.json @@ -3257,6 +3257,24 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.bigtable.v2.ValueBitmask", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.bigtable.v2.ValueBitmask$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.bigtable.v2.ValueRange", "queryAllDeclaredConstructors": true, diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/DataProto.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/DataProto.java index 63ba302c3b..36dd673323 100644 --- a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/DataProto.java +++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/DataProto.java @@ -84,6 +84,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_bigtable_v2_ValueRange_descriptor; static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_google_bigtable_v2_ValueRange_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_bigtable_v2_ValueBitmask_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_bigtable_v2_ValueBitmask_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_bigtable_v2_RowFilter_descriptor; static final com.google.protobuf.GeneratedMessage.FieldAccessorTable @@ -247,7 +251,9 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\020end_value_closed\030\003 \001(\014H\001\022\030\n" + "\016end_value_open\030\004 \001(\014H\001B\r\n" + "\013start_valueB\013\n" - + "\tend_value\"\337\010\n" + + "\tend_value\"!\n" + + "\014ValueBitmask\022\021\n" + + "\004mask\030\001 \001(\014B\003\340A\002\"\241\t\n" + "\tRowFilter\0224\n" + "\005chain\030\001 \001(\0132#.google.bigtable.v2.RowFilter.ChainH\000\022>\n\n" + "interleave\030\002 \001(\0132(.google.bigtable.v2.RowFilter.InterleaveH\000\022<\n" @@ -272,7 +278,9 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\035cells_per_column_limit_filter\030\014 \001(\005H\000\022!\n" + "\027strip_value_transformer\030\r" + " \001(\010H\000\022!\n" - + "\027apply_label_transformer\030\023 \001(\tH\000\0327\n" + + "\027apply_label_transformer\030\023 \001(\tH\000\022@\n" + + "\024value_bitmask_filter\030\024 \001(\0132" + + " .google.bigtable.v2.ValueBitmaskH\000\0327\n" + "\005Chain\022.\n" + "\007filters\030\001 \003(\0132\035.google.bigtable.v2.RowFilter\032<\n\n" + "Interleave\022.\n" @@ -287,12 +295,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\013add_to_cell\030\005" + " \001(\0132&.google.bigtable.v2.Mutation.AddToCellH\000\022A\n\r" + "merge_to_cell\030\006 \001(\0132(.google.bigtable.v2.Mutation.MergeToCellH\000\022K\n" - + "\022delete_from_column\030\002 \001(" - + "\0132-.google.bigtable.v2.Mutation.DeleteFromColumnH\000\022K\n" - + "\022delete_from_family\030\003 \001(\0132-" - + ".google.bigtable.v2.Mutation.DeleteFromFamilyH\000\022E\n" - + "\017delete_from_row\030\004 \001(\0132*.googl" - + "e.bigtable.v2.Mutation.DeleteFromRowH\000\032a\n" + + "\022delete_from_column\030\002" + + " \001(\0132-.google.bigtable.v2.Mutation.DeleteFromColumnH\000\022K\n" + + "\022delete_from_family\030\003" + + " \001(\0132-.google.bigtable.v2.Mutation.DeleteFromFamilyH\000\022E\n" + + "\017delete_from_row\030\004" + + " \001(\0132*.google.bigtable.v2.Mutation.DeleteFromRowH\000\032a\n" + "\007SetCell\022\023\n" + "\013family_name\030\001 \001(\t\022\030\n" + "\020column_qualifier\030\002 \001(\014\022\030\n" @@ -352,14 +360,13 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\024estimated_batch_size\030\004 \001(\005B\016\n" + "\014partial_rowsB\021\n" + "\017_batch_checksum\"L\n" - + "\013Idempotency\022\r" - + "\n" + + "\013Idempotency\022\r\n" + "\005token\030\001 \001(\014\022.\n\n" + "start_time\030\002 \001(\0132\032.google.protobuf.TimestampB\263\001\n" - + "\026com.google.bigtable.v2B\tDataProtoP\001Z8cloud.google.com/" - + "go/bigtable/apiv2/bigtablepb;bigtablepb\252" - + "\002\030Google.Cloud.Bigtable.V2\312\002\030Google\\Clou" - + "d\\Bigtable\\V2\352\002\033Google::Cloud::Bigtable::V2b\006proto3" + + "\026com.google.bigtable.v2B\tDataProtoP\001Z8cloud.google.com/go/bigtable/apiv2/b" + + "igtablepb;bigtablepb\252\002\030Google.Cloud.Bigt" + + "able.V2\312\002\030Google\\Cloud\\Bigtable\\V2\352\002\033Goo" + + "gle::Cloud::Bigtable::V2b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -470,7 +477,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "StartValue", "EndValue", }); - internal_static_google_bigtable_v2_RowFilter_descriptor = getDescriptor().getMessageType(11); + internal_static_google_bigtable_v2_ValueBitmask_descriptor = getDescriptor().getMessageType(11); + internal_static_google_bigtable_v2_ValueBitmask_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_bigtable_v2_ValueBitmask_descriptor, + new java.lang.String[] { + "Mask", + }); + internal_static_google_bigtable_v2_RowFilter_descriptor = getDescriptor().getMessageType(12); internal_static_google_bigtable_v2_RowFilter_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_RowFilter_descriptor, @@ -494,6 +508,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "CellsPerColumnLimitFilter", "StripValueTransformer", "ApplyLabelTransformer", + "ValueBitmaskFilter", "Filter", }); internal_static_google_bigtable_v2_RowFilter_Chain_descriptor = @@ -520,7 +535,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new java.lang.String[] { "PredicateFilter", "TrueFilter", "FalseFilter", }); - internal_static_google_bigtable_v2_Mutation_descriptor = getDescriptor().getMessageType(12); + internal_static_google_bigtable_v2_Mutation_descriptor = getDescriptor().getMessageType(13); internal_static_google_bigtable_v2_Mutation_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_Mutation_descriptor, @@ -580,7 +595,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { internal_static_google_bigtable_v2_Mutation_DeleteFromRow_descriptor, new java.lang.String[] {}); internal_static_google_bigtable_v2_ReadModifyWriteRule_descriptor = - getDescriptor().getMessageType(13); + getDescriptor().getMessageType(14); internal_static_google_bigtable_v2_ReadModifyWriteRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ReadModifyWriteRule_descriptor, @@ -588,7 +603,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "FamilyName", "ColumnQualifier", "AppendValue", "IncrementAmount", "Rule", }); internal_static_google_bigtable_v2_StreamPartition_descriptor = - getDescriptor().getMessageType(14); + getDescriptor().getMessageType(15); internal_static_google_bigtable_v2_StreamPartition_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_StreamPartition_descriptor, @@ -596,7 +611,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "RowRange", }); internal_static_google_bigtable_v2_StreamContinuationTokens_descriptor = - getDescriptor().getMessageType(15); + getDescriptor().getMessageType(16); internal_static_google_bigtable_v2_StreamContinuationTokens_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_StreamContinuationTokens_descriptor, @@ -604,26 +619,26 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Tokens", }); internal_static_google_bigtable_v2_StreamContinuationToken_descriptor = - getDescriptor().getMessageType(16); + getDescriptor().getMessageType(17); internal_static_google_bigtable_v2_StreamContinuationToken_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_StreamContinuationToken_descriptor, new java.lang.String[] { "Partition", "Token", }); - internal_static_google_bigtable_v2_ProtoFormat_descriptor = getDescriptor().getMessageType(17); + internal_static_google_bigtable_v2_ProtoFormat_descriptor = getDescriptor().getMessageType(18); internal_static_google_bigtable_v2_ProtoFormat_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ProtoFormat_descriptor, new java.lang.String[] {}); internal_static_google_bigtable_v2_ColumnMetadata_descriptor = - getDescriptor().getMessageType(18); + getDescriptor().getMessageType(19); internal_static_google_bigtable_v2_ColumnMetadata_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ColumnMetadata_descriptor, new java.lang.String[] { "Name", "Type", }); - internal_static_google_bigtable_v2_ProtoSchema_descriptor = getDescriptor().getMessageType(19); + internal_static_google_bigtable_v2_ProtoSchema_descriptor = getDescriptor().getMessageType(20); internal_static_google_bigtable_v2_ProtoSchema_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ProtoSchema_descriptor, @@ -631,14 +646,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Columns", }); internal_static_google_bigtable_v2_ResultSetMetadata_descriptor = - getDescriptor().getMessageType(20); + getDescriptor().getMessageType(21); internal_static_google_bigtable_v2_ResultSetMetadata_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ResultSetMetadata_descriptor, new java.lang.String[] { "ProtoSchema", "Schema", }); - internal_static_google_bigtable_v2_ProtoRows_descriptor = getDescriptor().getMessageType(21); + internal_static_google_bigtable_v2_ProtoRows_descriptor = getDescriptor().getMessageType(22); internal_static_google_bigtable_v2_ProtoRows_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ProtoRows_descriptor, @@ -646,7 +661,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Values", }); internal_static_google_bigtable_v2_ProtoRowsBatch_descriptor = - getDescriptor().getMessageType(22); + getDescriptor().getMessageType(23); internal_static_google_bigtable_v2_ProtoRowsBatch_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_ProtoRowsBatch_descriptor, @@ -654,7 +669,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "BatchData", }); internal_static_google_bigtable_v2_PartialResultSet_descriptor = - getDescriptor().getMessageType(23); + getDescriptor().getMessageType(24); internal_static_google_bigtable_v2_PartialResultSet_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_PartialResultSet_descriptor, @@ -666,7 +681,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EstimatedBatchSize", "PartialRows", }); - internal_static_google_bigtable_v2_Idempotency_descriptor = getDescriptor().getMessageType(24); + internal_static_google_bigtable_v2_Idempotency_descriptor = getDescriptor().getMessageType(25); internal_static_google_bigtable_v2_Idempotency_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_bigtable_v2_Idempotency_descriptor, @@ -678,6 +693,11 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.bigtable.v2.TypesProto.getDescriptor(); com.google.protobuf.TimestampProto.getDescriptor(); com.google.type.DateProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); } // @@protoc_insertion_point(outer_class_scope) diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilter.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilter.java index 7de898b4f3..df520dbf7e 100644 --- a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilter.java +++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilter.java @@ -4203,6 +4203,7 @@ public enum FilterCase CELLS_PER_COLUMN_LIMIT_FILTER(12), STRIP_VALUE_TRANSFORMER(13), APPLY_LABEL_TRANSFORMER(19), + VALUE_BITMASK_FILTER(20), FILTER_NOT_SET(0); private final int value; @@ -4260,6 +4261,8 @@ public static FilterCase forNumber(int value) { return STRIP_VALUE_TRANSFORMER; case 19: return APPLY_LABEL_TRANSFORMER; + case 20: + return VALUE_BITMASK_FILTER; case 0: return FILTER_NOT_SET; default: @@ -5383,6 +5386,69 @@ public com.google.protobuf.ByteString getApplyLabelTransformerBytes() { } } + public static final int VALUE_BITMASK_FILTER_FIELD_NUMBER = 20; + + /** + * + * + *
+ * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return Whether the valueBitmaskFilter field is set.
+ */
+ @java.lang.Override
+ public boolean hasValueBitmaskFilter() {
+ return filterCase_ == 20;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return The valueBitmaskFilter.
+ */
+ @java.lang.Override
+ public com.google.bigtable.v2.ValueBitmask getValueBitmaskFilter() {
+ if (filterCase_ == 20) {
+ return (com.google.bigtable.v2.ValueBitmask) filter_;
+ }
+ return com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ @java.lang.Override
+ public com.google.bigtable.v2.ValueBitmaskOrBuilder getValueBitmaskFilterOrBuilder() {
+ if (filterCase_ == 20) {
+ return (com.google.bigtable.v2.ValueBitmask) filter_;
+ }
+ return com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
@@ -5454,6 +5520,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
if (filterCase_ == 19) {
com.google.protobuf.GeneratedMessage.writeString(output, 19, filter_);
}
+ if (filterCase_ == 20) {
+ output.writeMessage(20, (com.google.bigtable.v2.ValueBitmask) filter_);
+ }
getUnknownFields().writeTo(output);
}
@@ -5554,6 +5623,11 @@ public int getSerializedSize() {
if (filterCase_ == 19) {
size += com.google.protobuf.GeneratedMessage.computeStringSize(19, filter_);
}
+ if (filterCase_ == 20) {
+ size +=
+ com.google.protobuf.CodedOutputStream.computeMessageSize(
+ 20, (com.google.bigtable.v2.ValueBitmask) filter_);
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -5630,6 +5704,9 @@ public boolean equals(final java.lang.Object obj) {
case 19:
if (!getApplyLabelTransformer().equals(other.getApplyLabelTransformer())) return false;
break;
+ case 20:
+ if (!getValueBitmaskFilter().equals(other.getValueBitmaskFilter())) return false;
+ break;
case 0:
default:
}
@@ -5724,6 +5801,10 @@ public int hashCode() {
hash = (37 * hash) + APPLY_LABEL_TRANSFORMER_FIELD_NUMBER;
hash = (53 * hash) + getApplyLabelTransformer().hashCode();
break;
+ case 20:
+ hash = (37 * hash) + VALUE_BITMASK_FILTER_FIELD_NUMBER;
+ hash = (53 * hash) + getValueBitmaskFilter().hashCode();
+ break;
case 0:
default:
}
@@ -5916,6 +5997,9 @@ public Builder clear() {
if (valueRangeFilterBuilder_ != null) {
valueRangeFilterBuilder_.clear();
}
+ if (valueBitmaskFilterBuilder_ != null) {
+ valueBitmaskFilterBuilder_.clear();
+ }
filterCase_ = 0;
filter_ = null;
return this;
@@ -5977,6 +6061,9 @@ private void buildPartialOneofs(com.google.bigtable.v2.RowFilter result) {
if (filterCase_ == 15 && valueRangeFilterBuilder_ != null) {
result.filter_ = valueRangeFilterBuilder_.build();
}
+ if (filterCase_ == 20 && valueBitmaskFilterBuilder_ != null) {
+ result.filter_ = valueBitmaskFilterBuilder_.build();
+ }
}
@java.lang.Override
@@ -6091,6 +6178,11 @@ public Builder mergeFrom(com.google.bigtable.v2.RowFilter other) {
onChanged();
break;
}
+ case VALUE_BITMASK_FILTER:
+ {
+ mergeValueBitmaskFilter(other.getValueBitmaskFilter());
+ break;
+ }
case FILTER_NOT_SET:
{
break;
@@ -6243,6 +6335,13 @@ public Builder mergeFrom(
filter_ = s;
break;
} // case 154
+ case 162:
+ {
+ input.readMessage(
+ internalGetValueBitmaskFilterFieldBuilder().getBuilder(), extensionRegistry);
+ filterCase_ = 20;
+ break;
+ } // case 162
default:
{
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -9132,6 +9231,249 @@ public Builder setApplyLabelTransformerBytes(com.google.protobuf.ByteString valu
return this;
}
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.bigtable.v2.ValueBitmask,
+ com.google.bigtable.v2.ValueBitmask.Builder,
+ com.google.bigtable.v2.ValueBitmaskOrBuilder>
+ valueBitmaskFilterBuilder_;
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return Whether the valueBitmaskFilter field is set.
+ */
+ @java.lang.Override
+ public boolean hasValueBitmaskFilter() {
+ return filterCase_ == 20;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return The valueBitmaskFilter.
+ */
+ @java.lang.Override
+ public com.google.bigtable.v2.ValueBitmask getValueBitmaskFilter() {
+ if (valueBitmaskFilterBuilder_ == null) {
+ if (filterCase_ == 20) {
+ return (com.google.bigtable.v2.ValueBitmask) filter_;
+ }
+ return com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ } else {
+ if (filterCase_ == 20) {
+ return valueBitmaskFilterBuilder_.getMessage();
+ }
+ return com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ }
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ public Builder setValueBitmaskFilter(com.google.bigtable.v2.ValueBitmask value) {
+ if (valueBitmaskFilterBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ filter_ = value;
+ onChanged();
+ } else {
+ valueBitmaskFilterBuilder_.setMessage(value);
+ }
+ filterCase_ = 20;
+ return this;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ public Builder setValueBitmaskFilter(
+ com.google.bigtable.v2.ValueBitmask.Builder builderForValue) {
+ if (valueBitmaskFilterBuilder_ == null) {
+ filter_ = builderForValue.build();
+ onChanged();
+ } else {
+ valueBitmaskFilterBuilder_.setMessage(builderForValue.build());
+ }
+ filterCase_ = 20;
+ return this;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ public Builder mergeValueBitmaskFilter(com.google.bigtable.v2.ValueBitmask value) {
+ if (valueBitmaskFilterBuilder_ == null) {
+ if (filterCase_ == 20
+ && filter_ != com.google.bigtable.v2.ValueBitmask.getDefaultInstance()) {
+ filter_ =
+ com.google.bigtable.v2.ValueBitmask.newBuilder(
+ (com.google.bigtable.v2.ValueBitmask) filter_)
+ .mergeFrom(value)
+ .buildPartial();
+ } else {
+ filter_ = value;
+ }
+ onChanged();
+ } else {
+ if (filterCase_ == 20) {
+ valueBitmaskFilterBuilder_.mergeFrom(value);
+ } else {
+ valueBitmaskFilterBuilder_.setMessage(value);
+ }
+ }
+ filterCase_ = 20;
+ return this;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ public Builder clearValueBitmaskFilter() {
+ if (valueBitmaskFilterBuilder_ == null) {
+ if (filterCase_ == 20) {
+ filterCase_ = 0;
+ filter_ = null;
+ onChanged();
+ }
+ } else {
+ if (filterCase_ == 20) {
+ filterCase_ = 0;
+ filter_ = null;
+ }
+ valueBitmaskFilterBuilder_.clear();
+ }
+ return this;
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ public com.google.bigtable.v2.ValueBitmask.Builder getValueBitmaskFilterBuilder() {
+ return internalGetValueBitmaskFilterFieldBuilder().getBuilder();
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ @java.lang.Override
+ public com.google.bigtable.v2.ValueBitmaskOrBuilder getValueBitmaskFilterOrBuilder() {
+ if ((filterCase_ == 20) && (valueBitmaskFilterBuilder_ != null)) {
+ return valueBitmaskFilterBuilder_.getMessageOrBuilder();
+ } else {
+ if (filterCase_ == 20) {
+ return (com.google.bigtable.v2.ValueBitmask) filter_;
+ }
+ return com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ }
+ }
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ private com.google.protobuf.SingleFieldBuilder<
+ com.google.bigtable.v2.ValueBitmask,
+ com.google.bigtable.v2.ValueBitmask.Builder,
+ com.google.bigtable.v2.ValueBitmaskOrBuilder>
+ internalGetValueBitmaskFilterFieldBuilder() {
+ if (valueBitmaskFilterBuilder_ == null) {
+ if (!(filterCase_ == 20)) {
+ filter_ = com.google.bigtable.v2.ValueBitmask.getDefaultInstance();
+ }
+ valueBitmaskFilterBuilder_ =
+ new com.google.protobuf.SingleFieldBuilder<
+ com.google.bigtable.v2.ValueBitmask,
+ com.google.bigtable.v2.ValueBitmask.Builder,
+ com.google.bigtable.v2.ValueBitmaskOrBuilder>(
+ (com.google.bigtable.v2.ValueBitmask) filter_, getParentForChildren(), isClean());
+ filter_ = null;
+ }
+ filterCase_ = 20;
+ onChanged();
+ return valueBitmaskFilterBuilder_;
+ }
+
// @@protoc_insertion_point(builder_scope:google.bigtable.v2.RowFilter)
}
diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilterOrBuilder.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilterOrBuilder.java
index d2627aa77c..4a39276bf4 100644
--- a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilterOrBuilder.java
+++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/RowFilterOrBuilder.java
@@ -842,5 +842,51 @@ public interface RowFilterOrBuilder
*/
com.google.protobuf.ByteString getApplyLabelTransformerBytes();
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return Whether the valueBitmaskFilter field is set.
+ */
+ boolean hasValueBitmaskFilter();
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ *
+ * @return The valueBitmaskFilter.
+ */
+ com.google.bigtable.v2.ValueBitmask getValueBitmaskFilter();
+
+ /**
+ *
+ *
+ * + * Matches only cells with values that satisfy the condition `(value & mask) + * == mask`. + * The mask length must exactly match the value length, otherwise the cell + * is not considered a match. + *+ * + *
.google.bigtable.v2.ValueBitmask value_bitmask_filter = 20;
+ */
+ com.google.bigtable.v2.ValueBitmaskOrBuilder getValueBitmaskFilterOrBuilder();
+
com.google.bigtable.v2.RowFilter.FilterCase getFilterCase();
}
diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ValueBitmask.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ValueBitmask.java
new file mode 100644
index 0000000000..298515c4d7
--- /dev/null
+++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ValueBitmask.java
@@ -0,0 +1,515 @@
+/*
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// NO CHECKED-IN PROTOBUF GENCODE
+// source: google/bigtable/v2/data.proto
+// Protobuf Java Version: 4.33.2
+
+package com.google.bigtable.v2;
+
+/**
+ *
+ *
+ * + * Restricts the output to cells whose values match the given bitmask. + *+ * + * Protobuf type {@code google.bigtable.v2.ValueBitmask} + */ +@com.google.protobuf.Generated +public final class ValueBitmask extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.bigtable.v2.ValueBitmask) + ValueBitmaskOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValueBitmask"); + } + + // Use ValueBitmask.newBuilder() to construct. + private ValueBitmask(com.google.protobuf.GeneratedMessage.Builder> builder) { + super(builder); + } + + private ValueBitmask() { + mask_ = com.google.protobuf.ByteString.EMPTY; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.bigtable.v2.DataProto + .internal_static_google_bigtable_v2_ValueBitmask_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.bigtable.v2.DataProto + .internal_static_google_bigtable_v2_ValueBitmask_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.bigtable.v2.ValueBitmask.class, + com.google.bigtable.v2.ValueBitmask.Builder.class); + } + + public static final int MASK_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString mask_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+ * Required. Mask applied to the value. + * Evaluated as: `(value & mask) == mask` + * The mask length must exactly match the value length, otherwise the cell is + * not considered a match. + *+ * + *
bytes mask = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The mask.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getMask() {
+ return mask_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (!mask_.isEmpty()) {
+ output.writeBytes(1, mask_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!mask_.isEmpty()) {
+ size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, mask_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.google.bigtable.v2.ValueBitmask)) {
+ return super.equals(obj);
+ }
+ com.google.bigtable.v2.ValueBitmask other = (com.google.bigtable.v2.ValueBitmask) obj;
+
+ if (!getMask().equals(other.getMask())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + MASK_FIELD_NUMBER;
+ hash = (53 * hash) + getMask().hashCode();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseDelimitedFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(com.google.bigtable.v2.ValueBitmask prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ *
+ *
+ * + * Restricts the output to cells whose values match the given bitmask. + *+ * + * Protobuf type {@code google.bigtable.v2.ValueBitmask} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder
+ * Required. Mask applied to the value. + * Evaluated as: `(value & mask) == mask` + * The mask length must exactly match the value length, otherwise the cell is + * not considered a match. + *+ * + *
bytes mask = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The mask.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString getMask() {
+ return mask_;
+ }
+
+ /**
+ *
+ *
+ * + * Required. Mask applied to the value. + * Evaluated as: `(value & mask) == mask` + * The mask length must exactly match the value length, otherwise the cell is + * not considered a match. + *+ * + *
bytes mask = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @param value The mask to set.
+ * @return This builder for chaining.
+ */
+ public Builder setMask(com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ mask_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ * + * Required. Mask applied to the value. + * Evaluated as: `(value & mask) == mask` + * The mask length must exactly match the value length, otherwise the cell is + * not considered a match. + *+ * + *
bytes mask = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearMask() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ mask_ = getDefaultInstance().getMask();
+ onChanged();
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:google.bigtable.v2.ValueBitmask)
+ }
+
+ // @@protoc_insertion_point(class_scope:google.bigtable.v2.ValueBitmask)
+ private static final com.google.bigtable.v2.ValueBitmask DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.google.bigtable.v2.ValueBitmask();
+ }
+
+ public static com.google.bigtable.v2.ValueBitmask getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser+ * Required. Mask applied to the value. + * Evaluated as: `(value & mask) == mask` + * The mask length must exactly match the value length, otherwise the cell is + * not considered a match. + *+ * + *
bytes mask = 1 [(.google.api.field_behavior) = REQUIRED];
+ *
+ * @return The mask.
+ */
+ com.google.protobuf.ByteString getMask();
+}
diff --git a/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/data.proto b/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/data.proto
index 8320a0c22f..010637b001 100644
--- a/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/data.proto
+++ b/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/data.proto
@@ -1,4 +1,4 @@
-// Copyright 2025 Google LLC
+// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -255,6 +255,15 @@ message ValueRange {
}
}
+// Restricts the output to cells whose values match the given bitmask.
+message ValueBitmask {
+ // Required. Mask applied to the value.
+ // Evaluated as: `(value & mask) == mask`
+ // The mask length must exactly match the value length, otherwise the cell is
+ // not considered a match.
+ bytes mask = 1 [(google.api.field_behavior) = REQUIRED];
+}
+
// Takes a row as input and produces an alternate view of the row based on
// specified rules. For example, a RowFilter might trim down a row to include
// just the cells from columns matching a given regular expression, or might
@@ -514,6 +523,12 @@ message RowFilter {
// will be applied to separate copies of the input. This may be relaxed in
// the future.
string apply_label_transformer = 19;
+
+ // Matches only cells with values that satisfy the condition `(value & mask)
+ // == mask`.
+ // The mask length must exactly match the value length, otherwise the cell
+ // is not considered a match.
+ ValueBitmask value_bitmask_filter = 20;
}
}