bool RdfStorePrivate::ExecuteBooleanQuery(const std::string& query) const { const std::string completeQuery = this->PrependPrefixes(query); librdf_query* rdfQuery = librdf_new_query(m_World, "sparql", nullptr, (const unsigned char*) completeQuery.c_str(), nullptr); if (!rdfQuery) { mitkThrow() << "failed to create query object"; } librdf_query_results* results = librdf_query_execute(rdfQuery, m_Model); if (!results) { librdf_free_query(rdfQuery); mitkThrow() << "SPARQL syntax error"; } if (!librdf_query_results_is_boolean(results)) { librdf_free_query_results(results); librdf_free_query(rdfQuery); mitkThrow() << "unexpected result type error: tried to request a boolean result with a non-boolean query"; } int rawResult = librdf_query_results_get_boolean(results); bool booleanResult; if (rawResult > 0) { booleanResult = true; } else if (rawResult == 0) { booleanResult = false; } else { mitkThrow() << "error while retrieving result"; } librdf_free_query_results(results); librdf_free_query(rdfQuery); return booleanResult; }
bool slv2_port_supports_event(SLV2Plugin p, SLV2Port port, SLV2Value event) { assert(event); char* query = slv2_strjoin( "ASK WHERE {\n" "<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port ." "?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\";\n", " lv2ev:supportsEvent <", event, "> .\n" "}", NULL); librdf_query_results* results = slv2_plugin_query(p, query); assert(librdf_query_results_is_boolean(results)); const bool ret = librdf_query_results_get_boolean(results); free(query); librdf_free_query_results(results); return ret; }
int print_query_results(librdf_world* world, librdf_model* model, librdf_query_results *results) { int i; char *name; librdf_stream* stream; librdf_serializer* serializer; const char *query_graph_serializer_syntax_name="rdfxml"; if(librdf_query_results_is_bindings(results)) { fprintf(stdout, ": Query returned bindings results:\n"); while(!librdf_query_results_finished(results)) { fputs("result: [", stdout); for(i=0; i<librdf_query_results_get_bindings_count(results); i++) { librdf_node *value=librdf_query_results_get_binding_value(results, i); name=(char*)librdf_query_results_get_binding_name(results, i); if(i>0) fputs(", ", stdout); fprintf(stdout, "%s=", name); if(value) { librdf_node_print(value, stdout); librdf_free_node(value); } else fputs("NULL", stdout); } fputs("]\n", stdout); librdf_query_results_next(results); } fprintf(stdout, ": Query returned %d results\n", librdf_query_results_get_count(results)); } else if(librdf_query_results_is_boolean(results)) { fprintf(stdout, ": Query returned boolean result: %s\n", librdf_query_results_get_boolean(results) ? "true" : "false"); } else if(librdf_query_results_is_graph(results)) { librdf_storage* tmp_storage; librdf_model* tmp_model; tmp_storage=librdf_new_storage(world, NULL, NULL, NULL); tmp_model=librdf_new_model(world, tmp_storage, NULL); fprintf(stdout, ": Query returned graph result:\n"); stream=librdf_query_results_as_stream(results); if(!stream) { fprintf(stderr, ": Failed to get query results graph\n"); return -1; } librdf_model_add_statements(tmp_model, stream); librdf_free_stream(stream); fprintf(stdout, ": Total %d triples\n", librdf_model_size(model)); serializer=librdf_new_serializer(world, query_graph_serializer_syntax_name, NULL, NULL); if(!serializer) { fprintf(stderr, ": Failed to create serializer type %s\n", query_graph_serializer_syntax_name); return -1; } librdf_serializer_serialize_model_to_file_handle(serializer, stdout, NULL, tmp_model); librdf_free_serializer(serializer); librdf_free_model(tmp_model); librdf_free_storage(tmp_storage); } else { fprintf(stdout, ": Query returned unknown result format\n"); return -1; } return 0; }