ClickHouse/src/Interpreters/executeQuery.h

60 lines
2.7 KiB
C++
Raw Normal View History

2011-10-30 11:30:52 +00:00
#pragma once
#include <Core/QueryProcessingStage.h>
#include <DataStreams/BlockIO.h>
2019-03-26 18:28:37 +00:00
#include <Processors/QueryPipeline.h>
2011-10-30 11:30:52 +00:00
namespace DB
{
2019-05-25 14:15:22 +00:00
class ReadBuffer;
class WriteBuffer;
using FlushBufferCallback = std::function<void(WriteBuffer & out, size_t num_rows)>;
2011-10-30 11:30:52 +00:00
2017-01-18 13:53:20 +00:00
/// Parse and execute a query.
2011-10-30 11:30:52 +00:00
void executeQuery(
ReadBuffer & istr, /// Where to read query from (and data for INSERT, if present).
WriteBuffer & ostr, /// Where to write query output to.
bool allow_into_outfile, /// If true and the query contains INTO OUTFILE section, redirect output to that file.
2021-07-16 10:10:56 +00:00
ContextMutablePtr context, /// DB, tables, data types, storage engines, functions, aggregate functions...
2021-07-09 13:43:00 +00:00
std::function<void(const String &, const String &, const String &, const String &)> set_result_details, /// If a non-empty callback is passed, it will be called with the query id, the content-type, the format, and the timezone.
2021-07-16 10:10:56 +00:00
const std::optional<FormatSettings> & output_format_settings = std::nullopt, /// Format settings for output format, will be calculated from the context if not set.
FlushBufferCallback flush_buffer_callback = {}
);
2011-10-30 11:30:52 +00:00
2012-03-11 08:52:56 +00:00
2017-01-18 13:53:20 +00:00
/// More low-level function for server-to-server interaction.
/// Prepares a query for execution but doesn't execute it.
/// Returns a pair of block streams which, when used, will result in query execution.
/// This means that the caller can to the extent control the query execution pipeline.
///
/// To execute:
/// * if present, write INSERT data into BlockIO::out
/// * then read the results from BlockIO::in.
///
/// If the query doesn't involve data insertion or returning of results, out and in respectively
/// will be equal to nullptr.
///
/// Correctly formatting the results (according to INTO OUTFILE and FORMAT sections)
/// must be done separately.
2012-03-11 08:52:56 +00:00
BlockIO executeQuery(
2020-03-28 03:02:26 +00:00
const String & query, /// Query text without INSERT data. The latter must be written to BlockIO::out.
2021-05-31 14:49:02 +00:00
ContextMutablePtr context, /// DB, tables, data types, storage engines, functions, aggregate functions...
bool internal = false, /// If true, this query is caused by another query and thus needn't be registered in the ProcessList.
QueryProcessingStage::Enum stage = QueryProcessingStage::Complete, /// To which stage the query must be executed.
bool may_have_embedded_data = false /// If insert query may have embedded data
);
2012-03-11 08:52:56 +00:00
2020-05-19 14:06:33 +00:00
/// Old interface with allow_processors flag. For compatibility.
BlockIO executeQuery(
const String & query,
2021-05-31 14:49:02 +00:00
ContextMutablePtr context,
2020-05-19 14:06:33 +00:00
bool internal,
QueryProcessingStage::Enum stage,
bool may_have_embedded_data,
bool allow_processors /// If can use processors pipeline
2019-03-26 18:28:37 +00:00
);
2011-10-30 11:30:52 +00:00
}