With AQE enabled, AdaptiveSparkPlanExec will attempt to reuse exchanges that are semantically equal.
This is done by comparing the canonicalized plan for two Exchange nodes to see if they are the same.
Unfortunately this does not take into account the fact that two exchanges with the same canonical plan might be replaced by a plugin in a way that makes them not compatible. For example, a plugin could create one version with supportsColumnar=true and another with supportsColumnar=false. It is not valid to re-use exchanges if there is a supportsColumnar mismatch.
I have tested a fix for this and will put up a PR once I figure out how to write the tests.