use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum DdlStatement {
CreateCollection(CreateCollectionStatement),
DropCollection(DropCollectionStatement),
CreateIndex(CreateIndexStatement),
DropIndex(DropIndexStatement),
Analyze(AnalyzeStatement),
Truncate(TruncateStatement),
AlterCollection(AlterCollectionStatement),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CreateCollectionStatement {
pub name: String,
pub kind: CreateCollectionKind,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum CreateCollectionKind {
Vector(VectorCollectionParams),
Graph(GraphCollectionParams),
Metadata,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VectorCollectionParams {
pub dimension: usize,
pub metric: String,
pub storage: Option<String>,
pub m: Option<usize>,
pub ef_construction: Option<usize>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GraphCollectionParams {
pub dimension: Option<usize>,
pub metric: Option<String>,
pub schema_mode: GraphSchemaMode,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum GraphSchemaMode {
Schemaless,
Typed(Vec<SchemaDefinition>),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SchemaDefinition {
Node {
name: String,
properties: Vec<(String, String)>,
},
Edge {
name: String,
from_type: String,
to_type: String,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DropCollectionStatement {
pub name: String,
pub if_exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CreateIndexStatement {
pub collection: String,
pub field: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DropIndexStatement {
pub collection: String,
pub field: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AnalyzeStatement {
pub collection: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TruncateStatement {
pub collection: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AlterCollectionStatement {
pub collection: String,
pub options: Vec<(String, String)>,
}