char* mmg_get_valuef(mmg_conn *db, char *dsn, char *key, int skip, char *qfmt, ...) { HDF *tmpnode; hdf_init(&tmpnode); char *val, *querys, sels[256]; va_list ap; NEOERR *err; va_start(ap, qfmt); querys = vsprintf_alloc(qfmt, ap); va_end(ap); if (!querys) { mtc_err("Unable to allocate mem for query string"); return NULL; } snprintf(sels, sizeof(sels), "{'%s': 1}", key); err = mmg_prepare(db, MMG_FLAG_EMPTY, skip, 1, NULL, sels, querys); RETURN_V_NOK(err, NULL); err = mmg_query(db, dsn, NULL, tmpnode); RETURN_V_NOK(err, NULL); err = hdf_get_copy(tmpnode, key, &val, NULL); RETURN_V_NOK(err, NULL); hdf_destroy(&tmpnode); SAFE_FREE(querys); return val; }
char * sprintf_alloc (const char *fmt, ...) { assert (fmt != NULL); va_list args; va_start (args,fmt); char *buf = vsprintf_alloc (fmt, args); va_end (args); return buf; }
void smsalarm_msgf(char *fmt, ...) { char *msg; va_list ap; va_start(ap, fmt); msg = vsprintf_alloc(fmt, ap); va_end(ap); if (msg == NULL) return ; smsalarm_msg(msg); free(msg); }
char* hdf_get_valuevf (HDF *hdf, const char *namefmt, va_list ap) { HDF *node; char *name; name = vsprintf_alloc(namefmt, ap); if (name == NULL) return NULL; if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL)) { free(name); return node->value; } free(name); return NULL; }
char* mcs_prepend_string_valuef(HDF *node, char *key, char *sfmt, ...) { char *qa, *rs; va_list ap; va_start(ap, sfmt); qa = vsprintf_alloc(sfmt, ap); va_end(ap); if (!qa) return NULL; rs = mcs_prepend_string_value(node, key, qa); free(qa); return rs; }
NEOERR* mmg_deletef(mmg_conn *db, char *dsn, int flags, char *selfmt, ...) { char *qa; va_list ap; NEOERR *err; va_start(ap, selfmt); qa = vsprintf_alloc(selfmt, ap); va_end(ap); if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string"); err = mmg_delete(db, dsn, flags, qa); if (err != STATUS_OK) return nerr_pass(err); free(qa); return STATUS_OK; }
NEOERR* mmg_countf(mmg_conn *db, char *dbname, char *collname, int *ret, char *qfmt, ...) { char *qa; va_list ap; NEOERR *err; va_start(ap, qfmt); qa = vsprintf_alloc(qfmt, ap); va_end(ap); if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string"); err = mmg_count(db, dbname, collname, ret, qa); if (err != STATUS_OK) return nerr_pass(err); free(qa); return STATUS_OK; }
int mmg_get_int_valuef(mmg_conn *db, char *dsn, char *key, int skip, int limit, char *qfmt, ...) { HDF *tmpnode; hdf_init(&tmpnode); char *querys, sels[256]; int val; va_list ap; HDF *node; NEOERR *err; va_start(ap, qfmt); querys = vsprintf_alloc(qfmt, ap); va_end(ap); if (!querys) { mtc_err("Unable to allocate mem for query string"); return 0; } snprintf(sels, sizeof(sels), "{'%s': 1}", key); err = mmg_prepare(db, MMG_FLAG_EMPTY, skip, limit, NULL, sels, querys); RETURN_V_NOK(err, 0); err = mmg_query(db, dsn, NULL, tmpnode); RETURN_V_NOK(err, 0); val = 0; if(hdf_get_valuef(tmpnode, "0.%s", key)) { node = hdf_obj_child(tmpnode); while (node) { val += hdf_get_int_value(node, key, 0); node = hdf_obj_next(node); } } else { val = hdf_get_int_value(tmpnode, key, 0); } hdf_destroy(&tmpnode); SAFE_FREE(querys); return val; }
NEOERR* mmg_customf(mmg_conn *db, char *dbname, char *prefix, HDF *outnode, char *cmdfmt, ...) { char *qa; va_list ap; NEOERR *err; va_start(ap, cmdfmt); qa = vsprintf_alloc(cmdfmt, ap); va_end(ap); if (!qa) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for string"); err = mmg_custom(db, dbname, prefix, outnode, qa); if (err != STATUS_OK) return nerr_pass(err); free(qa); return STATUS_OK; }
NEOERR* mmg_preparef(mmg_conn *db, int flags, int skip, int limit, NEOERR* (*qcbk)(mmg_conn *db, HDF *node, bool lastone), char *sels, char *qfmt, ...) { char *querys; va_list ap; NEOERR *err; va_start(ap, qfmt); querys = vsprintf_alloc(qfmt, ap); va_end(ap); if (!querys) return nerr_raise(NERR_NOMEM, "Unable to allocate mem for query string"); err = mmg_prepare(db, flags, skip, limit, qcbk, sels, querys); if (err != STATUS_OK) return nerr_pass(err); free(querys); return STATUS_OK; }
NEOERR* hdf_set_valuevf (HDF *hdf, const char *fmt, va_list ap) { NEOERR *err; char *k; char *v; k = vsprintf_alloc(fmt, ap); if (k == NULL) { return nerr_raise(NERR_NOMEM, "Unable to allocate memory for format string"); } v = strchr(k, '='); if (v == NULL) { err = nerr_raise(NERR_ASSERT, "No equals found: %s", k); free(k); return err; } *v++ = '\0'; err = hdf_set_value(hdf, k, v); free(k); return nerr_pass(err); }