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