@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        PlanNodeSchema schema = (PlanNodeSchema) o;

        return rowWidth == schema.rowWidth && types.equals(schema.types);
    }
@Test
    public void testEquals() {
        List<QueryDataType> types1 = Arrays.asList(QueryDataType.INT, QueryDataType.VARCHAR);
        List<QueryDataType> types2 = Arrays.asList(QueryDataType.DECIMAL, QueryDataType.TIMESTAMP_WITH_TZ_OFFSET_DATE_TIME);

        checkEquals(new PlanNodeSchema(types1), new PlanNodeSchema(types1), true);
        checkEquals(new PlanNodeSchema(types1), new PlanNodeSchema(types2), false);
    }