Skip to content

File px_heap_scan.hpp

File List > cubrid > src > query > parallel > px_heap_scan > px_heap_scan.hpp

Go to the documentation of this file

/*
 *
 * Copyright 2016 CUBRID Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

/*
 * px_heap_scan.hpp
 */

#ifndef _PX_HEAP_SCAN_MANAGER_HPP_
#define _PX_HEAP_SCAN_MANAGER_HPP_

#include "xasl.h"
#include "px_worker_manager.hpp"
#include "px_heap_scan_result_handler.hpp"
#include "px_heap_scan_input_handler_ftabs.hpp"
#include "px_heap_scan_trace_handler.hpp"
#include "px_heap_scan_result_type.hpp"
#include "query_manager.h"
#include "px_heap_scan_join_info.hpp"

namespace parallel_heap_scan
{
  template <RESULT_TYPE result_type>
  class manager
  {
      using interrupt = parallel_query::interrupt;
      using err_messages_with_lock = parallel_query::err_messages_with_lock;
      using input_handler = parallel_heap_scan::input_handler_ftabs;
      using atomic_instnum = parallel_query::atomic_instnum;
      using worker_manager = parallel_query::worker_manager;
    public:
      manager (THREAD_ENTRY *thread_p, QUERY_ID query_id, SCAN_ID *scan_id, xasl_node *xasl, int parallelism, HFID hfid,
           OID cls_oid,
           val_descr *vd,
           bool is_fixed, bool is_grouped,
           worker_manager *worker_manager)
    : m_thread_p (thread_p),
      m_query_id (query_id),
      m_scan_id (scan_id),
      m_query_entry (nullptr),
      m_xasl (xasl),
      m_parallelism (parallelism),
      m_hfid (hfid),
      m_cls_oid (cls_oid),
      m_vd (nullptr),
      m_orig_vd (vd),
      m_input_handler (nullptr),
      m_result_handler (nullptr),
      m_on_trace (false),
      m_px_stats_initialized_by_me (false),
      m_result_handler_read_initialized (false),
      m_task_started (false),
      m_trace_handler (),
      m_interrupt (),
      m_atomic_instnum (),
      m_err_messages (),
      m_worker_manager (worker_manager),
      m_is_fixed (is_fixed),
      m_is_grouped (is_grouped),
      m_uses_xasl_clone (false),
      m_g_agg_domain_resolve_need (false)
      {}
      ~manager();
      int open();
      int start_tasks();
      SCAN_CODE next();
      int reset ();
      int merge_stats();
      int end();
      int close();
      trace_handler &get_trace_handler()
      {
    return m_trace_handler;
      }
      RESULT_TYPE get_result_type()
      {
    return result_type;
      }

    private:
      THREAD_ENTRY *m_thread_p;
      QUERY_ID m_query_id;
      SCAN_ID *m_scan_id;
      QMGR_QUERY_ENTRY *m_query_entry;
      xasl_node *m_xasl;
      int m_parallelism;
      HFID m_hfid;
      OID m_cls_oid;
      val_descr *m_vd;
      val_descr *m_orig_vd;
      input_handler_ftabs *m_input_handler;
      result_handler<result_type> *m_result_handler;
      bool m_on_trace;
      bool m_px_stats_initialized_by_me;
      bool m_result_handler_read_initialized;
      bool m_task_started;
      trace_handler m_trace_handler;
      interrupt m_interrupt;
      atomic_instnum m_atomic_instnum;
      err_messages_with_lock m_err_messages;
      worker_manager *m_worker_manager;
      join_info m_join_info;
      bool m_is_fixed;
      bool m_is_grouped;
      bool m_uses_xasl_clone;
      bool m_g_agg_domain_resolve_need;
  };
}

extern "C"
{
  extern SCAN_CODE scan_next_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id);
  extern int scan_reset_scan_block_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id);
  extern void scan_end_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id);
  extern void scan_close_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id);
  extern int scan_open_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id, bool mvcc_select_lock_needed,
      int fixed_scan, int grouped_scan, VAL_DESCR *vd, ACCESS_SPEC_TYPE *spec, OID *class_oid, HFID *class_hfid,
      XASL_NODE *xasl, QUERY_ID query_id);
  extern int scan_start_parallel_heap_scan (THREAD_ENTRY *thread_p, SCAN_ID *scan_id);
}

#endif /*_PX_HEAP_SCAN_MANAGER_HPP_ */