Exemple #1
0
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;
}
Exemple #2
0
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;
}