提交 0121cc45 编写于 作者: B br0 提交者: LINGuanRen

Add new type default string length

上级 22d5eee2
......@@ -137,11 +137,24 @@ int ObExprCast::get_cast_string_len(ObExprResType& type1, ObExprResType& type2,
case ObHexStringType:
case ObRawType:
case ObNVarchar2Type:
case ObNCharType: {
case ObNCharType:
case ObEnumType:
case ObSetType:
case ObEnumInnerType:
case ObSetInnerType:
case ObURowIDType:
case ObLobType: {
res_len = type1.get_length();
length_semantics = type1.get_length_semantics();
break;
}
case ObBitType: {
if (scale > 0) {
res_len = scale;
}
res_len = (res_len + 7) / 8;
break;
}
default: {
break;
}
......
......@@ -13,13 +13,14 @@
#ifndef _OB_EXPR_CAST_H_
#define _OB_EXPR_CAST_H_
#include "common/object/ob_obj_type.h"
#include "sql/engine/expr/ob_expr_operator.h"
namespace oceanbase {
namespace sql {
// TODO::only support 26??
static const int32_t CAST_STRING_DEFUALT_LENGTH[26] = {
// The length of array need to be equal to the number of types defined at ObObjType
static const int32_t CAST_STRING_DEFUALT_LENGTH[48] = {
0, // null
4, // tinyint
6, // smallint
......@@ -45,9 +46,34 @@ static const int32_t CAST_STRING_DEFUALT_LENGTH[26] = {
1, // varchar
1, // char
1, // binary
0 // extend
0, // extend
0, // unknown
1, // tinytext text share default length with varchar
1, // text
1, // mediumtext
1, // longtext
64, // bit
1, // enum
1, // set
1, // enuminner
1, // setinner
25, // timestampTZ timestamp + time zone('+00:00')
25, // timestampLTZ
19, // timestampNano timestamp + nanosecond scale
1, // raw
7, // intervalYM yyyy-mm
19, // intervalDS ddd hh:mm:ss.fractionsecond(6)
12, // numberfloat same with float
1, // nvarchar2 share default length with varchar
1, // nchar share default length with char
1, // urowid
1, // lob
0 // max, invalid type, or count of obj type
};
static_assert(common::ObMaxType + 1 == sizeof(CAST_STRING_DEFUALT_LENGTH) / sizeof(int32_t),
"Please keep the length of CAST_STRING_DEFUALT_LENGTH must equal to the number of types");
class ObExprCast : public ObFuncExprOperator {
OB_UNIS_VERSION_V(1);
const static int32_t OB_LITERAL_MAX_INT_LEN = 21;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册