(c) allow VOLATILE functions in the FILTER clause, but change the behavior to make the behavior sane
Did changing the behavior means getting new snapshot before evaluating a tuple to ensure the function sees results of any previously executed queries or there are other mechanism that can make the behavior sane?
Which leaves us with (b) and (c). Clearly, (b) is simpler to implement, because it (c) needs to do the detection too, and then some additional stuff. I'm not sure how much more complex (c) is, compared to (b).
The attache patch implement option b prohibit VOLATILE functions but i am open to change