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;
         }
 

Reply via email to