Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/src/main/sphinx/connector/bigquery.rst
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ the following features:
* :doc:`/sql/drop-table`
* :doc:`/sql/create-schema`
* :doc:`/sql/drop-schema`
* :doc:`/sql/comment`

Table functions
---------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,18 @@ Job create(JobInfo jobInfo)
return bigQuery.create(jobInfo);
}

public void executeUpdate(QueryJobConfiguration job)
{
log.debug("Execute query: %s", job.getQuery());
try {
bigQuery.query(job);
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new BigQueryException(BaseHttpServiceException.UNKNOWN_CODE, format("Failed to run the query [%s]", job.getQuery()), e);
}
}

public TableResult query(String sql, boolean useQueryResultsCache, CreateDisposition createDisposition)
{
log.debug("Execute query: %s", sql);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,13 @@

import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.trino.plugin.bigquery.BigQueryUtil.quote;
import static io.trino.plugin.bigquery.BigQueryUtil.toBigQueryColumnName;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

public class BigQueryFilterQueryBuilder
{
private static final String QUOTE = "`";
private static final String ESCAPED_QUOTE = "``";
private final TupleDomain<ColumnHandle> tupleDomain;

public static Optional<String> buildFilter(TupleDomain<ColumnHandle> tupleDomain)
Expand Down Expand Up @@ -151,9 +150,4 @@ private Optional<String> toPredicate(String columnName, String operator, Object
}
return Optional.of(quote(columnName) + " " + operator + " " + valueAsString.get());
}

private String quote(String name)
{
return QUOTE + name.replace(QUOTE, ESCAPED_QUOTE) + QUOTE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.DatasetInfo;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryParameterValue;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardTableDefinition;
import com.google.cloud.bigquery.Table;
Expand Down Expand Up @@ -94,7 +96,9 @@
import static io.trino.plugin.bigquery.BigQueryTableHandle.getPartitionType;
import static io.trino.plugin.bigquery.BigQueryType.toField;
import static io.trino.plugin.bigquery.BigQueryUtil.isWildcardTable;
import static io.trino.plugin.bigquery.BigQueryUtil.quote;
import static io.trino.spi.StandardErrorCode.NOT_SUPPORTED;
import static java.lang.String.format;
import static java.util.Locale.ENGLISH;
import static java.util.Objects.requireNonNull;
import static java.util.function.Function.identity;
Expand Down Expand Up @@ -502,6 +506,44 @@ public Optional<ConnectorOutputMetadata> finishInsert(ConnectorSession session,
return Optional.empty();
}

@Override
public void setTableComment(ConnectorSession session, ConnectorTableHandle tableHandle, Optional<String> newComment)
{
BigQueryTableHandle table = (BigQueryTableHandle) tableHandle;
BigQueryClient client = bigQueryClientFactory.createBigQueryClient(session);

RemoteTableName remoteTableName = table.asPlainTable().getRemoteTableName();
String sql = format(
"ALTER TABLE %s.%s.%s SET OPTIONS (description = ?)",
quote(remoteTableName.getProjectId()),
quote(remoteTableName.getDatasetName()),
quote(remoteTableName.getTableName()));
client.executeUpdate(QueryJobConfiguration.newBuilder(sql)
.setQuery(sql)
.addPositionalParameter(QueryParameterValue.string(newComment.orElse(null)))
.build());
}

@Override
public void setColumnComment(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle, Optional<String> newComment)
{
BigQueryTableHandle table = (BigQueryTableHandle) tableHandle;
BigQueryColumnHandle column = (BigQueryColumnHandle) columnHandle;
BigQueryClient client = bigQueryClientFactory.createBigQueryClient(session);

RemoteTableName remoteTableName = table.asPlainTable().getRemoteTableName();
String sql = format(
"ALTER TABLE %s.%s.%s ALTER COLUMN %s SET OPTIONS (description = ?)",
quote(remoteTableName.getProjectId()),
quote(remoteTableName.getDatasetName()),
quote(remoteTableName.getTableName()),
column.getName());
client.executeUpdate(QueryJobConfiguration.newBuilder(sql)
.setQuery(sql)
.addPositionalParameter(QueryParameterValue.string(newComment.orElse(null)))
.build());
}

@Override
public Optional<ProjectionApplicationResult<ConnectorTableHandle>> applyProjection(
ConnectorSession session,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@

public final class BigQueryUtil
{
private static final String QUOTE = "`";
private static final String ESCAPED_QUOTE = "``";

private static final Set<String> INTERNAL_ERROR_MESSAGES = ImmutableSet.of(
"HTTP/2 error code: INTERNAL_ERROR",
"Connection closed with unknown cause",
Expand Down Expand Up @@ -73,4 +76,9 @@ public static boolean isWildcardTable(TableDefinition.Type type, String tableNam
{
return type == TABLE && tableName.contains("*");
}

public static String quote(String name)
{
return QUOTE + name.replace(QUOTE, ESCAPED_QUOTE) + QUOTE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior)
case SUPPORTS_ADD_COLUMN:
case SUPPORTS_DROP_COLUMN:
case SUPPORTS_RENAME_COLUMN:
case SUPPORTS_COMMENT_ON_TABLE:
case SUPPORTS_COMMENT_ON_COLUMN:
case SUPPORTS_NEGATIVE_DATE:
case SUPPORTS_ARRAY:
case SUPPORTS_ROW_TYPE:
Expand Down