class ForeignTableRelation extends AbstractTableRelation<ForeignTable> {

    public ForeignTableRelation(ForeignTable table) {
        super(table, List.copyOf(table.columns()), List.of());
    }

    @Override
    public <C, R> R accept(AnalyzedRelationVisitor<C, R> visitor, C context) {
        return visitor.visitForeignTable(this, context);
    }

    @Override
    @Nullable
    public Symbol getField(ColumnIdent column,
                           Operation operation,
                           boolean errorOnUnknownObjectKey)
            throws AmbiguousColumnException, ColumnUnknownException, UnsupportedOperationException {<FILL_FUNCTION_BODY>}
}


        if (operation != Operation.READ) {
            throw new UnsupportedOperationException("Cannot write or delete on foreign tables");
        }
        Reference reference = tableInfo.getReadReference(column);
        if (reference == null) {
            throw new ColumnUnknownException(column, tableInfo.name());
        }
        return reference;
    
<methods>public void <init>(ForeignTable, List<io.crate.expression.symbol.Symbol>, List<io.crate.expression.symbol.Symbol>) ,public boolean equals(java.lang.Object) ,public io.crate.metadata.Reference getField(io.crate.metadata.ColumnIdent) ,public int hashCode() ,public List<io.crate.expression.symbol.Symbol> hiddenOutputs() ,public List<io.crate.expression.symbol.Symbol> outputs() ,public io.crate.metadata.RelationName relationName() ,public io.crate.metadata.Reference resolveField(io.crate.expression.symbol.ScopedSymbol) ,public ForeignTable tableInfo() ,public java.lang.String toString() <variables>private final non-sealed List<io.crate.expression.symbol.Symbol> hiddenOutputs,private final non-sealed List<io.crate.expression.symbol.Symbol> outputs,protected final non-sealed ForeignTable tableInfo