1package com.vesoft.nebula.driver.graph.data;
3import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_BOOL;
4import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_DATE;
5import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_DECIMAL;
6import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_DURATION;
7import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_EDGE;
8import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_EMBEDDINGVECTOR;
9import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_FLOAT32;
10import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_FLOAT64;
11import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_INT16;
12import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_INT32;
13import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_INT64;
14import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_INT8;
15import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_LIST;
16import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_LOCALDATETIME;
17import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_LOCALTIME;
18import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_NODE;
19import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_PATH;
20import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_RECORD;
21import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_STRING;
22import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_UINT16;
23import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_UINT32;
24import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_UINT64;
25import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_UINT8;
26import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_ZONEDDATETIME;
27import static com.vesoft.nebula.driver.graph.decode.ColumnType.COLUMN_TYPE_ZONEDTIME;
29import com.vesoft.nebula.driver.graph.decode.ColumnType;
30import com.vesoft.nebula.driver.graph.exception.InvalidValueException;
31import java.math.BigDecimal;
32import java.time.LocalDate;
33import java.time.LocalDateTime;
34import java.time.LocalTime;
35import java.time.OffsetTime;
36import java.time.ZonedDateTime;
37import java.time.format.DateTimeFormatter;
39import java.util.Objects;
40import java.util.Vector;
44 private final Object value;
45 private final ColumnType type;
47 DateTimeFormatter zonedDateTimeFormatter =
48 DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX");
49 DateTimeFormatter localDateTimeFormatter =
50 DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
51 DateTimeFormatter zonedTimeFormatter = DateTimeFormatter.ofPattern(
"HH:mm:ss.SSSSSSXXXXX");
52 DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern(
"HH:mm:ss.SSSSSS");
59 public ColumnType getDataType() {
63 public String getDataTypeString() {
65 case COLUMN_TYPE_BOOL:
67 case COLUMN_TYPE_UINT8:
69 case COLUMN_TYPE_INT8:
71 case COLUMN_TYPE_UINT16:
73 case COLUMN_TYPE_INT16:
75 case COLUMN_TYPE_UINT32:
77 case COLUMN_TYPE_INT32:
79 case COLUMN_TYPE_UINT64:
81 case COLUMN_TYPE_INT64:
83 case COLUMN_TYPE_FLOAT32:
85 case COLUMN_TYPE_FLOAT64:
87 case COLUMN_TYPE_STRING:
89 case COLUMN_TYPE_NODE:
91 case COLUMN_TYPE_EDGE:
93 case COLUMN_TYPE_LIST:
95 case COLUMN_TYPE_DURATION:
97 case COLUMN_TYPE_LOCALTIME:
99 case COLUMN_TYPE_LOCALDATETIME:
100 return "LOCAL_DATETIME";
101 case COLUMN_TYPE_ZONEDTIME:
103 case COLUMN_TYPE_ZONEDDATETIME:
104 return "ZONED_DATETIME";
105 case COLUMN_TYPE_DATE:
107 case COLUMN_TYPE_RECORD:
109 case COLUMN_TYPE_PATH:
111 case COLUMN_TYPE_DECIMAL:
113 case COLUMN_TYPE_ANY:
116 throw new IllegalArgumentException(
"Unknown data type: " + type);
136 return value ==
null;
145 return type == COLUMN_TYPE_BOOL;
154 return type == COLUMN_TYPE_UINT64 || type == COLUMN_TYPE_INT64;
164 return type == COLUMN_TYPE_UINT8 || type == COLUMN_TYPE_INT8
165 || type == COLUMN_TYPE_UINT16 || type == COLUMN_TYPE_INT16
166 || type == COLUMN_TYPE_UINT32 || type == COLUMN_TYPE_INT32;
175 return type == COLUMN_TYPE_FLOAT32;
185 return type == COLUMN_TYPE_FLOAT64;
194 return type == COLUMN_TYPE_STRING;
203 return type == COLUMN_TYPE_LIST;
212 return type == COLUMN_TYPE_NODE;
221 return type == COLUMN_TYPE_EDGE;
230 return type == COLUMN_TYPE_LOCALTIME;
239 return type == COLUMN_TYPE_ZONEDTIME;
248 return type == COLUMN_TYPE_LOCALDATETIME;
257 return type == COLUMN_TYPE_ZONEDDATETIME;
266 return type == COLUMN_TYPE_DATE;
275 return type == COLUMN_TYPE_RECORD;
284 return type == COLUMN_TYPE_DURATION;
293 return type == COLUMN_TYPE_PATH;
302 return type == COLUMN_TYPE_DECIMAL;
311 public boolean asBoolean() throws InvalidValueException {
312 if (type == COLUMN_TYPE_BOOL) {
313 return (java.lang.Boolean) value;
315 throw new InvalidValueException(
316 "Cannot get field `boolean` because value's type is " + getDataType());
330 public int asInt() throws InvalidValueException {
331 if (type == COLUMN_TYPE_INT8 || type == COLUMN_TYPE_UINT8
332 || type == COLUMN_TYPE_UINT16 || type == COLUMN_TYPE_INT16
333 || type == COLUMN_TYPE_UINT32 || type == COLUMN_TYPE_INT32) {
334 return Integer.parseInt(value.toString());
336 throw new InvalidValueException(
337 "Cannot get field `int` because value's type is " + getDataType());
354 public long asLong() throws InvalidValueException {
355 if (type == COLUMN_TYPE_INT64 || type == COLUMN_TYPE_UINT64) {
358 throw new InvalidValueException(
359 "Cannot get field `long` because value's type is " + getDataType());
369 public String
asString() throws InvalidValueException {
370 if (type == COLUMN_TYPE_STRING) {
371 return (java.lang.String) value;
373 throw new InvalidValueException(
374 "Cannot get field `string` because value's type is " + getDataType());
383 public float asFloat() throws InvalidValueException {
384 if (type == COLUMN_TYPE_FLOAT32) {
385 return (
float) value;
387 throw new InvalidValueException(
388 "Cannot get field `float` because value's type is " + getDataType());
397 public double asDouble() throws InvalidValueException {
398 if (type == COLUMN_TYPE_FLOAT64) {
399 return (
double) value;
401 throw new InvalidValueException(
402 "Cannot get field `double` because value's type is " + getDataType());
411 public List<ValueWrapper>
asList() throws InvalidValueException {
412 if (type == COLUMN_TYPE_LIST) {
413 return (List<ValueWrapper>) value;
415 throw new InvalidValueException(
416 "Cannot get field `list` because value's type is " + getDataType());
426 if (type == COLUMN_TYPE_NODE) {
429 throw new InvalidValueException(
430 "cannot get field `node` because value's type is " + getDataType());
440 if (type == COLUMN_TYPE_EDGE) {
443 throw new InvalidValueException(
444 "cannot get field `edge` because value's type is " + getDataType());
454 if (type == COLUMN_TYPE_LOCALTIME) {
455 return (LocalTime) value;
457 throw new InvalidValueException(
458 "cannot get field `localtime` because value's type is " + getDataType());
469 if (type == COLUMN_TYPE_ZONEDTIME) {
470 return (OffsetTime) value;
472 throw new InvalidValueException(
473 "cannot get field `zonedtime` because value's type is " + getDataType());
483 public LocalDate
asDate() throws InvalidValueException {
484 if (type == COLUMN_TYPE_DATE) {
485 return (LocalDate) value;
487 throw new InvalidValueException(
488 "cannot get field `date` because value's type is " + getDataType());
498 if (type == COLUMN_TYPE_LOCALDATETIME) {
499 return (LocalDateTime) value;
501 throw new InvalidValueException(
502 "cannot get field `localdatetime` because value's type is " + getDataType());
512 if (type == COLUMN_TYPE_ZONEDDATETIME) {
513 return (ZonedDateTime) value;
515 throw new InvalidValueException(
516 "cannot get field `zoneddatetime` because value's type is " + getDataType());
526 if (type == COLUMN_TYPE_DURATION) {
529 throw new InvalidValueException(
530 "cannot get field `duration` because value's type is " + getDataType());
540 if (type == COLUMN_TYPE_RECORD) {
543 throw new InvalidValueException(
544 "cannot get field `record` because value's type is " + getDataType());
554 if (type == COLUMN_TYPE_PATH) {
557 throw new InvalidValueException(
558 "cannot get field `path` because value's type is " + getDataType());
567 public BigDecimal
asDecimal() throws InvalidValueException {
568 if (type == COLUMN_TYPE_DECIMAL) {
569 return (BigDecimal) value;
571 throw new InvalidValueException(
572 "cannot get field `decimal` because value's type is " + getDataType());
582 if (type == COLUMN_TYPE_EMBEDDINGVECTOR) {
585 throw new InvalidValueException(
586 "cannot get field `vector` because value's type is " + getDataType());
590 public boolean equals(Object o) {
594 if (o ==
null || getClass() != o.getClass()) {
597 ValueWrapper that = (ValueWrapper) o;
598 return Objects.equals(value, that.value);
602 public int hashCode() {
603 return Objects.hash(value);
617 }
else if (
isInt()) {
618 return String.valueOf(
asInt());
620 return String.valueOf(
asLong());
622 return String.valueOf(
asFloat());
628 return asList().toString();
632 return asNode().toString();
634 return asEdge().toString();
644 return asDate().toString();
648 return asPath().toString();
652 return "Unknown type: " + getDataType();
float asFloat()
Convert the original Value to float.
boolean isLocalTime()
check if the Value is Local Time type
double asDouble()
Convert the original Value to double.
int asInt()
Convert the original int8/uint8/int16/uint16/int32/uint32 Value to int.
Node asNode()
Convert the original Value to Node.
boolean isInt()
check if the Value is Int type
Path asPath()
Convert the original data type Value to Path.
boolean isNull()
if the value is null
boolean isPath()
check if the Value is Path type
LocalDateTime asLocalDateTime()
Convert the original data Value to LocalDateTime.
LocalDate asDate()
Convert the original data type Value to LocalDate.
boolean isList()
check if the Value is List type
boolean isNode()
check if the Value is Node type
NRecord asRecord()
Convert the original data type Value to NRecord.
EmbeddingVector asVector()
Convert the original data type Value to Vector.
NDuration asDuration()
Convert the original data type Value to NDuration.
boolean isDate()
check if the Value is Date type
boolean isLong()
check if the Value is Long type
Object getValue()
get the Object value
boolean isString()
check if the Value is String type
boolean isDouble()
check if the Value is Double type
OffsetTime asZonedTime()
Convert the original data type Value to OffsetTime.
boolean isBoolean()
check if the Value is Boolean type
boolean isLocalDateTime()
check if the Value is Local Datetime type
long asLong()
Convert the original int64/uint64 Value to long.
boolean isFloat()
check if the Value is Float type
BigDecimal asDecimal()
Convert the original data type Value to BigDecimal.
boolean isDecimal()
check if the Value is Decimal type
boolean isEdge()
check if the Value is Edge type
boolean isZonedTime()
check if the Value is Zoned Time type
String toString()
Convert Value to String format.
boolean asBoolean()
Convert the original Value to boolean.
ZonedDateTime asZonedDateTime()
Convert the original data Value to ZonedDateTime.
boolean isDuration()
check if the Value is Duration type
boolean isRecord()
check if the Value is Record type
Edge asEdge()
Convert the original data Value to Edge.
List< ValueWrapper > asList()
Convert the original Value to list.
LocalTime asLocalTime()
Convert the original data Value to LocalTime.
boolean isZonedDateTime()
check if the Value is Zoned Datetime type
String asString()
Convert the original data type Value to String.