Skip to content

Commit 40c93d1

Browse files
authored
fix(interactive): fix type transformation errors caused by inconsistent enum type values (#4502)
Committed-by: bingqing.lbq from Dev container <!-- Thanks for your contribution! please review https://github.com/alibaba/GraphScope/blob/main/CONTRIBUTING.md before opening an issue. --> ## What do these changes do? As titled. <!-- Please give a short brief about these changes. --> ## Related issue number <!-- Are there any issues opened that will be resolved by merging this change? --> Fixes #4493
1 parent f00da9d commit 40c93d1

File tree

4 files changed

+117
-41
lines changed

4 files changed

+117
-41
lines changed

interactive_engine/common/src/main/java/com/alibaba/graphscope/groot/common/schema/wrapper/DataType.java

Lines changed: 80 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,47 @@ public enum DataType {
4747
this.type = (byte) type;
4848
}
4949

50-
private static final DataType[] TYPES = DataType.values();
51-
52-
public static DataType fromId(byte id) {
53-
if (id < 0 || id >= TYPES.length) {
54-
throw new InvalidDataTypeException("Unknown DataType: [" + id + "]");
55-
}
56-
return TYPES[id];
57-
}
58-
5950
public static DataType parseProto(DataTypePb pb) {
60-
return fromId((byte) pb.getNumber());
51+
switch (pb) {
52+
case UNKNOWN:
53+
return DataType.UNKNOWN;
54+
case BOOL:
55+
return DataType.BOOL;
56+
case CHAR:
57+
return DataType.CHAR;
58+
case SHORT:
59+
return DataType.SHORT;
60+
case INT:
61+
return DataType.INT;
62+
case LONG:
63+
return DataType.LONG;
64+
case FLOAT:
65+
return DataType.FLOAT;
66+
case DOUBLE:
67+
return DataType.DOUBLE;
68+
case STRING:
69+
return DataType.STRING;
70+
case BYTES:
71+
return DataType.BYTES;
72+
case INT_LIST:
73+
return DataType.INT_LIST;
74+
case LONG_LIST:
75+
return DataType.LONG_LIST;
76+
case FLOAT_LIST:
77+
return DataType.FLOAT_LIST;
78+
case DOUBLE_LIST:
79+
return DataType.DOUBLE_LIST;
80+
case STRING_LIST:
81+
return DataType.STRING_LIST;
82+
case DATE32:
83+
return DataType.DATE;
84+
case TIME32_MS:
85+
return DataType.TIME32;
86+
case TIMESTAMP_MS:
87+
return DataType.TIMESTAMP;
88+
default:
89+
throw new InvalidDataTypeException("Unknown DataType: [" + pb + "]");
90+
}
6191
}
6292

6393
public static DataType parseString(String type) {
@@ -72,7 +102,46 @@ public static DataType parseString(String type) {
72102
}
73103

74104
public DataTypePb toProto() {
75-
return DataTypePb.forNumber(type);
105+
switch (this) {
106+
case UNKNOWN:
107+
return DataTypePb.UNKNOWN;
108+
case BOOL:
109+
return DataTypePb.BOOL;
110+
case CHAR:
111+
return DataTypePb.CHAR;
112+
case SHORT:
113+
return DataTypePb.SHORT;
114+
case INT:
115+
return DataTypePb.INT;
116+
case LONG:
117+
return DataTypePb.LONG;
118+
case FLOAT:
119+
return DataTypePb.FLOAT;
120+
case DOUBLE:
121+
return DataTypePb.DOUBLE;
122+
case STRING:
123+
return DataTypePb.STRING;
124+
case BYTES:
125+
return DataTypePb.BYTES;
126+
case INT_LIST:
127+
return DataTypePb.INT_LIST;
128+
case LONG_LIST:
129+
return DataTypePb.LONG_LIST;
130+
case FLOAT_LIST:
131+
return DataTypePb.FLOAT_LIST;
132+
case DOUBLE_LIST:
133+
return DataTypePb.DOUBLE_LIST;
134+
case STRING_LIST:
135+
return DataTypePb.STRING_LIST;
136+
case DATE:
137+
return DataTypePb.DATE32;
138+
case TIME32:
139+
return DataTypePb.TIME32_MS;
140+
case TIMESTAMP:
141+
return DataTypePb.TIMESTAMP_MS;
142+
default:
143+
throw new UnsupportedOperationException("Unsupported DataType: [" + this + "]");
144+
}
76145
}
77146

78147
@Override

interactive_engine/executor/store/groot/src/db/api/property.rs

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl dyn PropertyMap {
2222
pub fn from_proto(pb: &HashMap<PropertyId, PropertyValuePb>) -> HashMap<PropertyId, ValueRef> {
2323
let mut m = HashMap::new();
2424
for (id, val_pb) in pb {
25-
let val_type = ValueType::from_i32(val_pb.get_data_type().value()).unwrap();
25+
let val_type = ValueType::from_proto(&val_pb.get_data_type()).unwrap();
2626
m.insert(*id, ValueRef::new(val_type, val_pb.get_val()));
2727
}
2828
m
@@ -73,39 +73,46 @@ impl ValueType {
7373
14
7474
}
7575

76-
pub fn from_i32(x: i32) -> GraphResult<Self> {
77-
match x {
78-
x if x == ValueType::Bool as i32 => Ok(ValueType::Bool),
79-
x if x == ValueType::Char as i32 => Ok(ValueType::Char),
80-
x if x == ValueType::Short as i32 => Ok(ValueType::Short),
81-
x if x == ValueType::Int as i32 => Ok(ValueType::Int),
82-
x if x == ValueType::Long as i32 => Ok(ValueType::Long),
83-
x if x == ValueType::Float as i32 => Ok(ValueType::Float),
84-
x if x == ValueType::Double as i32 => Ok(ValueType::Double),
85-
x if x == ValueType::String as i32 => Ok(ValueType::String),
86-
x if x == ValueType::Bytes as i32 => Ok(ValueType::Bytes),
87-
x if x == ValueType::IntList as i32 => Ok(ValueType::IntList),
88-
x if x == ValueType::LongList as i32 => Ok(ValueType::LongList),
89-
x if x == ValueType::FloatList as i32 => Ok(ValueType::FloatList),
90-
x if x == ValueType::DoubleList as i32 => Ok(ValueType::DoubleList),
91-
x if x == ValueType::StringList as i32 => Ok(ValueType::StringList),
76+
pub fn from_proto(pb: &DataTypePb) -> GraphResult<Self> {
77+
match pb {
78+
DataTypePb::BOOL => Ok(ValueType::Bool),
79+
DataTypePb::CHAR => Ok(ValueType::Char),
80+
DataTypePb::SHORT => Ok(ValueType::Short),
81+
DataTypePb::INT => Ok(ValueType::Int),
82+
DataTypePb::LONG => Ok(ValueType::Long),
83+
DataTypePb::FLOAT => Ok(ValueType::Float),
84+
DataTypePb::DOUBLE => Ok(ValueType::Double),
85+
DataTypePb::STRING => Ok(ValueType::String),
86+
DataTypePb::BYTES => Ok(ValueType::Bytes),
87+
DataTypePb::INT_LIST => Ok(ValueType::IntList),
88+
DataTypePb::LONG_LIST => Ok(ValueType::LongList),
89+
DataTypePb::FLOAT_LIST => Ok(ValueType::FloatList),
90+
DataTypePb::DOUBLE_LIST => Ok(ValueType::DoubleList),
91+
DataTypePb::STRING_LIST => Ok(ValueType::StringList),
9292
_ => {
93-
let msg = format!("invalid input");
94-
let err = gen_graph_err!(ErrorCode::INVALID_DATA, msg, from_i32, x);
93+
let msg = format!("unsupported data type {:?}", pb);
94+
let err = gen_graph_err!(ErrorCode::INVALID_DATA, msg, from_proto, pb);
9595
Err(err)
9696
}
9797
}
9898
}
9999

100100
pub fn to_proto(&self) -> GraphResult<DataTypePb> {
101-
let v = *self as i32;
102-
match DataTypePb::from_i32(v) {
103-
None => {
104-
let msg = format!("invalid input");
105-
let err = gen_graph_err!(ErrorCode::INVALID_DATA, msg, to_proto, v);
106-
Err(err)
107-
}
108-
Some(pb) => Ok(pb),
101+
match &self {
102+
ValueType::Bool => Ok(DataTypePb::BOOL),
103+
ValueType::Char => Ok(DataTypePb::CHAR),
104+
ValueType::Short => Ok(DataTypePb::SHORT),
105+
ValueType::Int => Ok(DataTypePb::INT),
106+
ValueType::Long => Ok(DataTypePb::LONG),
107+
ValueType::Float => Ok(DataTypePb::FLOAT),
108+
ValueType::Double => Ok(DataTypePb::DOUBLE),
109+
ValueType::String => Ok(DataTypePb::STRING),
110+
ValueType::Bytes => Ok(DataTypePb::BYTES),
111+
ValueType::IntList => Ok(DataTypePb::INT_LIST),
112+
ValueType::LongList => Ok(DataTypePb::LONG_LIST),
113+
ValueType::FloatList => Ok(DataTypePb::FLOAT_LIST),
114+
ValueType::DoubleList => Ok(DataTypePb::DOUBLE_LIST),
115+
ValueType::StringList => Ok(DataTypePb::STRING_LIST),
109116
}
110117
}
111118

@@ -584,7 +591,7 @@ impl Value {
584591
}
585592

586593
pub fn from_proto(pb: &PropertyValuePb) -> GraphResult<Self> {
587-
let val_type = ValueType::from_i32(pb.get_data_type().value())?;
594+
let val_type = ValueType::from_proto(&pb.get_data_type())?;
588595
Ok(Value::new(val_type, Vec::from(pb.get_val())))
589596
}
590597

interactive_engine/executor/store/groot/src/db/api/schema.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ impl PropDef {
362362
let id = proto.get_id();
363363
let inner_id = proto.get_inner_id();
364364
let name = proto.get_name();
365-
let value_type = ValueType::from_i32(proto.get_data_type().value())?;
365+
let value_type = ValueType::from_proto(&proto.get_data_type())?;
366366
let default_val = match Value::from_proto(proto.get_default_value()) {
367367
Ok(v) => Some(v),
368368
Err(_) => None,

interactive_engine/groot-module/src/main/java/com/alibaba/graphscope/groot/frontend/GrootDdlService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ private TypeDef parseTypeDefPb(TypeDefPb typeDefPb) {
282282
}
283283

284284
private DataType parseDataType(DataTypePb dataTypePb) {
285-
return DataType.fromId((byte) dataTypePb.getNumber());
285+
return DataType.parseProto(dataTypePb);
286286
}
287287

288288
@Override

0 commit comments

Comments
 (0)