Add new type default string length
This commit is contained in:
@ -137,11 +137,24 @@ int ObExprCast::get_cast_string_len(ObExprResType& type1, ObExprResType& type2,
|
|||||||
case ObHexStringType:
|
case ObHexStringType:
|
||||||
case ObRawType:
|
case ObRawType:
|
||||||
case ObNVarchar2Type:
|
case ObNVarchar2Type:
|
||||||
case ObNCharType: {
|
case ObNCharType:
|
||||||
|
case ObEnumType:
|
||||||
|
case ObSetType:
|
||||||
|
case ObEnumInnerType:
|
||||||
|
case ObSetInnerType:
|
||||||
|
case ObURowIDType:
|
||||||
|
case ObLobType: {
|
||||||
res_len = type1.get_length();
|
res_len = type1.get_length();
|
||||||
length_semantics = type1.get_length_semantics();
|
length_semantics = type1.get_length_semantics();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ObBitType: {
|
||||||
|
if (scale > 0) {
|
||||||
|
res_len = scale;
|
||||||
|
}
|
||||||
|
res_len = (res_len + 7) / 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,13 +13,14 @@
|
|||||||
#ifndef _OB_EXPR_CAST_H_
|
#ifndef _OB_EXPR_CAST_H_
|
||||||
#define _OB_EXPR_CAST_H_
|
#define _OB_EXPR_CAST_H_
|
||||||
|
|
||||||
|
#include "common/object/ob_obj_type.h"
|
||||||
#include "sql/engine/expr/ob_expr_operator.h"
|
#include "sql/engine/expr/ob_expr_operator.h"
|
||||||
|
|
||||||
namespace oceanbase {
|
namespace oceanbase {
|
||||||
namespace sql {
|
namespace sql {
|
||||||
|
|
||||||
// TODO::only support 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[26] = {
|
static const int32_t CAST_STRING_DEFUALT_LENGTH[48] = {
|
||||||
0, // null
|
0, // null
|
||||||
4, // tinyint
|
4, // tinyint
|
||||||
6, // smallint
|
6, // smallint
|
||||||
@ -45,9 +46,34 @@ static const int32_t CAST_STRING_DEFUALT_LENGTH[26] = {
|
|||||||
1, // varchar
|
1, // varchar
|
||||||
1, // char
|
1, // char
|
||||||
1, // binary
|
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 {
|
class ObExprCast : public ObFuncExprOperator {
|
||||||
OB_UNIS_VERSION_V(1);
|
OB_UNIS_VERSION_V(1);
|
||||||
const static int32_t OB_LITERAL_MAX_INT_LEN = 21;
|
const static int32_t OB_LITERAL_MAX_INT_LEN = 21;
|
||||||
|
|||||||
Reference in New Issue
Block a user