MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / parseQuery

Method parseQuery

src/main/client_context.cpp:457–492  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

455}
456
457std::vector<std::shared_ptr<Statement>> ClientContext::parseQuery(std::string_view query) {
458 if (query.empty()) {
459 throw ConnectionException("Query is empty.");
460 }
461 std::vector<std::shared_ptr<Statement>> statements;
462 auto parserTimer = TimeMetric(true /*enable*/);
463 parserTimer.start();
464 auto parsedStatements = Parser::parseQuery(query, localDatabase->getTransformerExtensions());
465 parserTimer.stop();
466 const auto avgParsingTime = parserTimer.getElapsedTimeMS() / parsedStatements.size() / 1.0;
467 StandaloneCallRewriter standaloneCallAnalyzer{this, parsedStatements.size() == 1};
468 for (auto i = 0u; i < parsedStatements.size(); i++) {
469 auto rewriteQuery = standaloneCallAnalyzer.getRewriteQuery(*parsedStatements[i]);
470 if (rewriteQuery.empty()) {
471 parsedStatements[i]->setParsingTime(avgParsingTime);
472 statements.push_back(std::move(parsedStatements[i]));
473 } else {
474 parserTimer.start();
475 auto rewrittenStatements =
476 Parser::parseQuery(rewriteQuery, localDatabase->getTransformerExtensions());
477 parserTimer.stop();
478 const auto avgRewriteParsingTime =
479 parserTimer.getElapsedTimeMS() / rewrittenStatements.size() / 1.0;
480 DASSERT(rewrittenStatements.size() >= 1);
481 for (auto j = 0u; j < rewrittenStatements.size() - 1; j++) {
482 rewrittenStatements[j]->setParsingTime(avgParsingTime + avgRewriteParsingTime);
483 rewrittenStatements[j]->setToInternal();
484 statements.push_back(std::move(rewrittenStatements[j]));
485 }
486 auto lastRewrittenStatement = rewrittenStatements.back();
487 lastRewrittenStatement->setParsingTime(avgParsingTime + avgRewriteParsingTime);
488 statements.push_back(std::move(lastRewrittenStatement));
489 }
490 }
491 return statements;
492}
493
494void ClientContext::validateTransaction(bool readOnly, bool requireTransaction) const {
495 if (!canExecuteWriteQuery() && !readOnly) {

Callers

nothing calls this directly

Calls 11

getElapsedTimeMSMethod · 0.80
getRewriteQueryMethod · 0.80
setParsingTimeMethod · 0.80
setToInternalMethod · 0.80
TimeMetricClass · 0.50
emptyMethod · 0.45
startMethod · 0.45
stopMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected