Well it is definitly an optimization
that is new to BaseX 10. But I think I found a way to default to
"" where I just passed () from a variable before.
True. With BaseX 10, XQuery compilation was split up into a static (logical) and a dynamic (physical) step to allow for a more fine granular locking. In the static compilation, your expression will be rewritten as follows:
collection('i_do_not_exist')/users/user[@name=()]
→collection('i_do_not_exist')/users/user[false()]
→collection('i_do_not_exist')/users/()
→collection('i_do_not_exist')/()
→()