Skip to content

Commit

Permalink
Allow add column with position in base jdbc module
Browse files Browse the repository at this point in the history
  • Loading branch information
chenjian2664 committed Jan 22, 2025
1 parent d949877 commit 404ad35
Show file tree
Hide file tree
Showing 14 changed files with 94 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import io.trino.spi.TrinoException;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -1208,10 +1209,15 @@ protected String postProcessInsertTableNameClause(ConnectorSession session, Stri
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
verify(handle.getAuthorization().isEmpty(), "Unexpected authorization is required for table: %s".formatted(handle));
addColumn(session, handle.asPlainTable().getRemoteTableName(), column);

switch (position) {
case ColumnPosition.First _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with FIRST clause");
case ColumnPosition.After _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with AFTER clause");
case ColumnPosition.Last _ -> addColumn(session, handle.asPlainTable().getRemoteTableName(), column);
}
}

private void addColumn(ConnectorSession session, RemoteTableName table, ColumnMetadata column)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -518,6 +519,13 @@ public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMe
invalidateTableCaches(handle.asPlainTable().getSchemaTableName());
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
delegate.addColumn(session, handle, column, position);
invalidateTableCaches(handle.asPlainTable().getSchemaTableName());
}

@Override
public void dropColumn(ConnectorSession session, JdbcTableHandle handle, JdbcColumnHandle column)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import io.trino.spi.connector.Assignment;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorInsertTableHandle;
import io.trino.spi.connector.ConnectorMergeTableHandle;
import io.trino.spi.connector.ConnectorOutputMetadata;
Expand Down Expand Up @@ -1398,11 +1399,11 @@ public void setColumnComment(ConnectorSession session, ConnectorTableHandle tabl
}

@Override
public void addColumn(ConnectorSession session, ConnectorTableHandle table, ColumnMetadata columnMetadata)
public void addColumn(ConnectorSession session, ConnectorTableHandle table, ColumnMetadata columnMetadata, ColumnPosition position)
{
JdbcTableHandle tableHandle = (JdbcTableHandle) table;
verify(!tableHandle.isSynthetic(), "Not a table reference: %s", tableHandle);
jdbcClient.addColumn(session, tableHandle, columnMetadata);
jdbcClient.addColumn(session, tableHandle, columnMetadata, position);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -384,6 +385,12 @@ public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMe
delegate().addColumn(session, handle, column);
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
delegate().addColumn(session, handle, column, position);
}

@Override
public void dropColumn(ConnectorSession session, JdbcTableHandle handle, JdbcColumnHandle column)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -184,7 +185,16 @@ default void setColumnComment(ConnectorSession session, JdbcTableHandle handle,
throw new TrinoException(NOT_SUPPORTED, "This connector does not support setting column comments");
}

void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column);
/**
* @deprecated use {@link #addColumn(ConnectorSession, JdbcTableHandle, ColumnMetadata, ColumnPosition)} which add column with position
*/
@Deprecated
default void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
{
addColumn(session, handle, column, new ColumnPosition.Last());
}

void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position);

void dropColumn(ConnectorSession session, JdbcTableHandle handle, JdbcColumnHandle column);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -307,6 +308,13 @@ public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMe
delegate.addColumn(session, handle, column);
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
// no retrying as it could be not idempotent operation
delegate.addColumn(session, handle, column, position);
}

