void ObObj::print_value(FILE* fd) { switch (get_type()) { case ObNullType: fprintf(fd, "nil"); break; case ObIntType: fprintf(fd, "%ld", value_.int_val); break; case ObVarcharType: fprintf(fd, "%.*s", val_len_, value_.varchar_val); break; case ObFloatType: fprintf(fd, "%2f", value_.float_val); break; case ObDoubleType: fprintf(fd, "%2lf", value_.double_val); break; case ObDateTimeType: fprintf(fd, "%s", time2str(value_.time_val)); break; case ObPreciseDateTimeType: fprintf(fd, "%s", time2str(value_.precisetime_val)); break; case ObModifyTimeType: fprintf(fd, "%s", time2str(value_.modifytime_val)); break; case ObCreateTimeType: fprintf(fd, "%s", time2str(value_.createtime_val)); break; case ObSeqType: fprintf(fd, "seq"); break; case ObExtendType: fprintf(fd, "%lde", value_.ext_val); break; case ObBoolType: fprintf(fd, "%c", value_.bool_val ? 'Y': 'N'); break; case ObDecimalType: { char num_buf[ObNumber::MAX_PRINTABLE_SIZE]; ObNumber num; get_decimal(num); num.to_string(num_buf, ObNumber::MAX_PRINTABLE_SIZE); fprintf(fd, "%s", num_buf); break; } default: break; } }
int64_t ObObj::to_string(char* buffer, const int64_t length) const { static const char* obj_type_name[] = { "null", "int", "float", "double", "datetime", "precisedatetime", "varchar", "seq", "createtime", "modifytime", "extend", "bool", "decimal" }; int64_t int_val = 0; float float_val = 0.0; double double_val = 0.0; bool is_add = false; ObString str_val; int32_t type = meta_.type_; int64_t pos = 0; if (type > ObMinType && type < ObMaxType) { databuff_printf(buffer, length, pos, "%s:", obj_type_name[meta_.type_]); } else { databuff_printf(buffer, length, pos, "%s", "unknown"); } { switch(meta_.type_) { case ObNullType: break; case ObIntType: get_int(int_val,is_add); databuff_printf(buffer, length, pos, "%s%ld", is_add ? "+" : "", int_val); break; case ObVarcharType: get_varchar(str_val); databuff_printf(buffer, length, pos, "%.*s", str_val.length(), str_val.ptr()); break; case ObFloatType: get_float(float_val,is_add); databuff_printf(buffer, length, pos, "%s%f", is_add ? "+" : "", float_val); break; case ObDoubleType: get_double(double_val,is_add); databuff_printf(buffer, length, pos, "%s%.12lf", is_add ? "+" : "", double_val); break; case ObDateTimeType: get_datetime(int_val,is_add); databuff_printf(buffer, length, pos, "%s%ld", is_add ? "+" : "", int_val); break; case ObPreciseDateTimeType: get_precise_datetime(int_val,is_add); databuff_printf(buffer, length, pos, "%s%ld", is_add ? "+" : "", int_val); break; case ObSeqType: //TODO break; case ObCreateTimeType: get_createtime(int_val); databuff_printf(buffer, length, pos, "%ld", int_val); break; case ObModifyTimeType: get_modifytime(int_val); databuff_printf(buffer, length, pos, "%ld", int_val); break; case ObExtendType: get_ext(int_val); if (MIN_OBJECT_VALUE == int_val) { databuff_printf(buffer, length, pos, "min"); } else if (MAX_OBJECT_VALUE == int_val) { databuff_printf(buffer, length, pos, "max"); } else { databuff_printf(buffer, length, pos, "%ld", int_val); } break; case ObBoolType: databuff_printf(buffer, length, pos, "%c", value_.bool_val ? 'Y': 'N'); break; case ObDecimalType: { char num_buf[ObNumber::MAX_PRINTABLE_SIZE]; ObNumber num; get_decimal(num); num.to_string(num_buf, ObNumber::MAX_PRINTABLE_SIZE); databuff_printf(buffer, length, pos, "%s", num_buf); break; } default: break; } } return pos; }
void ObObj::dump(const int32_t log_level /*=TBSYS_LOG_LEVEL_DEBUG*/) const { int64_t int_val = 0; bool bool_val = false; bool is_add = false; float float_val = 0.0f; double double_val = 0.0f; ObString str_val; ObNumber num; char num_buf[ObNumber::MAX_PRINTABLE_SIZE]; switch (get_type()) { case ObNullType: TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObNull",pthread_self()); break; case ObIntType: get_int(int_val,is_add); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObInt, val:%ld,is_add:%s",pthread_self(),int_val,is_add ? "true" : "false"); break; case ObVarcharType: get_varchar(str_val); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObVarChar,len :%d,val:",pthread_self(),str_val.length()); common::hex_dump(str_val.ptr(),str_val.length(),true,log_level); break; case ObFloatType: get_float(float_val,is_add); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObFloat, val:%f,is_add:%s",pthread_self(),float_val,is_add ? "true" : "false"); break; case ObDoubleType: get_double(double_val,is_add); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObDouble, val:%f,is_add:%s",pthread_self(),double_val,is_add ? "true" : "false"); break; case ObDateTimeType: get_datetime(int_val,is_add); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObDateTime(seconds), val:%ld,is_add:%s",pthread_self(),int_val,is_add ? "true" : "false"); break; case ObPreciseDateTimeType: get_precise_datetime(int_val,is_add); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObPreciseDateTime(microseconds), val:%ld,is_add:%s",pthread_self(),int_val,is_add ? "true" : "false"); break; case ObSeqType: //TODO break; case ObCreateTimeType: get_createtime(int_val); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObCreateTime, val:%ld",pthread_self(),int_val); break; case ObModifyTimeType: get_modifytime(int_val); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObModifyTime, val:%ld",pthread_self(),int_val); break; case ObBoolType: get_bool(bool_val); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObBool, val:%s",pthread_self(),bool_val?"true":"false"); break; case ObExtendType: get_ext(int_val); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObExt, val:%ld",pthread_self(),int_val); break; case ObDecimalType: get_decimal(num, is_add); num.to_string(num_buf, ObNumber::MAX_PRINTABLE_SIZE); TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level), "[%ld] type:ObDecimalType, val:%s, is_add:%s", pthread_self(), num_buf, is_add ? "true" : "false"); break; default: TBSYS_LOGGER.logMessage(TBSYS_LOG_NUM_LEVEL(log_level)," [%ld] unexpected type (%d)",pthread_self(),get_type()); break; } }