This is an automated email from the ASF dual-hosted git repository.
curth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new bf31b1fc0 feat(csharp/src/Drivers/BigQuery): add support for
configurable query timeouts (#2043)
bf31b1fc0 is described below
commit bf31b1fc008ffaea010cd539490e6329b52d9845
Author: davidhcoe <[email protected]>
AuthorDate: Tue Jul 30 21:37:12 2024 -0400
feat(csharp/src/Drivers/BigQuery): add support for configurable query
timeouts (#2043)
Adds a new option to support specifying the timeout value for a query
---------
Co-authored-by: David Coe <[email protected]>
---
csharp/src/Drivers/BigQuery/BigQueryConnection.cs | 26 +++++++++-------------
csharp/src/Drivers/BigQuery/BigQueryParameters.cs | 1 +
csharp/src/Drivers/BigQuery/BigQueryStatement.cs | 16 ++++++++++++-
.../Drivers/BigQuery/BigQueryTestConfiguration.cs | 3 +++
.../test/Drivers/BigQuery/BigQueryTestingUtils.cs | 5 +++++
5 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/csharp/src/Drivers/BigQuery/BigQueryConnection.cs
b/csharp/src/Drivers/BigQuery/BigQueryConnection.cs
index 629ac5d0c..acba314eb 100644
--- a/csharp/src/Drivers/BigQuery/BigQueryConnection.cs
+++ b/csharp/src/Drivers/BigQuery/BigQueryConnection.cs
@@ -997,23 +997,19 @@ namespace Apache.Arrow.Adbc.Drivers.BigQuery
{
Dictionary<string, string> options = new Dictionary<string,
string>();
- foreach (KeyValuePair<string, string> keyValuePair in
this.properties)
+ string[] statementOptions = new string[] {
+ BigQueryParameters.AllowLargeResults,
+ BigQueryParameters.UseLegacySQL,
+ BigQueryParameters.LargeDecimalsAsString,
+ BigQueryParameters.LargeResultsDestinationTable,
+ BigQueryParameters.GetQueryResultsOptionsTimeoutMinutes
+ };
+
+ foreach (string key in statementOptions)
{
- if (keyValuePair.Key == BigQueryParameters.AllowLargeResults)
- {
- options[keyValuePair.Key] = keyValuePair.Value;
- }
- if (keyValuePair.Key == BigQueryParameters.UseLegacySQL)
- {
- options[keyValuePair.Key] = keyValuePair.Value;
- }
- if (keyValuePair.Key ==
BigQueryParameters.LargeDecimalsAsString)
- {
- options[keyValuePair.Key] = keyValuePair.Value;
- }
- if (keyValuePair.Key ==
BigQueryParameters.LargeResultsDestinationTable)
+ if (properties.TryGetValue(key, out string? value))
{
- options[keyValuePair.Key] = keyValuePair.Value;
+ options[key] = value;
}
}
diff --git a/csharp/src/Drivers/BigQuery/BigQueryParameters.cs
b/csharp/src/Drivers/BigQuery/BigQueryParameters.cs
index 0f8129101..3f9aafb20 100644
--- a/csharp/src/Drivers/BigQuery/BigQueryParameters.cs
+++ b/csharp/src/Drivers/BigQuery/BigQueryParameters.cs
@@ -34,6 +34,7 @@ namespace Apache.Arrow.Adbc.Drivers.BigQuery
public const string LargeDecimalsAsString =
"adbc.bigquery.large_decimals_as_string";
public const string Scopes = "adbc.bigquery.scopes";
public const string IncludeConstraintsWithGetObjects =
"adbc.bigquery.include_constraints_getobjects";
+ public const string GetQueryResultsOptionsTimeoutMinutes =
"adbc.bigquery.get_query_results_options.timeout";
}
/// <summary>
diff --git a/csharp/src/Drivers/BigQuery/BigQueryStatement.cs
b/csharp/src/Drivers/BigQuery/BigQueryStatement.cs
index 297becff6..fbc2e3c2d 100644
--- a/csharp/src/Drivers/BigQuery/BigQueryStatement.cs
+++ b/csharp/src/Drivers/BigQuery/BigQueryStatement.cs
@@ -55,7 +55,21 @@ namespace Apache.Arrow.Adbc.Drivers.BigQuery
{
QueryOptions? queryOptions = ValidateOptions();
BigQueryJob job = this.client.CreateQueryJob(SqlQuery, null,
queryOptions);
- BigQueryResults results = job.GetQueryResults();
+
+ GetQueryResultsOptions getQueryResultsOptions = new
GetQueryResultsOptions();
+
+ if
(this.Options?.TryGetValue(BigQueryParameters.GetQueryResultsOptionsTimeoutMinutes,
out string? timeoutMinutes) == true)
+ {
+ if (int.TryParse(timeoutMinutes, out int minutes))
+ {
+ if (minutes >= 0)
+ {
+ getQueryResultsOptions.Timeout =
TimeSpan.FromMinutes(minutes);
+ }
+ }
+ }
+
+ BigQueryResults results =
job.GetQueryResults(getQueryResultsOptions);
BigQueryReadClientBuilder readClientBuilder = new
BigQueryReadClientBuilder();
readClientBuilder.Credential = this.credential;
diff --git a/csharp/test/Drivers/BigQuery/BigQueryTestConfiguration.cs
b/csharp/test/Drivers/BigQuery/BigQueryTestConfiguration.cs
index 20390deb3..a1782910f 100644
--- a/csharp/test/Drivers/BigQuery/BigQueryTestConfiguration.cs
+++ b/csharp/test/Drivers/BigQuery/BigQueryTestConfiguration.cs
@@ -56,5 +56,8 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.BigQuery
[JsonPropertyName("includeTableConstraints")]
public bool IncludeTableConstraints { get; set; }
+
+ [JsonPropertyName("timeoutMinutes")]
+ public int? TimeoutMinutes { get; set; }
}
}
diff --git a/csharp/test/Drivers/BigQuery/BigQueryTestingUtils.cs
b/csharp/test/Drivers/BigQuery/BigQueryTestingUtils.cs
index 654cdea2e..bf80aa256 100644
--- a/csharp/test/Drivers/BigQuery/BigQueryTestingUtils.cs
+++ b/csharp/test/Drivers/BigQuery/BigQueryTestingUtils.cs
@@ -86,6 +86,11 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.BigQuery
parameters.Add(BigQueryParameters.LargeResultsDestinationTable,
testConfiguration.LargeResultsDestinationTable);
}
+ if (testConfiguration.TimeoutMinutes.HasValue)
+ {
+
parameters.Add(BigQueryParameters.GetQueryResultsOptionsTimeoutMinutes,
testConfiguration.TimeoutMinutes.Value.ToString());
+ }
+
return parameters;
}