| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| using System; |
| using System.Collections.Generic; |
| |
| namespace Apache.Arrow.Adbc.Drivers.BigQuery |
| { |
| /// <summary> |
| /// Parameters used for connecting to BigQuery data sources. |
| /// </summary> |
| internal class BigQueryParameters |
| { |
| public const string AccessToken = "adbc.bigquery.access_token"; |
| public const string AllowLargeResults = "adbc.bigquery.allow_large_results"; |
| public const string AudienceUri = "adbc.bigquery.audience_uri"; |
| public const string AuthenticationType = "adbc.bigquery.auth_type"; |
| public const string BillingProjectId = "adbc.bigquery.billing_project_id"; |
| public const string ClientId = "adbc.bigquery.client_id"; |
| public const string ClientSecret = "adbc.bigquery.client_secret"; |
| public const string ClientTimeout = "adbc.bigquery.client.timeout"; |
| public const string EvaluationKind = "adbc.bigquery.multiple_statement.evaluation_kind"; |
| public const string GetQueryResultsOptionsTimeout = "adbc.bigquery.get_query_results_options.timeout"; |
| public const string IncludeConstraintsWithGetObjects = "adbc.bigquery.include_constraints_getobjects"; |
| public const string IncludePublicProjectId = "adbc.bigquery.include_public_project_id"; |
| public const string JsonCredential = "adbc.bigquery.auth_json_credential"; |
| public const string LargeDecimalsAsString = "adbc.bigquery.large_decimals_as_string"; |
| public const string LargeResultsDataset = "adbc.bigquery.large_results_dataset"; |
| public const string DefaultClientLocation = "adbc.bigquery.default_client_location"; |
| public const string LargeResultsDestinationTable = "adbc.bigquery.large_results_destination_table"; |
| public const string MaxFetchConcurrency = "adbc.bigquery.max_fetch_concurrency"; |
| public const string MaximumRetryAttempts = "adbc.bigquery.maximum_retries"; |
| public const string ProjectId = "adbc.bigquery.project_id"; |
| public const string RefreshToken = "adbc.bigquery.refresh_token"; |
| public const string RetryDelayMs = "adbc.bigquery.retry_delay_ms"; |
| public const string Scopes = "adbc.bigquery.scopes"; |
| public const string StatementIndex = "adbc.bigquery.multiple_statement.statement_index"; |
| public const string StatementType = "adbc.bigquery.multiple_statement.statement_type"; |
| public const string UseLegacySQL = "adbc.bigquery.use_legacy_sql"; |
| |
| // these values are safe to log any time |
| private static HashSet<string> safeToLog = new HashSet<string>(StringComparer.OrdinalIgnoreCase) |
| { |
| AllowLargeResults, AuthenticationType, BillingProjectId, ClientId, ClientTimeout, DefaultClientLocation, EvaluationKind, GetQueryResultsOptionsTimeout, |
| EvaluationKind, GetQueryResultsOptionsTimeout, IncludeConstraintsWithGetObjects, |
| IncludePublicProjectId, LargeDecimalsAsString, LargeResultsDataset, LargeResultsDestinationTable, |
| MaxFetchConcurrency, MaximumRetryAttempts, ProjectId, RetryDelayMs, StatementIndex, |
| StatementType, UseLegacySQL |
| }; |
| |
| public static bool IsSafeToLog(string name) |
| { |
| if (safeToLog.Contains(name)) |
| return true; |
| |
| return false; |
| } |
| } |
| |
| /// <summary> |
| /// Constants used for default parameter values. |
| /// </summary> |
| internal class BigQueryConstants |
| { |
| public const string UserAuthenticationType = "user"; |
| public const string EntraIdAuthenticationType = "aad"; |
| public const string ServiceAccountAuthenticationType = "service"; |
| public const string TokenEndpoint = "https://accounts.google.com/o/oauth2/token"; |
| public const string TreatLargeDecimalAsString = "true"; |
| |
| // Entra ID / Azure AD constants |
| public const string EntraGrantType = "urn:ietf:params:oauth:grant-type:token-exchange"; |
| public const string EntraSubjectTokenType = "urn:ietf:params:oauth:token-type:id_token"; |
| public const string EntraRequestedTokenType = "urn:ietf:params:oauth:token-type:access_token"; |
| public const string EntraIdScope = "https://www.googleapis.com/auth/cloud-platform"; |
| public const string EntraStsTokenEndpoint = "https://sts.googleapis.com/v1/token"; |
| |
| // default value per https://pkg.go.dev/cloud.google.com/go/bigquery#section-readme |
| public const string DetectProjectId = "*detect-project-id*"; |
| |
| // matches the pattern for odbc, but for adbc |
| public const string DefaultLargeDatasetId = "_bqadbc_temp_tables"; |
| |
| public const string PublicProjectId = "bigquery-public-data"; |
| |
| // this is what the BigQuery API uses as the default location |
| public const string DefaultClientLocation = "US"; |
| |
| // from https://cloud.google.com/bigquery/docs/locations#locations_and_regions as of Sept 28, 2025 |
| public static IReadOnlyList<string> ValidLocations = new List<string>() |
| { |
| //multi-regions |
| "US", |
| "EU", |
| // Americas |
| "us-east5", |
| "us-south1", |
| "us-central1", |
| "us-west4", |
| "us-west2", |
| "northamerica-south1", |
| "northamerica-northeast1", |
| "us-east4", |
| "us-west1", |
| "us-west3", |
| "southamerica-east1", |
| "southamerica-west1", |
| "us-east1", |
| "northamerica-northeast2", |
| // Asia Pacific |
| "asia-south2", |
| "asia-east2", |
| "asia-southeast2", |
| "australia-southeast2", |
| "asia-south1", |
| "asia-northeast2", |
| "asia-northeast3", |
| "asia-southeast1", |
| "australia-southeast1", |
| "asia-east1", |
| "asia-northeast1", |
| // Europe |
| "europe-west1", |
| "europe-west10", |
| "europe-north1", |
| "europe-west3", |
| "europe-west2", |
| "europe-southwest1", |
| "europe-west8", |
| "europe-west4", |
| "europe-west9", |
| "europe-north2", |
| "europe-west12", |
| "europe-central2", |
| "europe-west6", |
| // Middle East |
| "me-central2", |
| "me-central1", |
| "me-west1", |
| // Africa |
| "africa-south1" |
| }; |
| } |
| } |