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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a066e2586 [fix](vectorized) core dump on ST_AsText (#8870)
8a066e2586 is described below

commit 8a066e2586a0ffc66feb0f3c2ed4c705f4c607f8
Author: Pxl <[email protected]>
AuthorDate: Mon Apr 11 09:39:32 2022 +0800

    [fix](vectorized) core dump on ST_AsText (#8870)
---
 be/src/vec/functions/functions_geo.cpp             | 36 +++++++++++++---------
 .../data/correctness/test_select_constant.out      |  3 ++
 .../suites/correctness/test_select_constant.groovy |  3 +-
 3 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/be/src/vec/functions/functions_geo.cpp 
b/be/src/vec/functions/functions_geo.cpp
index ba4c370506..51b9cd5311 100644
--- a/be/src/vec/functions/functions_geo.cpp
+++ b/be/src/vec/functions/functions_geo.cpp
@@ -31,9 +31,12 @@ struct StPoint {
     static const size_t NUM_ARGS = 2;
     static Status execute(Block& block, const ColumnNumbers& arguments, size_t 
result) {
         DCHECK_EQ(arguments.size(), 2);
-        auto return_type = block.get_data_type(result);
-        auto column_x = 
block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
-        auto column_y = 
block.get_by_position(arguments[1]).column->convert_to_full_column_if_const();
+        auto return_type = remove_nullable(block.get_data_type(result));
+
+        auto column_x =
+                
block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
+        auto column_y =
+                
block.get_by_position(arguments[1]).column->convert_to_full_column_if_const();
 
         const auto size = column_x->size();
 
@@ -67,14 +70,15 @@ struct StAsWktName {
     static constexpr auto NAME = "st_aswkt";
 };
 
-template<typename FunctionName>
+template <typename FunctionName>
 struct StAsText {
     static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = FunctionName::NAME;
     static const size_t NUM_ARGS = 1;
-    static Status execute(Block& block, const ColumnNumbers& arguments,size_t 
result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t 
result) {
         DCHECK_EQ(arguments.size(), 1);
-        auto return_type = block.get_data_type(result);
+        auto return_type = remove_nullable(block.get_data_type(result));
+
         auto input = block.get_by_position(arguments[0]).column;
 
         auto size = input->size();
@@ -106,9 +110,10 @@ struct StX {
     static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_x";
     static const size_t NUM_ARGS = 1;
-    static Status execute(Block& block, const ColumnNumbers& arguments,size_t 
result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t 
result) {
         DCHECK_EQ(arguments.size(), 1);
-        auto return_type = block.get_data_type(result);
+        auto return_type = remove_nullable(block.get_data_type(result));
+
         auto input = block.get_by_position(arguments[0]).column;
 
         auto size = input->size();
@@ -140,9 +145,10 @@ struct StY {
     static constexpr auto NEED_CONTEXT = false;
     static constexpr auto NAME = "st_y";
     static const size_t NUM_ARGS = 1;
-    static Status execute(Block& block, const ColumnNumbers& arguments,size_t 
result) {
+    static Status execute(Block& block, const ColumnNumbers& arguments, size_t 
result) {
         DCHECK_EQ(arguments.size(), 1);
-        auto return_type = block.get_data_type(result);
+        auto return_type = remove_nullable(block.get_data_type(result));
+
         auto input = block.get_by_position(arguments[0]).column;
 
         auto size = input->size();
@@ -176,7 +182,8 @@ struct StDistanceSphere {
     static const size_t NUM_ARGS = 4;
     static Status execute(Block& block, const ColumnNumbers& arguments, size_t 
result) {
         DCHECK_EQ(arguments.size(), 4);
-        auto return_type = block.get_data_type(result);
+        auto return_type = remove_nullable(block.get_data_type(result));
+
         auto x_lng = 
block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
         auto x_lat = 
block.get_by_position(arguments[1]).column->convert_to_full_column_if_const();
         auto y_lng = 
block.get_by_position(arguments[2]).column->convert_to_full_column_if_const();
@@ -189,16 +196,15 @@ struct StDistanceSphere {
         res = ColumnNullable::create(return_type->create_column(), 
ColumnUInt8::create());
 
         for (int row = 0; row < size; ++row) {
-            double distance;
+            double distance = 0;
             if 
(!GeoPoint::ComputeDistance(x_lng->operator[](row).get<Float64>(),
                                            
x_lat->operator[](row).get<Float64>(),
                                            
y_lng->operator[](row).get<Float64>(),
-                                           
y_lat->operator[](row).get<Float64>(),
-                                           &distance)) {
+                                           
y_lat->operator[](row).get<Float64>(), &distance)) {
                 res->insert_data(nullptr, 0);
                 continue;
             }
-            res->insert_data(const_cast<const char*>((char*) &distance), 0);
+            res->insert_data(const_cast<const char*>((char*)&distance), 0);
         }
 
         block.replace_by_position(result, std::move(res));
diff --git a/regression-test/data/correctness/test_select_constant.out 
b/regression-test/data/correctness/test_select_constant.out
index d3ed51bcc7..cb391ffb12 100644
--- a/regression-test/data/correctness/test_select_constant.out
+++ b/regression-test/data/correctness/test_select_constant.out
@@ -2,3 +2,6 @@
 -- !select1 --
 100    test    2021-01-02
 
+-- !select_geo1 --
+POINT (123.123456789 89.123456789)
+
diff --git a/regression-test/suites/correctness/test_select_constant.groovy 
b/regression-test/suites/correctness/test_select_constant.groovy
index 787a4a32a3..6015e19576 100644
--- a/regression-test/suites/correctness/test_select_constant.groovy
+++ b/regression-test/suites/correctness/test_select_constant.groovy
@@ -16,5 +16,6 @@
 // under the License.
 
 suite("test_select_constant") {
-    qt_select1 'select 100, "test", date("2021-01-02")'
+    qt_select1 'select 100, "test", date("2021-01-02");'
+    qt_select_geo1 'SELECT 
ST_AsText(ST_Point(123.12345678901234567890,89.1234567890));'
 }


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

Reply via email to