Thu, 27 Feb 2025 20:47:33 +0100
add dbuSimpleGet* API
| dbutils/db.c | file | annotate | diff | comparison | revisions | |
| dbutils/dbutils/db.h | file | annotate | diff | comparison | revisions |
--- a/dbutils/db.c Thu Feb 27 20:25:54 2025 +0100 +++ b/dbutils/db.c Thu Feb 27 20:47:33 2025 +0100 @@ -118,6 +118,10 @@ } } +void dbuResultFree(DBUResult *result) { + result->free(result); +} + int dbuResultAsInt32(DBUResult *r, int32_t *result) { @@ -175,11 +179,15 @@ } int dbuResultAsCxString(DBUResult *r, cxmutstr *result) { + return dbuResultAsCxStringA(r, cxDefaultAllocator, result); +} + +int dbuResultAsCxStringA(DBUResult *r, const CxAllocator *a, cxmutstr *result) { if(r->hasData(r)) { if(r->fieldType(r, 0) != DBU_FIELD_NULL) { cxstring s = r->getText(r, 0); if(s.ptr) { - *result = cx_strdup(s); + *result = cx_strdup_a(a, s); r->free(r); return 0; } @@ -188,3 +196,56 @@ r->free(r); return -1; } + + +int dbuSimpleGetInt64WithIntParam(DBUConnection *conn, const char *sql, int64_t param, int64_t *result) { + DBUQuery *q = conn->createQuery(conn, cxDefaultAllocator); + dbuQuerySetSQL(q, sql); + dbuQuerySetParamInt64(q, 1, param); + int err = dbuQueryExec(q); + dbuQueryFree(q); + if(!err) { + DBUResult *r = dbuQueryGetResult(q); + err = dbuResultAsInt64(r, result); + } + return err; +} + +int dbuSimpleGetInt64WithStringParam(DBUConnection *conn, const char *sql, cxstring param, int64_t *result) { + DBUQuery *q = conn->createQuery(conn, cxDefaultAllocator); + dbuQuerySetSQL(q, sql); + dbuQuerySetParamString(q, 1, param); + int err = dbuQueryExec(q); + dbuQueryFree(q); + if(!err) { + DBUResult *r = dbuQueryGetResult(q); + err = dbuResultAsInt64(r, result); + } + return err; +} + +int dbuSimpleGetStringWithIntParam(DBUConnection *conn, const char *sql, int64_t param, const CxAllocator *a, cxmutstr *result) { + DBUQuery *q = conn->createQuery(conn, cxDefaultAllocator); + dbuQuerySetSQL(q, sql); + dbuQuerySetParamInt64(q, 1, param); + int err = dbuQueryExec(q); + dbuQueryFree(q); + if(!err) { + DBUResult *r = dbuQueryGetResult(q); + err = dbuResultAsCxStringA(r, a, result); + } + return err; +} + +int dbuSimpleGetStringWithStringParam(DBUConnection *conn, const char *sql, cxstring param, const CxAllocator *a, cxmutstr *result) { + DBUQuery *q = conn->createQuery(conn, cxDefaultAllocator); + dbuQuerySetSQL(q, sql); + dbuQuerySetParamString(q, 1, param); + int err = dbuQueryExec(q); + dbuQueryFree(q); + if(!err) { + DBUResult *r = dbuQueryGetResult(q); + err = dbuResultAsCxStringA(r, a, result); + } + return err; +}
--- a/dbutils/dbutils/db.h Thu Feb 27 20:25:54 2025 +0100 +++ b/dbutils/dbutils/db.h Thu Feb 27 20:47:33 2025 +0100 @@ -115,6 +115,7 @@ cxstring dbuResultGetText(DBUResult *result, int field); int64_t dbuResultGetInt(DBUResult *result, int field); DBUBytes dbuResultGetBinary(DBUResult *result, int field); +void dbuResultFree(DBUResult *result); @@ -133,6 +134,7 @@ int dbuResultAsUInt64(DBUResult *r, uint64_t *result); int dbuResultAsString(DBUResult *r, char **result); int dbuResultAsCxString(DBUResult *r, cxmutstr *result); +int dbuResultAsCxStringA(DBUResult *r, const CxAllocator *a, cxmutstr *result); DBUObjectBuilder* dbuObjectBuilder(DBUClass *type, DBUQuery *query, const CxAllocator *a); void dbuObjectBuilderSetDenseResult(DBUObjectBuilder *builder, bool dense); @@ -147,7 +149,10 @@ // TODO: implement int dbuObjectBuilderAddSubquery(DBUObjectBuilder *builder, DBUClass *type, DBUQuery *subquery); - +int dbuSimpleGetInt64WithIntParam(DBUConnection *conn, const char *sql, int64_t param, int64_t *result); +int dbuSimpleGetInt64WithStringParam(DBUConnection *conn, const char *sql, cxstring param, int64_t *result); +int dbuSimpleGetStringWithIntParam(DBUConnection *conn, const char *sql, int64_t param, const CxAllocator *a, cxmutstr *result); +int dbuSimpleGetStringWithStringParam(DBUConnection *conn, const char *sql, cxstring param, const CxAllocator *a, cxmutstr *result); #ifdef __cplusplus }