cParseQuery *cparse_role_query_roles(cParseRole *role, cParseError **error) { cParseQuery *query = NULL; cParseQueryBuilder *builder = NULL; if (role == NULL) { cparse_log_set_errno(error, EINVAL); return NULL; } query = cparse_query_for_object(role); builder = cparse_query_build_new(); cparse_query_build_related_to(builder, "roles", role); cparse_query_build_where(query, builder); cparse_query_build_free(builder); if (!cparse_query_find_objects(query, error)) { cparse_query_free(query); return NULL; } return query; }
bool cparse_query_find_objects(cParseQuery *query, cParseError **error) { cParseRequest *request = NULL; cParseJson *data = NULL; char buf[CPARSE_BUF_SIZE + 1] = {0}; if (query == NULL) { cparse_log_set_errno(error, EINVAL); return false; } /* build the request */ request = cparse_request_with_method_and_path(cParseHttpRequestMethodGet, query->urlPath); if (request == NULL) { cparse_log_set_error(error, "Unable to create request for query"); return false; } if (query->where) { cparse_request_add_data(request, CPARSE_QUERY_WHERE, cparse_json_to_json_string(query->where)); } if (query->limit > 0) { snprintf(buf, CPARSE_BUF_SIZE, "%d", query->limit); cparse_request_add_data(request, CPARSE_QUERY_LIMIT, buf); } if (query->skip > 0) { snprintf(buf, CPARSE_BUF_SIZE, "%d", query->skip); cparse_request_add_data(request, CPARSE_QUERY_SKIP, buf); } if (query->keys) { cparse_request_add_data(request, CPARSE_QUERY_KEYS, query->keys); } if (query->count) { snprintf(buf, CPARSE_BUF_SIZE, "%d", query->count); cparse_request_add_data(request, CPARSE_QUERY_COUNT, buf); } /* do the deed */ data = cparse_request_get_json(request, error); cparse_request_free(request); if (data == NULL) { return false; } if (query->count) { query->size = cparse_json_get_number(data, CPARSE_QUERY_COUNT, 0); } else { cParseJson *results = cparse_json_get(data, CPARSE_QUERY_RESULTS); query->size = cparse_json_array_size(results); if (query->size > 0) { int i; if (query->results) { cparse_query_free_results(query); free(query->results); } query->results = malloc(cparse_object_sizeof() * query->size); if (query->results == NULL) { cparse_log_set_errno(error, ENOMEM); cparse_json_free(data); return false; } for (i = 0; i < query->size; i++) { query->results[i] = cparse_object_from_query(query, cparse_json_array_get(results, i)); } } } cparse_json_free(data); return true; }