github-actions[bot] commented on code in PR #26317: URL: https://github.com/apache/doris/pull/26317#discussion_r1383057871
########## be/src/vec/exec/vjdbc_connector.cpp: ########## @@ -223,6 +198,158 @@ Status JdbcConnector::query() { return Status::OK(); } +Status JdbcConnector::get_next(bool* eos, Block* block, int batch_size) { + if (!_is_open) { + return Status::InternalError("get_next before open of jdbc connector."); + } + SCOPED_RAW_TIMER(&_jdbc_statistic._get_data_timer); + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + jboolean has_next = + env->CallNonvirtualBooleanMethod(_executor_obj, _executor_clazz, _executor_has_next_id); + if (has_next != JNI_TRUE) { + *eos = true; + return Status::OK(); + } + + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + + auto column_size = _tuple_desc->slots().size(); + auto slots = _tuple_desc->slots(); + + jobject map = _get_reader_params(block, env, column_size); + long address = + env->CallLongMethod(_executor_obj, _executor_get_block_address_id, batch_size, map); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + env->DeleteLocalRef(map); + + std::vector<size_t> all_columns; + for (size_t i = 0; i < column_size; ++i) { + all_columns.push_back(i); + } + Status fill_block_status = JniConnector::fill_block(block, all_columns, address); + if (!fill_block_status) { + return fill_block_status; + } + + Status cast_status = _cast_string_to_special(block, env, column_size); + + if (!cast_status) { + return cast_status; + } + + return JniUtil::GetJniExceptionMsg(env); +} + +Status JdbcConnector::append(vectorized::Block* block, + const vectorized::VExprContextSPtrs& output_vexpr_ctxs, + uint32_t start_send_row, uint32_t* num_rows_sent, Review Comment: warning: pointer parameter 'num_rows_sent' can be pointer to const [readability-non-const-parameter] ```suggestion uint32_t start_send_row, const uint32_t* num_rows_sent, ``` ########## be/src/vec/exec/vjdbc_connector.cpp: ########## @@ -223,6 +198,158 @@ return Status::OK(); } +Status JdbcConnector::get_next(bool* eos, Block* block, int batch_size) { + if (!_is_open) { + return Status::InternalError("get_next before open of jdbc connector."); + } + SCOPED_RAW_TIMER(&_jdbc_statistic._get_data_timer); + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + jboolean has_next = + env->CallNonvirtualBooleanMethod(_executor_obj, _executor_clazz, _executor_has_next_id); + if (has_next != JNI_TRUE) { + *eos = true; + return Status::OK(); + } + + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + + auto column_size = _tuple_desc->slots().size(); + auto slots = _tuple_desc->slots(); + + jobject map = _get_reader_params(block, env, column_size); + long address = + env->CallLongMethod(_executor_obj, _executor_get_block_address_id, batch_size, map); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + env->DeleteLocalRef(map); + + std::vector<size_t> all_columns; + for (size_t i = 0; i < column_size; ++i) { + all_columns.push_back(i); + } + Status fill_block_status = JniConnector::fill_block(block, all_columns, address); + if (!fill_block_status) { + return fill_block_status; + } + + Status cast_status = _cast_string_to_special(block, env, column_size); + + if (!cast_status) { + return cast_status; + } + + return JniUtil::GetJniExceptionMsg(env); +} + +Status JdbcConnector::append(vectorized::Block* block, + const vectorized::VExprContextSPtrs& output_vexpr_ctxs, + uint32_t start_send_row, uint32_t* num_rows_sent, + TOdbcTableType::type table_type) { + RETURN_IF_ERROR(exec_stmt_write(block, output_vexpr_ctxs, num_rows_sent)); + COUNTER_UPDATE(_sent_rows_counter, *num_rows_sent); + return Status::OK(); +} + +Status JdbcConnector::exec_stmt_write(Block* block, const VExprContextSPtrs& output_vexpr_ctxs, Review Comment: warning: method 'exec_stmt_write' can be made static [readability-convert-member-functions-to-static] ```suggestion static Status JdbcConnector::exec_stmt_write(Block* block, const VExprContextSPtrs& output_vexpr_ctxs, ``` ########## be/src/vec/exec/vjdbc_connector.cpp: ########## @@ -223,6 +198,158 @@ return Status::OK(); } +Status JdbcConnector::get_next(bool* eos, Block* block, int batch_size) { + if (!_is_open) { + return Status::InternalError("get_next before open of jdbc connector."); + } + SCOPED_RAW_TIMER(&_jdbc_statistic._get_data_timer); + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + jboolean has_next = + env->CallNonvirtualBooleanMethod(_executor_obj, _executor_clazz, _executor_has_next_id); + if (has_next != JNI_TRUE) { + *eos = true; + return Status::OK(); + } + + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + + auto column_size = _tuple_desc->slots().size(); + auto slots = _tuple_desc->slots(); + + jobject map = _get_reader_params(block, env, column_size); + long address = + env->CallLongMethod(_executor_obj, _executor_get_block_address_id, batch_size, map); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + env->DeleteLocalRef(map); + + std::vector<size_t> all_columns; + for (size_t i = 0; i < column_size; ++i) { + all_columns.push_back(i); + } + Status fill_block_status = JniConnector::fill_block(block, all_columns, address); + if (!fill_block_status) { + return fill_block_status; + } + + Status cast_status = _cast_string_to_special(block, env, column_size); + + if (!cast_status) { + return cast_status; + } + + return JniUtil::GetJniExceptionMsg(env); +} + +Status JdbcConnector::append(vectorized::Block* block, + const vectorized::VExprContextSPtrs& output_vexpr_ctxs, + uint32_t start_send_row, uint32_t* num_rows_sent, + TOdbcTableType::type table_type) { + RETURN_IF_ERROR(exec_stmt_write(block, output_vexpr_ctxs, num_rows_sent)); + COUNTER_UPDATE(_sent_rows_counter, *num_rows_sent); + return Status::OK(); +} + +Status JdbcConnector::exec_stmt_write(Block* block, const VExprContextSPtrs& output_vexpr_ctxs, + uint32_t* num_rows_sent) { + SCOPED_TIMER(_result_send_timer); + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + + // prepare table meta information + std::unique_ptr<long[]> meta_data; + RETURN_IF_ERROR(JniConnector::to_java_table(block, meta_data)); + long meta_address = (long)meta_data.get(); + auto table_schema = JniConnector::parse_table_schema(block); + + // prepare constructor parameters + std::map<String, String> write_params = {{"meta_address", std::to_string(meta_address)}, + {"required_fields", table_schema.first}, + {"columns_types", table_schema.second}}; + jobject hashmap_object = JniUtil::convert_to_java_map(env, write_params); + env->CallNonvirtualIntMethod(_executor_obj, _executor_clazz, _executor_stmt_write_id, + hashmap_object); + env->DeleteLocalRef(hashmap_object); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + *num_rows_sent = block->rows(); + return Status::OK(); +} + +Status JdbcConnector::begin_trans() { + if (_use_tranaction) { + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + env->CallNonvirtualVoidMethod(_executor_obj, _executor_clazz, _executor_begin_trans_id); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + _is_in_transaction = true; + } + return Status::OK(); +} + +Status JdbcConnector::abort_trans() { + if (!_is_in_transaction) { + return Status::InternalError("Abort transaction before begin trans."); + } + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + env->CallNonvirtualVoidMethod(_executor_obj, _executor_clazz, _executor_abort_trans_id); + return JniUtil::GetJniExceptionMsg(env); +} + +Status JdbcConnector::finish_trans() { + if (_use_tranaction && _is_in_transaction) { + JNIEnv* env = nullptr; + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + env->CallNonvirtualVoidMethod(_executor_obj, _executor_clazz, _executor_finish_trans_id); + RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env)); + _is_in_transaction = false; + } + return Status::OK(); +} + +Status JdbcConnector::_register_func_id(JNIEnv* env) { Review Comment: warning: method '_register_func_id' can be made static [readability-convert-member-functions-to-static] ```suggestion static Status JdbcConnector::_register_func_id(JNIEnv* env) { ``` ########## be/src/vec/exec/vjdbc_connector.cpp: ########## @@ -419,432 +534,94 @@ return Status::OK(); } -Status JdbcConnector::get_next(bool* eos, std::vector<MutableColumnPtr>& columns, Block* block, - int batch_size) { - if (!_is_open) { - return Status::InternalError("get_next before open of jdbc connector."); - } - SCOPED_RAW_TIMER(&_jdbc_statistic._get_data_timer); - JNIEnv* env = nullptr; - RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); - jboolean has_next = - env->CallNonvirtualBooleanMethod(_executor_obj, _executor_clazz, _executor_has_next_id); - if (has_next != JNI_TRUE) { - *eos = true; - return Status::OK(); - } +std::string JdbcConnector::_jobject_to_string(JNIEnv* env, jobject jobj) { + jobject jstr = env->CallObjectMethod(jobj, _to_string_id); + auto coding = env->NewStringUTF("UTF-8"); + const jbyteArray stringJbytes = (jbyteArray)env->CallObjectMethod(jstr, _get_bytes_id, coding); + size_t length = (size_t)env->GetArrayLength(stringJbytes); Review Comment: warning: use auto when initializing with a cast to avoid duplicating the type name [modernize-use-auto] ```suggestion auto length = (size_t)env->GetArrayLength(stringJbytes); ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org