Not one that is actually reliable. All a script would have to do is include its own begin/commit commands, and it would override what you are talking about. It's okay, in my opinion, if the -1 switch is just a half-baked "best effort" solution. It's not okay to provide a --dry-run switch that is equally full of holes, because if someone were to actually rely on it to not execute the script, the possibility of an override would amount to a security bug.
My idea was enforce global transaction (-1) option and ensure STOP_ON_ERROR mode (cannot be changed later). Any inner COMMIT or ROLLBACK have to be disallowed (or ignored) - what can be problem :(
and if all statements from input stream was processed, then ROLLBACK is emitted, but result is success.
Pavel
or different idea - just enforce syntax check without execution.