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
Original file line number Diff line number Diff line change
Expand Up @@ -13,67 +13,21 @@
*/
package io.trino.plugin.thrift;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ColumnMetadata;
import io.trino.spi.type.Type;
import jakarta.annotation.Nullable;

import java.util.Objects;
import java.util.Optional;

import static java.util.Objects.requireNonNull;

public final class ThriftColumnHandle
public record ThriftColumnHandle(String columnName, Type columnType, String comment, boolean hidden)
implements ColumnHandle
{
private final String columnName;
private final Type columnType;
private final String comment;
private final boolean hidden;

@JsonCreator
public ThriftColumnHandle(
@JsonProperty("columnName") String columnName,
@JsonProperty("columnType") Type columnType,
@JsonProperty("comment") @Nullable String comment,
@JsonProperty("hidden") boolean hidden)
{
this.columnName = requireNonNull(columnName, "columnName is null");
this.columnType = requireNonNull(columnType, "columnType is null");
this.comment = comment;
this.hidden = hidden;
}

public ThriftColumnHandle(ColumnMetadata columnMetadata)
public ThriftColumnHandle
{
this(columnMetadata.getName(), columnMetadata.getType(), columnMetadata.getComment(), columnMetadata.isHidden());
}

@JsonProperty
public String getColumnName()
{
return columnName;
}

@JsonProperty
public Type getColumnType()
{
return columnType;
}

@Nullable
@JsonProperty
public String getComment()
{
return comment;
}

@JsonProperty
public boolean isHidden()
{
return hidden;
requireNonNull(columnName, "columnName is null");
requireNonNull(columnType, "columnType is null");
}

public ColumnMetadata toColumnMetadata()
Expand All @@ -86,26 +40,9 @@ public ColumnMetadata toColumnMetadata()
.build();
}

@Override
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ThriftColumnHandle other = (ThriftColumnHandle) obj;
return Objects.equals(this.columnName, other.columnName) &&
Objects.equals(this.columnType, other.columnType) &&
Objects.equals(this.comment, other.comment) &&
this.hidden == other.hidden;
}

@Override
public int hashCode()
public static ThriftColumnHandle toColumnHandle(ColumnMetadata columnMetadata)
{
return Objects.hash(columnName, columnType, comment, hidden);
return new ThriftColumnHandle(columnMetadata.getName(), columnMetadata.getType(), columnMetadata.getComment(), columnMetadata.isHidden());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,27 @@
*/
package io.trino.plugin.thrift;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
import io.trino.plugin.thrift.api.TrinoThriftId;
import io.trino.spi.HostAddress;
import io.trino.spi.connector.ConnectorSplit;

import java.util.List;
import java.util.Objects;

import static com.google.common.base.MoreObjects.toStringHelper;
import static io.airlift.slice.SizeOf.estimatedSizeOf;
import static io.airlift.slice.SizeOf.instanceSize;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;

public class ThriftConnectorSplit
public record ThriftConnectorSplit(TrinoThriftId splitId, List<HostAddress> addresses)
implements ConnectorSplit
{
private static final int INSTANCE_SIZE = instanceSize(ThriftConnectorSplit.class);

private final TrinoThriftId splitId;
private final List<HostAddress> addresses;

@JsonCreator
public ThriftConnectorSplit(
@JsonProperty("splitId") TrinoThriftId splitId,
@JsonProperty("addresses") List<HostAddress> addresses)
{
this.splitId = requireNonNull(splitId, "splitId is null");
this.addresses = ImmutableList.copyOf(requireNonNull(addresses, "addresses is null"));
}

@JsonProperty
public TrinoThriftId getSplitId()
public ThriftConnectorSplit
{
return splitId;
requireNonNull(splitId, "splitId is null");
addresses = ImmutableList.copyOf(addresses);
}

@Override
Expand All @@ -66,33 +50,4 @@ public long getRetainedSizeInBytes()
+ splitId.getRetainedSizeInBytes()
+ estimatedSizeOf(addresses, HostAddress::getRetainedSizeInBytes);
}

@Override
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ThriftConnectorSplit other = (ThriftConnectorSplit) obj;
return Objects.equals(this.splitId, other.splitId) &&
Objects.equals(this.addresses, other.addresses);
}

@Override
public int hashCode()
{
return Objects.hash(splitId, addresses);
}

