You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2022/05/07 07:36:00 UTC

[GitHub] [incubator-doris] cambyzju commented on a diff in pull request #9170: [feature-wip](array-type) array_contains support more nested data types

cambyzju commented on code in PR #9170:
URL: https://github.com/apache/incubator-doris/pull/9170#discussion_r867318408


##########
be/src/vec/functions/array/function_array_element.h:
##########
@@ -181,7 +183,8 @@ class FunctionArrayElement : public IFunction {
                                     const DataTypePtr& result_type, size_t input_rows_count,
                                     const UInt8* src_null_map, UInt8* dst_null_map) {
         // check array nested column type and get data
-        auto array_column = check_and_get_column<ColumnArray>(*arguments[0].column);
+        auto left_column = arguments[0].column->convert_to_full_column_if_const();
+        const auto array_column = check_and_get_column<ColumnArray>(*left_column);
         DCHECK(array_column != nullptr);

Review Comment:
   done



##########
be/src/vec/functions/array/function_array_index.h:
##########
@@ -213,24 +139,131 @@ class FunctionArrayIndex : public IFunction {
             }
             dst_data[row] = res;
         }
-        block.replace_by_position(result, std::move(dst));
-        return true;
+        return dst;
+    }
+
+    template <typename NestedColumnType>
+    ColumnPtr _execute_number_expanded(const ColumnArray::Offsets& offsets,
+                                       const UInt8* nested_null_map, const IColumn& nested_column,
+                                       const IColumn& right_column) {
+        if (check_column<ColumnUInt8>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnUInt8>(offsets, nested_null_map,
+                                                                  nested_column, right_column);
+        } else if (check_column<ColumnInt8>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnInt8>(offsets, nested_null_map,
+                                                                 nested_column, right_column);
+        } else if (check_column<ColumnInt16>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnInt16>(offsets, nested_null_map,
+                                                                  nested_column, right_column);
+        } else if (check_column<ColumnInt32>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnInt32>(offsets, nested_null_map,
+                                                                  nested_column, right_column);
+        } else if (check_column<ColumnInt64>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnInt64>(offsets, nested_null_map,
+                                                                  nested_column, right_column);
+        } else if (check_column<ColumnInt128>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnInt128>(offsets, nested_null_map,
+                                                                   nested_column, right_column);
+        } else if (check_column<ColumnFloat32>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnFloat32>(offsets, nested_null_map,
+                                                                    nested_column, right_column);
+        } else if (check_column<ColumnFloat64>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnFloat64>(offsets, nested_null_map,
+                                                                    nested_column, right_column);
+        } else if (right_column.is_date_type()) {
+            return _execute_number<NestedColumnType, ColumnDate>(offsets, nested_null_map,
+                                                                 nested_column, right_column);
+        } else if (right_column.is_datetime_type()) {
+            return _execute_number<NestedColumnType, ColumnDateTime>(offsets, nested_null_map,
+                                                                     nested_column, right_column);
+        } else if (check_column<ColumnDecimal128>(right_column)) {
+            return _execute_number<NestedColumnType, ColumnDecimal128>(offsets, nested_null_map,
+                                                                       nested_column, right_column);
+        }
+        return nullptr;
     }
 
     Status _execute_non_nullable(Block& block, const ColumnNumbers& arguments, size_t result,
                                  size_t input_rows_count) {
-        WhichDataType right_type(block.get_by_position(arguments[1]).type);
-        if ((right_type.is_string() &&
-             _execute_string(block, arguments, result, input_rows_count)) ||
-            _execute_number<NUMBER_TPL_PACK>(block, arguments, result, input_rows_count)) {
+        // extract array offsets and nested data
+        auto left_column =
+                block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
+        const auto array_column = check_and_get_column<ColumnArray>(*left_column);

Review Comment:
   done



-- 
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-unsubscribe@doris.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org