1use super::{FilterExpr, FormulaExpr, Value};
2use alloc::boxed::Box;
3use alloc::string::String;
4use alloc::vec::Vec;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum PointId {
9 Number(u64),
10 String(String),
11}
12
13#[derive(Debug, Clone, PartialEq)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub enum VectorValue {
16 Dense(Vec<f32>),
17 Sparse { indices: Vec<u32>, values: Vec<f32> },
18 MultiDense(Vec<Vec<f32>>),
19}
20
21#[derive(Debug, Clone, PartialEq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub enum PointVectors {
24 Unnamed(VectorValue),
25 Named(Vec<(String, VectorValue)>),
26}
27
28#[derive(Debug, Clone, PartialEq)]
29#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
30pub enum QueryInput {
31 Text {
32 text: String,
33 model: Option<String>,
34 },
35 Image {
38 source: String,
39 model: Option<String>,
40 },
41 Vector(VectorValue),
42 Point(PointId),
43}
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq)]
46#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
47pub enum VectorKind {
48 Dense,
49 Sparse,
50}
51
52#[derive(Debug, Clone, PartialEq, Eq)]
53#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
54pub struct VectorTarget {
55 pub name: String,
56 pub kind: Option<VectorKind>,
57 #[cfg_attr(feature = "serde", serde(default))]
61 pub multi: bool,
62}
63
64#[derive(Debug, Clone, PartialEq)]
65#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
66pub struct MmrConfig {
67 pub diversity: f64,
68 pub candidates: u64,
69}
70
71#[derive(Debug, Clone, PartialEq)]
72#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
73pub struct ContextPair {
74 pub positive: QueryInput,
75 pub negative: QueryInput,
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq)]
79#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
80pub enum RecommendStrategy {
81 AverageVector,
82 BestScore,
83 SumScores,
84}
85
86#[derive(Debug, Clone, PartialEq)]
87#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
88pub struct FeedbackItem {
89 pub example: QueryInput,
90 pub score: f64,
91}
92
93#[derive(Debug, Clone, Copy, PartialEq)]
94#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
95pub struct FeedbackStrategy {
96 pub a: f64,
97 pub b: f64,
98 pub c: f64,
99}
100
101#[derive(Debug, Clone, Copy, PartialEq, Eq)]
102#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
103pub enum OrderDirection {
104 Asc,
105 Desc,
106}
107
108#[derive(Debug, Clone, Copy, PartialEq, Eq)]
109#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
110pub enum FusionMethod {
111 Rrf,
112 Dbsf,
113}
114
115#[derive(Debug, Clone, PartialEq)]
116#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
117pub enum QueryCollection {
118 Explicit(String),
119 Inherited,
120}
121
122#[derive(Debug, Clone, PartialEq)]
123#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
124pub enum PrefetchSource {
125 Cte(String),
126 Query(Box<QueryStmt>),
127}
128
129#[derive(Debug, Clone, PartialEq)]
130#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
131pub struct LookupSpec {
132 pub collection: String,
133 pub vector: Option<String>,
134}
135
136#[derive(Debug, Clone, PartialEq)]
137#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
138pub struct Prefetch {
139 pub source: PrefetchSource,
140 pub filter: Option<Box<FilterExpr>>,
141 pub score_threshold: Option<f64>,
142 pub lookup: Option<LookupSpec>,
143}
144
145#[derive(Debug, Clone, PartialEq)]
146#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
147pub enum QueryExpr {
148 Points {
149 ids: Vec<PointId>,
150 },
151 Nearest {
152 input: QueryInput,
153 using: Option<VectorTarget>,
154 prefetch: Vec<Prefetch>,
155 mmr: Option<Box<MmrConfig>>,
156 },
157 Recommend {
158 positive: Vec<QueryInput>,
159 negative: Vec<QueryInput>,
160 strategy: Option<RecommendStrategy>,
161 using: Option<VectorTarget>,
162 prefetch: Vec<Prefetch>,
163 },
164 Context {
165 pairs: Vec<ContextPair>,
166 using: Option<VectorTarget>,
167 prefetch: Vec<Prefetch>,
168 },
169 Discover {
170 target: QueryInput,
171 context: Vec<ContextPair>,
172 using: Option<VectorTarget>,
173 prefetch: Vec<Prefetch>,
174 },
175 OrderBy {
176 field: String,
177 direction: OrderDirection,
178 },
179 SampleRandom,
180 Fusion {
181 method: FusionMethod,
182 prefetch: Vec<Prefetch>,
183 },
184 Formula {
185 expression: Box<FormulaExpr>,
186 defaults: Vec<(String, Value)>,
187 prefetch: Vec<Prefetch>,
188 },
189 RelevanceFeedback {
190 target: QueryInput,
191 feedback: Vec<FeedbackItem>,
192 strategy: FeedbackStrategy,
193 using: Option<VectorTarget>,
194 prefetch: Vec<Prefetch>,
195 },
196 Hybrid {
197 text: String,
198 model: Option<String>,
199 dense_vector: Option<String>,
200 sparse_vector: Option<String>,
201 fusion: FusionMethod,
202 },
203 Rerank {
204 input: QueryInput,
205 model: String,
206 using: Option<VectorTarget>,
207 prefetch: Vec<Prefetch>,
208 },
209 CrossRerank {
212 query: String,
214 model: String,
216 field: Option<String>,
218 prefetch: Vec<Prefetch>,
219 },
220}
221
222#[derive(Debug, Clone, PartialEq, Default)]
223#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
224pub struct QuantizationSearchParams {
225 pub ignore: Option<bool>,
226 pub rescore: Option<bool>,
227 pub oversampling: Option<f64>,
228}
229
230#[derive(Debug, Clone, PartialEq)]
236#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
237pub enum ReadConsistency {
238 Factor(u64),
240 Majority,
242 Quorum,
244 All,
246}
247
248#[derive(Debug, Clone, PartialEq, Default)]
249#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
250pub struct SearchParams {
251 pub hnsw_ef: Option<u64>,
252 pub exact: Option<bool>,
253 pub acorn: Option<bool>,
254 pub max_selectivity: Option<f64>,
256 pub indexed_only: Option<bool>,
257 pub quantization: Option<QuantizationSearchParams>,
258 pub rrf_k: Option<u64>,
259 pub rrf_weights: Option<Vec<f64>>,
260 pub timeout: Option<u64>,
263 pub consistency: Option<ReadConsistency>,
265}
266
267#[derive(Debug, Clone, PartialEq)]
268#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
269pub enum PayloadSelector {
270 All,
271 None,
272 Include(Vec<String>),
273 Exclude(Vec<String>),
274}
275
276#[derive(Debug, Clone, PartialEq)]
277#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
278pub enum VectorSelector {
279 All,
280 None,
281 Names(Vec<String>),
282}
283
284#[derive(Debug, Clone, PartialEq, Default)]
285#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
286pub struct QueryOutput {
287 pub payload: Option<PayloadSelector>,
288 pub vectors: Option<VectorSelector>,
289}
290
291#[derive(Debug, Clone, PartialEq)]
292#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
293pub struct GroupSpec {
294 pub field: String,
295 pub size: Option<u64>,
296 pub lookup: Option<String>,
297}
298
299#[derive(Debug, Clone, PartialEq, Default)]
300#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
301pub struct PageSpec {
302 pub limit: Option<u64>,
303 pub offset: Option<u64>,
304}
305
306#[derive(Debug, Clone, PartialEq)]
307#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
308pub struct Cte {
309 pub name: String,
310 pub query: Box<QueryStmt>,
311}
312
313#[derive(Debug, Clone, PartialEq)]
314#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
315pub struct QueryStmt {
316 pub ctes: Vec<Cte>,
317 pub collection: QueryCollection,
318 pub expression: QueryExpr,
319 pub filter: Option<Box<FilterExpr>>,
320 pub params: Option<SearchParams>,
321 pub score_threshold: Option<f64>,
322 pub group: Option<GroupSpec>,
323 pub output: QueryOutput,
324 pub page: PageSpec,
325 pub shard_key: Option<String>,
326}
327
328#[derive(Debug, Clone, PartialEq)]
329#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
330pub struct ScrollStmt {
331 pub collection: String,
332 pub limit: u64,
333 pub filter: Option<Box<FilterExpr>>,
334 pub after: Option<PointId>,
335 pub shard_key: Option<String>,
336 pub with_vector: Option<VectorSelector>,
338}
339
340#[derive(Debug, Clone, PartialEq)]
341#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
342pub enum EmbedKind {
343 Dense {
344 model: Option<String>,
345 },
346 Sparse {
347 model: Option<String>,
348 },
349 Multi {
351 model: Option<String>,
352 },
353 Image {
355 model: Option<String>,
356 },
357}
358
359#[derive(Debug, Clone, PartialEq)]
360#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
361pub struct EmbedDirective {
362 pub source_field: String,
363 pub target_vector: String,
364 pub kind: EmbedKind,
365}
366
367#[derive(Debug, Clone, PartialEq)]
368#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
369pub enum EmbeddingSpec {
370 Dense {
371 model: Option<String>,
372 vector: Option<String>,
373 field: Option<String>,
374 },
375 Sparse {
376 model: Option<String>,
377 vector: Option<String>,
378 field: Option<String>,
379 },
380 Hybrid {
381 dense_model: Option<String>,
382 dense_vector: Option<String>,
383 dense_field: Option<String>,
384 sparse_model: Option<String>,
385 sparse_vector: Option<String>,
386 sparse_field: Option<String>,
387 },
388 MultiVector {
390 model: Option<String>,
391 vector: Option<String>,
392 field: Option<String>,
393 },
394 Image {
396 model: Option<String>,
397 vector: Option<String>,
398 field: Option<String>,
399 },
400 Multi(Vec<EmbeddingSpec>),
402}
403
404#[derive(Debug, Clone, PartialEq)]
405#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
406pub struct UpsertPoint {
407 pub id: PointId,
408 pub vectors: Option<PointVectors>,
409 pub payload: Vec<(String, Value)>,
410}
411
412#[derive(Debug, Clone, PartialEq)]
413#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
414pub struct UpsertStmt {
415 pub collection: String,
416 pub points: Vec<UpsertPoint>,
417 pub embedding: Option<EmbeddingSpec>,
418 pub embed: Vec<EmbedDirective>,
419 pub shard_key: Option<String>,
420}
421
422#[derive(Debug, Clone, Copy, PartialEq, Eq)]
423#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
424pub enum VectorDistance {
425 Cosine,
426 Dot,
427 Euclid,
428 Manhattan,
429}
430
431#[derive(Debug, Clone, Copy, PartialEq, Eq)]
432#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
433pub enum MultivectorComparator {
434 MaxSim,
435}
436
437#[derive(Debug, Clone, PartialEq)]
438#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
439pub struct MultivectorConfig {
440 pub comparator: MultivectorComparator,
441}
442
443#[derive(Debug, Clone, PartialEq)]
444#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
445pub struct VectorDef {
446 pub name: String,
447 pub size: u64,
448 pub distance: VectorDistance,
449 pub hnsw: Option<Box<HnswRuntimeConfig>>,
450 pub quantization: Option<Box<QuantizationConfig>>,
451 pub multivector: Option<MultivectorConfig>,
452 pub vectors: Option<Box<VectorsConfig>>,
453}
454
455#[derive(Debug, Clone, PartialEq)]
456#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
457pub struct SparseIndexConfig {
458 pub full_scan_threshold: Option<u64>,
459 pub on_disk: Option<bool>,
460 pub datatype: Option<String>,
461}
462
463#[derive(Debug, Clone, PartialEq)]
464#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
465pub struct SparseVectorDef {
466 pub name: String,
467 pub index: Option<Box<SparseIndexConfig>>,
468 pub modifier: Option<String>,
469}
470
471#[derive(Debug, Clone, Copy, PartialEq, Eq)]
472#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
473pub enum QuantizationType {
474 Scalar,
475 Binary,
476 Product,
477 Turbo,
478}
479
480#[derive(Debug, Clone, PartialEq)]
481#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
482pub struct QuantizationConfig {
483 pub qtype: QuantizationType,
484 pub always_ram: bool,
485 pub quantile: Option<f64>,
486 pub bits: Option<f64>,
487 pub compression: Option<String>,
488 pub encoding: Option<String>,
489 pub query_encoding: Option<String>,
490}
491
492#[derive(Debug, Clone, PartialEq)]
493#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
494pub struct QuantizationUpdate {
495 pub disabled: bool,
496 pub config: Option<Box<QuantizationConfig>>,
497}
498
499#[derive(Debug, Clone, PartialEq)]
500#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
501pub struct HnswRuntimeConfig {
502 pub m: Option<u64>,
503 pub ef_construct: Option<u64>,
504 pub full_scan_threshold: Option<u64>,
505 pub max_indexing_threads: Option<u64>,
506 pub on_disk: Option<bool>,
507 pub payload_m: Option<u64>,
508 pub inline_storage: Option<bool>,
509}
510
511#[derive(Debug, Clone, PartialEq)]
512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
513pub struct VectorsConfig {
514 pub on_disk: Option<bool>,
515}
516
517#[derive(Debug, Clone, Copy, PartialEq)]
518#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
519pub struct OptimizationThreads {
520 pub auto_: bool,
521 pub value: u64,
522}
523
524#[derive(Debug, Clone, PartialEq)]
525#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
526pub struct OptimizersRuntimeConfig {
527 pub deleted_threshold: Option<f64>,
528 pub vacuum_min_vector_number: Option<u64>,
529 pub default_segment_number: Option<u64>,
530 pub max_segment_size: Option<u64>,
531 pub memmap_threshold: Option<u64>,
532 pub indexing_threshold: Option<u64>,
533 pub flush_interval_sec: Option<u64>,
534 pub max_optimization_threads: Option<OptimizationThreads>,
535 pub prevent_unoptimized: Option<bool>,
536}
537
538#[derive(Debug, Clone, PartialEq)]
539#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
540pub struct CollectionParamsConfig {
541 pub replication_factor: Option<u64>,
542 pub write_consistency_factor: Option<u64>,
543 pub read_fan_out_factor: Option<u64>,
544 pub read_fan_out_delay_ms: Option<u64>,
545 pub on_disk_payload: Option<bool>,
546 pub shard_number: Option<u64>,
547 pub sharding_method: Option<String>,
548 pub shard_keys: Option<Vec<String>>,
549}
550
551#[derive(Debug, Clone, PartialEq)]
552#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
553pub struct CollectionConfig {
554 pub vectors: Option<Box<VectorsConfig>>,
555 pub hnsw: Option<Box<HnswRuntimeConfig>>,
556 pub optimizers: Option<Box<OptimizersRuntimeConfig>>,
557 pub params: Option<Box<CollectionParamsConfig>>,
558 pub quantization: Option<Box<QuantizationConfig>>,
559 pub quantization_update: Option<Box<QuantizationUpdate>>,
560}
561
562#[derive(Debug, Clone, PartialEq)]
563#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
564pub enum CollectionMode {
565 Dense {
566 model: Option<String>,
567 },
568 Hybrid {
569 dense_vector: Option<String>,
570 sparse_vector: Option<String>,
571 },
572 Rerank,
573}
574
575#[derive(Debug, Clone, PartialEq)]
576#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
577pub struct ClearPayloadStmt {
578 pub collection: String,
579 pub selector: PointSelector,
580 pub shard_key: Option<String>,
581}
582
583#[derive(Debug, Clone, PartialEq)]
584#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
585pub struct DeleteVectorStmt {
586 pub collection: String,
587 pub selector: PointSelector,
588 pub vector_names: Vec<String>,
589 pub shard_key: Option<String>,
590}
591
592#[derive(Debug, Clone, PartialEq)]
593#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
594pub struct CreateCollectionStmt {
595 pub collection: String,
596 pub mode: CollectionMode,
597 pub vectors: Vec<VectorDef>,
598 pub sparse_vectors: Vec<SparseVectorDef>,
599 pub config: Option<Box<CollectionConfig>>,
600}
601
602#[derive(Debug, Clone, PartialEq)]
603#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
604pub struct AlterCollectionStmt {
605 pub collection: String,
606 pub config: Option<Box<CollectionConfig>>,
607}
608
609#[derive(Debug, Clone, PartialEq)]
610#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
611pub struct DropCollectionStmt {
612 pub collection: String,
613}
614
615#[derive(Debug, Clone, PartialEq)]
616#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
617pub struct CreateIndexStmt {
618 pub collection: String,
619 pub field: String,
620 pub field_type: String,
621 pub options: Vec<(String, Value)>,
622}
623
624#[derive(Debug, Clone, PartialEq)]
625#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
626pub struct DropIndexStmt {
627 pub collection: String,
628 pub field: String,
629}
630
631#[derive(Debug, Clone, PartialEq)]
632#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
633pub struct CountStmt {
634 pub collection: QueryCollection,
635 pub filter: Option<Box<FilterExpr>>,
636 pub shard_key: Option<String>,
637 pub exact: Option<bool>,
638}
639
640#[derive(Debug, Clone, PartialEq)]
641#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
642pub struct CreateShardKeyStmt {
643 pub collection: String,
644 pub shard_key: String,
645 pub shards_number: Option<u64>,
646 pub replication_factor: Option<u64>,
647}
648
649#[derive(Debug, Clone, PartialEq)]
650#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
651pub struct DropShardKeyStmt {
652 pub collection: String,
653 pub shard_key: String,
654}
655
656#[derive(Debug, Clone, PartialEq)]
657#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
658pub enum PointSelector {
659 Id(PointId),
660 Ids(Vec<PointId>),
661 Filter(Box<FilterExpr>),
662}
663
664#[derive(Debug, Clone, PartialEq)]
665#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
666pub struct DeleteStmt {
667 pub collection: String,
668 pub selector: PointSelector,
669 pub shard_key: Option<String>,
670}
671
672#[derive(Debug, Clone, PartialEq)]
673#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
674pub struct UpdateVectorStmt {
675 pub collection: String,
676 pub point_id: PointId,
677 pub vector: VectorValue,
678 pub vector_name: Option<String>,
679 pub shard_key: Option<String>,
680}
681
682#[derive(Debug, Clone, PartialEq)]
683#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
684pub struct DeletePayloadStmt {
685 pub collection: String,
686 pub keys: Vec<String>,
687 pub selector: PointSelector,
688 pub shard_key: Option<String>,
689}
690
691#[derive(Debug, Clone, PartialEq)]
692#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
693pub struct UpdatePayloadStmt {
694 pub collection: String,
695 pub selector: PointSelector,
696 pub payload: Vec<(String, Value)>,
697 pub shard_key: Option<String>,
698}
699
700#[derive(Debug, Clone, PartialEq)]
701#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
702pub enum Stmt {
703 Query(Box<QueryStmt>),
704 Scroll(Box<ScrollStmt>),
705 Upsert(Box<UpsertStmt>),
706 CreateCollection(Box<CreateCollectionStmt>),
707 CreateIndex(Box<CreateIndexStmt>),
708 DropIndex(Box<DropIndexStmt>),
709 CreateShardKey(Box<CreateShardKeyStmt>),
710 DropShardKey(Box<DropShardKeyStmt>),
711 AlterCollection(Box<AlterCollectionStmt>),
712 DropCollection(Box<DropCollectionStmt>),
713 ShowCollections,
714 ShowCollection(String),
715 ShowShardKeys(String),
716 Delete(Box<DeleteStmt>),
717 ClearPayload(Box<ClearPayloadStmt>),
718 DeletePayload(Box<DeletePayloadStmt>),
719 DeleteVector(Box<DeleteVectorStmt>),
720 UpdateVector(Box<UpdateVectorStmt>),
721 UpdatePayload(Box<UpdatePayloadStmt>),
722 Count(Box<CountStmt>),
723}
724
725#[cfg(feature = "serde")]
726impl serde::Serialize for Stmt {
727 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
728 where
729 S: serde::Serializer,
730 {
731 use serde::ser::SerializeMap;
732 match self {
733 Stmt::Query(s) => serializer.serialize_newtype_variant("Stmt", 0, "Query", s),
734 Stmt::Scroll(s) => serializer.serialize_newtype_variant("Stmt", 1, "Scroll", s),
735 Stmt::Upsert(s) => serializer.serialize_newtype_variant("Stmt", 2, "Upsert", s),
736 Stmt::CreateCollection(s) => {
737 serializer.serialize_newtype_variant("Stmt", 3, "CreateCollection", s)
738 }
739 Stmt::CreateIndex(s) => {
740 serializer.serialize_newtype_variant("Stmt", 4, "CreateIndex", s)
741 }
742 Stmt::DropIndex(s) => serializer.serialize_newtype_variant("Stmt", 5, "DropIndex", s),
743 Stmt::CreateShardKey(s) => {
744 serializer.serialize_newtype_variant("Stmt", 6, "CreateShardKey", s)
745 }
746 Stmt::DropShardKey(s) => {
747 serializer.serialize_newtype_variant("Stmt", 7, "DropShardKey", s)
748 }
749 Stmt::AlterCollection(s) => {
750 serializer.serialize_newtype_variant("Stmt", 8, "AlterCollection", s)
751 }
752 Stmt::DropCollection(s) => {
753 serializer.serialize_newtype_variant("Stmt", 9, "DropCollection", s)
754 }
755 Stmt::ShowCollections => {
756 let mut map = serializer.serialize_map(Some(1))?;
757 let empty = std::collections::BTreeMap::<String, String>::new();
758 map.serialize_entry("ShowCollections", &empty)?;
759 map.end()
760 }
761 Stmt::ShowCollection(s) => {
762 serializer.serialize_newtype_variant("Stmt", 11, "ShowCollection", s)
763 }
764 Stmt::ShowShardKeys(s) => {
765 serializer.serialize_newtype_variant("Stmt", 12, "ShowShardKeys", s)
766 }
767 Stmt::Delete(s) => serializer.serialize_newtype_variant("Stmt", 13, "Delete", s),
768 Stmt::ClearPayload(s) => {
769 serializer.serialize_newtype_variant("Stmt", 14, "ClearPayload", s)
770 }
771 Stmt::DeletePayload(s) => {
772 serializer.serialize_newtype_variant("Stmt", 15, "DeletePayload", s)
773 }
774 Stmt::DeleteVector(s) => {
775 serializer.serialize_newtype_variant("Stmt", 16, "DeleteVector", s)
776 }
777 Stmt::UpdateVector(s) => {
778 serializer.serialize_newtype_variant("Stmt", 17, "UpdateVector", s)
779 }
780 Stmt::UpdatePayload(s) => {
781 serializer.serialize_newtype_variant("Stmt", 18, "UpdatePayload", s)
782 }
783 Stmt::Count(s) => serializer.serialize_newtype_variant("Stmt", 19, "Count", s),
784 }
785 }
786}