class IgniteIntersect extends Intersect implements IgniteSetOp {
    /** */
    IgniteIntersect(RelOptCluster cluster, RelTraitSet traits, List<RelNode> inputs, boolean all) {
        super(cluster, traits, inputs, all);
    }

    /** */
    protected IgniteIntersect(RelInput input) {
        super(TraitUtils.changeTraits(input, IgniteConvention.INSTANCE));
    }

    /** {@inheritDoc} */
    @Override public double estimateRowCount(RelMetadataQuery mq) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
        return computeSetOpCost(planner, mq);
    }

    /** {@inheritDoc} */
    @Override public boolean all() {
        return all;
    }
}

        final List<RelNode> inputs = getInputs();

        double rows = mq.getRowCount(inputs.get(0));

        for (int i = 1; i < inputs.size(); i++)
            rows = 0.5 * Math.min(rows, mq.getRowCount(inputs.get(i)));

        return rows;
    
<no_super_class>