MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / executeQuery

Method executeQuery

src/Server/GRPCServer.cpp:875–1043  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

873 }
874
875 void Call::executeQuery()
876 {
877 /// Retrieve user credentials.
878 std::string user = query_info.user_name();
879 std::string password = query_info.password();
880 std::string quota_key = query_info.quota();
881 Poco::Net::SocketAddress user_address = responder->getClientAddress();
882
883 if (user.empty())
884 {
885 user = "default";
886 password = "";
887 }
888
889 /// Authentication.
890 session.emplace(iserver.context(), ClientInfo::Interface::GRPC);
891 session->authenticate(user, password, user_address);
892 session->setQuotaClientKey(quota_key);
893
894 ClientInfo client_info = session->getClientInfo();
895
896 /// Parse the OpenTelemetry traceparent header.
897 auto traceparent = responder->getClientHeader("traceparent");
898 if (traceparent)
899 {
900 String error;
901 if (!client_info.client_trace_context.parseTraceparentHeader(traceparent.value(), error))
902 {
903 throw Exception(ErrorCodes::BAD_REQUEST_PARAMETER,
904 "Failed to parse OpenTelemetry traceparent header '{}': {}",
905 traceparent.value(), error);
906 }
907 auto tracestate = responder->getClientHeader("tracestate");
908 client_info.client_trace_context.tracestate = tracestate.value_or("");
909 }
910
911 /// The user could specify session identifier and session timeout.
912 /// It allows to modify settings, create temporary tables and reuse them in subsequent requests.
913 if (!query_info.session_id().empty())
914 {
915 session->makeSessionContext(
916 query_info.session_id(), getSessionTimeout(query_info, iserver.config()), query_info.session_check());
917 }
918
919 query_context = session->makeQueryContext(std::move(client_info));
920
921 /// Prepare settings.
922 SettingsChanges settings_changes;
923 for (const auto & [key, value] : query_info.settings())
924 {
925 settings_changes.push_back({key, value});
926 }
927 query_context->checkSettingsConstraints(settings_changes, SettingSource::QUERY);
928 query_context->applySettingsChanges(settings_changes);
929
930 query_context->setCurrentQueryId(query_info.query_id());
931 query_scope = QueryScope::create(query_context, /* fatal_error_callback */ [this]{ onFatalError(); });
932

Callers 10

mainMethod · 0.45
testSimpleDataTypesMethod · 0.45
testStringTypesMethod · 0.45
testDecimalTypesMethod · 0.45
testDateTypesMethod · 0.45
testDateTimeTimezonesMethod · 0.45
testMiscTypesMethod · 0.45

Calls 15

getSessionTimeoutFunction · 0.85
parseQueryFunction · 0.85
chooseCompressionMethodFunction · 0.85
user_nameMethod · 0.80
passwordMethod · 0.80
getClientHeaderMethod · 0.80
settingsMethod · 0.80
setCurrentQueryIdMethod · 0.80
setSourceRegexpMethod · 0.80

Tested by 10

mainMethod · 0.36
testSimpleDataTypesMethod · 0.36
testStringTypesMethod · 0.36
testDecimalTypesMethod · 0.36
testDateTypesMethod · 0.36
testDateTimeTimezonesMethod · 0.36
testMiscTypesMethod · 0.36