infoforcefeed / OlegDB

Enough works to use this in production

Home Page:http://olegdb.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Standardize success/failure

qpfiffer opened this issue · comments

We have too many obtuse return codes for various functions. Add an enum thats something like OLEG_SUCCESS and OLEG_FAILURE. Have all ol_* and olt_* functions return them.

Then, when this is done, fix the stupid error handling in all of the ol_* wrapper functions. I'm talking about this:

int ol_jar(ol_database *db, const char *key, size_t klen,
           const unsigned char *value, size_t vsize) {
    /* ... Stuff omitted ... */
    ol_transaction *tx = olt_begin(db);
    int jar_ret = 10;
    check(tx != NULL, "Could not begin implicit transaction.");

    jar_ret = olt_jar(tx, key, klen, value, vsize);
    check(jar_ret == 0, "Could not jar value. Aborting.");

    check(olt_commit(tx) == 0, "Could not commit transaction.");

    return jar_ret;

error:
    if (tx != NULL && jar_ret != 10)
        olt_abort(tx);

    return jar_ret;
}

Something that'd be pretty cool here is to return SUCCESS/FAILURE, but in addition modify an internal variable to set what happened so we can still get access to some error granularity. This is an sqlite style thing which I really like. This would entail adding some kind of ol_error(const ol_database *db, char *out_ptr) function to return a set of standardized error codes.