class TableRelation extends AbstractTableRelation<TableInfo> {

    public TableRelation(TableInfo tableInfo) {
        super(tableInfo, List.copyOf(tableInfo.columns()), List.of());
    }

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

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

        switch (operation) {
            case READ:
            case UPDATE:
                return getField(column);
            case INSERT:
            case DELETE:
                throw new UnsupportedOperationException("getField is only supported for read or update operations on TableRelation");
            default:
                throw new AssertionError("new unhandled operation");
        }
    
<methods>public void <init>(io.crate.metadata.table.TableInfo, 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 io.crate.metadata.table.TableInfo 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 io.crate.metadata.table.TableInfo tableInfo