static GError * __get_all_services(struct sqlx_sqlite3_s *sq3, struct meta1_service_url_s ***result) { GError *err = NULL; sqlite3_stmt *stmt = NULL; GPtrArray *gpa; int rc; // Prepare the statement sqlite3_prepare_debug(rc, sq3->db, "SELECT DISTINCT srvtype,url FROM services order by srvtype,url", -1, &stmt, NULL); if (rc != SQLITE_OK) return M1_SQLITE_GERROR(sq3->db, rc); // Run the result gpa = g_ptr_array_new(); while (SQLITE_ROW == (rc = sqlite3_step(stmt))) { struct meta1_service_url_s *u; u = g_malloc0(sizeof(struct meta1_service_url_s) + 1 + sqlite3_column_bytes(stmt, 3)); u->seq = 0; g_strlcpy(u->srvtype, (gchar*)sqlite3_column_text(stmt, 0), sizeof(u->srvtype)); g_strlcpy(u->host, (gchar*)sqlite3_column_text(stmt, 1), sizeof(u->host)-1); u->args[0] = '\0'; g_ptr_array_add(gpa, u); } if (rc != SQLITE_DONE && rc != SQLITE_OK) err = M1_SQLITE_GERROR(sq3->db, rc); sqlite3_finalize_debug(rc, stmt); if (err) { gpa_str_free(gpa); return err; } g_ptr_array_add(gpa, NULL); *result = (struct meta1_service_url_s**) g_ptr_array_free(gpa, FALSE); return NULL; }
static GError * __get_container_properties(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url, gchar **names, gchar ***result) { GError *err = NULL; GPtrArray *gpa = g_ptr_array_new(); if (!names || !*names) err = __get_all_container_properties(sq3, url, gpa); else { for (gchar **p=names; !err && *p ;p++) err = __get_one_property(sq3, url, *p, gpa); } if (err) { gpa_str_free(gpa); return err; } g_ptr_array_add(gpa, NULL); *result = (gchar**) g_ptr_array_free(gpa, FALSE); return NULL; }