add dbuSimpleGet* API

Thu, 27 Feb 2025 20:47:33 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 27 Feb 2025 20:47:33 +0100
changeset 18
e78ef06fe062
parent 17
23e678e6c917
child 19
55de75c839e8

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
 }

mercurial