You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by el...@apache.org on 2023/08/16 03:18:18 UTC
[doris] 03/04: support unique table and modify some log
This is an automated email from the ASF dual-hosted git repository.
eldenmoon pushed a commit to branch variant
in repository https://gitbox.apache.org/repos/asf/doris.git
commit fb4c8a519d1ab7657bd10cf255004c12448637d1
Author: eldenmoon <15...@163.com>
AuthorDate: Wed Aug 16 11:16:56 2023 +0800
support unique table and modify some log
---
be/src/vec/columns/column_object.cpp | 1 -
be/src/vec/data_types/data_type_object.cpp | 8 ++++++--
be/src/vec/data_types/get_least_supertype.cpp | 26 +++++++++++++-------------
be/src/vec/functions/function_case.h | 2 ++
be/src/vec/utils/template_helpers.hpp | 2 ++
5 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/be/src/vec/columns/column_object.cpp b/be/src/vec/columns/column_object.cpp
index b904b7a6ae..c794f3cd20 100644
--- a/be/src/vec/columns/column_object.cpp
+++ b/be/src/vec/columns/column_object.cpp
@@ -1252,7 +1252,6 @@ size_t ColumnObject::filter(const Filter& filter) {
}
void ColumnObject::clear() {
- DCHECK(is_finalized());
for (auto& entry : subcolumns) {
for (auto& part : entry->data.data) {
part->clear();
diff --git a/be/src/vec/data_types/data_type_object.cpp b/be/src/vec/data_types/data_type_object.cpp
index cf8426afbc..bfe071475f 100644
--- a/be/src/vec/data_types/data_type_object.cpp
+++ b/be/src/vec/data_types/data_type_object.cpp
@@ -56,7 +56,9 @@ bool DataTypeObject::equals(const IDataType& rhs) const {
int64_t DataTypeObject::get_uncompressed_serialized_bytes(const IColumn& column,
int be_exec_version) const {
const auto& column_object = assert_cast<const ColumnObject&>(column);
- assert(column_object.is_finalized());
+ if (!column_object.is_finalized()) {
+ const_cast<ColumnObject&>(column_object).finalize();
+ }
const auto& subcolumns = column_object.get_subcolumns();
size_t size = 0;
@@ -82,7 +84,9 @@ int64_t DataTypeObject::get_uncompressed_serialized_bytes(const IColumn& column,
char* DataTypeObject::serialize(const IColumn& column, char* buf, int be_exec_version) const {
const auto& column_object = assert_cast<const ColumnObject&>(column);
- assert(column_object.is_finalized());
+ if (!column_object.is_finalized()) {
+ const_cast<ColumnObject&>(column_object).finalize();
+ }
#ifndef NDEBUG
// DCHECK size
column_object.check_consistency();
diff --git a/be/src/vec/data_types/get_least_supertype.cpp b/be/src/vec/data_types/get_least_supertype.cpp
index 588ce2406a..709e165830 100644
--- a/be/src/vec/data_types/get_least_supertype.cpp
+++ b/be/src/vec/data_types/get_least_supertype.cpp
@@ -161,9 +161,9 @@ void get_numeric_type(const TypeIndexSet& types, DataTypePtr* type) {
*type = std::make_shared<DataTypeFloat64>();
return;
} else {
- LOG(INFO) << " because some of them are integers and some are floating point "
- "but there is no floating point type, that can exactly represent "
- "all required integers";
+ VLOG_DEBUG << " because some of them are integers and some are floating point "
+ "but there is no floating point type, that can exactly represent "
+ "all required integers";
*type = nullptr;
return throw_or_return<on_error>(
types, doris::ErrorCode::INVALID_ARGUMENT,
@@ -189,9 +189,9 @@ void get_numeric_type(const TypeIndexSet& types, DataTypePtr* type) {
*type = std::make_shared<DataTypeInt64>();
return;
} else {
- LOG(INFO) << " because some of them are signed integers and some are unsigned "
- "integers, but there is no signed integer type, that can exactly "
- "represent all required unsigned integer values";
+ VLOG_DEBUG << " because some of them are signed integers and some are unsigned "
+ "integers, but there is no signed integer type, that can exactly "
+ "represent all required unsigned integer values";
return throw_or_return<on_error>(
types, doris::ErrorCode::INVALID_ARGUMENT,
" because some of them are signed integers and some are unsigned "
@@ -345,8 +345,8 @@ void get_least_supertype(const DataTypes& types, DataTypePtr* type) {
if (have_date || have_datetime) {
bool all_date_or_datetime = type_ids.size() == (have_date + have_datetime);
if (!all_date_or_datetime) {
- LOG(INFO) << get_exception_message_prefix(types)
- << " because some of them are Date/DateTime and some of them are not";
+ VLOG_DEBUG << get_exception_message_prefix(types)
+ << " because some of them are Date/DateTime and some of them are not";
return throw_or_return<on_error>(
types, doris::ErrorCode::INVALID_ARGUMENT,
" because some of them are Date/DateTime and some of them are not", type);
@@ -415,8 +415,8 @@ void get_least_supertype(const DataTypes& types, DataTypePtr* type) {
}
if (num_supported != type_ids.size()) {
- LOG(INFO) << get_exception_message_prefix(types)
- << " because some of them have no lossless convertion to Decimal";
+ VLOG_DEBUG << get_exception_message_prefix(types)
+ << " because some of them have no lossless convertion to Decimal";
return throw_or_return<on_error>(
types, doris::ErrorCode::INVALID_ARGUMENT,
" because some of them have no lossless convertion to Decimal", type);
@@ -439,9 +439,9 @@ void get_least_supertype(const DataTypes& types, DataTypePtr* type) {
}
if (min_precision > DataTypeDecimal<Decimal128>::max_precision()) {
- LOG(INFO) << fmt::format("{} because the least supertype is Decimal({},{})",
- get_exception_message_prefix(types), min_precision,
- max_scale);
+ VLOG_DEBUG << fmt::format("{} because the least supertype is Decimal({},{})",
+ get_exception_message_prefix(types), min_precision,
+ max_scale);
return throw_or_return<on_error>(
types, doris::ErrorCode::INVALID_ARGUMENT,
fmt::format(" because some of them have no lossless "
diff --git a/be/src/vec/functions/function_case.h b/be/src/vec/functions/function_case.h
index 944d61ac43..683c611083 100644
--- a/be/src/vec/functions/function_case.h
+++ b/be/src/vec/functions/function_case.h
@@ -50,6 +50,7 @@ class ColumnArray;
class ColumnMap;
class ColumnString;
class ColumnStruct;
+class ColumnObject;
} // namespace vectorized
} // namespace doris
@@ -266,6 +267,7 @@ public:
std::is_same_v<ColumnType, ColumnArray> ||
std::is_same_v<ColumnType, ColumnMap> ||
std::is_same_v<ColumnType, ColumnStruct> ||
+ std::is_same_v<ColumnType, ColumnObject> ||
std::is_same_v<ColumnType, ColumnHLL>) {
// result_column and all then_column is not nullable.
// can't simd when type is string.
diff --git a/be/src/vec/utils/template_helpers.hpp b/be/src/vec/utils/template_helpers.hpp
index e0e3cd1d21..03c0eb5156 100644
--- a/be/src/vec/utils/template_helpers.hpp
+++ b/be/src/vec/utils/template_helpers.hpp
@@ -26,6 +26,7 @@
#include "vec/columns/column_complex.h"
#include "vec/columns/column_map.h"
#include "vec/columns/column_struct.h"
+#include "vec/columns/column_object.h"
#include "vec/columns/columns_number.h"
#include "vec/data_types/data_type.h"
#include "vec/functions/function.h"
@@ -60,6 +61,7 @@
M(Array, ColumnArray) \
M(Map, ColumnMap) \
M(Struct, ColumnStruct) \
+ M(VARIANT, ColumnObject) \
M(BitMap, ColumnBitmap) \
M(HLL, ColumnHLL)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org