mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
feat: necessary Hash derive for types (#2075)
* feat: necessary derive for types * impl (Partial)Ord for ConcreteDataType
This commit is contained in:
@@ -17,7 +17,7 @@ use std::ops::Deref;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
/// Bytes buffer.
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Deserialize, Serialize)]
|
||||
pub struct Bytes(bytes::Bytes);
|
||||
|
||||
impl From<Bytes> for bytes::Bytes {
|
||||
@@ -80,7 +80,7 @@ impl PartialEq<Bytes> for [u8] {
|
||||
///
|
||||
/// Now this buffer is restricted to only hold valid UTF-8 string (only allow constructing `StringBytes`
|
||||
/// from String or str). We may support other encoding in the future.
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
pub struct StringBytes(bytes::Bytes);
|
||||
|
||||
impl StringBytes {
|
||||
|
||||
@@ -35,7 +35,7 @@ use crate::types::{
|
||||
use crate::value::Value;
|
||||
use crate::vectors::MutableVector;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
#[enum_dispatch::enum_dispatch(DataType)]
|
||||
pub enum ConcreteDataType {
|
||||
Null(NullType),
|
||||
|
||||
@@ -24,7 +24,7 @@ use crate::type_id::LogicalTypeId;
|
||||
use crate::value::Value;
|
||||
use crate::vectors::{BinaryVectorBuilder, MutableVector};
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct BinaryType;
|
||||
|
||||
impl BinaryType {
|
||||
|
||||
@@ -23,7 +23,7 @@ use crate::type_id::LogicalTypeId;
|
||||
use crate::value::Value;
|
||||
use crate::vectors::{BooleanVectorBuilder, MutableVector};
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct BooleanType;
|
||||
|
||||
impl BooleanType {
|
||||
|
||||
@@ -26,7 +26,7 @@ use crate::value::{Value, ValueRef};
|
||||
use crate::vectors::{DateVector, DateVectorBuilder, MutableVector, Vector};
|
||||
|
||||
/// Data type for Date (YYYY-MM-DD).
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct DateType;
|
||||
|
||||
impl DataType for DateType {
|
||||
|
||||
@@ -24,7 +24,7 @@ use crate::types::LogicalPrimitiveType;
|
||||
use crate::vectors::{DateTimeVector, DateTimeVectorBuilder, PrimitiveVector};
|
||||
|
||||
/// Data type for [`DateTime`].
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct DateTimeType;
|
||||
|
||||
impl DataType for DateTimeType {
|
||||
|
||||
@@ -21,7 +21,7 @@ use crate::value::Value;
|
||||
use crate::vectors::MutableVector;
|
||||
|
||||
/// Used to represent the Dictionary datatype.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct DictionaryType {
|
||||
// Use Box to avoid recursive dependency, as enum ConcreteDataType depends on DictionaryType.
|
||||
/// The type of Dictionary key.
|
||||
|
||||
@@ -40,7 +40,7 @@ use crate::vectors::{
|
||||
/// The "calendar" interval is a type of time interval that does not
|
||||
/// have a precise duration without taking into account a specific
|
||||
/// base timestamp.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
#[enum_dispatch(DataType)]
|
||||
pub enum IntervalType {
|
||||
YearMonth(IntervalYearMonthType),
|
||||
@@ -62,7 +62,7 @@ impl IntervalType {
|
||||
macro_rules! impl_data_type_for_interval {
|
||||
($unit: ident, $type: ty) => {
|
||||
paste! {
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct [<Interval $unit Type>];
|
||||
|
||||
impl DataType for [<Interval $unit Type>] {
|
||||
|
||||
@@ -23,7 +23,7 @@ use crate::value::{ListValue, Value};
|
||||
use crate::vectors::{ListVectorBuilder, MutableVector};
|
||||
|
||||
/// Used to represent the List datatype.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct ListType {
|
||||
/// The type of List's item.
|
||||
// Use Box to avoid recursive dependency, as enum ConcreteDataType depends on ListType.
|
||||
|
||||
@@ -22,7 +22,7 @@ use crate::type_id::LogicalTypeId;
|
||||
use crate::value::Value;
|
||||
use crate::vectors::{MutableVector, NullVectorBuilder};
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct NullType;
|
||||
|
||||
impl NullType {
|
||||
|
||||
@@ -194,7 +194,9 @@ macro_rules! define_logical_primitive_type {
|
||||
// We need to define it as an empty struct `struct DataType {}` instead of a struct-unit
|
||||
// `struct DataType;` to ensure the serialized JSON string is compatible with previous
|
||||
// implementation.
|
||||
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(
|
||||
Debug, Clone, Default, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize,
|
||||
)]
|
||||
pub struct $DataType {}
|
||||
|
||||
impl LogicalPrimitiveType for $DataType {
|
||||
|
||||
@@ -24,7 +24,7 @@ use crate::type_id::LogicalTypeId;
|
||||
use crate::value::Value;
|
||||
use crate::vectors::{MutableVector, StringVectorBuilder};
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct StringType;
|
||||
|
||||
impl StringType {
|
||||
|
||||
@@ -44,7 +44,7 @@ const MILLISECOND_VARIATION: u64 = 3;
|
||||
const MICROSECOND_VARIATION: u64 = 6;
|
||||
const NANOSECOND_VARIATION: u64 = 9;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
#[enum_dispatch(DataType)]
|
||||
pub enum TimeType {
|
||||
Second(TimeSecondType),
|
||||
@@ -88,7 +88,7 @@ impl TimeType {
|
||||
macro_rules! impl_data_type_for_time {
|
||||
($unit: ident,$arrow_type: ident, $type: ty) => {
|
||||
paste! {
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct [<Time $unit Type>];
|
||||
|
||||
impl DataType for [<Time $unit Type>] {
|
||||
|
||||
@@ -47,7 +47,7 @@ const MILLISECOND_VARIATION: u64 = 3;
|
||||
const MICROSECOND_VARIATION: u64 = 6;
|
||||
const NANOSECOND_VARIATION: u64 = 9;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
#[enum_dispatch(DataType)]
|
||||
pub enum TimestampType {
|
||||
Second(TimestampSecondType),
|
||||
@@ -109,7 +109,7 @@ impl TimestampType {
|
||||
macro_rules! impl_data_type_for_timestamp {
|
||||
($unit: ident) => {
|
||||
paste! {
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct [<Timestamp $unit Type>];
|
||||
|
||||
impl DataType for [<Timestamp $unit Type>] {
|
||||
|
||||
@@ -44,7 +44,7 @@ pub type OrderedF64 = OrderedFloat<f64>;
|
||||
/// Value holds a single arbitrary value of any [DataType](crate::data_type::DataType).
|
||||
///
|
||||
/// Comparison between values with different types (expect Null) is not allowed.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub enum Value {
|
||||
Null,
|
||||
|
||||
@@ -535,7 +535,7 @@ impl TryFrom<Value> for serde_json::Value {
|
||||
|
||||
// TODO(yingwen): Consider removing the `datatype` field from `ListValue`.
|
||||
/// List value.
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Hash, Serialize, Deserialize)]
|
||||
pub struct ListValue {
|
||||
/// List of nested Values (boxed to reduce size_of(Value))
|
||||
#[allow(clippy::box_collection)]
|
||||
|
||||
Reference in New Issue
Block a user