int obj_cast(const ObObj &orig_cell, const ObObj &expected_type, ObObj &casted_cell, const ObObj *&res_cell) { int ret = OB_SUCCESS; if (orig_cell.get_type() != expected_type.get_type()) { // type cast ObObjCastParams params; ObExprObj from; ObExprObj to; from.assign(orig_cell); to.assign(casted_cell); if (OB_SUCCESS != (ret = OB_OBJ_CAST[orig_cell.get_type()][expected_type.get_type()](params, from, to))) { jlog(WARNING, "failed to type cast obj, err=%d", ret); } else if (OB_SUCCESS != (ret = to.to(casted_cell))) { jlog(WARNING, "failed to convert expr_obj to obj, err=%d", ret); } else { res_cell = &casted_cell; } } else { res_cell = &orig_cell; } return ret; }
int obj_cast(ObObj &cell, const ObObjType expected_type, char* buf, int64_t buf_size, int64_t &used_buf_len) { int ret = OB_SUCCESS; used_buf_len = 0; if (cell.get_type() != expected_type) { ObObjCastParams params; ObExprObj from; ObExprObj to; from.assign(cell); if (ObVarcharType == expected_type) { string buffer; buffer.assign(buf, static_cast<int32_t> (buf_size)); ObObj varchar_cell; varchar_cell.set_varchar(buffer); to.assign(varchar_cell); } if (OB_SUCCESS != (ret = OB_OBJ_CAST[cell.get_type()][expected_type](params, from, to))) { jlog(WARNING, "failed to type cast obj, err=%d", ret); } else if (OB_SUCCESS != (ret = to.to(cell))) { jlog(WARNING, "failed to convert expr_obj to obj, err=%d", ret); } else { if (ObVarcharType == expected_type) { string varchar; cell.get_varchar(varchar); used_buf_len = varchar.length(); // used buffer length for casting to varchar type } } } return ret; }
ObExprObj ObExprObjTest::bool_obj(MyBool t1) { ObExprObj ret; ObObj obj; switch(t1) { case MY_TRUE: obj.set_bool(true); break; case MY_FALSE: obj.set_bool(false); break; default: obj.set_null(); break; } ret.assign(obj); return ret; }