/* For all label-operator pairs, write the operator and all its * operands to the DB recursively. */ static void dbwrite_operator (void *key, void *value, void *udata) { gchar *query; gchar *label = key; xmmsv_coll_t *coll = value; coll_dbwrite_t *dbinfos = udata; gchar *esc_label; gint serial_id; /* Only serialize each operator once, get previous id if exists */ if (!xmms_collection_get_int_attr (coll, XMMS_COLLSERIAL_ATTR_ID, &serial_id)) { serial_id = dbinfos->collid; dbinfos->collid = xmms_collection_dbwrite_operator (dbinfos->session, dbinfos->collid, coll); xmms_collection_set_int_attr (coll, XMMS_COLLSERIAL_ATTR_ID, serial_id); } esc_label = sqlite_prepare_string (label); query = g_strdup_printf ("INSERT INTO CollectionLabels VALUES(%d, %d, %s)", serial_id, dbinfos->nsid, esc_label); xmms_medialib_select (dbinfos->session, query, NULL); g_free (query); g_free (esc_label); }
static void query_append_protect_string (coll_query_t *query, gchar *s) { gchar *preps; if ((preps = sqlite_prepare_string (s)) != NULL) { /* FIXME: Return oom error */ query_append_string (query, preps); g_free (preps); } }
/* Write all attributes of a collection to the DB. */ static void dbwrite_coll_attributes (const char *key, xmmsv_t *value, void *udata) { gchar *query; coll_dbwrite_t *dbwrite_infos = udata; gchar *esc_key; gchar *esc_val; const gchar *s; int r; r = xmmsv_get_string (value, &s); g_return_if_fail (r); esc_key = sqlite_prepare_string (key); esc_val = sqlite_prepare_string (s); query = g_strdup_printf ("INSERT INTO CollectionAttributes VALUES(%d, %s, %s)", dbwrite_infos->collid, esc_key, esc_val); xmms_medialib_select (dbwrite_infos->session, query, NULL); g_free (query); g_free (esc_key); g_free (esc_val); }