Repository: googleapis/java-datastore
Pull request #1375 (2024-03-18 18:49:34)

build(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.13.0
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.apache.maven.plugins:maven-compiler-plugin](https://maven.apache.org/plugins/) | `3.11.0` -> `3.13.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-compiler-plugin/3.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.apache.maven.plugins:maven-compiler-plugin/3.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.apache.maven.plugins:maven-compiler-plugin/3.11.0/3.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-compiler-plugin/3.11.0/3.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/googleapis/java-datastore).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->



Patch:
diff --git a/.cloudbuild/samples_build.yaml b/.cloudbuild/samples_build.yaml
new file mode 100644
index 00000000..204a7b25
--- /dev/null
+++ b/.cloudbuild/samples_build.yaml
@@ -0,0 +1,32 @@
+steps:
+- name: gcr.io/cloud-devrel-public-resources/java8
+  entrypoint: ls
+  args: [
+    '-alt',
+  ]
+- name: gcr.io/cloud-devrel-public-resources/java8
+  entrypoint: curl
+  args: [
+    '--header',
+    'Metadata-Flavor: Google',
+    'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email'
+  ]
+- name: gcr.io/cloud-devrel-public-resources/java8
+  entrypoint: pwd
+- name: gcr.io/cloud-devrel-public-resources/java8
+  entrypoint: bash
+  args: [
+    '.kokoro/build.sh'
+  ]
+  env:
+  - 'JOB_TYPE=samples'
+  - 'GOOGLE_CLOUD_PROJECT=cloud-java-ci-sample'
+  - 'KOKORO_GITHUB_PULL_REQUEST_NUMBER=$_PR_NUMBER'
+- name: gcr.io/cloud-devrel-public-resources/java8
+  entrypoint: echo
+  args: [
+    'Sample job succeeded',
+  ]
+timeout: 3600s
+options:
+  defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index b9c5b09c..6167135e 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -13,5 +13,5 @@
 # limitations under the License.
 docker:
   image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
-  digest: sha256:1fb09a3eb66af09221da69087fd1b4d075bc7c79e508d0708f5dc0f842069da2
-# created: 2024-02-05T19:43:08.106031548Z
+  digest: sha256:81c3ec554428c8ff6c92f0d58668b7ef52265d053a82284c97a326745e786949
+# created: 2024-03-27T17:59:25.436353226Z
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index daa58f7e..3a7c9a45 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -29,5 +29,3 @@ updates:
       prefix: "deps"
     open-pull-requests-limit: 10
     target-branch: "V3-experimental"
-    labels:
-      - "V3 dependencies"
diff --git a/.github/workflows/unmanaged-dependency-check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
similarity index 87%
rename from .github/workflows/unmanaged-dependency-check.yaml
rename to .github/workflows/unmanaged_dependency_check.yaml
index 8261645b..851d94b2 100644
--- a/.github/workflows/unmanaged-dependency-check.yaml
+++ b/.github/workflows/unmanaged_dependency_check.yaml
@@ -14,6 +14,6 @@ jobs:
       shell: bash
       run: .kokoro/build.sh
     - name: Unmanaged dependency check
-      uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@unmanaged-dependencies-check-latest
+      uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.29.0
       with:
         bom-path: google-cloud-datastore-bom/pom.xml
diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg
index 60087ed5..d7a73c2c 100644
--- a/.kokoro/presubmit/graalvm-native-17.cfg
+++ b/.kokoro/presubmit/graalvm-native-17.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.28.1"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.29.0"
 }
 
 env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg
index 12ae5207..b5c7f594 100644
--- a/.kokoro/presubmit/graalvm-native.cfg
+++ b/.kokoro/presubmit/graalvm-native.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.28.1"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.29.0"
 }
 
 env_vars: {
diff --git a/.repo-metadata.json b/.repo-metadata.json
index 5978dade..e6ebd09d 100644
--- a/.repo-metadata.json
+++ b/.repo-metadata.json
@@ -15,5 +15,6 @@
   "api_description": "is a fully managed, schemaless database for\nstoring non-relational data. Cloud Datastore automatically scales with\nyour users and supports ACID transactions, high availability of reads and\nwrites, strong consistency for reads and ancestor queries, and eventual\nconsistency for all other queries.",
   "excluded_dependencies": "grpc-google-cloud-datastore-v1",
   "extra_versioned_modules": "datastore-v1-proto-client",
-  "excluded_poms": "grpc-google-cloud-datastore-v1"
+  "excluded_poms": "grpc-google-cloud-datastore-v1",
+  "recommended_package": "com.google.cloud.datastore"
 }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f9f0902..ba6bc10f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,35 @@
 # Changelog
 
+## [2.19.1](https://github.com/googleapis/java-datastore/compare/v2.19.0...v2.19.1) (2024-04-19)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.29.0 ([#1403](https://github.com/googleapis/java-datastore/issues/1403)) ([d23dc4c](https://github.com/googleapis/java-datastore/commit/d23dc4c26a95f2c323ade4db9a88d5435a173be8))
+
+## [2.19.0](https://github.com/googleapis/java-datastore/compare/v2.18.6...v2.19.0) (2024-03-25)
+
+
+### Features
+
+* Implement query profile ([#1365](https://github.com/googleapis/java-datastore/issues/1365)) ([2515ed6](https://github.com/googleapis/java-datastore/commit/2515ed6cf733df84069309a3055a21cdd65c9c90))
+
+## [2.18.6](https://github.com/googleapis/java-datastore/compare/v2.18.5...v2.18.6) (2024-03-18)
+
+
+### Bug Fixes
+
+* **deps:** Update the Java code generator (gapic-generator-java) to 2.37.0 ([#1355](https://github.com/googleapis/java-datastore/issues/1355)) ([bcc5668](https://github.com/googleapis/java-datastore/commit/bcc5668039d4dd2055e9666a65fcda3984fc33b5))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.28.0 ([#1372](https://github.com/googleapis/java-datastore/issues/1372)) ([09db2a7](https://github.com/googleapis/java-datastore/commit/09db2a75fa714a909bc6fa9b43a9213ae6467c84))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.28.1 ([#1373](https://github.com/googleapis/java-datastore/issues/1373)) ([c6e63e5](https://github.com/googleapis/java-datastore/commit/c6e63e5f876fdda953935d09f0536a90a98a812c))
+* Update dependency com.google.errorprone:error_prone_core to v2.26.0 ([#1361](https://github.com/googleapis/java-datastore/issues/1361)) ([9442766](https://github.com/googleapis/java-datastore/commit/9442766ad61b0c1001d36ecfc0668308838b4a83))
+* Update dependency com.google.errorprone:error_prone_core to v2.26.1 ([#1363](https://github.com/googleapis/java-datastore/issues/1363)) ([05fe5bc](https://github.com/googleapis/java-datastore/commit/05fe5bccf97dae92c00f2eead98424771cb321fd))
+* Update dependency com.google.guava:guava-testlib to v33.1.0-jre ([#1368](https://github.com/googleapis/java-datastore/issues/1368)) ([0195345](https://github.com/googleapis/java-datastore/commit/0195345630f404bbcaf1601ded8a8e2011fc3e6e))
+
 ## [2.18.5](https://github.com/googleapis/java-datastore/compare/v2.18.4...v2.18.5) (2024-03-04)
 
 
diff --git a/README.md b/README.md
index 49ae6806..339fa120 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>libraries-bom</artifactId>
-      <version>26.34.0</version>
+      <version>26.37.0</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
@@ -42,7 +42,7 @@ If you are using Maven without the BOM, add this to your dependencies:
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-datastore</artifactId>
-  <version>2.18.5</version>
+  <version>2.19.1</version>
 </dependency>
 
 ```
@@ -50,20 +50,20 @@ If you are using Maven without the BOM, add this to your dependencies:
 If you are using Gradle 5.x or later, add this to your dependencies:
 
 ```Groovy
-implementation platform('com.google.cloud:libraries-bom:26.34.0')
+implementation platform('com.google.cloud:libraries-bom:26.37.0')
 
 implementation 'com.google.cloud:google-cloud-datastore'
 ```
 If you are using Gradle without BOM, add this to your dependencies:
 
 ```Groovy
-implementation 'com.google.cloud:google-cloud-datastore:2.18.5'
+implementation 'com.google.cloud:google-cloud-datastore:2.19.1'
 ```
 
 If you are using SBT, add this to your dependencies:
 
 ```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.18.5"
+libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.19.1"
 ```
 <!-- {x-version-update-end} -->
 
@@ -280,6 +280,10 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-datastore/tre
 | Sum Aggregation With Order By | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithOrderBy.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithOrderBy.java) |
 | Sum Aggregation With Property Filter | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithPropertyFilter.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithPropertyFilter.java) |
 | Create a union between two filters | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/filters/OrFilterQuery.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/filters/OrFilterQuery.java) |
+| Query Profile Explain | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java) |
+| Query Profile Explain Aggregation | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java) |
+| Query Profile Explain Analyze | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java) |
+| Query Profile Explain Analyze Aggregation | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyzeAggregation.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyzeAggregation.java) |
 | Task List | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java) |
 
 
@@ -380,7 +384,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
 [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java11.html
 [stability-image]: https://img.shields.io/badge/stability-stable-green
 [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-datastore/2.18.5
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-datastore/2.19.1
 [authentication]: https://github.com/googleapis/google-cloud-java#authentication
 [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
 [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/datastore-v1-proto-client/pom.xml b/datastore-v1-proto-client/pom.xml
index 796aa21d..e136a9d8 100644
--- a/datastore-v1-proto-client/pom.xml
+++ b/datastore-v1-proto-client/pom.xml
@@ -19,12 +19,12 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.cloud.datastore</groupId>
   <artifactId>datastore-v1-proto-client</artifactId>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:datastore-v1-proto-client:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:datastore-v1-proto-client:current} -->
 
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-datastore-parent</artifactId>
-    <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+    <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   </parent>
 
   <packaging>jar</packaging>
diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml
index 6a174528..2651713e 100644
--- a/google-cloud-datastore-bom/pom.xml
+++ b/google-cloud-datastore-bom/pom.xml
@@ -3,12 +3,12 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-datastore-bom</artifactId>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore-bom:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore-bom:current} -->
   <packaging>pom</packaging>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.28.1</version>
+    <version>3.29.0</version>
   </parent>
 
   <name>Google Cloud datastore BOM</name>
@@ -52,22 +52,22 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-datastore</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-datastore-admin-v1</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-datastore-v1</artifactId>
-        <version>0.109.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
+        <version>0.110.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-datastore-admin-v1</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
       </dependency>
     </dependencies>
   </dependencyManagement>
diff --git a/google-cloud-datastore/clirr-ignored-differences.xml b/google-cloud-datastore/clirr-ignored-differences.xml
index 34395cc0..1620fd75 100644
--- a/google-cloud-datastore/clirr-ignored-differences.xml
+++ b/google-cloud-datastore/clirr-ignored-differences.xml
@@ -1,16 +1,58 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- see http://mojo.codehaus.org/clirr-maven-plugin/examples/ignored-differences.html -->
 <differences>
-    <!-- renaming internal only class-->
+    <!--  added a default method to an interface-->
     <difference>
-        <className>com/google/cloud/datastore/ReadOption$QueryAndReadOptions</className>
-        <method>*</method>
-        <differenceType>8001</differenceType>
+        <className>com/google/cloud/datastore/Datastore</className>
+        <method>com.google.cloud.datastore.QueryResults run(com.google.cloud.datastore.Query, com.google.cloud.datastore.models.ExplainOptions, com.google.cloud.datastore.ReadOption[])</method>
+        <differenceType>7012</differenceType>
     </difference>
     <difference>
-        <className>com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer</className>
-        <method>*QueryAndReadOptions*</method>
-        <to>*QueryConfig*</to>
+        <className>com/google/cloud/datastore/Datastore</className>
+        <method>com.google.cloud.datastore.AggregationResults runAggregation(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.models.ExplainOptions, com.google.cloud.datastore.ReadOption[])</method>
+        <differenceType>7012</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/DatastoreReader</className>
+        <method> com.google.cloud.datastore.AggregationResults runAggregation(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.models.ExplainOptions)</method>
+        <differenceType>7012</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/QueryResults</className>
+        <method>java.util.Optional getExplainMetrics()</method>
+        <differenceType>7012</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/Transaction</className>
+        <method>com.google.cloud.datastore.QueryResults run(com.google.cloud.datastore.Query, com.google.cloud.datastore.models.ExplainOptions)</method>
+        <differenceType>7012</differenceType>
+    </difference>
+
+    <!-- changed parmeters on internal only class-->
+    <difference>
+        <className>com/google/cloud/datastore/ReadOption$QueryConfig</className>
+        <method>com.google.cloud.datastore.ReadOption$QueryConfig create(com.google.cloud.datastore.Query, java.util.List)</method>
+        <to>*com.google.datastore.v1.ExplainOptions*</to>
         <differenceType>7005</differenceType>
     </difference>
+    <difference>
+        <className>com/google/cloud/datastore/ReadOption$QueryConfig</className>
+        <method>com.google.cloud.datastore.ReadOption$QueryConfig create(com.google.cloud.datastore.Query)</method>
+        <differenceType>7004</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/execution/AggregationQueryExecutor</className>
+        <method>com.google.cloud.datastore.AggregationResults execute(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.ReadOption[])</method>
+        <differenceType>7004</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/execution/AggregationQueryExecutor</className>
+        <method>java.lang.Object execute(com.google.cloud.datastore.Query, com.google.cloud.datastore.ReadOption[])</method>
+        <differenceType>7004</differenceType>
+    </difference>
+    <difference>
+        <className>com/google/cloud/datastore/execution/QueryExecutor</className>
+        <method>java.lang.Object execute(com.google.cloud.datastore.Query, com.google.cloud.datastore.ReadOption[])</method>
+        <differenceType>7004</differenceType>
+    </difference>
 </differences>
diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml
index acd48eb7..8d6b79e8 100644
--- a/google-cloud-datastore/pom.xml
+++ b/google-cloud-datastore/pom.xml
@@ -2,7 +2,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>google-cloud-datastore</artifactId>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   <packaging>jar</packaging>
   <name>Google Cloud Datastore</name>
   <url>https://github.com/googleapis/java-datastore</url>
@@ -12,7 +12,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-datastore-parent</artifactId>
-    <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+    <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   </parent>
   <properties>
     <site.installationModule>google-cloud-datastore</site.installationModule>
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/AggregationResults.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/AggregationResults.java
index d85e8f8a..8e40ab8b 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/AggregationResults.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/AggregationResults.java
@@ -17,11 +17,14 @@ package com.google.cloud.datastore;
 
 import static com.google.api.client.util.Preconditions.checkNotNull;
 
+import com.google.api.core.BetaApi;
 import com.google.api.core.InternalApi;
 import com.google.cloud.Timestamp;
+import com.google.cloud.datastore.models.ExplainMetrics;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * The result of an {@link AggregationQuery} query submission. Contains a List&lt;{@link
@@ -34,11 +37,22 @@ public class AggregationResults implements Iterable<AggregationResult> {
   private final List<AggregationResult> aggregationResults;
   private final Timestamp readTime;
 
-  public AggregationResults(List<AggregationResult> aggregationResults, Timestamp readTime) {
+  private final ExplainMetrics explainMetrics;
+
+  @BetaApi
+  public AggregationResults(
+      List<AggregationResult> aggregationResults,
+      Timestamp readTime,
+      ExplainMetrics explainMetrics) {
     checkNotNull(aggregationResults, "Aggregation results cannot be null");
     checkNotNull(readTime, "readTime cannot be null");
     this.aggregationResults = aggregationResults;
     this.readTime = readTime;
+    this.explainMetrics = explainMetrics;
+  }
+
+  public AggregationResults(List<AggregationResult> aggregationResults, Timestamp readTime) {
+    this(aggregationResults, readTime, null);
   }
 
   /** Returns {@link Iterator} for underlying List&lt;{@link AggregationResult}&gt;. */
@@ -51,6 +65,14 @@ public class AggregationResults implements Iterable<AggregationResult> {
     return this.aggregationResults.size();
   }
 
+  /**
+   * Returns {@code ExplainMetrics} if {@code ExplainOptions} were enabled. Otherwise, returns null.
+   */
+  @BetaApi
+  public Optional<ExplainMetrics> getExplainMetrics() {
+    return Optional.ofNullable(this.explainMetrics);
+  }
+
   @InternalApi
   public AggregationResult get(int index) {
     return this.aggregationResults.get(index);
@@ -70,11 +92,13 @@ public class AggregationResults implements Iterable<AggregationResult> {
       return false;
     }
     AggregationResults that = (AggregationResults) o;
-    return Objects.equals(aggregationResults, that.aggregationResults);
+    return Objects.equals(aggregationResults, that.aggregationResults)
+        && Objects.equals(readTime, that.readTime)
+        && Objects.equals(explainMetrics, that.explainMetrics);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(aggregationResults);
+    return Objects.hash(aggregationResults, readTime, explainMetrics);
   }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java
index d78bea9a..5bd8384a 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java
@@ -16,7 +16,9 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
 import com.google.cloud.Service;
+import com.google.cloud.datastore.models.ExplainOptions;
 import com.google.datastore.v1.TransactionOptions;
 import java.util.Iterator;
 import java.util.List;
@@ -462,6 +464,28 @@ public interface Datastore extends Service<DatastoreOptions>, DatastoreReaderWri
    */
   <T> QueryResults<T> run(Query<T> query, ReadOption... options);
 
+  /**
+   * Submits a {@link Query} with specified {@link com.google.cloud.datastore.models.ExplainOptions}
+   * and returns its result. {@link ReadOption}s can be specified if desired.
+   *
+   * <p>Example of running a query to find all entities of one kind.
+   *
+   * <pre>{@code
+   * String kind = "my_kind";
+   * StructuredQuery<Entity> query = Query.newEntityQueryBuilder()
+   *     .setKind(kind)
+   *     .build();
+   * QueryResults<Entity> results = datastore.run(query, ExplainOptions.newBuilder().setAnalyze(true).build());
+   * }</pre>
+   *
+   * @throws DatastoreException upon failure
+   */
+  @BetaApi
+  default <T> QueryResults<T> run(
+      Query<T> query, ExplainOptions explainOptions, ReadOption... options) {
+    throw new UnsupportedOperationException("Not implemented.");
+  }
+
   /**
    * Submits a {@link AggregationQuery} and returns {@link AggregationResults}. {@link ReadOption}s
    * can be specified if desired.
@@ -508,4 +532,33 @@ public interface Datastore extends Service<DatastoreOptions>, DatastoreReaderWri
   default AggregationResults runAggregation(AggregationQuery query, ReadOption... options) {
     throw new UnsupportedOperationException("Not implemented.");
   }
+
+  /**
+   * Submits a {@link AggregationQuery} with specified {@link
+   * com.google.cloud.datastore.models.ExplainOptions} and returns {@link AggregationResults}.
+   * {@link ReadOption}s can be specified if desired.
+   *
+   * <p>Example of running an {@link AggregationQuery} to find the count of entities of one kind.
+   *
+   * <p>{@link StructuredQuery} example:
+   *
+   * <pre>{@code
+   * EntityQuery selectAllQuery = Query.newEntityQueryBuilder()
+   *    .setKind("Task")
+   *    .build();
+   * AggregationQuery aggregationQuery = Query.newAggregationQueryBuilder()
+   *    .addAggregation(count().as("total_count"))
+   *    .over(selectAllQuery)
+   *    .build();
+   * AggregationResults aggregationResults = datastore.runAggregation(aggregationQuery, ExplainOptions.newBuilder().setAnalyze(true).build());
+   * }</pre>
+   *
+   * @throws DatastoreException upon failure
+   * @return {@link AggregationResults}
+   */
+  @BetaApi
+  default AggregationResults runAggregation(
+      AggregationQuery query, ExplainOptions explainOptions, ReadOption... options) {
+    throw new UnsupportedOperationException("Not implemented.");
+  }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java
index a1b337c0..a3bfb379 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java
@@ -16,6 +16,7 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
 import com.google.api.gax.retrying.RetrySettings;
 import com.google.cloud.BaseService;
 import com.google.cloud.ExceptionHandler;
@@ -30,6 +31,7 @@ import com.google.common.collect.AbstractIterator;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
+import com.google.datastore.v1.ExplainOptions;
 import com.google.datastore.v1.ReadOptions;
 import com.google.datastore.v1.ReserveIdsRequest;
 import com.google.datastore.v1.TransactionOptions;
@@ -182,28 +184,54 @@ final class DatastoreImpl extends BaseService<DatastoreOptions> implements Datas
 
   @Override
   public <T> QueryResults<T> run(Query<T> query) {
-    return run(Optional.empty(), query);
+    return run(Optional.empty(), query, null);
   }
 
   @Override
   public <T> QueryResults<T> run(Query<T> query, ReadOption... options) {
-    return run(toReadOptionsPb(options), query);
+    return run(toReadOptionsPb(options), query, null);
+  }
+
+  @Override
+  @BetaApi
+  public <T> QueryResults<T> run(
+      Query<T> query,
+      com.google.cloud.datastore.models.ExplainOptions explainOptions,
+      ReadOption... options) {
+    return run(toReadOptionsPb(options), query, explainOptions.toPb());
   }
 
   @SuppressWarnings("unchecked")
-  <T> QueryResults<T> run(Optional<ReadOptions> readOptionsPb, Query<T> query) {
+  <T> QueryResults<T> run(
+      Optional<ReadOptions> readOptionsPb, Query<T> query, ExplainOptions explainOptions) {
     return new QueryResultsImpl<T>(
-        this, readOptionsPb, (RecordQuery<T>) query, query.getNamespace());
+        this, readOptionsPb, (RecordQuery<T>) query, query.getNamespace(), explainOptions);
   }
 
   @Override
   public AggregationResults runAggregation(AggregationQuery query) {
-    return aggregationQueryExecutor.execute(query);
+    return aggregationQueryExecutor.execute(query, null);
   }
 
   @Override
   public AggregationResults runAggregation(AggregationQuery query, ReadOption... options) {
-    return aggregationQueryExecutor.execute(query, options);
+    return aggregationQueryExecutor.execute(query, null, options);
+  }
+
+  @Override
+  @BetaApi
+  public AggregationResults runAggregation(
+      AggregationQuery query, com.google.cloud.datastore.models.ExplainOptions explainOptions) {
+    return aggregationQueryExecutor.execute(query, explainOptions);
+  }
+
+  @Override
+  @BetaApi
+  public AggregationResults runAggregation(
+      AggregationQuery query,
+      com.google.cloud.datastore.models.ExplainOptions explainOptions,
+      ReadOption... options) {
+    return aggregationQueryExecutor.execute(query, explainOptions, options);
   }
 
   com.google.datastore.v1.RunQueryResponse runQuery(
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java
index 2a3071f3..8aef7f5c 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java
@@ -16,6 +16,8 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
+import com.google.cloud.datastore.models.ExplainOptions;
 import java.util.Iterator;
 import java.util.List;
 
@@ -62,4 +64,15 @@ public interface DatastoreReader {
   default AggregationResults runAggregation(AggregationQuery query) {
     throw new UnsupportedOperationException("Not implemented.");
   }
+
+  /**
+   * Submits a {@link AggregationQuery} with a specified {@link
+   * com.google.cloud.datastore.models.ExplainOptions} and returns {@link AggregationResults}.
+   *
+   * @throws DatastoreException upon failure
+   */
+  @BetaApi
+  default AggregationResults runAggregation(AggregationQuery query, ExplainOptions explainOptions) {
+    throw new UnsupportedOperationException("Not implemented.");
+  }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Query.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Query.java
index 89b8d880..88305197 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Query.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Query.java
@@ -16,6 +16,7 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.InternalApi;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.Maps;
@@ -117,6 +118,11 @@ public abstract class Query<V> implements Serializable {
       return resultClass;
     }
 
+    @InternalApi
+    public com.google.datastore.v1.EntityResult.ResultType getQueryType() {
+      return this.queryType;
+    }
+
     @Override
     public int hashCode() {
       return resultClass.hashCode();
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java
index 3f73824d..50433a6a 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java
@@ -16,8 +16,11 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
+import com.google.cloud.datastore.models.ExplainMetrics;
 import com.google.datastore.v1.QueryResultBatch;
 import java.util.Iterator;
+import java.util.Optional;
 
 /**
  * The result of a Google Cloud Datastore query submission. When the result is not typed it is
@@ -70,4 +73,9 @@ public interface QueryResults<V> extends Iterator<V> {
 
   /** Returns MoreResults state of the query after the current batch. */
   QueryResultBatch.MoreResultsType getMoreResults();
+
+  @BetaApi
+  default Optional<ExplainMetrics> getExplainMetrics() {
+    throw new UnsupportedOperationException("Not implemented.");
+  }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java
index 8fc731ac..ad511298 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java
@@ -16,9 +16,12 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
 import com.google.cloud.datastore.Query.ResultType;
+import com.google.cloud.datastore.models.ExplainMetrics;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.AbstractIterator;
+import com.google.datastore.v1.ExplainOptions;
 import com.google.datastore.v1.QueryResultBatch.MoreResultsType;
 import com.google.datastore.v1.ReadOptions;
 import com.google.protobuf.ByteString;
@@ -40,16 +43,20 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
   private Iterator<com.google.datastore.v1.EntityResult> entityResultPbIter;
   private ByteString cursor;
   private MoreResultsType moreResults;
+  private final ExplainOptions explainOptions;
+  private ExplainMetrics explainMetrics;
 
   QueryResultsImpl(
       DatastoreImpl datastore,
       Optional<ReadOptions> readOptionsPb,
       RecordQuery<T> query,
-      String namespace) {
+      String namespace,
+      ExplainOptions explainOptions) {
     this.datastore = datastore;
     this.readOptionsPb = readOptionsPb;
     this.query = query;
     queryResultType = query.getType();
+    this.explainOptions = explainOptions;
     com.google.datastore.v1.PartitionId.Builder pbBuilder =
         com.google.datastore.v1.PartitionId.newBuilder();
     pbBuilder.setProjectId(datastore.getOptions().getProjectId());
@@ -75,6 +82,9 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
     requestPb.setPartitionId(partitionIdPb);
     requestPb.setProjectId(datastore.getOptions().getProjectId());
     requestPb.setDatabaseId(datastore.getOptions().getDatabaseId());
+    if (explainOptions != null) {
+      requestPb.setExplainOptions(explainOptions);
+    }
     query.populatePb(requestPb);
     runQueryResponsePb = datastore.runQuery(requestPb.build());
     mostRecentQueryPb = requestPb.getQuery();
@@ -86,9 +96,20 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
       // projection entity can represent all type of results
       actualResultType = ResultType.PROJECTION_ENTITY;
     }
+    boolean isExplain =
+        explainOptions != null
+            && actualResultType.getQueryType() == null
+            && !explainOptions.getAnalyze();
     Preconditions.checkState(
-        queryResultType.isAssignableFrom(actualResultType),
-        "Unexpected result type " + actualResultType + " vs " + queryResultType);
+        queryResultType.isAssignableFrom(actualResultType) || isExplain,
+        "Unexpected result type or explain options set "
+            + actualResultType
+            + " vs "
+            + queryResultType
+            + ", explain options = false");
+    if (runQueryResponsePb.hasExplainMetrics()) {
+      this.explainMetrics = new ExplainMetrics(runQueryResponsePb.getExplainMetrics());
+    }
   }
 
   @Override
@@ -127,4 +148,10 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
   public MoreResultsType getMoreResults() {
     return moreResults;
   }
+
+  @Override
+  @BetaApi
+  public Optional<ExplainMetrics> getExplainMetrics() {
+    return Optional.ofNullable(this.explainMetrics);
+  }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ReadOption.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ReadOption.java
index c249e45a..f7d6d82c 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ReadOption.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ReadOption.java
@@ -20,6 +20,7 @@ import com.google.api.core.BetaApi;
 import com.google.api.core.InternalApi;
 import com.google.cloud.Timestamp;
 import com.google.common.collect.ImmutableMap;
+import com.google.datastore.v1.ExplainOptions;
 import com.google.protobuf.ByteString;
 import java.io.Serializable;
 import java.util.Collections;
@@ -146,32 +147,38 @@ public abstract class ReadOption implements Serializable {
 
     Q query;
     List<ReadOption> readOptions;
+    ExplainOptions explainOptions;
 
-    private QueryConfig(Q query, List<ReadOption> readOptions) {
+    private QueryConfig(Q query, ExplainOptions explainOptions, List<ReadOption> readOptions) {
       this.query = query;
+      this.explainOptions = explainOptions;
       this.readOptions = readOptions;
     }
 
-    private QueryConfig(Q query) {
-      this.query = query;
-      this.readOptions = Collections.emptyList();
+    private QueryConfig(Q query, ExplainOptions explainOptions) {
+      this(query, explainOptions, Collections.emptyList());
     }
 
     public Q getQuery() {
       return query;
     }
 
+    public ExplainOptions getExplainOptions() {
+      return this.explainOptions;
+    }
+
     public List<ReadOption> getReadOptions() {
       return readOptions;
     }
 
-    public static <Q extends Query<?>> QueryConfig<Q> create(Q query) {
-      return new QueryConfig<>(query);
+    public static <Q extends Query<?>> QueryConfig<Q> create(
+        Q query, ExplainOptions explainOptions) {
+      return new QueryConfig<>(query, explainOptions);
     }
 
     public static <Q extends Query<?>> QueryConfig<Q> create(
-        Q query, List<ReadOption> readOptions) {
-      return new QueryConfig<>(query, readOptions);
+        Q query, ExplainOptions explainOptions, List<ReadOption> readOptions) {
+      return new QueryConfig<>(query, explainOptions, readOptions);
     }
   }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java
index 69c18d75..7b6a67a2 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java
@@ -16,6 +16,8 @@
 
 package com.google.cloud.datastore;
 
+import com.google.api.core.BetaApi;
+import com.google.cloud.datastore.models.ExplainOptions;
 import com.google.protobuf.ByteString;
 import java.util.Iterator;
 import java.util.List;
@@ -176,6 +178,11 @@ public interface Transaction extends DatastoreBatchWriter, DatastoreReaderWriter
   @Override
   <T> QueryResults<T> run(Query<T> query);
 
+  @BetaApi
+  default <T> QueryResults<T> run(Query<T> query, ExplainOptions explainOptions) {
+    throw new UnsupportedOperationException("Not implemented.");
+  }
+
   /**
    * Datastore add operation. This method will also allocate id for any entity with an incomplete
    * key. As opposed to {@link #add(FullEntity)} and {@link #add(FullEntity...)}, this method will
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java
index 3b5e5e4e..f08a908e 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java
@@ -18,6 +18,8 @@ package com.google.cloud.datastore;
 
 import static com.google.cloud.datastore.ReadOption.transactionId;
 
+import com.google.api.core.BetaApi;
+import com.google.cloud.datastore.models.ExplainOptions;
 import com.google.common.collect.ImmutableList;
 import com.google.datastore.v1.ReadOptions;
 import com.google.datastore.v1.TransactionOptions;
@@ -102,7 +104,16 @@ final class TransactionImpl extends BaseDatastoreBatchWriter implements Transact
     validateActive();
     Optional<ReadOptions> readOptions =
         this.readOptionProtoPreparer.prepare(ImmutableList.of(transactionId(transactionId)));
-    return datastore.run(readOptions, query);
+    return datastore.run(readOptions, query, null);
+  }
+
+  @Override
+  @BetaApi
+  public <T> QueryResults<T> run(Query<T> query, ExplainOptions explainOptions) {
+    validateActive();
+    Optional<ReadOptions> readOptions =
+        this.readOptionProtoPreparer.prepare(ImmutableList.of(transactionId(transactionId)));
+    return datastore.run(readOptions, query, explainOptions.toPb());
   }
 
   @Override
@@ -110,6 +121,12 @@ final class TransactionImpl extends BaseDatastoreBatchWriter implements Transact
     return datastore.runAggregation(query, transactionId(transactionId));
   }
 
+  @Override
+  @BetaApi
+  public AggregationResults runAggregation(AggregationQuery query, ExplainOptions explainOptions) {
+    return datastore.runAggregation(query, explainOptions, transactionId(transactionId));
+  }
+
   @Override
   public Transaction.Response commit() {
     validateActive();
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/AggregationQueryExecutor.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/AggregationQueryExecutor.java
index 5a1fdd2c..bedcf34e 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/AggregationQueryExecutor.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/AggregationQueryExecutor.java
@@ -23,6 +23,7 @@ import com.google.cloud.datastore.ReadOption;
 import com.google.cloud.datastore.ReadOption.QueryConfig;
 import com.google.cloud.datastore.execution.request.AggregationQueryRequestProtoPreparer;
 import com.google.cloud.datastore.execution.response.AggregationQueryResponseTransformer;
+import com.google.cloud.datastore.models.ExplainOptions;
 import com.google.cloud.datastore.spi.v1.DatastoreRpc;
 import com.google.datastore.v1.RunAggregationQueryRequest;
 import com.google.datastore.v1.RunAggregationQueryResponse;
@@ -47,20 +48,24 @@ public class AggregationQueryExecutor
   }
 
   @Override
-  public AggregationResults execute(AggregationQuery query, ReadOption... readOptions) {
+  public AggregationResults execute(
+      AggregationQuery query, ExplainOptions explainOptions, ReadOption... readOptions) {
     RunAggregationQueryRequest runAggregationQueryRequest =
-        getRunAggregationQueryRequest(query, readOptions);
+        getRunAggregationQueryRequest(
+            query, explainOptions == null ? null : explainOptions.toPb(), readOptions);
     RunAggregationQueryResponse runAggregationQueryResponse =
         this.datastoreRpc.runAggregationQuery(runAggregationQueryRequest);
     return this.responseTransformer.transform(runAggregationQueryResponse);
   }
 
   private RunAggregationQueryRequest getRunAggregationQueryRequest(
-      AggregationQuery query, ReadOption... readOptions) {
+      AggregationQuery query,
+      com.google.datastore.v1.ExplainOptions explainOptions,
+      ReadOption... readOptions) {
     QueryConfig<AggregationQuery> queryConfig =
         readOptions == null
-            ? QueryConfig.create(query)
-            : QueryConfig.create(query, Arrays.asList(readOptions));
+            ? QueryConfig.create(query, explainOptions)
+            : QueryConfig.create(query, explainOptions, Arrays.asList(readOptions));
     return this.protoPreparer.prepare(queryConfig);
   }
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/QueryExecutor.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/QueryExecutor.java
index 856c64a0..60c75e0f 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/QueryExecutor.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/QueryExecutor.java
@@ -18,6 +18,7 @@ package com.google.cloud.datastore.execution;
 import com.google.api.core.InternalApi;
 import com.google.cloud.datastore.Query;
 import com.google.cloud.datastore.ReadOption;
+import com.google.cloud.datastore.models.ExplainOptions;
 
 /**
  * An internal functional interface whose implementation has the responsibility to execute a {@link
@@ -34,7 +35,9 @@ public interface QueryExecutor<INPUT extends Query<OUTPUT>, OUTPUT> {
 
   /**
    * @param query A {@link Query} to execute.
+   * @param explainOptions {@link com.google.cloud.datastore.models.ExplainOptions}s to be used when
+   *     executing {@link Query}.
    * @param readOptions Optional {@link ReadOption}s to be used when executing {@link Query}.
    */
-  OUTPUT execute(INPUT query, ReadOption... readOptions);
+  OUTPUT execute(INPUT query, ExplainOptions explainOptions, ReadOption... readOptions);
 }
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer.java
index 475a47b5..a89ebb11 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer.java
@@ -67,7 +67,9 @@ public class AggregationQueryRequestProtoPreparer
     } else {
       aggregationQueryRequestBuilder.setAggregationQuery(getAggregationQuery(aggregationQuery));
     }
-
+    if (queryConfig.getExplainOptions() != null) {
+      aggregationQueryRequestBuilder.setExplainOptions(queryConfig.getExplainOptions());
+    }
     Optional<ReadOptions> readOptionsPb = readOptionProtoPreparer.prepare(readOptions);
     readOptionsPb.ifPresent(aggregationQueryRequestBuilder::setReadOptions);
     return aggregationQueryRequestBuilder.build();
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformer.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformer.java
index 8c99fcd4..71f7453c 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformer.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformer.java
@@ -19,6 +19,7 @@ import com.google.api.core.InternalApi;
 import com.google.cloud.Timestamp;
 import com.google.cloud.datastore.AggregationResult;
 import com.google.cloud.datastore.AggregationResults;
+import com.google.cloud.datastore.models.ExplainMetrics;
 import com.google.datastore.v1.RunAggregationQueryResponse;
 import com.google.datastore.v1.Value;
 import java.util.AbstractMap.SimpleEntry;
@@ -40,7 +41,11 @@ public class AggregationQueryResponseTransformer
         response.getBatch().getAggregationResultsList().stream()
             .map(aggregationResult -> new AggregationResult(transformValues(aggregationResult)))
             .collect(Collectors.toCollection(LinkedList::new));
-    return new AggregationResults(aggregationResults, readTime);
+    ExplainMetrics explainMetrics = null;
+    if (response.hasExplainMetrics()) {
+      explainMetrics = new ExplainMetrics(response.getExplainMetrics());
+    }
+    return new AggregationResults(aggregationResults, readTime, explainMetrics);
   }
 
   private Map<String, com.google.cloud.datastore.Value<?>> transformValues(
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java
new file mode 100644
index 00000000..52184a01
--- /dev/null
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2024 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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.api.core.BetaApi;
+import com.google.api.core.InternalApi;
+import com.google.cloud.Structs;
+import com.google.common.base.Objects;
+import java.util.Map;
+import org.threeten.bp.Duration;
+
+/** Model class for {@link com.google.datastore.v1.ExecutionStats} */
+@BetaApi
+public class ExecutionStats {
+  private final long resultsReturned;
+  private final Duration executionDuration;
+  private final long readOperations;
+  private final Map<String, Object> debugStats;
+
+  @InternalApi
+  public ExecutionStats(com.google.datastore.v1.ExecutionStats proto) {
+    this.resultsReturned = proto.getResultsReturned();
+    this.executionDuration = Duration.ofNanos(proto.getExecutionDuration().getNanos());
+    this.readOperations = proto.getReadOperations();
+    this.debugStats = Structs.asMap(proto.getDebugStats());
+  }
+
+  /**
+   * Returns the total number of results returned, including documents, projections, aggregation
+   * results, keys.
+   */
+  public long getResultsReturned() {
+    return resultsReturned;
+  }
+
+  /** Returns the debugging statistics from the execution of the query. */
+  public Map<String, Object> getDebugStats() {
+    return debugStats;
+  }
+
+  /** Returns the total time to execute the query in the backend. */
+  public Duration getExecutionDuration() {
+    return executionDuration;
+  }
+
+  /** Returns the total billable read operations. */
+  public long getReadOperations() {
+    return readOperations;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof ExecutionStats)) {
+      return false;
+    }
+    ExecutionStats that = (ExecutionStats) o;
+
+    return Objects.equal(resultsReturned, that.resultsReturned)
+        && Objects.equal(executionDuration, that.executionDuration)
+        && Objects.equal(readOperations, that.readOperations)
+        && Objects.equal(debugStats, that.debugStats);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(resultsReturned, executionDuration, readOperations, debugStats);
+  }
+}
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainMetrics.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainMetrics.java
new file mode 100644
index 00000000..75fd94d6
--- /dev/null
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainMetrics.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2024 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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.api.core.BetaApi;
+import com.google.api.core.InternalApi;
+import com.google.common.base.Objects;
+import java.util.Optional;
+
+/** Model class for {@link com.google.datastore.v1.ExplainMetrics}. */
+@BetaApi
+public class ExplainMetrics {
+  private final PlanSummary planSummary;
+  private ExecutionStats executionStats;
+
+  @InternalApi
+  public ExplainMetrics(com.google.datastore.v1.ExplainMetrics proto) {
+    if (proto.hasExecutionStats()) {
+      this.executionStats = new ExecutionStats(proto.getExecutionStats());
+    }
+    this.planSummary = new PlanSummary(proto.getPlanSummary());
+  }
+
+  /** Returns the planning phase information for the query. */
+  public PlanSummary getPlanSummary() {
+    return planSummary;
+  }
+
+  /**
+   * Returns the aggregated stats from the execution of the query, if present. Only present when
+   * 'analyze' is set to true for {@link ExplainOptions}.
+   */
+  public Optional<ExecutionStats> getExecutionStats() {
+    return Optional.ofNullable(executionStats);
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (!(o instanceof ExplainMetrics)) return false;
+    ExplainMetrics that = (ExplainMetrics) o;
+    return Objects.equal(planSummary, that.planSummary)
+        && Objects.equal(executionStats, that.executionStats);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(planSummary, executionStats);
+  }
+}
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainOptions.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainOptions.java
new file mode 100644
index 00000000..f339a851
--- /dev/null
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExplainOptions.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2024 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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.api.core.BetaApi;
+import com.google.api.core.InternalApi;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
+
+/**
+ * Model class for {@link com.google.datastore.v1.ExplainOptions}. Contains the explain options for
+ * the query. Analyze is set to 'false' by default.
+ */
+@BetaApi
+public class ExplainOptions {
+  private final com.google.datastore.v1.ExplainOptions proto;
+
+  private ExplainOptions(com.google.datastore.v1.ExplainOptions proto) {
+    this.proto = proto;
+  }
+
+  public static Builder newBuilder() {
+    return new Builder();
+  }
+
+  /**
+   * Returns whether analyze is set to true or false. When false (the default), the query will be
+   * planned, returning only metrics from the planning stages. When true, the query will be planned
+   * and executed, returning the full query results along with both planning and execution stage
+   * metrics.
+   */
+  public boolean shouldAnalyze() {
+    return proto.getAnalyze();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (!(o instanceof ExplainOptions)) return false;
+    ExplainOptions that = (ExplainOptions) o;
+    return proto.equals(that.proto);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(proto);
+  }
+
+  @InternalApi
+  @VisibleForTesting
+  public com.google.datastore.v1.ExplainOptions toPb() {
+    return this.proto;
+  }
+
+  public static class Builder {
+    private boolean analyze = false;
+
+    /*
+     * Set 'analyze' to true or false for the explain options.
+     * When false (the default), the query will be planned, returning only metrics from the planning stages.
+     * When true, the query will be planned and executed, returning the full query results along with both planning and execution stage metrics.
+     */
+    public Builder setAnalyze(boolean analyze) {
+      this.analyze = analyze;
+      return this;
+    }
+
+    public ExplainOptions build() {
+      return new ExplainOptions(
+          com.google.datastore.v1.ExplainOptions.newBuilder().setAnalyze(this.analyze).build());
+    }
+  }
+}
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/PlanSummary.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/PlanSummary.java
new file mode 100644
index 00000000..ea9e87bd
--- /dev/null
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/PlanSummary.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2024 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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.api.core.BetaApi;
+import com.google.api.core.InternalApi;
+import com.google.cloud.Structs;
+import com.google.common.base.Objects;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/** Model class for {@link com.google.datastore.v1.PlanSummary} */
+@BetaApi
+public class PlanSummary {
+  private final List<Map<String, Object>> indexesUsed;
+
+  @InternalApi
+  public PlanSummary(com.google.datastore.v1.PlanSummary proto) {
+    this.indexesUsed =
+        proto.getIndexesUsedList().stream().map(Structs::asMap).collect(Collectors.toList());
+  }
+
+  /** Returns the indexes selected for the query. */
+  public List<Map<String, Object>> getIndexesUsed() {
+    return indexesUsed;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (!(o instanceof PlanSummary)) return false;
+    PlanSummary planSummary = (PlanSummary) o;
+    return Objects.equal(indexesUsed, planSummary.indexesUsed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(indexesUsed);
+  }
+}
diff --git a/grpc-google-cloud-datastore-admin-v1/pom.xml b/grpc-google-cloud-datastore-admin-v1/pom.xml
index f903b6ea..150832cd 100644
--- a/grpc-google-cloud-datastore-admin-v1/pom.xml
+++ b/grpc-google-cloud-datastore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>grpc-google-cloud-datastore-admin-v1</artifactId>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
   <name>grpc-google-cloud-datastore-admin-v1</name>
   <description>GRPC library for google-cloud-datastore</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-datastore-parent</artifactId>
-    <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+    <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/pom.xml b/pom.xml
index 00a3513a..37803c4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-datastore-parent</artifactId>
   <packaging>pom</packaging>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   <name>Google Cloud Datastore Parent</name>
   <url>https://github.com/googleapis/java-datastore</url>
   <description>
@@ -14,7 +14,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.28.1</version>
+    <version>3.29.0</version>
   </parent>
 
   <developers>
@@ -159,27 +159,27 @@
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-datastore-admin-v1</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>grpc-google-cloud-datastore-admin-v1</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-datastore-admin-v1:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-datastore</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-datastore-v1</artifactId>
-        <version>0.109.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
+        <version>0.110.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
       </dependency>
       <dependency>
         <groupId>com.google.cloud.datastore</groupId>
         <artifactId>datastore-v1-proto-client</artifactId>
-        <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:datastore-v1-proto-client:current} -->
+        <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:datastore-v1-proto-client:current} -->
         <exclusions>
           <exclusion>
             <groupId>com.google.api.grpc</groupId>
@@ -232,7 +232,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
-            <version>3.11.0</version>
+            <version>3.13.0</version>
             <configuration>
               <encoding>UTF-8</encoding>
               <fork>true</fork>
diff --git a/proto-google-cloud-datastore-admin-v1/pom.xml b/proto-google-cloud-datastore-admin-v1/pom.xml
index 0399f93e..58e80a47 100644
--- a/proto-google-cloud-datastore-admin-v1/pom.xml
+++ b/proto-google-cloud-datastore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>proto-google-cloud-datastore-admin-v1</artifactId>
-  <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
+  <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-admin-v1:current} -->
   <name>proto-google-cloud-datastore-admin-v1</name>
   <description>Proto library for google-cloud-datastore</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-datastore-parent</artifactId>
-    <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+    <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java
index 31a54735..2c078756 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java
index 95a104fb..fa127dc7 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface CommonMetadataOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java
index 27bd6bfe..c86b9a96 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java
index 1007e11a..537fb10b 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface CreateIndexRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java
index fddbd42d..9a4bb925 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public final class DatastoreAdminProto {
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java
index 82df90c5..a0695ffd 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java
index 43d4d3a7..3bf3c03f 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface DatastoreFirestoreMigrationMetadataOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java
index 5ce02bce..0b82ce7c 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java
index 205068e3..9ac5d541 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface DeleteIndexRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java
index f59d4eb1..a4c6617c 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java
index 5f8cbd80..59fff065 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface EntityFilterOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java
index cec4bb02..360a2c5c 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java
index fa762b06..a65dedc9 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ExportEntitiesMetadataOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java
index 079957ed..acad36a3 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java
index 4a10ea30..01f5ec35 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ExportEntitiesRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java
index 7210158f..fd335068 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java
index 74130ff3..77bf913f 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ExportEntitiesResponseOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java
index fc72dae6..00fb7982 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java
index f270727c..e33a2bd2 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface GetIndexRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java
index f5cf31eb..f89135eb 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java
index 0826f143..71c6928a 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ImportEntitiesMetadataOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java
index 4e57a405..596bbfa1 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java
index fc13ff73..92261658 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ImportEntitiesRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java
index bffea1be..7244182d 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/index.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java
index 310490d6..96b2a12a 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java
index 8e722fb2..20348e04 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface IndexOperationMetadataOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java
index 5635d1b5..25373353 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/index.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface IndexOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java
index e78253a6..9dbdecdf 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/index.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public final class IndexProto {
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java
index 2f1ad85f..5eb553c3 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java
index d5891a45..389feb19 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ListIndexesRequestOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java
index a0e99c1f..05da1f24 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java
index a27eed1d..e6b8e437 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ListIndexesResponseOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java
index e0f0b019..d69e36b8 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java
index 919c52c6..68441b30 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface MigrationProgressEventOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java
index 8e23fb66..0c111044 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public final class MigrationProto {
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java
index a0724c30..1cc53767 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java
index 4b1f857a..54f20a28 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java
index 50fac8fc..3920f71c 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface MigrationStateEventOrBuilder
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java
index 043b3e11..6810cfd5 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/migration.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java
index d4e88126..b8a5f327 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java
index a6d5bca2..34750841 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java
index 71b3c8ee..faa61356 100644
--- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java
+++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/admin/v1/datastore_admin.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.admin.v1;
 
 public interface ProgressOrBuilder
diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml
index a49289f2..f7533666 100644
--- a/proto-google-cloud-datastore-v1/pom.xml
+++ b/proto-google-cloud-datastore-v1/pom.xml
@@ -4,13 +4,13 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.api.grpc</groupId>
   <artifactId>proto-google-cloud-datastore-v1</artifactId>
-  <version>0.109.6-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
+  <version>0.110.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-datastore-v1:current} -->
   <name>proto-google-cloud-datastore-v1</name>
   <description>PROTO library for proto-google-cloud-datastore-v1</description>
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-datastore-parent</artifactId>
-    <version>2.18.6-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
+    <version>2.19.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-datastore:current} -->
   </parent>
   <dependencies>
     <dependency>
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java
index d9889d3b..654257a1 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java
index 82229632..bfb5e844 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface AggregationQueryOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java
index 23f49268..5a6afdcf 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/aggregation_result.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java
index 7a7e7252..040d282d 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/aggregation_result.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java
index 29f022e1..5c1fb1da 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/aggregation_result.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface AggregationResultBatchOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java
index fdaa6706..4bcde0f9 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/aggregation_result.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface AggregationResultOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java
index d5d7fd33..a924705f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/aggregation_result.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public final class AggregationResultProto {
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequest.java
index f3927085..e46e1931 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java
index d08d9cc4..3f2db79c 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface AllocateIdsRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java
index dea70c4b..c1ac60e3 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java
index a0964c4e..15aa0780 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface AllocateIdsResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java
index 98c8b6ba..332ecd57 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java
index efdb8239..3f8acbe2 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ArrayValueOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java
index 5d0ba70b..eee52d8f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java
index eafc5c11..322bbccc 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface BeginTransactionRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java
index 21780f6f..c955d18f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java
index 5403b4a7..065ffa4b 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface BeginTransactionResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java
index c5a4b95c..3b865f5b 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java
index 7b6031d4..8da438a0 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface CommitRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java
index e8a9c097..610c275e 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java
index d0365380..41d4a006 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface CommitResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java
index 9dc1f83c..500df91c 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java
index a41080ad..b9d87ece 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface CompositeFilterOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java
index abd7b550..1b8753e3 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public final class DatastoreProto {
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Entity.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Entity.java
index 90587777..a2dfad0c 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Entity.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Entity.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java
index 2d526586..cc8398b5 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface EntityOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java
index ac586373..1239bbd9 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public final class EntityProto {
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResult.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResult.java
index 3d257de3..717aa0b0 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResult.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResult.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java
index 9b2304ac..b8262fd2 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface EntityResultOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java
index 0cb9dff3..7530347c 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java
index 5aa06692..b31b1227 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ExecutionStatsOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java
index 9bb2c487..423b5897 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java
index 632fc5ef..c6b99516 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ExplainMetricsOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java
index 78fa71cd..4e2f3287 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java
index d539b998..0248d510 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ExplainOptionsOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java
index dfe3e1a0..b9b60db3 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java
index 9b4f55d8..b7a38fdd 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface FilterOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java
index a9622be9..0c7eb2a6 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java
index ada6911c..7cedc2fd 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface GqlQueryOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java
index 12939935..866409cf 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java
index 32ee089d..c4faa754 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface GqlQueryParameterOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java
index 9c7e12a7..693c867f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java
index af160846..b88c3493 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface KeyOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java
index b60072ad..fde06862 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java
index 4f1aa3de..b3c48590 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface KindExpressionOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java
index 82d3b26f..cd95d3a0 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java
index 3b14e083..82fe2466 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface LookupRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java
index 4fea00b6..6b56e102 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java
index 5b512da4..2935a1b6 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface LookupResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java
index 2635a2dc..91895d18 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java
index 1e03e15f..e833ed94 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface MutationOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java
index 76bdd3fb..2e7abf0b 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java
index f9710672..bec5014e 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface MutationResultOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java
index eb26431b..9116410f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java
index bf9647fc..d9dc8c27 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface PartitionIdOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java
index 90df8645..b68c700c 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java
index a98db6c0..634faded 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface PlanSummaryOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java
index 3f370018..412dc13d 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java
index f1f47ee3..c1a094d8 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ProjectionOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java
index f6ae2df5..3eb9c2c1 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java
index 150834bb..c7c9d057 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface PropertyFilterOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java
index e54ef972..b42405c9 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java
index abeeaf05..3522ab95 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface PropertyOrderOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java
index 14727f1a..a7a4c304 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java
index c9569ee2..7761b142 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface PropertyReferenceOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java
index dc1c53b0..a91fd271 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java
index 72dd33ea..5783fb2e 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface QueryOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java
index 85089166..1e34aa95 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query_profile.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public final class QueryProfileProto {
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProto.java
index 87e4f136..d11d674d 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProto.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProto.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public final class QueryProto {
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java
index 58c823e8..a8ee6cc5 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java
index e4cbc740..b17dc17a 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/query.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface QueryResultBatchOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java
index 9d30b400..a64c56d3 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java
index 3a2db10b..dd02b663 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ReadOptionsOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java
index 77d76536..f33ed677 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java
index cd19e651..f430680f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ReserveIdsRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java
index ad7cb551..6fd38112 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java
index d6324357..f58f797f 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ReserveIdsResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java
index 47212e81..ddc3bbdd 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java
index 05aa91ca..1396a426 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RollbackRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java
index 211b0424..8aed6de5 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java
index ae979792..13fbedee 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RollbackResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java
index edcb31d5..aff95e00 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java
index 23a5c4e6..cde16b81 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RunAggregationQueryRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java
index 9ddc2eb1..9165ba57 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java
index 423c2605..dc90c61e 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RunAggregationQueryResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java
index cdbc7b6f..4420d577 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java
index d94ba46d..9e7a6f0b 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RunQueryRequestOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java
index 338b81c1..03d5b4b8 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java
index 3bcbb324..e3c0dbf8 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface RunQueryResponseOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java
index 1eb755ea..52c53d48 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java
index c2f96150..5abaa12a 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/datastore.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface TransactionOptionsOrBuilder
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java
index 5ecb2df7..1d63815b 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 /**
diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java
index 1b472f4f..8e4021a5 100644
--- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java
+++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java
@@ -16,7 +16,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: google/datastore/v1/entity.proto
 
-// Protobuf Java Version: 3.25.2
+// Protobuf Java Version: 3.25.3
 package com.google.datastore.v1;
 
 public interface ValueOrBuilder
diff --git a/renovate.json b/renovate.json
index 0751ef09..7b293980 100644
--- a/renovate.json
+++ b/renovate.json
@@ -12,7 +12,10 @@
   ],
   "ignorePaths": [
     ".kokoro/requirements.txt",
-    ".github/workflows/**"
+    ".github/workflows/approve-readme.yaml",
+    ".github/workflows/ci.yaml",
+    ".github/workflows/renovate_config_check.yaml",
+    ".github/workflows/samples.yaml"
   ],
   "customManagers": [
     {
@@ -23,6 +26,15 @@
       "matchStrings": ["value: \"gcr.io/cloud-devrel-public-resources/graalvm.*:(?<currentValue>.*?)\""],
       "depNameTemplate": "com.google.cloud:sdk-platform-java-config",
       "datasourceTemplate": "maven"
+    },
+    {
+      "customType": "regex",
+      "fileMatch": [
+        "^.github/workflows/unmanaged_dependency_check.yaml$"
+      ],
+      "matchStrings": ["uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v(?<currentValue>.+?)\\n"],
+      "depNameTemplate": "com.google.cloud:sdk-platform-java-config",
+      "datasourceTemplate": "maven"
     }
   ],
   "packageRules": [
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 58d7e4c3..d3672238 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -29,7 +29,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-datastore</artifactId>
-      <version>2.18.5</version>
+      <version>2.19.1</version>
     </dependency>
     <!-- [END datastore_install_without_bom] -->
 
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 5ab8f16b..25aa152b 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -28,7 +28,7 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>libraries-bom</artifactId>
-        <version>26.34.0</version>
+        <version>26.37.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 2511ec0e..45331e46 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,7 +28,7 @@
     <dependency>
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-datastore</artifactId>
-      <version>2.18.6-SNAPSHOT</version>
+      <version>2.19.2-SNAPSHOT</version>
     </dependency>
     <!-- {x-version-update-end} -->
 
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 9640927c..d6607d7c 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -30,7 +30,7 @@
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>libraries-bom</artifactId>
-        <version>26.34.0</version>
+        <version>26.37.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java
new file mode 100644
index 00000000..8954589c
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2024 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
+ *
+ * http://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.
+ */
+
+package com.example.datastore.queryprofile;
+
+// [START datastore_query_explain_entity]
+
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Query;
+import com.google.cloud.datastore.QueryResults;
+import com.google.cloud.datastore.models.ExplainMetrics;
+import com.google.cloud.datastore.models.ExplainOptions;
+import com.google.cloud.datastore.models.PlanSummary;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class QueryProfileExplain {
+  public static void invoke() throws Exception {
+    // Instantiates a client
+    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
+
+    // Build the query
+    Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").build();
+
+    // Set the explain options to get back *only* the plan summary
+    QueryResults<Entity> results = datastore.run(query, ExplainOptions.newBuilder().build());
+
+    // Get the explain metrics
+    Optional<ExplainMetrics> explainMetrics = results.getExplainMetrics();
+    if (!explainMetrics.isPresent()) {
+      throw new Exception("No explain metrics returned");
+    }
+    PlanSummary planSummary = explainMetrics.get().getPlanSummary();
+    List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
+    System.out.println("----- Indexes Used -----");
+    indexesUsed.forEach(map -> map.forEach((key, val) -> System.out.println(key + ": " + val)));
+  }
+}
+// [END datastore_query_explain_entity]
diff --git a/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java
new file mode 100644
index 00000000..8176cdc6
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2024 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
+ *
+ * http://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.
+ */
+
+package com.example.datastore.queryprofile;
+
+// [START datastore_query_explain_aggregation]
+
+import static com.google.cloud.datastore.aggregation.Aggregation.count;
+
+import com.google.cloud.datastore.AggregationQuery;
+import com.google.cloud.datastore.AggregationResults;
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Query;
+import com.google.cloud.datastore.StructuredQuery;
+import com.google.cloud.datastore.models.ExplainMetrics;
+import com.google.cloud.datastore.models.ExplainOptions;
+import com.google.cloud.datastore.models.PlanSummary;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class QueryProfileExplainAggregation {
+  public static void invoke() throws Exception {
+    // Instantiates a client
+    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
+
+    // Build the query
+    StructuredQuery<Entity> query = Query.newEntityQueryBuilder().setKind("Task").build();
+
+    // Build the aggregation query
+    AggregationQuery aggregationQuery =
+        Query.newAggregationQueryBuilder().over(query).addAggregation(count()).build();
+
+    // Set the explain options to get back *only* the plan summary
+    AggregationResults results =
+        datastore.runAggregation(aggregationQuery, ExplainOptions.newBuilder().build());
+
+    // Get the explain metrics
+    Optional<ExplainMetrics> explainMetrics = results.getExplainMetrics();
+    if (!explainMetrics.isPresent()) {
+      throw new Exception("No explain metrics returned");
+    }
+    PlanSummary planSummary = explainMetrics.get().getPlanSummary();
+    List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
+    System.out.println("----- Indexes Used -----");
+    indexesUsed.forEach(map -> map.forEach((key, val) -> System.out.println(key + ": " + val)));
+  }
+}
+// [END datastore_query_explain_aggregation]
diff --git a/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java
new file mode 100644
index 00000000..7a1b34a6
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2024 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
+ *
+ * http://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.
+ */
+
+package com.example.datastore.queryprofile;
+
+// [START datastore_query_explain_analyze_entity]
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Query;
+import com.google.cloud.datastore.QueryResults;
+import com.google.cloud.datastore.models.ExecutionStats;
+import com.google.cloud.datastore.models.ExplainMetrics;
+import com.google.cloud.datastore.models.ExplainOptions;
+import com.google.cloud.datastore.models.PlanSummary;
+import java.util.List;
+import java.util.Map;
+
+public class QueryProfileExplainAnalyze {
+  public static void invoke() throws Exception {
+    // Instantiates a client
+    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
+
+    // Build the query
+    Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").build();
+
+    // Set explain options with analzye = true to get back the query stats, plan info, and query
+    // results
+    QueryResults<Entity> results =
+        datastore.run(query, ExplainOptions.newBuilder().setAnalyze(true).build());
+
+    // Get the result set stats
+    if (!results.getExplainMetrics().isPresent()) {
+      throw new Exception("No explain metrics returned");
+    }
+    ExplainMetrics explainMetrics = results.getExplainMetrics().get();
+
+    // Get the execution stats
+    if (!explainMetrics.getExecutionStats().isPresent()) {
+      throw new Exception("No execution stats returned");
+    }
+
+    ExecutionStats executionStats = explainMetrics.getExecutionStats().get();
+    Map<String, Object> debugStats = executionStats.getDebugStats();
+    System.out.println("----- Debug Stats -----");
+    debugStats.forEach((key, val) -> System.out.println(key + ": " + val));
+    System.out.println("----------");
+
+    long resultsReturned = executionStats.getResultsReturned();
+    System.out.println("Results returned: " + resultsReturned);
+
+    // Get the plan summary
+    PlanSummary planSummary = explainMetrics.getPlanSummary();
+    List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
+    System.out.println("----- Indexes Used -----");
+    indexesUsed.forEach(map -> map.forEach((key, val) -> System.out.println(key + ": " + val)));
+
+    if (!results.hasNext()) {
+      throw new Exception("query yielded no results");
+    }
+
+    // Get the query results
+    System.out.println("----- Query Results -----");
+    while (results.hasNext()) {
+      Entity entity = results.next();
+      System.out.printf("Entity: %s%n", entity);
+    }
+  }
+}
+// [END datastore_query_explain_analyze_entity]
diff --git a/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyzeAggregation.java b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyzeAggregation.java
new file mode 100644
index 00000000..5bbc8ccc
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyzeAggregation.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2024 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
+ *
+ * http://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.
+ */
+
+package com.example.datastore.queryprofile;
+
+// [START datastore_query_explain_analyze_aggregation]
+
+import static com.google.cloud.datastore.aggregation.Aggregation.count;
+
+import com.google.cloud.datastore.AggregationQuery;
+import com.google.cloud.datastore.AggregationResult;
+import com.google.cloud.datastore.AggregationResults;
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Query;
+import com.google.cloud.datastore.StructuredQuery;
+import com.google.cloud.datastore.models.ExecutionStats;
+import com.google.cloud.datastore.models.ExplainMetrics;
+import com.google.cloud.datastore.models.ExplainOptions;
+import com.google.cloud.datastore.models.PlanSummary;
+import com.google.common.collect.Iterables;
+import java.util.List;
+import java.util.Map;
+
+public class QueryProfileExplainAnalyzeAggregation {
+  public static void invoke() throws Exception {
+    // Instantiates a client
+    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
+
+    // Build the query
+    StructuredQuery<Entity> query = Query.newEntityQueryBuilder().setKind("Task").build();
+
+    // Build the aggregation query
+    AggregationQuery aggregationQuery =
+        Query.newAggregationQueryBuilder()
+            .over(query)
+            .addAggregation(count().as("countVal"))
+            .build();
+
+    // Set the explain options with analyze = true to get back the query stats, plan info, and
+    // aggregation results
+    AggregationResults results =
+        datastore.runAggregation(
+            aggregationQuery, ExplainOptions.newBuilder().setAnalyze(true).build());
+
+    if (!results.getExplainMetrics().isPresent()) {
+      throw new Exception("No explain metrics returned");
+    }
+    ExplainMetrics explainMetrics = results.getExplainMetrics().get();
+
+    if (!explainMetrics.getExecutionStats().isPresent()) {
+      throw new Exception("No execution stats returned");
+    }
+    ExecutionStats executionStats = explainMetrics.getExecutionStats().get();
+    Map<String, Object> debugStats = executionStats.getDebugStats();
+    System.out.println("----- Debug Stats -----");
+    debugStats.forEach((key, val) -> System.out.println(key + ": " + val));
+    System.out.println("----------");
+
+    long resultsReturned = executionStats.getResultsReturned();
+    System.out.println("Results returned: " + resultsReturned);
+
+    // Get the plan summary
+    PlanSummary planSummary = explainMetrics.getPlanSummary();
+    List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
+    System.out.println("----- Indexes Used -----");
+    indexesUsed.forEach(map -> map.forEach((key, val) -> System.out.println(key + ": " + val)));
+
+    System.out.println("----- Aggregation Results -----");
+    AggregationResult result = Iterables.getOnlyElement(results);
+    System.out.println("Count: " + result.getLong("countVal"));
+  }
+}
+// [END datastore_query_explain_analyze_aggregation]
diff --git a/versions.txt b/versions.txt
index 95b465a2..3d01cfb1 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,9 +1,9 @@
 # Format:
 # module:released-version:current-version
 
-google-cloud-datastore:2.18.5:2.18.6-SNAPSHOT
-google-cloud-datastore-bom:2.18.5:2.18.6-SNAPSHOT
-proto-google-cloud-datastore-v1:0.109.5:0.109.6-SNAPSHOT
-datastore-v1-proto-client:2.18.5:2.18.6-SNAPSHOT
-proto-google-cloud-datastore-admin-v1:2.18.5:2.18.6-SNAPSHOT
-grpc-google-cloud-datastore-admin-v1:2.18.5:2.18.6-SNAPSHOT
+google-cloud-datastore:2.19.1:2.19.2-SNAPSHOT
+google-cloud-datastore-bom:2.19.1:2.19.2-SNAPSHOT
+proto-google-cloud-datastore-v1:0.110.1:0.110.2-SNAPSHOT
+datastore-v1-proto-client:2.19.1:2.19.2-SNAPSHOT
+proto-google-cloud-datastore-admin-v1:2.19.1:2.19.2-SNAPSHOT
+grpc-google-cloud-datastore-admin-v1:2.19.1:2.19.2-SNAPSHOT


Test patch:
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/AggregationQueryExecutorTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/AggregationQueryExecutorTest.java
index f9f23261..46752ba8 100644
--- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/AggregationQueryExecutorTest.java
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/AggregationQueryExecutorTest.java
@@ -88,7 +88,7 @@ public class AggregationQueryExecutorTest {
 
     replay(mockRpc);
 
-    AggregationResults aggregationResults = queryExecutor.execute(aggregationQuery);
+    AggregationResults aggregationResults = queryExecutor.execute(aggregationQuery, null);
 
     verify(mockRpc);
     assertThat(aggregationResults)
@@ -101,7 +101,8 @@ public class AggregationQueryExecutorTest {
                     new AggregationResult(
                         ImmutableMap.of(
                             "count", LongValue.of(509), "property_2", LongValue.of(100)))),
-                Timestamp.fromProto(runAggregationQueryResponse.getBatch().getReadTime())));
+                Timestamp.fromProto(runAggregationQueryResponse.getBatch().getReadTime()),
+                null));
   }
 
   @Test
@@ -127,7 +128,7 @@ public class AggregationQueryExecutorTest {
     replay(mockRpc);
 
     AggregationResults aggregationResults =
-        queryExecutor.execute(aggregationQuery, eventualConsistency());
+        queryExecutor.execute(aggregationQuery, null, eventualConsistency());
 
     verify(mockRpc);
     assertThat(aggregationResults)
@@ -140,7 +141,8 @@ public class AggregationQueryExecutorTest {
                     new AggregationResult(
                         ImmutableMap.of(
                             "count", LongValue.of(509), "property_2", LongValue.of(100)))),
-                Timestamp.fromProto(runAggregationQueryResponse.getBatch().getReadTime())));
+                Timestamp.fromProto(runAggregationQueryResponse.getBatch().getReadTime()),
+                null));
   }
 
   private RunAggregationQueryResponse placeholderAggregationQueryResponse() {
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparerTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparerTest.java
index 0f22828d..4aec8f7b 100644
--- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparerTest.java
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparerTest.java
@@ -40,6 +40,7 @@ import com.google.cloud.datastore.Query;
 import com.google.cloud.datastore.ReadOption;
 import com.google.cloud.datastore.ReadOption.QueryConfig;
 import com.google.common.collect.ImmutableMap;
+import com.google.datastore.v1.ExplainOptions;
 import com.google.datastore.v1.RunAggregationQueryRequest;
 import java.util.HashMap;
 import org.junit.Test;
@@ -91,13 +92,14 @@ public class AggregationQueryRequestProtoPreparerTest {
   @Test
   public void shouldPrepareAggregationQueryRequestWithGivenStructuredQuery() {
     RunAggregationQueryRequest runAggregationQueryRequest =
-        protoPreparer.prepare(QueryConfig.create(AGGREGATION_OVER_STRUCTURED_QUERY));
+        protoPreparer.prepare(QueryConfig.create(AGGREGATION_OVER_STRUCTURED_QUERY, null));
 
     assertThat(runAggregationQueryRequest.getProjectId()).isEqualTo(PROJECT_ID);
     assertThat(runAggregationQueryRequest.getDatabaseId()).isEqualTo(DATABASE_ID);
 
     assertThat(runAggregationQueryRequest.getPartitionId().getProjectId()).isEqualTo(PROJECT_ID);
     assertThat(runAggregationQueryRequest.getPartitionId().getNamespaceId()).isEqualTo(NAMESPACE);
+    assertThat(runAggregationQueryRequest.hasExplainOptions()).isFalse();
 
     com.google.datastore.v1.AggregationQuery aggregationQueryProto =
         runAggregationQueryRequest.getAggregationQuery();
@@ -114,7 +116,7 @@ public class AggregationQueryRequestProtoPreparerTest {
   @Test
   public void shouldPrepareAggregationQueryRequestWithGivenGqlQuery() {
     RunAggregationQueryRequest runAggregationQueryRequest =
-        protoPreparer.prepare(QueryConfig.create(AGGREGATION_OVER_GQL_QUERY));
+        protoPreparer.prepare(QueryConfig.create(AGGREGATION_OVER_GQL_QUERY, null));
 
     assertThat(runAggregationQueryRequest.getProjectId()).isEqualTo(PROJECT_ID);
     assertThat(runAggregationQueryRequest.getDatabaseId()).isEqualTo(DATABASE_ID);
@@ -122,6 +124,7 @@ public class AggregationQueryRequestProtoPreparerTest {
     assertThat(runAggregationQueryRequest.getPartitionId().getProjectId()).isEqualTo(PROJECT_ID);
     assertThat(runAggregationQueryRequest.getPartitionId().getDatabaseId()).isEqualTo(DATABASE_ID);
     assertThat(runAggregationQueryRequest.getPartitionId().getNamespaceId()).isEqualTo(NAMESPACE);
+    assertThat(runAggregationQueryRequest.hasExplainOptions()).isFalse();
 
     com.google.datastore.v1.GqlQuery gqlQueryProto = runAggregationQueryRequest.getGqlQuery();
 
@@ -172,17 +175,42 @@ public class AggregationQueryRequestProtoPreparerTest {
         Query.newAggregationQueryBuilder().over(COMPLETED_TASK_GQL_QUERY).build();
 
     RunAggregationQueryRequest runAggregationQueryFromStructuredQuery =
-        protoPreparer.prepare(QueryConfig.create(structuredQueryWithoutNamespace));
+        protoPreparer.prepare(QueryConfig.create(structuredQueryWithoutNamespace, null));
     RunAggregationQueryRequest runAggregationQueryFromGqlQuery =
-        protoPreparer.prepare(QueryConfig.create(gqlQueryWithoutNamespace));
+        protoPreparer.prepare(QueryConfig.create(gqlQueryWithoutNamespace, null));
 
     assertThat(runAggregationQueryFromStructuredQuery.getPartitionId().getNamespaceId())
         .isEqualTo(NAMESPACE);
     assertThat(runAggregationQueryFromGqlQuery.getPartitionId().getNamespaceId())
         .isEqualTo(NAMESPACE);
+    assertThat(runAggregationQueryFromStructuredQuery.hasExplainOptions()).isEqualTo(false);
+  }
+
+  @Test
+  public void shouldPrepareAggregationQueryWithDifferentModes() {
+    AggregationQuery structuredQueryWithoutNamespace =
+        Query.newAggregationQueryBuilder()
+            .addAggregation(count().as("total"))
+            .over(COMPLETED_TASK_STRUCTURED_QUERY)
+            .build();
+
+    ExplainOptions explainOptions = ExplainOptions.newBuilder().build();
+    RunAggregationQueryRequest runAggregationQueryFromStructuredQuery =
+        protoPreparer.prepare(QueryConfig.create(structuredQueryWithoutNamespace, explainOptions));
+    assertThat(runAggregationQueryFromStructuredQuery.getPartitionId().getNamespaceId())
+        .isEqualTo(NAMESPACE);
+    assertThat(runAggregationQueryFromStructuredQuery.getExplainOptions())
+        .isEqualTo(explainOptions);
+
+    RunAggregationQueryRequest runAggregationQueryFromStructuredQuery2 =
+        protoPreparer.prepare(QueryConfig.create(structuredQueryWithoutNamespace, explainOptions));
+    assertThat(runAggregationQueryFromStructuredQuery2.getPartitionId().getNamespaceId())
+        .isEqualTo(NAMESPACE);
+    assertThat(runAggregationQueryFromStructuredQuery2.getExplainOptions())
+        .isEqualTo(explainOptions);
   }
 
   private RunAggregationQueryRequest prepareQuery(AggregationQuery query, ReadOption readOption) {
-    return protoPreparer.prepare(QueryConfig.create(query, singletonList(readOption)));
+    return protoPreparer.prepare(QueryConfig.create(query, null, singletonList(readOption)));
   }
 }
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformerTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformerTest.java
index 7ba57223..9263543d 100644
--- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformerTest.java
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/execution/response/AggregationQueryResponseTransformerTest.java
@@ -22,10 +22,15 @@ import static com.google.common.truth.Truth.assertThat;
 import com.google.cloud.Timestamp;
 import com.google.cloud.datastore.AggregationResult;
 import com.google.cloud.datastore.AggregationResults;
+import com.google.cloud.datastore.models.ExplainMetrics;
 import com.google.common.collect.ImmutableMap;
 import com.google.datastore.v1.AggregationResultBatch;
+import com.google.datastore.v1.ExecutionStats;
+import com.google.datastore.v1.PlanSummary;
 import com.google.datastore.v1.RunAggregationQueryResponse;
 import com.google.datastore.v1.Value;
+import com.google.protobuf.Duration;
+import com.google.protobuf.Struct;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.HashMap;
 import java.util.Map;
@@ -76,6 +81,81 @@ public class AggregationQueryResponseTransformerTest {
     assertThat(aggregationResults.get(0)).isEqualTo(new AggregationResult(toDomainValues(result1)));
     assertThat(aggregationResults.get(1)).isEqualTo(new AggregationResult(toDomainValues(result2)));
     assertThat(aggregationResults.getReadTime()).isEqualTo(readTime);
+    assertThat(aggregationResults.getExplainMetrics().isPresent()).isFalse();
+  }
+
+  @Test
+  public void shouldTransformAggregationQueryResponseWithIntValuesWithStats() {
+    Map<String, com.google.datastore.v1.Value> result1 =
+        new HashMap<>(
+            ImmutableMap.of(
+                "count", intValue(209),
+                "property_2", intValue(100)));
+
+    Map<String, com.google.datastore.v1.Value> result2 =
+        new HashMap<>(
+            ImmutableMap.of(
+                "count", intValue(509),
+                "property_2", intValue((100))));
+    Timestamp readTime = Timestamp.now();
+
+    AggregationResultBatch resultBatch =
+        AggregationResultBatch.newBuilder()
+            .addAggregationResults(
+                com.google.datastore.v1.AggregationResult.newBuilder()
+                    .putAllAggregateProperties(result1)
+                    .build())
+            .addAggregationResults(
+                com.google.datastore.v1.AggregationResult.newBuilder()
+                    .putAllAggregateProperties(result2)
+                    .build())
+            .setReadTime(readTime.toProto())
+            .build();
+
+    ExecutionStats executionStats =
+        ExecutionStats.newBuilder()
+            .setDebugStats(
+                Struct.newBuilder()
+                    .putFields(
+                        "field",
+                        com.google.protobuf.Value.newBuilder().setStringValue("val").build())
+                    .build())
+            .setExecutionDuration(Duration.newBuilder().setSeconds(1).build())
+            .setReadOperations(1)
+            .setResultsReturned(2)
+            .build();
+
+    PlanSummary planSummary =
+        PlanSummary.newBuilder()
+            .addIndexesUsed(
+                Struct.newBuilder()
+                    .putFields(
+                        "field2",
+                        com.google.protobuf.Value.newBuilder().setStringValue("val2").build())
+                    .build())
+            .build();
+
+    com.google.datastore.v1.ExplainMetrics explainMetrics =
+        com.google.datastore.v1.ExplainMetrics.newBuilder()
+            .setExecutionStats(executionStats)
+            .setPlanSummary(planSummary)
+            .build();
+
+    RunAggregationQueryResponse runAggregationQueryResponse =
+        RunAggregationQueryResponse.newBuilder()
+            .setBatch(resultBatch)
+            .setExplainMetrics(explainMetrics)
+            .build();
+
+    AggregationResults aggregationResults =
+        responseTransformer.transform(runAggregationQueryResponse);
+
+    assertThat(aggregationResults.size()).isEqualTo(2);
+    assertThat(aggregationResults.get(0)).isEqualTo(new AggregationResult(toDomainValues(result1)));
+    assertThat(aggregationResults.get(1)).isEqualTo(new AggregationResult(toDomainValues(result2)));
+    assertThat(aggregationResults.getReadTime()).isEqualTo(readTime);
+    assertThat(aggregationResults.getExplainMetrics().get())
+        .isEqualTo(new ExplainMetrics(explainMetrics));
   }
 
   @Test
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java
index b8ebd277..77006577 100644
--- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java
@@ -566,7 +566,7 @@ public class ITDatastoreConceptsTest {
   }
 
   @Test
-  public void testInequalityInvalid() {
+  public void testInequalityValid() {
     Query<Entity> query =
         Query.newEntityQueryBuilder()
             .setKind(TASK_CONCEPTS)
@@ -574,7 +574,7 @@ public class ITDatastoreConceptsTest {
                 CompositeFilter.and(
                     PropertyFilter.gt("created", startDate), PropertyFilter.gt("priority", 3)))
             .build();
-    assertInvalidQuery(query);
+    assertValidQuery(query);
   }
 
   @Test
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java
index 7c68ffe3..fded9bc3 100644
--- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java
@@ -31,6 +31,7 @@ import static org.junit.Assert.fail;
 import com.google.cloud.Timestamp;
 import com.google.cloud.Tuple;
 import com.google.cloud.datastore.AggregationQuery;
+import com.google.cloud.datastore.AggregationResults;
 import com.google.cloud.datastore.Batch;
 import com.google.cloud.datastore.BooleanValue;
 import com.google.cloud.datastore.Cursor;
@@ -66,9 +67,15 @@ import com.google.cloud.datastore.StructuredQuery.PropertyFilter;
 import com.google.cloud.datastore.TimestampValue;
 import com.google.cloud.datastore.Transaction;
 import com.google.cloud.datastore.ValueType;
+import com.google.cloud.datastore.models.ExecutionStats;
+import com.google.cloud.datastore.models.ExplainMetrics;
+import com.google.cloud.datastore.models.ExplainOptions;
+import com.google.cloud.datastore.models.PlanSummary;
 import com.google.cloud.datastore.testing.RemoteDatastoreHelper;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Range;
+import com.google.common.truth.Truth;
 import com.google.datastore.v1.TransactionOptions;
 import com.google.datastore.v1.TransactionOptions.ReadOnly;
 import java.util.ArrayList;
@@ -77,6 +84,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -91,6 +99,7 @@ import org.junit.Test;
 import org.junit.rules.Timeout;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.threeten.bp.Duration;
 
 @RunWith(Parameterized.class)
 public class ITDatastoreTest {
@@ -358,6 +367,82 @@ public class ITDatastoreTest {
     assertFalse(results4.hasNext());
   }
 
+  @Test
+  public void testQueryProfile() {
+    Key key = Key.newBuilder(KEY1, KIND2, 2).build();
+    Entity entity3 =
+        Entity.newBuilder(ENTITY1)
+            .setKey(key)
+            .remove("str")
+            .set("name", "Dan")
+            .setNull("null")
+            .set("age", 19)
+            .build();
+    datastore.put(entity3);
+
+    // age == 19 || age == 20
+    CompositeFilter orFilter =
+        CompositeFilter.or(PropertyFilter.eq("age", 19), PropertyFilter.eq("age", 20));
+    StructuredQuery<Entity> simpleOrQuery =
+        Query.newEntityQueryBuilder()
+            .setNamespace(NAMESPACE)
+            .setKind(KIND2)
+            .setFilter(orFilter)
+            .build();
+    QueryResults<Entity> results =
+        datastore.run(simpleOrQuery, ExplainOptions.newBuilder().setAnalyze(true).build());
+    Truth.assertThat(results.hasNext()).isTrue();
+    Truth.assertThat(results.getExplainMetrics().isPresent()).isTrue();
+    assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
+    assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 2, 2, "2");
+
+    QueryResults<Entity> results2 =
+        datastore.run(simpleOrQuery, ExplainOptions.newBuilder().build());
+    Truth.assertThat(results2.hasNext()).isFalse();
+    assertPlanSummary(results2.getExplainMetrics().get().getPlanSummary());
+    Truth.assertThat(results2.getExplainMetrics().get().getExecutionStats().isPresent()).isFalse();
+
+    QueryResults<Entity> results3 = datastore.run(simpleOrQuery);
+    Truth.assertThat(results3.hasNext()).isTrue();
+    Truth.assertThat(results3.getExplainMetrics().isPresent()).isFalse();
+
+    QueryResults<Entity> results4 =
+        datastore.run(simpleOrQuery, ExplainOptions.newBuilder().setAnalyze(false).build());
+    Truth.assertThat(results4.hasNext()).isFalse();
+    assertPlanSummary(results4.getExplainMetrics().get().getPlanSummary());
+    Truth.assertThat(results4.getExplainMetrics().get().getExecutionStats().isPresent()).isFalse();
+
+    AggregationQuery aggregationQuery =
+        Query.newAggregationQueryBuilder().over(simpleOrQuery).addAggregation(count()).build();
+    AggregationResults resultsAggregation =
+        datastore.runAggregation(
+            aggregationQuery, ExplainOptions.newBuilder().setAnalyze(true).build());
+
+    Truth.assertThat(resultsAggregation.size() > 0).isTrue();
+
+    assertPlanSummary(resultsAggregation.getExplainMetrics().get().getPlanSummary());
+    assertExecutionStats(
+        resultsAggregation.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "2");
+
+    AggregationQuery aggregationQuery2 =
+        Query.newAggregationQueryBuilder().over(simpleOrQuery).addAggregation(count()).build();
+    AggregationResults resultsAggregation2 =
+        datastore.runAggregation(aggregationQuery2, ExplainOptions.newBuilder().build());
+
+    Truth.assertThat(resultsAggregation2.size() > 0).isFalse();
+
+    assertPlanSummary(resultsAggregation2.getExplainMetrics().get().getPlanSummary());
+    Truth.assertThat(resultsAggregation2.getExplainMetrics().get().getExecutionStats().isPresent())
+        .isFalse();
+
+    AggregationQuery aggregationQuery3 =
+        Query.newAggregationQueryBuilder().over(simpleOrQuery).addAggregation(count()).build();
+    AggregationResults resultsAggregation3 = datastore.runAggregation(aggregationQuery3);
+
+    Truth.assertThat(resultsAggregation3.size() > 0).isTrue();
+    Truth.assertThat(resultsAggregation3.getExplainMetrics().isPresent()).isFalse();
+  }
+
   @Test
   public void testNewTransactionCommit() {
     Transaction transaction = datastore.newTransaction();
@@ -378,14 +463,14 @@ public class ITDatastoreTest {
       transaction.commit();
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals("FAILED_PRECONDITION", expected.getReason());
+      assertDatastoreException(expected, "FAILED_PRECONDITION", 0);
     }
 
     try {
       transaction.rollback();
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals("FAILED_PRECONDITION", expected.getReason());
+      assertDatastoreException(expected, "FAILED_PRECONDITION", 0);
     }
   }
 
@@ -468,6 +553,100 @@ public class ITDatastoreTest {
     assertThat(onlyOneTransactionIsSuccessful).isTrue();
   }
 
+  @Test
+  public void testTransactionExplainOptionsAnalyze() {
+    StructuredQuery<Entity> query =
+        Query.newEntityQueryBuilder()
+            .setKind(KIND2)
+            .setFilter(PropertyFilter.hasAncestor(KEY2))
+            .setNamespace(NAMESPACE)
+            .build();
+    Transaction baseTransaction = datastore.newTransaction();
+    QueryResults<Entity> baseResults =
+        baseTransaction.run(query, ExplainOptions.newBuilder().setAnalyze(true).build());
+    assertTrue(baseResults.hasNext());
+    assertEquals(ENTITY2, baseResults.next());
+    assertFalse(baseResults.hasNext());
+
+    ExplainMetrics explainMetrics = baseResults.getExplainMetrics().get();
+    assertPlanSummary(explainMetrics.getPlanSummary());
+    assertExecutionStats(explainMetrics.getExecutionStats().get(), 1, 1, "1");
+
+    baseTransaction.add(ENTITY3);
+    baseTransaction.commit();
+    assertEquals(ENTITY3, datastore.get(KEY3));
+
+    AggregationQuery aggregationQuery =
+        Query.newAggregationQueryBuilder().addAggregation(count()).over(query).build();
+
+    Transaction aggregationTransaction = datastore.newTransaction();
+    AggregationResults results =
+        aggregationTransaction.runAggregation(
+            aggregationQuery, ExplainOptions.newBuilder().setAnalyze(true).build());
+    assertTrue(results.size() > 0);
+
+    assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
+    assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "1");
+    aggregationTransaction.commit();
+  }
+
+  @Test
+  public void testTransactionExplainOptions() {
+    StructuredQuery<Entity> query =
+        Query.newEntityQueryBuilder()
+            .setKind(KIND2)
+            .setFilter(PropertyFilter.hasAncestor(KEY2))
+            .setNamespace(NAMESPACE)
+            .build();
+    Transaction baseTransaction = datastore.newTransaction();
+    QueryResults<Entity> baseResults =
+        baseTransaction.run(query, ExplainOptions.newBuilder().build());
+    assertFalse(baseResults.hasNext());
+
+    ExplainMetrics explainMetrics = baseResults.getExplainMetrics().get();
+    assertPlanSummary(explainMetrics.getPlanSummary());
+    Truth.assertThat(explainMetrics.getExecutionStats().isPresent()).isFalse();
+
+    AggregationQuery aggregationQuery =
+        Query.newAggregationQueryBuilder().addAggregation(count()).over(query).build();
+
+    Transaction aggregationTransaction = datastore.newTransaction();
+    AggregationResults results =
+        aggregationTransaction.runAggregation(
+            aggregationQuery, ExplainOptions.newBuilder().build());
+    assertFalse(results.size() > 0);
+
+    assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
+    assertThat(results.getExplainMetrics().get().getExecutionStats().isPresent()).isFalse();
+  }
+
+  private void assertPlanSummary(PlanSummary planSummary) {
+    List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
+    indexesUsed.forEach(
+        each -> Truth.assertThat(each.keySet()).containsAtLeast("properties", "query_scope"));
+  }
+
+  private void assertExecutionStats(
+      ExecutionStats executionStats,
+      long expectedReadOps,
+      long expectedResultsReturned,
+      String expectedIndexEntriesScanned) {
+    Map<String, Object> debugStats = executionStats.getDebugStats();
+    Truth.assertThat(debugStats.keySet())
+        .containsAtLeast("billing_details", "documents_scanned", "index_entries_scanned");
+    Truth.assertThat(debugStats.get("index_entries_scanned"))
+        .isEqualTo(expectedIndexEntriesScanned);
+
+    Duration executionDuration = executionStats.getExecutionDuration();
+    Truth.assertThat(executionDuration).isIn(Range.greaterThan(Duration.ofMillis(0)));
+
+    long readOperations = executionStats.getReadOperations();
+    Truth.assertThat(readOperations).isEqualTo(expectedReadOps);
+
+    long resultsReturned = executionStats.getResultsReturned();
+    Truth.assertThat(resultsReturned).isEqualTo(expectedResultsReturned);
+  }
+
   @Test
   public void testNewTransactionRollback() {
     Transaction transaction = datastore.newTransaction();
@@ -487,7 +666,7 @@ public class ITDatastoreTest {
       transaction.commit();
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals("FAILED_PRECONDITION", expected.getReason());
+      assertDatastoreException(expected, "FAILED_PRECONDITION", 0);
     }
 
     List<Entity> list = datastore.fetch(KEY1, KEY2, KEY3);
@@ -539,7 +718,7 @@ public class ITDatastoreTest {
       batch.submit();
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals("FAILED_PRECONDITION", expected.getReason());
+      assertDatastoreException(expected, "FAILED_PRECONDITION", 0);
     }
 
     batch = datastore.newBatch();
@@ -1251,7 +1430,7 @@ public class ITDatastoreTest {
       entity3.getString("str");
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      // expected - no such property
+      assertDatastoreException(expected, "FAILED_PRECONDITION", 0);
     }
     assertFalse(result.hasNext());
     datastore.delete(ENTITY3.getKey());
@@ -1268,7 +1447,7 @@ public class ITDatastoreTest {
       datastore.add(ENTITY1);
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      // expected;
+      assertDatastoreException(expected, "ALREADY_EXISTS", 6);
     }
 
     List<Entity> entities = datastore.add(ENTITY3, PARTIAL_ENTITY1, PARTIAL_ENTITY2);
@@ -1296,7 +1475,7 @@ public class ITDatastoreTest {
       datastore.update(ENTITY3);
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      // expected;
+      assertDatastoreException(expected, "NOT_FOUND", 5);
     }
     datastore.add(ENTITY3);
     assertEquals(ENTITY3, datastore.get(ENTITY3.getKey()));
@@ -1387,7 +1566,7 @@ public class ITDatastoreTest {
       datastore.runInTransaction(callable2);
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals(4, ((DatastoreException) expected.getCause()).getCode());
+      assertDatastoreException((DatastoreException) expected.getCause(), "DEADLINE_EXCEEDED", 4);
     }
   }
 
@@ -1441,7 +1620,7 @@ public class ITDatastoreTest {
       datastore.runInTransaction(callable2, readOnlyOptions);
       fail("Expecting a failure");
     } catch (DatastoreException expected) {
-      assertEquals(3, ((DatastoreException) expected.getCause()).getCode());
+      assertDatastoreException((DatastoreException) expected.getCause(), "INVALID_ARGUMENT", 3);
     }
   }
 
@@ -1646,12 +1825,21 @@ public class ITDatastoreTest {
           getOnlyElement(datastore.runAggregation(countAggregationQuery)).getLong("total_count");
       assertThat(latestCount).isEqualTo(3L);
 
-      Long oldCount =
-          getOnlyElement(datastore.runAggregation(countAggregationQuery, ReadOption.readTime(now)))
-              .getLong("total_count");
+      ExplainOptions explainOptions = ExplainOptions.newBuilder().setAnalyze(true).build();
+      AggregationResults results =
+          datastore.runAggregation(countAggregationQuery, explainOptions, ReadOption.readTime(now));
+      Long oldCount = getOnlyElement(results).getLong("total_count");
       assertThat(oldCount).isEqualTo(2L);
+      assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
+      assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "2");
     } finally {
       datastore.delete(entity1.getKey(), entity2.getKey(), entity3.getKey());
     }
   }
+
+  private void assertDatastoreException(
+      DatastoreException expected, String reason, int statusCode) {
+    assertEquals(reason, expected.getReason());
+    assertEquals(statusCode, expected.getCode());
+  }
 }
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java
new file mode 100644
index 00000000..4706e3b8
--- /dev/null
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2024 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
+ *
+ *       http://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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.cloud.Structs;
+import com.google.common.testing.EqualsTester;
+import com.google.common.truth.Truth;
+import com.google.protobuf.Duration;
+import com.google.protobuf.Struct;
+import com.google.protobuf.Value;
+import org.junit.Test;
+
+public class ExecutionStatsTest {
+  private final Struct struct =
+      Struct.newBuilder()
+          .putFields("key", Value.newBuilder().setStringValue("val").build())
+          .build();
+  private final Duration duration = Duration.newBuilder().setSeconds(23).build();
+  private final com.google.datastore.v1.ExecutionStats proto =
+      com.google.datastore.v1.ExecutionStats.newBuilder()
+          .setDebugStats(struct)
+          .setExecutionDuration(duration)
+          .setReadOperations(2)
+          .setResultsReturned(3)
+          .build();
+  ExecutionStats executionStats = new ExecutionStats(proto);
+
+  @Test
+  public void testModel() {
+    Truth.assertThat(executionStats.getDebugStats()).isEqualTo(Structs.asMap(struct));
+    Truth.assertThat(executionStats.getExecutionDuration())
+        .isEqualTo(org.threeten.bp.Duration.ofNanos(duration.getNanos()));
+    Truth.assertThat(executionStats.getReadOperations()).isEqualTo(2);
+    Truth.assertThat(executionStats.getResultsReturned()).isEqualTo(3);
+  }
+
+  @Test
+  public void testEqualsAndHashcode() {
+    com.google.datastore.v1.ExecutionStats proto2 =
+        com.google.datastore.v1.ExecutionStats.newBuilder()
+            .setDebugStats(struct)
+            .setExecutionDuration(duration)
+            .setReadOperations(6)
+            .setResultsReturned(7)
+            .build();
+
+    ExecutionStats executionStats1 = new ExecutionStats(proto);
+    ExecutionStats executionStats2 = new ExecutionStats(proto2);
+    ExecutionStats executionStats3 = new ExecutionStats(proto2);
+
+    Truth.assertThat(executionStats1).isNotEqualTo(executionStats2);
+    Truth.assertThat(executionStats2).isEqualTo(executionStats3);
+
+    EqualsTester equalsTester = new EqualsTester();
+    equalsTester.addEqualityGroup(executionStats1, executionStats1).testEquals();
+
+    Truth.assertThat(executionStats1.hashCode()).isNotEqualTo(executionStats2.hashCode());
+    Truth.assertThat(executionStats2.hashCode()).isEqualTo(executionStats3.hashCode());
+    Truth.assertThat(executionStats1.hashCode()).isEqualTo(executionStats1.hashCode());
+  }
+}
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExplainOptionsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExplainOptionsTest.java
new file mode 100644
index 00000000..f8fb86ab
--- /dev/null
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExplainOptionsTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2024 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
+ *
+ *       http://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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.common.testing.EqualsTester;
+import com.google.common.truth.Truth;
+import org.junit.Test;
+
+public class ExplainOptionsTest {
+  @Test
+  public void testModel() {
+    com.google.datastore.v1.ExplainOptions builtProto =
+        com.google.datastore.v1.ExplainOptions.newBuilder().setAnalyze(true).build();
+
+    com.google.datastore.v1.ExplainOptions defaultProto =
+        com.google.datastore.v1.ExplainOptions.newBuilder().build();
+
+    ExplainOptions explainOptionsAnalyzeTrue = ExplainOptions.newBuilder().setAnalyze(true).build();
+    ExplainOptions explainOptionsAnalyzeFalse =
+        ExplainOptions.newBuilder().setAnalyze(false).build();
+    ExplainOptions explainOptionsDefault = ExplainOptions.newBuilder().build();
+
+    Truth.assertThat(explainOptionsAnalyzeTrue.shouldAnalyze()).isTrue();
+    Truth.assertThat(explainOptionsAnalyzeTrue.toPb()).isEqualTo(builtProto);
+
+    Truth.assertThat(explainOptionsAnalyzeFalse.shouldAnalyze()).isFalse();
+    Truth.assertThat(explainOptionsAnalyzeFalse.toPb()).isEqualTo(defaultProto);
+
+    Truth.assertThat(explainOptionsDefault.shouldAnalyze()).isFalse();
+    Truth.assertThat(explainOptionsDefault.toPb()).isNotEqualTo(builtProto);
+    Truth.assertThat(explainOptionsDefault.toPb()).isEqualTo(defaultProto);
+    Truth.assertThat(explainOptionsDefault).isEqualTo(explainOptionsAnalyzeFalse);
+  }
+
+  @Test
+  public void testEqualsAndHashcode() {
+    ExplainOptions explainOptions = ExplainOptions.newBuilder().build();
+    ExplainOptions explainOptions2 = ExplainOptions.newBuilder().setAnalyze(true).build();
+
+    Truth.assertThat(explainOptions).isNotEqualTo(explainOptions2);
+    EqualsTester equalsTester = new EqualsTester();
+    equalsTester.addEqualityGroup(explainOptions, explainOptions).testEquals();
+
+    Truth.assertThat(explainOptions.hashCode()).isNotEqualTo(explainOptions2.hashCode());
+    Truth.assertThat(explainOptions.hashCode()).isEqualTo(explainOptions.hashCode());
+  }
+}
diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/PlanSummaryTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/PlanSummaryTest.java
new file mode 100644
index 00000000..fe8c0f0d
--- /dev/null
+++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/PlanSummaryTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2024 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
+ *
+ *       http://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.
+ */
+package com.google.cloud.datastore.models;
+
+import com.google.cloud.Structs;
+import com.google.common.collect.Lists;
+import com.google.common.testing.EqualsTester;
+import com.google.common.truth.Truth;
+import com.google.protobuf.Struct;
+import com.google.protobuf.Value;
+import org.junit.Test;
+
+public class PlanSummaryTest {
+  private final Struct struct1 =
+      Struct.newBuilder()
+          .putFields("key", Value.newBuilder().setStringValue("val").build())
+          .build();
+  private final Struct struct2 =
+      Struct.newBuilder()
+          .putFields("key2", Value.newBuilder().setStringValue("val2").build())
+          .putFields("key3", Value.newBuilder().setStringValue("val3").build())
+          .build();
+  private final com.google.datastore.v1.PlanSummary proto =
+      com.google.datastore.v1.PlanSummary.newBuilder()
+          .addIndexesUsed(struct1)
+          .addIndexesUsed(struct2)
+          .build();
+  private final PlanSummary planSummary = new PlanSummary(proto);
+
+  @Test
+  public void testModel() {
+    Truth.assertThat(planSummary.getIndexesUsed())
+        .isEqualTo(Lists.newArrayList(Structs.asMap(struct1), Structs.asMap(struct2)));
+    Truth.assertThat(planSummary.getIndexesUsed().get(0).get("key")).isEqualTo("val");
+  }
+
+  @Test
+  public void testEqualsAndHashcode() {
+    com.google.datastore.v1.PlanSummary proto2 =
+        com.google.datastore.v1.PlanSummary.newBuilder().addIndexesUsed(struct1).build();
+    PlanSummary planSummary2 = new PlanSummary(proto2);
+    EqualsTester equalsTester = new EqualsTester();
+    equalsTester.addEqualityGroup(planSummary, planSummary).testEquals();
+
+    Truth.assertThat(planSummary).isNotEqualTo(planSummary2);
+
+    Truth.assertThat(planSummary.hashCode()).isEqualTo(planSummary.hashCode());
+    Truth.assertThat(planSummary.hashCode()).isNotEqualTo(planSummary2.hashCode());
+  }
+}
diff --git a/samples/snippets/src/test/java/com/example/datastore/AggregationQuerySampleTestIT.java b/samples/snippets/src/test/java/com/example/datastore/aggregation/AggregationQuerySampleTestIT.java
similarity index 81%
rename from samples/snippets/src/test/java/com/example/datastore/AggregationQuerySampleTestIT.java
rename to samples/snippets/src/test/java/com/example/datastore/aggregation/AggregationQuerySampleTestIT.java
index ab709f57..65a5ef3f 100644
--- a/samples/snippets/src/test/java/com/example/datastore/AggregationQuerySampleTestIT.java
+++ b/samples/snippets/src/test/java/com/example/datastore/aggregation/AggregationQuerySampleTestIT.java
@@ -14,27 +14,10 @@
  * limitations under the License.
  */
 
-package com.example.datastore;
+package com.example.datastore.aggregation;
 
 import static org.junit.Assert.assertThrows;
 
-import com.example.datastore.aggregation.AvgAggregationOnKind;
-import com.example.datastore.aggregation.AvgAggregationWithLimit;
-import com.example.datastore.aggregation.AvgAggregationWithOrderBy;
-import com.example.datastore.aggregation.AvgAggregationWithPropertyFilter;
-import com.example.datastore.aggregation.CountAggregationInTransaction;
-import com.example.datastore.aggregation.CountAggregationOnKind;
-import com.example.datastore.aggregation.CountAggregationWithGqlQuery;
-import com.example.datastore.aggregation.CountAggregationWithLimit;
-import com.example.datastore.aggregation.CountAggregationWithOrderBy;
-import com.example.datastore.aggregation.CountAggregationWithPropertyFilter;
-import com.example.datastore.aggregation.CountAggregationWithStaleRead;
-import com.example.datastore.aggregation.MultipleAggregationsInGqlQuery;
-import com.example.datastore.aggregation.MultipleAggregationsInStructuredQuery;
-import com.example.datastore.aggregation.SumAggregationOnKind;
-import com.example.datastore.aggregation.SumAggregationWithLimit;
-import com.example.datastore.aggregation.SumAggregationWithOrderBy;
-import com.example.datastore.aggregation.SumAggregationWithPropertyFilter;
 import com.google.cloud.datastore.Datastore;
 import com.google.cloud.datastore.DatastoreOptions;
 import com.google.cloud.datastore.Key;
diff --git a/samples/snippets/src/test/java/com/example/datastore/OrFilterQuerySampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/OrFilterQuerySampleIT.java
similarity index 96%
rename from samples/snippets/src/test/java/com/example/datastore/OrFilterQuerySampleIT.java
rename to samples/snippets/src/test/java/com/example/datastore/filters/OrFilterQuerySampleIT.java
index 7e6cc8fa..a1b84cdf 100644
--- a/samples/snippets/src/test/java/com/example/datastore/OrFilterQuerySampleIT.java
+++ b/samples/snippets/src/test/java/com/example/datastore/filters/OrFilterQuerySampleIT.java
@@ -14,9 +14,8 @@
  * limitations under the License.
  */
 
-package com.example.datastore;
+package com.example.datastore.filters;
 
-import com.example.datastore.filters.OrFilterQuery;
 import com.google.cloud.datastore.Datastore;
 import com.google.cloud.datastore.DatastoreOptions;
 import com.google.cloud.datastore.Entity;
diff --git a/samples/snippets/src/test/java/com/example/datastore/queryprofile/QueryProfileSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/queryprofile/QueryProfileSampleIT.java
new file mode 100644
index 00000000..6003b4a0
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/datastore/queryprofile/QueryProfileSampleIT.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2024 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
+ *
+ * http://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.
+ */
+
+package com.example.datastore.queryprofile;
+
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Key;
+import com.rule.SystemsOutRule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+@SuppressWarnings("checkstyle:abbreviationaswordinname")
+public class QueryProfileSampleIT {
+
+  private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
+  private final String fieldName = "description";
+
+  private Key taskKey1;
+  private Key taskKey2;
+
+  @Rule public final SystemsOutRule systemsOutRule = new SystemsOutRule();
+
+  @Before
+  public void setUp() {
+    taskKey1 = datastore.newKeyFactory().setKind("Task").newKey("sampleTask");
+    Entity task1 = Entity.newBuilder(taskKey1).set(fieldName, "Buy milk").build();
+
+    taskKey2 = datastore.newKeyFactory().setKind("Task").newKey("sampleTask2");
+    Entity task2 = Entity.newBuilder(taskKey2).set(fieldName, "Feed cats").build();
+
+    datastore.put(task1);
+    datastore.put(task2);
+  }
+
+  @After
+  public void tearDown() {
+    datastore.delete(taskKey1);
+    datastore.delete(taskKey2);
+  }
+
+  @Test
+  public void testQueryProfileExplain() throws Exception {
+    // Act
+    QueryProfileExplain.invoke();
+
+    // Assert
+    systemsOutRule.assertContains("query_scope: Collection group");
+    systemsOutRule.assertContains("properties: (__name__ ASC)");
+  }
+
+  @Test
+  public void testQueryProfileExplainAggregation() throws Exception {
+    // Act
+    QueryProfileExplainAggregation.invoke();
+
+    // Assert
+    systemsOutRule.assertContains("query_scope: Collection group");
+    systemsOutRule.assertContains("properties: (__name__ ASC)");
+  }
+
+  @Test
+  public void testQueryProfileExplainAnalyze() throws Exception {
+    // Act
+    QueryProfileExplainAnalyze.invoke();
+
+    // Assert
+    systemsOutRule.assertContains("documents_scanned:");
+    systemsOutRule.assertContains("index_entries_scanned:");
+    systemsOutRule.assertContains("query_scope: Collection group");
+    systemsOutRule.assertContains("Entity: Entity{key=");
+  }
+
+  @Test
+  public void testQueryProfileExplainAnalyzeAggregation() throws Exception {
+    // Act
+    QueryProfileExplainAnalyzeAggregation.invoke();
+
+    // Assert
+    systemsOutRule.assertContains("index_entries_scanned:");
+    systemsOutRule.assertContains("documents_scanned:");
+    systemsOutRule.assertContains("query_scope: Collection group");
+    systemsOutRule.assertContains("Count: 2");
+  }
+}
diff --git a/samples/snippets/src/test/java/com/rule/SystemsOutRule.java b/samples/snippets/src/test/java/com/rule/SystemsOutRule.java
index 9cdb2744..829fd8a5 100644
--- a/samples/snippets/src/test/java/com/rule/SystemsOutRule.java
+++ b/samples/snippets/src/test/java/com/rule/SystemsOutRule.java
@@ -48,6 +48,6 @@ public class SystemsOutRule implements TestRule {
   }
 
   public void assertContains(String content) {
-    assertThat(currentOut.toString()).contains(content);
+    assertThat(currentOut.toString().toLowerCase()).contains(content.toLowerCase());
   }
 }
diff --git a/samples/snippets/src/test/resources/index.yaml b/samples/snippets/src/test/resources/index.yaml
index 50ab1ca0..8652a0ee 100644
--- a/samples/snippets/src/test/resources/index.yaml
+++ b/samples/snippets/src/test/resources/index.yaml
@@ -12,10 +12,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# one time index creation is required to run AggregationQuerySampleTestIT
+# one time index creation is required to run AggregationQuerySampleTestIT and ConceptsTest
 # see https://cloud.google.com/sdk/gcloud/reference/datastore/indexes/create for more details
 indexes:
 - kind: Sales
   properties:
   - name: customerId
   - name: amount
+- kind: Task
+  properties:
+  - name: tag
+  - name: tag