| 253 | } |
| 254 | |
| 255 | Status ImpalaServer::TExecuteStatementReqToTQueryContext( |
| 256 | const TExecuteStatementReq execute_request, TQueryCtx* query_ctx) { |
| 257 | query_ctx->client_request.stmt = execute_request.statement; |
| 258 | QueryOptionsMask set_query_options_mask; |
| 259 | { |
| 260 | shared_ptr<SessionState> session_state; |
| 261 | TUniqueId session_id; |
| 262 | TUniqueId secret; |
| 263 | RETURN_IF_ERROR(THandleIdentifierToTUniqueId(execute_request.sessionHandle.sessionId, |
| 264 | &session_id, &secret)); |
| 265 | |
| 266 | RETURN_IF_ERROR( |
| 267 | GetSessionState(session_id, SecretArg::Session(secret), &session_state)); |
| 268 | session_state->ToThrift(session_id, &query_ctx->session); |
| 269 | lock_guard<mutex> l(session_state->lock); |
| 270 | query_ctx->client_request.query_options = session_state->QueryOptions(); |
| 271 | set_query_options_mask = session_state->set_query_options_mask; |
| 272 | } |
| 273 | |
| 274 | if (execute_request.__isset.confOverlay) { |
| 275 | TQueryOptions overlay; |
| 276 | QueryOptionsMask overlay_mask; |
| 277 | map<string, string>::const_iterator conf_itr = execute_request.confOverlay.begin(); |
| 278 | for (; conf_itr != execute_request.confOverlay.end(); ++conf_itr) { |
| 279 | if (conf_itr->first == IMPALA_RESULT_CACHING_OPT) continue; |
| 280 | if (conf_itr->first == ChildQuery::PARENT_QUERY_OPT) { |
| 281 | if (ParseId(conf_itr->second, &query_ctx->parent_query_id)) { |
| 282 | query_ctx->__isset.parent_query_id = true; |
| 283 | } |
| 284 | continue; |
| 285 | } |
| 286 | RETURN_IF_ERROR(SetQueryOption(conf_itr->first, conf_itr->second, |
| 287 | &overlay, &overlay_mask)); |
| 288 | } |
| 289 | OverlayQueryOptions(overlay, overlay_mask, &query_ctx->client_request.query_options); |
| 290 | set_query_options_mask |= overlay_mask; |
| 291 | } |
| 292 | // Only query options not set in the session or confOverlay can be overridden by the |
| 293 | // pool options. |
| 294 | AddPoolConfiguration(query_ctx, ~set_query_options_mask); |
| 295 | VLOG_QUERY << "TClientRequest.queryOptions: " |
| 296 | << DebugQueryOptions(query_ctx->client_request.query_options); |
| 297 | return Status::OK(); |
| 298 | } |
| 299 | |
| 300 | // HiveServer2 API |
| 301 | void ImpalaServer::OpenSession(TOpenSessionResp& return_val, |