36 void init_driver (driver *driver, session &session);
65 driver->
initialize (cls_installer, obj_loader, error_handler_);
85 return parser_result == 0;
133 if (cls_entry ==
NULL)
135 if (!is_syntax_check_only)
151 int tran_index = thread_ref.tran_index;
294 std::unique_lock<std::mutex> ulock (
m_mutex);
301 auto pred = [
this] () ->
bool 312 std::unique_lock<std::mutex> ulock (
m_mutex);
319 std::unique_lock<std::mutex> ulock (
m_mutex);
336 std::unique_lock<std::mutex> ulock (
m_mutex);
361 std::unique_lock<std::mutex> ulock (
m_mutex);
369 std::unique_lock<std::mutex> ulock (
m_mutex);
381 std::unique_lock<std::mutex> ulock (
m_mutex, std::defer_lock);
416 std::unique_lock<std::mutex> ulock (
m_mutex);
429 std::unique_lock<std::mutex> ulock (
m_mutex);
447 std::unique_lock<std::mutex> ulock (
m_mutex);
472 curr_max = atomic_val.load ();
473 if (curr_max >= new_max)
479 while (!atomic_val.compare_exchange_strong (curr_max, new_max));
490 std::vector<const class_entry *> class_entries;
532 if (cls_entry !=
NULL)
594 std::unique_lock<std::mutex> ulock (
m_mutex);
595 auto pred = [&] () ->
bool 598 if (is_batch_accepted)
606 else if (!use_temp_batch)
609 use_temp_batch =
true;
619 const std::chrono::milliseconds WAIT_MS { 10 };
621 if (
m_cond_var.wait_for (ulock, WAIT_MS, pred))
650 std::unique_lock<std::mutex> ulock (
m_mutex, std::defer_lock);
656 std::vector<stats> stats_;
660 assert (!stats_.empty ());
void on_error(std::string &err_msg)
void notify_batch_done_and_register_tran_end(batch_id id, int tran_index)
int parse(std::istream &iss, int line_offset=0)
void execute(cubthread::entry &thread_ref) final
std::string error_message
void update_class_statistics(cubthread::entry &thread_ref)
void notify_waiting_threads()
css_conn_entry * conn_entry
int install_class(cubthread::entry &thread_ref, const batch &batch, bool &is_ignored, std::string &cls_name)
void stats_update_rows_committed(int64_t rows_committed)
#define TRAN_DEFAULT_ISOLATION_LEVEL()
virtual int install_class(const char *class_name)=0
load_task(const batch &batch, session &session, css_conn_entry &conn_entry)
int64_t stats_get_rows_committed()
css_conn_entry & m_conn_entry
bool logtb_set_tran_index_interrupt(THREAD_ENTRY *thread_p, int tran_index, bool set)
#define SM_MAX_IDENTIFIER_LENGTH
class_registry m_class_registry
bool invoke_parser(driver *driver, const batch &batch_)
TRAN_STATE xtran_server_commit(THREAD_ENTRY *thrd, bool retain_lock)
std::atomic< batch_id > m_max_batch_id
TRAN_STATE xtran_server_abort(THREAD_ENTRY *thrd)
const char * get_class_name() const
std::set< int > m_tran_indexes
void notify_batch_done(batch_id id)
virtual void init(class_id clsid)=0
void wait_for_completion()
const class_entry * get_class_entry(class_id clsid)
void append_log_msg(MSGCAT_LOADDB_MSG msg_id, Args &&...args)
std::atomic< int64_t > current_line
const batch_id FIRST_BATCH_ID
std::condition_variable m_cond_var
const batch_id NULL_BATCH_ID
class_registry & get_class_registry()
void notify_done_and_tran_end(int tran_index)
#define TRAN_LOCK_INFINITE_WAIT
cubload::driver * m_loaddb_driver
const class_id FIRST_CLASS_ID
const load_args & get_args()
std::atomic< size_t > m_active_task_count
virtual std::size_t get_rows_number()=0
int64_t last_committed_line
int logtb_assign_tran_index(THREAD_ENTRY *thread_p, TRANID trid, TRAN_STATE state, const BOOT_CLIENT_CREDENTIAL *client_credential, TRAN_STATE *current_state, int wait_msecs, TRAN_ISOLATION isolation)
void worker_manager_unregister_session(session &load_session)
const std::string & get_content() const
void fetch_status(load_status &status, bool has_lock=false)
int load_batch(cubthread::entry &thread_ref, const batch *batch, bool use_temp_batch, bool &is_batch_accepted, load_status &status)
int64_t get_line_offset() const
void logtb_free_tran_index(THREAD_ENTRY *thread_p, int tran_index)
void register_tran_start(int tran_index)
void on_failure_with_line(MSGCAT_LOADDB_MSG msg_id, Args &&...args)
void init_driver(driver *driver, session &session)
int er_errid_if_has_error(void)
int intl_identifier_lower_string_size(const char *src)
void update_atomic_value_with_max(std::atomic< T > &atomic_val, T new_max)
int xstats_update_statistics(THREAD_ENTRY *thread_p, OID *classoid, bool with_fullscan)
class_installer & get_class_installer()
object_loader & get_object_loader()
std::vector< stats > m_collected_stats
void stats_update_last_committed_line(int64_t last_committed_line)
void initialize(class_installer *cls_installer, object_loader *obj_loader, error_handler *error_handler)
class_id get_class_id() const
void fail(bool has_lock=false)
cubthread::entry_task * m_temp_task
void stats_update_current_line(int64_t current_line)
#define STATS_WITH_SAMPLING
void worker_manager_register_session(session &load_session)
bool worker_manager_try_task(cubthread::entry_task *task)
void set_ids(db_client_type type, const char *client_info, const char *db_user, const char *program_name, const char *login_name, const char *host_name, int process_id)
void wait_for_previous_batch(batch_id id)
const OID & get_class_oid() const
virtual void set_class_id(class_id clsid)=0
error_handler & get_error_handler()
void on_error_with_line(MSGCAT_LOADDB_MSG msg_id, Args &&...args)
void get_all_class_entries(std::vector< const class_entry * > &entries) const
cubload::load_status load_status
void on_error(MSGCAT_LOADDB_MSG msg_id, Args &&...args)
bool m_was_session_notified