Skip to content

Commit

Permalink
Some small changes for the conformance tool.
Browse files Browse the repository at this point in the history
Signed-off-by: Johannes Kalmbach <[email protected]>
  • Loading branch information
joka921 committed Oct 17, 2024
1 parent e518191 commit ea606d6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 20 deletions.
43 changes: 25 additions & 18 deletions src/engine/ExportQueryExecutionTrees.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@ bool getResultForAsk(const std::shared_ptr<const Result>& res) {
}

// _____________________________________________________________________________
cppcoro::generator<std::string> computeResultForAsk(
const ParsedQuery& parsedQuery, const QueryExecutionTree& qet,
ad_utility::MediaType mediaType, const ad_utility::Timer& requestTimer) {
ad_utility::streams::stream_generator computeResultForAsk(
[[maybe_unused]] const ParsedQuery& parsedQuery,
const QueryExecutionTree& qet, ad_utility::MediaType mediaType,
[[maybe_unused]] const ad_utility::Timer& requestTimer) {
bool result = getResultForAsk(qet.getResult(true));

std::string xmlTemplate = R"(<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head></head>
<head/>
<boolean>true</boolean>
</sparql>)";

Expand All @@ -43,10 +44,15 @@ cppcoro::generator<std::string> computeResultForAsk(
}
break;
}
case sparqlJson: {
nlohmann::json j;
j["head"] = nlohmann::json::object_t{};
j["boolean"] = result;
co_yield j.dump();
}
default:
throw std::runtime_error(
"ASK queries are currently only supported for XML and sparql-json "
"results");
throw std::runtime_error{
"ASK queries are not supported for TSV or CSV or binary format."};
}
}

Expand Down Expand Up @@ -771,22 +777,23 @@ cppcoro::generator<std::string> ExportQueryExecutionTrees::computeResult(
const ParsedQuery& parsedQuery, const QueryExecutionTree& qet,
ad_utility::MediaType mediaType, const ad_utility::Timer& requestTimer,
CancellationHandle cancellationHandle) {
if (parsedQuery.hasAskClause() && mediaType != MediaType::qleverJson) {
return computeResultForAsk(parsedQuery, qet, mediaType, requestTimer);
}
auto compute = [&]<MediaType format> {
if constexpr (format == MediaType::qleverJson) {
return computeResultAsQLeverJSON(parsedQuery, qet, requestTimer,
std::move(cancellationHandle));
} else {
if (parsedQuery.hasAskClause()) {
return computeResultForAsk(parsedQuery, qet, mediaType, requestTimer);
}
return parsedQuery.hasSelectClause()
? selectQueryResultToStream<format>(
qet, parsedQuery.selectClause(),
parsedQuery._limitOffset, std::move(cancellationHandle))
: constructQueryResultToStream<format>(
qet, parsedQuery.constructClause().triples_,
parsedQuery._limitOffset, qet.getResult(true),
std::move(cancellationHandle));
}
return parsedQuery.hasSelectClause()
? selectQueryResultToStream<format>(
qet, parsedQuery.selectClause(), parsedQuery._limitOffset,
std::move(cancellationHandle))
: constructQueryResultToStream<format>(
qet, parsedQuery.constructClause().triples_,
parsedQuery._limitOffset, qet.getResult(true),
std::move(cancellationHandle));
};

using enum MediaType;
Expand Down
5 changes: 3 additions & 2 deletions src/parser/ParsedQuery.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,9 @@ class ParsedQuery {

// explicit default initialisation because the constructor
// of SelectClause is private
std::variant<SelectClause, ConstructClause, UpdateClause, AskClause> _clause{
SelectClause{}};
using HeaderClause =
std::variant<SelectClause, ConstructClause, UpdateClause, AskClause>;
HeaderClause _clause{SelectClause{}};

// The IRIs from the FROM and FROM NAMED clauses.
DatasetClauses datasetClauses_;
Expand Down

0 comments on commit ea606d6

Please sign in to comment.