From c564745b627e76b55470fcf6cf9158ae36b51285 Mon Sep 17 00:00:00 2001 From: HangyuanLiu <460660596@qq.com> Date: Tue, 22 Sep 2020 15:54:32 +0800 Subject: [PATCH 1/2] add --- .../schema_scanner/schema_columns_scanner.cpp | 37 ++++++++++++++++++- .../schema_scanner/schema_columns_scanner.h | 1 + 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp b/be/src/exec/schema_scanner/schema_columns_scanner.cpp index b3fbb80caf7b39..69949391d86767 100644 --- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp +++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp @@ -93,6 +93,41 @@ Status SchemaColumnsScanner::start(RuntimeState *state) { return Status::OK(); } +std::string SchemaColumnsScanner::data_type_to_string(TColumnDesc &desc) { + switch (desc.columnType) { + case TPrimitiveType::BOOLEAN: + return "tinyint"; + case TPrimitiveType::TINYINT: + return "tinyint"; + case TPrimitiveType::SMALLINT: + return "smallint"; + case TPrimitiveType::INT: + return "int"; + case TPrimitiveType::BIGINT: + return "bigint"; + case TPrimitiveType::LARGEINT: + return "bigint unsinged"; + case TPrimitiveType::FLOAT: + return "float"; + case TPrimitiveType::DOUBLE: + return "double"; + case TPrimitiveType::VARCHAR: + return "varchar"; + case TPrimitiveType::CHAR: + return "char"; + case TPrimitiveType::DATE: + return "date"; + case TPrimitiveType::DATETIME: + return "datetime"; + case TPrimitiveType::DECIMALV2: + case TPrimitiveType::DECIMAL: { + return "decimal"; + } + default: + return "unknown"; + } +} + std::string SchemaColumnsScanner::type_to_string(TColumnDesc &desc) { switch (desc.columnType) { case TPrimitiveType::BOOLEAN: @@ -208,7 +243,7 @@ Status SchemaColumnsScanner::fill_one_row(Tuple *tuple, MemPool *pool) { { void *slot = tuple->get_slot(_tuple_desc->slots()[7]->tuple_offset()); StringValue* str_slot = reinterpret_cast(slot); - std::string buffer = type_to_string(_desc_result.columns[_column_index].columnDesc); + std::string buffer = data_type_to_string(_desc_result.columns[_column_index].columnDesc); str_slot->len = buffer.length(); str_slot->ptr = (char *)pool->allocate(str_slot->len); memcpy(str_slot->ptr, buffer.c_str(), str_slot->len); diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.h b/be/src/exec/schema_scanner/schema_columns_scanner.h index c7c539670e0974..bfb9f97bea30f3 100644 --- a/be/src/exec/schema_scanner/schema_columns_scanner.h +++ b/be/src/exec/schema_scanner/schema_columns_scanner.h @@ -36,6 +36,7 @@ class SchemaColumnsScanner : public SchemaScanner { Status fill_one_row(Tuple *tuple, MemPool *pool); Status get_new_desc(); Status get_create_table(std::string *result); + std::string data_type_to_string(TColumnDesc &desc); std::string type_to_string(TColumnDesc &desc); int _db_index; From 30f403e25882b385765fae6f297efdd96185559c Mon Sep 17 00:00:00 2001 From: HangyuanLiu <460660596@qq.com> Date: Wed, 23 Sep 2020 20:56:20 +0800 Subject: [PATCH 2/2] fix --- be/src/exec/schema_scanner/schema_columns_scanner.cpp | 5 +++-- be/src/exec/schema_scanner/schema_columns_scanner.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp b/be/src/exec/schema_scanner/schema_columns_scanner.cpp index 69949391d86767..f18fc526b0523b 100644 --- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp +++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp @@ -93,7 +93,8 @@ Status SchemaColumnsScanner::start(RuntimeState *state) { return Status::OK(); } -std::string SchemaColumnsScanner::data_type_to_string(TColumnDesc &desc) { +//For compatibility with mysql the result of DATA_TYPE in information_schema.columns +std::string SchemaColumnsScanner::to_mysql_data_type_string(TColumnDesc &desc) { switch (desc.columnType) { case TPrimitiveType::BOOLEAN: return "tinyint"; @@ -243,7 +244,7 @@ Status SchemaColumnsScanner::fill_one_row(Tuple *tuple, MemPool *pool) { { void *slot = tuple->get_slot(_tuple_desc->slots()[7]->tuple_offset()); StringValue* str_slot = reinterpret_cast(slot); - std::string buffer = data_type_to_string(_desc_result.columns[_column_index].columnDesc); + std::string buffer = to_mysql_data_type_string(_desc_result.columns[_column_index].columnDesc); str_slot->len = buffer.length(); str_slot->ptr = (char *)pool->allocate(str_slot->len); memcpy(str_slot->ptr, buffer.c_str(), str_slot->len); diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.h b/be/src/exec/schema_scanner/schema_columns_scanner.h index bfb9f97bea30f3..3ff0c14cb6a843 100644 --- a/be/src/exec/schema_scanner/schema_columns_scanner.h +++ b/be/src/exec/schema_scanner/schema_columns_scanner.h @@ -36,7 +36,7 @@ class SchemaColumnsScanner : public SchemaScanner { Status fill_one_row(Tuple *tuple, MemPool *pool); Status get_new_desc(); Status get_create_table(std::string *result); - std::string data_type_to_string(TColumnDesc &desc); + std::string to_mysql_data_type_string(TColumnDesc &desc); std::string type_to_string(TColumnDesc &desc); int _db_index;