void Query::Execute() { std::ostream& output = GetEnvironment().GetOutputStream(); if (m_isSingleQuery) { output << "Processing query \"" << m_query << "\"" << std::endl; auto instrumentation = QueryRunner::Run(m_query.c_str(), GetEnvironment().GetSimpleIndex(), GetEnvironment().GetCompilerMode(), GetEnvironment().GetCacheLineCountMode()); output << "Results:" << std::endl; CsvTsv::CsvTableFormatter formatter(output); QueryInstrumentation::Data::FormatHeader(formatter); instrumentation.Format(formatter); } else { CHECK_NE(*GetEnvironment().GetOutputDir().c_str(), '\0') << "Output directory not set. " << "Please use the 'cd' command to set an " << "output directory"; output << "Processing queries from log at \"" << m_query << "\"" << std::endl; std::string const & filename = m_query; auto fileSystem = Factories::CreateFileSystem(); // TODO: Use environment file system auto queries = ReadLines(*fileSystem, filename.c_str()); const size_t c_threadCount = GetEnvironment().GetThreadCount(); const size_t c_iterations = 1; auto statistics = QueryRunner::Run(GetEnvironment().GetSimpleIndex(), GetEnvironment().GetOutputDir().c_str(), c_threadCount, queries, c_iterations, GetEnvironment().GetCompilerMode(), GetEnvironment().GetCacheLineCountMode()); output << "Results:" << std::endl; statistics.Print(output); // TODO: unify this with the fileManager that's passed into // QueryRunner::Run. auto outFileManager = Factories::CreateFileManager(GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetSimpleIndex().GetFileSystem()); auto outSummary = outFileManager->QuerySummaryStatistics().OpenForWrite(); statistics.Print(*outSummary); } }
void Query::Execute() { std::ostream& output = GetEnvironment().GetOutputStream(); try { if (m_queryCommand == QueryOne) { output << "Processing query \"" << m_query << "\"" << std::endl; auto instrumentation = QueryRunner::Run(m_query.c_str(), GetEnvironment().GetSimpleIndex(), GetEnvironment().GetCompilerMode(), GetEnvironment().GetCacheLineCountMode()); output << "Results:" << std::endl; CsvTsv::CsvTableFormatter formatter(output); QueryInstrumentation::Data::FormatHeader(formatter); instrumentation.Format(formatter); } else if (m_queryCommand == QueryDocs) { output << "Processing query \"" << m_query << "\"" << std::endl; BitFunnel::QueryInstrumentation instrumentation; auto resultsBuffer = BitFunnel::ResultsBuffer(GetEnvironment().GetSimpleIndex().GetIngestor().GetDocumentCount()); auto streammap = BitFunnel::Factories::CreateStreamConfiguration(); auto queryEngine = BitFunnel::Factories::CreateQueryEngine(GetEnvironment().GetSimpleIndex(), *streammap); auto tree = queryEngine->Parse(m_query.c_str()); instrumentation.FinishParsing(); if (tree != nullptr) { queryEngine->Run(tree, instrumentation, resultsBuffer); } output << "Results:" << std::endl; CsvTsv::CsvTableFormatter formatter(output); QueryInstrumentation::Data::FormatHeader(formatter); instrumentation.GetData().Format(formatter); output << std::endl << "Document Ids" << std::endl; for (auto result : resultsBuffer) { output << result.GetHandle().GetDocId() << std::endl; } } else { CHECK_NE(*GetEnvironment().GetOutputDir().c_str(), '\0') << "Output directory not set. " << "Please use the 'cd' command to set an " << "output directory"; output << "Processing queries from log at \"" << m_query << "\"" << std::endl; std::string const & filename = m_query; auto fileSystem = Factories::CreateFileSystem(); // TODO: Use environment file system auto queries = ReadLines(*fileSystem, filename.c_str()); const size_t c_threadCount = GetEnvironment().GetThreadCount(); const size_t c_iterations = 1; auto statistics = QueryRunner::Run(GetEnvironment().GetSimpleIndex(), GetEnvironment().GetOutputDir().c_str(), c_threadCount, queries, c_iterations, GetEnvironment().GetCompilerMode(), GetEnvironment().GetCacheLineCountMode()); output << "Results:" << std::endl; statistics.Print(output); // TODO: unify this with the fileManager that's passed into // QueryRunner::Run. auto outFileManager = Factories::CreateFileManager(GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetOutputDir().c_str(), GetEnvironment().GetSimpleIndex().GetFileSystem()); auto outSummary = outFileManager->QuerySummaryStatistics().OpenForWrite(); statistics.Print(*outSummary); } } catch (RecoverableError e) { output << "Error: " << e.what() << std::endl; } catch (Logging::CheckException e) { output << "Error: " << e.GetMessage().c_str() << std::endl; } }