From 7de2b36244bcf3462db1598d51efe065b16c90e1 Mon Sep 17 00:00:00 2001 From: Robert Voinescu Date: Wed, 22 Apr 2026 19:13:15 +0000 Subject: [PATCH 1/4] fix(Firestore.IntegrationTests): Increase timeout for index creation. --- .../Google.Cloud.Firestore.IntegrationTests/FirestoreFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/Google.Cloud.Firestore/Google.Cloud.Firestore.IntegrationTests/FirestoreFixture.cs b/apis/Google.Cloud.Firestore/Google.Cloud.Firestore.IntegrationTests/FirestoreFixture.cs index cbc3347edc50..8107d732e9d9 100644 --- a/apis/Google.Cloud.Firestore/Google.Cloud.Firestore.IntegrationTests/FirestoreFixture.cs +++ b/apis/Google.Cloud.Firestore/Google.Cloud.Firestore.IntegrationTests/FirestoreFixture.cs @@ -37,7 +37,7 @@ public class FirestoreFixture : CloudProjectFixtureBase, ICollectionFixture Date: Wed, 22 Apr 2026 19:13:47 +0000 Subject: [PATCH 2/4] fix(DataStore.V1.IntegrationTests): Increase timeout for index creation. --- .../DatastoreFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/Google.Cloud.Datastore.V1/Google.Cloud.Datastore.V1.IntegrationTests/DatastoreFixture.cs b/apis/Google.Cloud.Datastore.V1/Google.Cloud.Datastore.V1.IntegrationTests/DatastoreFixture.cs index 298a0da585ba..769a765eb2b3 100644 --- a/apis/Google.Cloud.Datastore.V1/Google.Cloud.Datastore.V1.IntegrationTests/DatastoreFixture.cs +++ b/apis/Google.Cloud.Datastore.V1/Google.Cloud.Datastore.V1.IntegrationTests/DatastoreFixture.cs @@ -49,7 +49,7 @@ public sealed class DatastoreFixture : CloudProjectFixtureBase, ICollectionFixtu // We don't want to wait *forever* (which would be the behavior of default poll settings) // but we need to have a timeout of more than a minute. private static readonly PollSettings AdminOperationPollSettings = - new PollSettings(expiration: Expiration.FromTimeout(TimeSpan.FromMinutes(5)), delay: TimeSpan.FromSeconds(5)); + new PollSettings(expiration: Expiration.FromTimeout(TimeSpan.FromMinutes(10)), delay: TimeSpan.FromSeconds(5)); public string NamespaceId { get; } public PartitionId PartitionId => new PartitionId { ProjectId = ProjectId, NamespaceId = NamespaceId }; From cfeb511d2da5b8615e7395401d0b5f4c2e531fe1 Mon Sep 17 00:00:00 2001 From: Robert Voinescu Date: Wed, 22 Apr 2026 20:04:44 +0000 Subject: [PATCH 3/4] fix(BigQuery.V2): Default UseInt64Timestamp to true --- .../BigQueryClientImplTest.cs | 10 +++++----- .../BigQueryClientImpl.Queries.cs | 3 ++- .../Google.Cloud.BigQuery.V2/GetQueryResultsOptions.cs | 3 ++- .../Google.Cloud.BigQuery.V2/StatelessQueryOptions.cs | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2.Tests/BigQueryClientImplTest.cs b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2.Tests/BigQueryClientImplTest.cs index 1e2a476e6f17..8fe525029105 100644 --- a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2.Tests/BigQueryClientImplTest.cs +++ b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2.Tests/BigQueryClientImplTest.cs @@ -328,7 +328,7 @@ public void ExecuteStatelessQuery() var service = new FakeBigqueryService(); var client = new BigQueryClientImpl("project", service); var sql = "SELECT * FROM dataset.table"; - var request = new QueryRequest { Query = sql, UseLegacySql = false, MaxResults = 10, Location = "us" }; + var request = new QueryRequest { Query = sql, UseLegacySql = false, MaxResults = 10, Location = "us", FormatOptions = new DataFormatOptions { UseInt64Timestamp = true } }; service.ExpectRequest(service.Jobs.Query(request, "project"), CreateStatelessResponse("value")); var results = client.ExecuteStatelessQuery(sql, parameters: null, queryOptions: new StatelessQueryOptions { MaxResults = 10, Location = "us" }); @@ -341,7 +341,7 @@ public async Task ExecuteStatelessQueryAsync() var service = new FakeBigqueryService(); var client = new BigQueryClientImpl("project", service); var sql = "SELECT * FROM dataset.table"; - var request = new QueryRequest { Query = sql, UseLegacySql = false, MaxResults = 10, Location = "us" }; + var request = new QueryRequest { Query = sql, UseLegacySql = false, MaxResults = 10, Location = "us", FormatOptions = new DataFormatOptions { UseInt64Timestamp = true } }; service.ExpectRequest(service.Jobs.Query(request, "project"), CreateStatelessResponse("value")); var results = await client.ExecuteStatelessQueryAsync(sql, parameters: null, queryOptions: new StatelessQueryOptions { MaxResults = 10, Location = "us" }); @@ -355,7 +355,7 @@ public void ExecuteStatelessQuery_WithParameters() var client = new BigQueryClientImpl("project", service); var sql = "SELECT * FROM dataset.table WHERE col = @val"; var parameters = new[] { new BigQueryParameter("val", BigQueryDbType.String, "foo") }; - var request = new QueryRequest { Query = sql, UseLegacySql = false, ParameterMode = "named", QueryParameters = new[] { parameters[0].ToQueryParameter() } }; + var request = new QueryRequest { Query = sql, UseLegacySql = false, ParameterMode = "named", QueryParameters = new[] { parameters[0].ToQueryParameter() }, FormatOptions = new DataFormatOptions { UseInt64Timestamp = true } }; service.ExpectRequest(service.Jobs.Query(request, "project"), CreateStatelessResponse("foo")); var results = client.ExecuteStatelessQuery(sql, parameters); @@ -394,7 +394,7 @@ public void ExecuteQuery_StatelessOptimization() var queryOptions = new QueryOptions { UseQueryCache = true }; var resultsOptions = new GetQueryResultsOptions { PageSize = 10 }; - var request = new QueryRequest { Query = sql, UseLegacySql = false, UseQueryCache = true, MaxResults = 10 }; + var request = new QueryRequest { Query = sql, UseLegacySql = false, UseQueryCache = true, MaxResults = 10, FormatOptions = new DataFormatOptions { UseInt64Timestamp = true } }; service.ExpectRequest(service.Jobs.Query(request, "project"), CreateStatelessResponse("value")); var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions, resultsOptions: resultsOptions); @@ -412,7 +412,7 @@ public async Task ExecuteQueryAsync_StatelessOptimization() var queryOptions = new QueryOptions { UseQueryCache = true }; var resultsOptions = new GetQueryResultsOptions { PageSize = 10 }; - var request = new QueryRequest { Query = sql, UseLegacySql = false, UseQueryCache = true, MaxResults = 10 }; + var request = new QueryRequest { Query = sql, UseLegacySql = false, UseQueryCache = true, MaxResults = 10, FormatOptions = new DataFormatOptions { UseInt64Timestamp = true } }; service.ExpectRequest(service.Jobs.Query(request, "project"), CreateStatelessResponse("value")); var results = await client.ExecuteQueryAsync(sql, parameters: null, queryOptions: queryOptions, resultsOptions: resultsOptions); diff --git a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/BigQueryClientImpl.Queries.cs b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/BigQueryClientImpl.Queries.cs index d3534e486a1b..d635e43d0542 100644 --- a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/BigQueryClientImpl.Queries.cs +++ b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/BigQueryClientImpl.Queries.cs @@ -240,7 +240,8 @@ private QueryRequest CreateQueryRequest(string sql, IEnumerable p.ToQueryParameter()).ToList(), }; - options?.ModifyRequest(request); + // If no options are provided, we create an empty query options and propagate any defaults to the request + (options ?? new StatelessQueryOptions()).ModifyRequest(request); request.Location ??= DefaultLocation; // If there aren't any parameters, set ParameterMode to null - otherwise legacy SQL queries fail, // even if haven't set any parameters. diff --git a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/GetQueryResultsOptions.cs b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/GetQueryResultsOptions.cs index 6ca0fceb54c2..a2c1dd39f1cf 100644 --- a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/GetQueryResultsOptions.cs +++ b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/GetQueryResultsOptions.cs @@ -95,7 +95,8 @@ private void ModifyRequest(GetQueryResultsRequest request) PageSize = PageSize, PageToken = PageToken, StartIndex = StartIndex, - Timeout = Timeout + Timeout = Timeout, + UseInt64Timestamp = UseInt64Timestamp }; } diff --git a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/StatelessQueryOptions.cs b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/StatelessQueryOptions.cs index 76b882af4242..561e2186e5e7 100644 --- a/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/StatelessQueryOptions.cs +++ b/apis/Google.Cloud.BigQuery.V2/Google.Cloud.BigQuery.V2/StatelessQueryOptions.cs @@ -61,7 +61,7 @@ internal sealed class StatelessQueryOptions /// /// Optional output format adjustments. /// - internal DataFormatOptions FormatOptions { get; set; } + internal DataFormatOptions FormatOptions { get; set; } = new DataFormatOptions {UseInt64Timestamp = true}; /// /// Specifies whether a job is required to be created. From 52ea248684357a050de2f1980961663e6a36eac7 Mon Sep 17 00:00:00 2001 From: Robert Voinescu Date: Wed, 22 Apr 2026 19:09:46 +0000 Subject: [PATCH 4/4] fix(Storage.V1.IntegrationTests): Use seperate bucket for context tests to maintain ReadBucket consistency. --- .../ListObjectsTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListObjectsTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListObjectsTest.cs index de7e864da133..44fb0df7c99e 100644 --- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListObjectsTest.cs +++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListObjectsTest.cs @@ -137,7 +137,7 @@ public void ListObjectsMatchingContextKeyValuePair() }; var destination = new Object { - Bucket = _fixture.ReadBucket, + Bucket = _fixture.SingleVersionBucket, Name = IdGenerator.FromGuid(), Contexts = new Object.ContextsData { Custom = custom } }; @@ -146,7 +146,7 @@ public void ListObjectsMatchingContextKeyValuePair() _fixture.Client.UploadObject(destination, source); string filter = $@"contexts.""{contextKey}""=""{contextValue}"""; var options = new ListObjectsOptions { Filter = filter }; - var objects = _fixture.Client.ListObjects(_fixture.ReadBucket, options: options).ToList(); + var objects = _fixture.Client.ListObjects(_fixture.SingleVersionBucket, options: options).ToList(); var obj = Assert.Single(objects); var fetchedContext = Assert.Single(obj.Contexts.Custom); Assert.Equal(contextKey, fetchedContext.Key);