class IgniteTableScan extends ProjectableFilterableTableScan implements SourceAwareIgniteRel {
    /** */
    private final long sourceId;

    /**
     * Constructor used for deserialization.
     *
     * @param input Serialized representation.
     */
    public IgniteTableScan(RelInput input) {
        super(changeTraits(input, IgniteConvention.INSTANCE));

        Object srcIdObj = input.get("sourceId");
        if (srcIdObj != null)
            sourceId = ((Number)srcIdObj).longValue();
        else
            sourceId = -1;
    }

    /**
     * Creates a TableScan.
     * @param cluster Cluster that this relational expression belongs to
     * @param traits Traits of this relational expression
     * @param tbl Table definition.
     */
    public IgniteTableScan(
        RelOptCluster cluster,
        RelTraitSet traits,
        RelOptTable tbl
    ) {
        this(cluster, traits, tbl, null, null, null);
    }

    /**
     * Creates a TableScan.
     * @param cluster Cluster that this relational expression belongs to
     * @param traits Traits of this relational expression
     * @param tbl Table definition.
     * @param proj Projects.
     * @param cond Filters.
     * @param requiredColunms Participating colunms.
     */
    public IgniteTableScan(
        RelOptCluster cluster,
        RelTraitSet traits,
        RelOptTable tbl,
        @Nullable List<RexNode> proj,
        @Nullable RexNode cond,
        @Nullable ImmutableBitSet requiredColunms
    ) {
        this(-1L, cluster, traits, tbl, proj, cond, requiredColunms);
    }

    /**
     * Creates a TableScan.
     * @param cluster Cluster that this relational expression belongs to
     * @param traits Traits of this relational expression
     * @param tbl Table definition.
     * @param proj Projects.
     * @param cond Filters.
     * @param requiredColunms Participating colunms.
     */
    private IgniteTableScan(
        long sourceId,
        RelOptCluster cluster,
        RelTraitSet traits,
        RelOptTable tbl,
        @Nullable List<RexNode> proj,
        @Nullable RexNode cond,
        @Nullable ImmutableBitSet requiredColunms
    ) {
        super(cluster, traits, ImmutableList.of(), tbl, proj, cond, requiredColunms);
        this.sourceId = sourceId;
    }

    /** */
    @Override public long sourceId() {
        return sourceId;
    }

    /** */
    @Override protected RelWriter explainTerms0(RelWriter pw) {
        return super.explainTerms0(pw)
            .itemIf("sourceId", sourceId, sourceId != -1);
    }

    /** {@inheritDoc} */
    @Override public <T> T accept(IgniteRelVisitor<T> visitor) {
        return visitor.visit(this);
    }

    /** {@inheritDoc} */
    @Override public IgniteRel clone(long sourceId) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
        return new IgniteTableScan(sourceId, cluster, getTraitSet(), getTable(), projects, condition, requiredColumns);
    }
}

        return new IgniteTableScan(sourceId, getCluster(), getTraitSet(), getTable(), projects, condition, requiredColumns);
    
<methods>public RelColumnOrigin columnOriginsByRelLocalRef(int) ,public RelOptCost computeSelfCost(RelOptPlanner, RelMetadataQuery) ,public RexNode condition() ,public RelNode copy(RelTraitSet, List<RelNode>) ,public RelDataType deriveRowType() ,public double estimateRowCount(RelMetadataQuery) ,public RelWriter explainTerms(RelWriter) ,public List<RexNode> projects() ,public RexNode pushUpPredicate() ,public ImmutableBitSet requiredColumns() <variables>protected final non-sealed RexNode condition,protected final non-sealed List<RexNode> projects,protected final non-sealed ImmutableBitSet requiredColumns