Hello!
If you want to store the value in unix timestamp, you don't need
MYSQL_TIME in save_result. You should calculate the value as a unix
timestamp in ::check and store that in save_result. 
 
Now you still have timezone conversion in ::update and that can fail.
Everything that can fail should be done in ::check, that's the contract.

Right. I missed the fact that timezone conversion failure may be  also crucial.
Or perhaps making another structure for storing timestamp with second_part stopped me.
I made this change, in the separate commit for convenience, all the freshly rebased work can be found on `bb-10.3-nikita`.
I might want to know that I'm going to squash following commits after the review:
ee326018 make all conversions in check() to avoid possible errors
0b8b1fff refactor Sys_var_vers_asof
87ebaab5 MDEV-16481: set global system_versioning_asof=sf() crashes in specific case

May be also I reapplied your patches to 10.3 incorrectly when I was
reviewing. Perhaps you could rebase them yourself - to be sure I'm
looking at the correct patch?
 
Yes, the patch looks correct according to what I can see in the PR.


Nikita