This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit d54b97eb5779c442f3aeae668140abf30d848716
Author: zy-kkk <[email protected]>
AuthorDate: Thu Jul 6 17:33:49 2023 +0800

    [fix](type system) fix datetimev2 write column to arrow (#21529)
    
    *** Query id: c1d804d455a24dee-a8967d16a258fc15 ***
    *** Aborted at 1688530361 (unix time) try "date -d @1688530361" if you are 
using GNU date ***
    *** Current BE git commitID: f2025b9 ***
    *** SIGSEGV unknown detail explain (@0x0) received by PID 3709755 (TID 
3710413 OR 0x7f5661d57700) from PID 0; stack trace: ***
     0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at /root/doris/be/src/common/signal_handler.h:413
     1# os::Linux::chained_handler(int, siginfo*, void*) in 
/usr/lib/jvm/TencentKona-8.0.12-352/jre/lib/amd64/server/[libjvm.so](http://libjvm.so/)
     2# JVM_handle_linux_signal in 
/usr/lib/jvm/TencentKona-8.0.12-352/jre/lib/amd64/server/[libjvm.so](http://libjvm.so/)
     3# signalHandler(int, siginfo*, void*) in 
/usr/lib/jvm/TencentKona-8.0.12-352/jre/lib/amd64/server/[libjvm.so](http://libjvm.so/)
     4# 0x00007F5795EE5B50 in /lib64/libc.so.6
     5# 
doris::vectorized::DateV2Value<doris::vectorized::DateTimeV2ValueType>::to_buffer(char*,
 int) const at /root/doris/be/src/vec/runtime/vdatetime_value.cpp:2409
     6# 
doris::vectorized::DataTypeDateTimeV2SerDe::write_column_to_arrow(doris::vectorized::IColumn
 const&, unsigned char const*, arrow::ArrayBuilder*, int, int) const in 
/mnt/disk2/zhaobingquan/doris/be/lib/doris_be
     7# 
doris::vectorized::DataTypeNullableSerDe::write_column_to_arrow(doris::vectorized::IColumn
 const&, unsigned char const*, arrow::ArrayBuilder*, int, int) const at 
/root/doris/be/src/vec/data_types/serde/data_type_nullable_serde.cpp:120
     8# 
doris::FromBlockConverter::convert(std::shared_ptr<arrow::RecordBatch>*) at 
/root/doris/be/src/util/arrow/block_convertor.cpp:392
     9# doris::convert_to_arrow_batch(doris::vectorized::Block const&, 
std::shared_ptr<arrow::Schema> const&, arrow::MemoryPool*, 
std::shared_ptr<arrow::RecordBatch>*) in 
/mnt/disk2/zhaobingquan/doris/be/lib/doris_be
    10# doris::vectorized::MemoryScratchSink::send(doris::RuntimeState*, 
doris::vectorized::Block*, bool) at 
/root/doris/be/src/vec/sink/vmemory_scratch_sink.cpp:83
    11# doris::PlanFragmentExecutor::open_vectorized_internal() in 
/mnt/disk2/zhaobingquan/doris/be/lib/doris_be
    12# doris::PlanFragmentExecutor::open() at 
/root/doris/be/src/runtime/plan_fragment_executor.cpp:273
    13# doris::FragmentExecState::execute() at 
/root/doris/be/src/runtime/fragment_mgr.cpp:263
    14# 
doris::FragmentMgr::_exec_actual(std::shared_ptr<doris::FragmentExecState>, 
std::function<void (doris::RuntimeState*, doris::Status*)> const&) at 
/root/doris/be/src/runtime/fragment_mgr.cpp:527
    15# std::_Function_handler<void (), 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> 
const&)::$_0>::_M_invoke(std::_Any_data const&) at 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
    16# doris::ThreadPool::dispatch_thread() in 
/mnt/disk2/zhaobingquan/doris/be/lib/doris_be
    17# doris::Thread::supervise_thread(void*) at 
/root/doris/be/src/util/thread.cpp:466
    18# start_thread in /lib64/libpthread.so.0
    19# __clone in /lib64/libc.so.6
---
 .../serde/data_type_datetimev2_serde.cpp           |  4 +--
 regression-test/suites/source_p0/ddl/create.sql    | 19 +++++++++++
 regression-test/suites/source_p0/ddl/insert.sql    |  1 +
 .../suites/source_p0/doris_source.groovy           | 39 ++++++++++++++++++++++
 4 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp 
b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
index 0edfc0ae41..5b912ff79e 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
@@ -35,7 +35,7 @@ void DataTypeDateTimeV2SerDe::write_column_to_arrow(const 
IColumn& column, const
     for (size_t i = start; i < end; ++i) {
         char buf[64];
         const vectorized::DateV2Value<vectorized::DateTimeV2ValueType>* 
time_val =
-                (const 
vectorized::DateV2Value<vectorized::DateTimeV2ValueType>*)(col_data[i]);
+                (const 
vectorized::DateV2Value<vectorized::DateTimeV2ValueType>*)(&col_data[i]);
         int len = time_val->to_buffer(buf);
         if (null_map && null_map[i]) {
             checkArrowStatus(string_builder.AppendNull(), column.get_name(),
@@ -76,4 +76,4 @@ Status DataTypeDateTimeV2SerDe::write_column_to_mysql(const 
IColumn& column,
 }
 
 } // namespace vectorized
-} // namespace doris
\ No newline at end of file
+} // namespace doris
diff --git a/regression-test/suites/source_p0/ddl/create.sql 
b/regression-test/suites/source_p0/ddl/create.sql
new file mode 100644
index 0000000000..757be2e121
--- /dev/null
+++ b/regression-test/suites/source_p0/ddl/create.sql
@@ -0,0 +1,19 @@
+CREATE TABLE doris_source
+(
+    bigint_1   BIGINT,
+    char_1     char(10),
+    date_1     DATE,
+    datetime_1 DATETIME,
+    decimal_1  DECIMAL(5, 2),
+    double_1   DOUBLE,
+    float_1    FLOAT,
+    int_1      INT,
+    largeint_1 STRING,
+    smallint_1 SMALLINT,
+    tinyint_1  TINYINT,
+    varchar_1  VARCHAR(255)
+) DUPLICATE KEY(`bigint_1`)
+DISTRIBUTED BY HASH(`bigint_1`) BUCKETS 1
+PROPERTIES (
+  "replication_num" = "1"
+);
diff --git a/regression-test/suites/source_p0/ddl/insert.sql 
b/regression-test/suites/source_p0/ddl/insert.sql
new file mode 100644
index 0000000000..15704d9c83
--- /dev/null
+++ b/regression-test/suites/source_p0/ddl/insert.sql
@@ -0,0 +1 @@
+INSERT INTO doris_source values(1,'a','2022-01-01','2022-01-01 
00:00:01',1.1,1.1,1.1,1,1,1,1,'b');
\ No newline at end of file
diff --git a/regression-test/suites/source_p0/doris_source.groovy 
b/regression-test/suites/source_p0/doris_source.groovy
new file mode 100644
index 0000000000..0b0cc5ffaa
--- /dev/null
+++ b/regression-test/suites/source_p0/doris_source.groovy
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+// The cases is copied from https://github.com/trinodb/trino/tree/master
+// /testing/trino-product-tests/src/main/resources/sql-tests/testcases/tpcds
+// and modified by Doris.
+
+suite("doris_source") {
+
+    def tableName = "doris_source"
+    sql """DROP TABLE IF EXISTS ${tableName}"""
+    sql new File("""${context.file.parent}/ddl/create.sql""").text
+    sql new File("""${context.file.parent}/ddl/insert.sql""").text
+    logger.info("start delete local doris source jar...")
+    def delete_local_doris_source_jar = "rm -rf 
doris-source-demo.jar".execute()
+    logger.info("start download doris source demo ...")
+    logger.info("getS3Url ==== ${getS3Url()}")
+    def download_doris_source_jar = "curl 
${getS3Url()}/regression/doris-source-demo.jar --output 
doris-source-demo.jar".execute().getText()
+    logger.info("finish download doris source demo ...")
+    def run_cmd = "java -cp doris-source-demo.jar 
org.apache.doris.sdk.DorisReaderExample $context.config.feHttpAddress 
$context.config.feHttpUser regression_test_source_p0 $tableName"
+    logger.info("run_cmd : $run_cmd")
+    def run_source_jar = run_cmd.execute().getText()
+    logger.info("result: $run_source_jar")
+
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to