@Override
public void dropColumn(ConnectorSession session, JdbcTableHandle handle, JdbcColumnHandle column)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -294,9 +295,9 @@ public void setColumnComment(ConnectorSession session, JdbcTableHandle handle, J
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
stats.getAddColumn().wrap(() -> delegate().addColumn(session, handle, column));
stats.getAddColumn().wrap(() -> delegate().addColumn(session, handle, column, position));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.trino.plugin.jdbc.JdbcProcedureHandle.ProcedureQuery;
import io.trino.plugin.jdbc.credential.ExtraCredentialConfig;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableMetadata;
import io.trino.spi.connector.SchemaTableName;
Expand Down Expand Up @@ -1090,7 +1091,7 @@ private JdbcColumnHandle addColumn(JdbcTableHandle tableHandle, String columnNam
private JdbcColumnHandle addColumn(JdbcClient client, JdbcTableHandle tableHandle, String columnName)
{
ColumnMetadata columnMetadata = new ColumnMetadata(columnName, INTEGER);
client.addColumn(SESSION, tableHandle, columnMetadata);
client.addColumn(SESSION, tableHandle, columnMetadata, new ColumnPosition.Last());
return getColumns(SESSION, client, tableHandle)
.stream()
.filter(jdbcColumnHandle -> jdbcColumnHandle.getColumnMetadata().equals(columnMetadata))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.trino.spi.connector.CatalogSchemaTableName;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTableMetadata;
Expand Down Expand Up @@ -256,7 +257,7 @@ public void testCreateAndAlterTable()
assertThat(layout.getColumns())
.containsExactly(new ColumnMetadata("text", VARCHAR));

metadata.addColumn(SESSION, handle, new ColumnMetadata("x", VARCHAR));
metadata.addColumn(SESSION, handle, new ColumnMetadata("x", VARCHAR), new ColumnPosition.Last());
layout = metadata.getTableMetadata(SESSION, handle);
assertThat(layout.getColumns())
.containsExactly(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableMetadata;
import io.trino.spi.expression.ConnectorExpression;
Expand Down Expand Up @@ -520,13 +521,22 @@ protected void renameSchema(ConnectorSession session, Connection connection, Str
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
switch (position) {
case ColumnPosition.First _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with FIRST clause");
case ColumnPosition.After _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with AFTER clause");
case ColumnPosition.Last _ -> addColumn(session, handle.asPlainTable().getRemoteTableName(), column);
}
}

private void addColumn(ConnectorSession session, RemoteTableName table, ColumnMetadata column)
{
try (Connection connection = connectionFactory.openConnection(session)) {
String remoteColumnName = getIdentifierMapping().toRemoteColumnName(getRemoteIdentifiers(connection), column.getName());
String sql = format(
"ALTER TABLE %s ADD COLUMN %s",
quoted(handle.asPlainTable().getRemoteTableName()),
quoted(table),
getColumnDefinitionSql(session, column, remoteColumnName));
execute(session, connection, sql);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import io.trino.plugin.jdbc.logging.RemoteQueryModifier;
import io.trino.spi.TrinoException;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableMetadata;
import io.trino.spi.connector.SchemaTableName;
Expand Down Expand Up @@ -493,7 +494,7 @@ public void commitCreateTable(ConnectorSession session, JdbcOutputTableHandle ha
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import io.trino.spi.connector.AggregateFunction;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableMetadata;
import io.trino.spi.type.Type;
Expand Down Expand Up @@ -119,7 +120,7 @@ public void commitCreateTable(ConnectorSession session, JdbcOutputTableHandle ha
}

@Override
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column)
public void addColumn(ConnectorSession session, JdbcTableHandle handle, ColumnMetadata column, ColumnPosition position)
{
throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import io.trino.spi.TrinoException;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorInsertTableHandle;
import io.trino.spi.connector.ConnectorMergeTableHandle;
import io.trino.spi.connector.ConnectorOutputMetadata;
Expand Down Expand Up @@ -244,14 +245,21 @@ public void dropNotNullConstraint(ConnectorSession session, ConnectorTableHandle
}

@Override
public void addColumn(ConnectorSession session, ConnectorTableHandle table, ColumnMetadata columnMetadata)
public void addColumn(ConnectorSession session, ConnectorTableHandle table, ColumnMetadata columnMetadata, ColumnPosition position)
{
if (!columnMetadata.isNullable()) {
// https://issues.apache.org/jira/browse/IGNITE-18829
// Add not null column to non-empty table Ignite doesn't give the default value
throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding not null columns");
}
JdbcTableHandle handle = (JdbcTableHandle) table;
igniteClient.addColumn(session, handle, columnMetadata);

switch (position) {
case ColumnPosition.First _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with FIRST clause");
case ColumnPosition.After _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with AFTER clause");
case ColumnPosition.Last _ -> {
JdbcTableHandle handle = (JdbcTableHandle) table;
igniteClient.addColumn(session, handle, columnMetadata, position);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import io.trino.spi.connector.AggregationApplicationResult;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.connector.ColumnPosition;
import io.trino.spi.connector.ConnectorInsertTableHandle;
import io.trino.spi.connector.ConnectorMergeTableHandle;
import io.trino.spi.connector.ConnectorOutputMetadata;
Expand Down Expand Up @@ -269,19 +270,25 @@ public Optional<ConnectorOutputMetadata> finishInsert(
}

@Override
public void addColumn(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnMetadata column)
public void addColumn(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnMetadata column, ColumnPosition position)
{
if (column.getComment() != null) {
throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with comments");
}

JdbcTableHandle handle = (JdbcTableHandle) tableHandle;
RemoteTableName remoteTableName = handle.asPlainTable().getRemoteTableName();
phoenixClient.execute(session, format(
"ALTER TABLE %s ADD %s %s",
getEscapedTableName(remoteTableName.getSchemaName().orElse(null), remoteTableName.getTableName()),
phoenixClient.quoted(column.getName()),
phoenixClient.toWriteMapping(session, column.getType()).getDataType()));
switch (position) {
case ColumnPosition.First _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with FIRST clause");
case ColumnPosition.After _ -> throw new TrinoException(NOT_SUPPORTED, "This connector does not support adding columns with AFTER clause");
case ColumnPosition.Last _ -> {
JdbcTableHandle handle = (JdbcTableHandle) tableHandle;
RemoteTableName remoteTableName = handle.asPlainTable().getRemoteTableName();
phoenixClient.execute(session, format(
"ALTER TABLE %s ADD %s %s",
getEscapedTableName(remoteTableName.getSchemaName().orElse(null), remoteTableName.getTableName()),
phoenixClient.quoted(column.getName()),
phoenixClient.toWriteMapping(session, column.getType()).getDataType()));
}
}
}

@Override
Expand Down

0 comments on commit 404ad35

Please sign in to comment.