this patch modify functions on db.c referentially transparent.
I don't think you need the TLS and the hash to be in the DB handler. The first is specific to the thread and doesn't depend on the chosen DB. The second depends on the config json only. In this way you dont need this struct at all.
Why _ to begin the variable name? Why not just let db? less diffs
no need to adapt and to move
Why do you need to add the Handler name? Why not just typedef struct _DB DB;?
DB* db_new? db_load, db_save...
Why is it needed?