@Override
public String toString()
{
return toStringHelper(this)
.add("splitId", splitId)
.add("addresses", addresses.stream().map(HostAddress::toString).collect(joining(",")))
.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,63 +13,21 @@
*/
package io.trino.plugin.thrift;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.ConnectorIndexHandle;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.predicate.TupleDomain;

import java.util.Objects;

import static java.lang.String.format;
import static java.util.Objects.requireNonNull;

public class ThriftIndexHandle
public record ThriftIndexHandle(SchemaTableName schemaTableName, TupleDomain<ColumnHandle> tupleDomain)
implements ConnectorIndexHandle
{
private final SchemaTableName schemaTableName;
private final TupleDomain<ColumnHandle> tupleDomain;

@JsonCreator
public ThriftIndexHandle(
@JsonProperty("schemaTableName") SchemaTableName schemaTableName,
@JsonProperty("tupleDomain") TupleDomain<ColumnHandle> tupleDomain)
{
this.schemaTableName = requireNonNull(schemaTableName, "schemaTableName is null");
this.tupleDomain = requireNonNull(tupleDomain, "tupleDomain is null");
}

@JsonProperty
public SchemaTableName getSchemaTableName()
{
return schemaTableName;
}

@JsonProperty
public TupleDomain<ColumnHandle> getTupleDomain()
{
return tupleDomain;
}

@Override
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ThriftIndexHandle other = (ThriftIndexHandle) obj;
return Objects.equals(this.schemaTableName, other.schemaTableName) &&
Objects.equals(this.tupleDomain, other.tupleDomain);
}

@Override
public int hashCode()
public ThriftIndexHandle
{
return Objects.hash(schemaTableName, tupleDomain);
requireNonNull(schemaTableName, "schemaTableName is null");
requireNonNull(tupleDomain, "tupleDomain is null");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,22 @@ public ThriftIndexPageSource(
this.stats = requireNonNull(stats, "stats is null");

requireNonNull(indexHandle, "indexHandle is null");
this.schemaTableName = new TrinoThriftSchemaTableName(indexHandle.getSchemaTableName());
this.outputConstraint = tupleDomainToThriftTupleDomain(indexHandle.getTupleDomain());
this.schemaTableName = new TrinoThriftSchemaTableName(indexHandle.schemaTableName());
this.outputConstraint = tupleDomainToThriftTupleDomain(indexHandle.tupleDomain());

requireNonNull(lookupColumns, "lookupColumns is null");
this.lookupColumnNames = lookupColumns.stream()
.map(ThriftColumnHandle.class::cast)
.map(ThriftColumnHandle::getColumnName)
.map(ThriftColumnHandle::columnName)
.collect(toImmutableList());

requireNonNull(outputColumns, "outputColumns is null");
ImmutableList.Builder<String> outputColumnNames = ImmutableList.builder();
ImmutableList.Builder<Type> outputColumnTypes = ImmutableList.builder();
for (ColumnHandle columnHandle : outputColumns) {
ThriftColumnHandle thriftColumnHandle = (ThriftColumnHandle) columnHandle;
outputColumnNames.add(thriftColumnHandle.getColumnName());
outputColumnTypes.add(thriftColumnHandle.getColumnType());
outputColumnNames.add(thriftColumnHandle.columnName());
outputColumnTypes.add(thriftColumnHandle.columnType());
}
this.outputColumnNames = outputColumnNames.build();
this.outputColumnTypes = outputColumnTypes.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,15 @@ public ConnectorTableHandle getTableHandle(ConnectorSession session, SchemaTable

return tableCache.getUnchecked(tableName)
.map(ThriftTableMetadata::getSchemaTableName)
.map(ThriftTableHandle::new)
.map(ThriftTableHandle::toThriftTableHandle)
.orElse(null);
}

@Override
public ConnectorTableMetadata getTableMetadata(ConnectorSession session, ConnectorTableHandle tableHandle)
{
ThriftTableHandle handle = ((ThriftTableHandle) tableHandle);
return getRequiredTableMetadata(new SchemaTableName(handle.getSchemaName(), handle.getTableName())).toConnectorTableMetadata();
return getRequiredTableMetadata(new SchemaTableName(handle.schemaName(), handle.tableName())).toConnectorTableMetadata();
}

@Override
Expand All @@ -142,7 +142,7 @@ public List<SchemaTableName> listTables(ConnectorSession session, Optional<Strin
@Override
public Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle)
{
return getTableMetadata(session, tableHandle).getColumns().stream().collect(toImmutableMap(ColumnMetadata::getName, ThriftColumnHandle::new));
return getTableMetadata(session, tableHandle).getColumns().stream().collect(toImmutableMap(ColumnMetadata::getName, ThriftColumnHandle::toColumnHandle));
}

@Override
Expand All @@ -161,7 +161,7 @@ public Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSess
public Optional<ConnectorResolvedIndex> resolveIndex(ConnectorSession session, ConnectorTableHandle tableHandle, Set<ColumnHandle> indexableColumns, Set<ColumnHandle> outputColumns, TupleDomain<ColumnHandle> tupleDomain)
{
ThriftTableHandle table = (ThriftTableHandle) tableHandle;
ThriftTableMetadata tableMetadata = getRequiredTableMetadata(new SchemaTableName(table.getSchemaName(), table.getTableName()));
ThriftTableMetadata tableMetadata = getRequiredTableMetadata(new SchemaTableName(table.schemaName(), table.tableName()));
if (tableMetadata.containsIndexableColumns(indexableColumns)) {
return Optional.of(new ConnectorResolvedIndex(new ThriftIndexHandle(tableMetadata.getSchemaTableName(), tupleDomain), tupleDomain));
}
Expand All @@ -173,17 +173,17 @@ public Optional<ConstraintApplicationResult<ConnectorTableHandle>> applyFilter(C
{
ThriftTableHandle handle = (ThriftTableHandle) table;

TupleDomain<ColumnHandle> oldDomain = handle.getConstraint();
TupleDomain<ColumnHandle> oldDomain = handle.constraint();
TupleDomain<ColumnHandle> newDomain = oldDomain.intersect(constraint.getSummary());
if (oldDomain.equals(newDomain)) {
return Optional.empty();
}

handle = new ThriftTableHandle(
handle.getSchemaName(),
handle.getTableName(),
handle.schemaName(),
handle.tableName(),
newDomain,
handle.getDesiredColumns());
handle.desiredColumns());

return Optional.of(new ConstraintApplicationResult<>(handle, constraint.getSummary(), constraint.getExpression(), false));
}
Expand All @@ -193,21 +193,21 @@ public Optional<ProjectionApplicationResult<ConnectorTableHandle>> applyProjecti
{
ThriftTableHandle handle = (ThriftTableHandle) table;

if (handle.getDesiredColumns().isPresent()) {
if (handle.desiredColumns().isPresent()) {
return Optional.empty();
}

ImmutableSet.Builder<ColumnHandle> desiredColumns = ImmutableSet.builder();
ImmutableList.Builder<Assignment> assignmentList = ImmutableList.builder();
assignments.forEach((name, column) -> {
desiredColumns.add(column);
assignmentList.add(new Assignment(name, column, ((ThriftColumnHandle) column).getColumnType()));
assignmentList.add(new Assignment(name, column, ((ThriftColumnHandle) column).columnType()));
});

handle = new ThriftTableHandle(
handle.getSchemaName(),
handle.getTableName(),
handle.getConstraint(),
handle.schemaName(),
handle.tableName(),
handle.constraint(),
Optional.of(desiredColumns.build()));

return Optional.of(new ProjectionApplicationResult<>(handle, projections, assignmentList.build(), false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ public ThriftPageSource(
ImmutableList.Builder<Type> columnTypes = ImmutableList.builder();
for (ColumnHandle columnHandle : columns) {
ThriftColumnHandle thriftColumnHandle = (ThriftColumnHandle) columnHandle;
columnNames.add(thriftColumnHandle.getColumnName());
columnTypes.add(thriftColumnHandle.getColumnType());
columnNames.add(thriftColumnHandle.columnName());
columnTypes.add(thriftColumnHandle.columnType());
}
this.columnNames = columnNames.build();
this.columnTypes = columnTypes.build();
Expand All @@ -86,7 +86,7 @@ public ThriftPageSource(

// init split
requireNonNull(split, "split is null");
this.splitId = split.getSplitId();
this.splitId = split.splitId();

// init client
requireNonNull(client, "client is null");
Expand Down
Loading