Skip to main content

ekodb_client/
batch.rs

1//! Batch operations for efficient bulk inserts, updates, and deletes
2//!
3//! This module will provide batch operation support.
4//! Implementation coming soon.
5
6use crate::types::Record;
7
8/// Builder for batch operations
9#[derive(Default)]
10pub struct BatchBuilder {
11    records: Vec<Record>,
12}
13
14impl BatchBuilder {
15    /// Create a new batch builder
16    pub fn new() -> Self {
17        Self::default()
18    }
19
20    /// Add a record to the batch
21    #[allow(clippy::should_implement_trait)]
22    pub fn add(mut self, record: Record) -> Self {
23        self.records.push(record);
24        self
25    }
26
27    /// Get the number of records in the batch
28    pub fn len(&self) -> usize {
29        self.records.len()
30    }
31
32    /// Check if the batch is empty
33    pub fn is_empty(&self) -> bool {
34        self.records.is_empty()
35    }
36
37    /// Build the batch
38    pub fn build(self) -> Vec<Record> {
39        self.records
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    #[test]
48    fn test_batch_builder_new() {
49        let builder = BatchBuilder::new();
50        assert!(builder.is_empty());
51        assert_eq!(builder.len(), 0);
52    }
53
54    #[test]
55    fn test_batch_builder_default() {
56        let builder = BatchBuilder::default();
57        assert!(builder.is_empty());
58    }
59
60    #[test]
61    fn test_batch_builder_add() {
62        let mut record = Record::new();
63        record.insert("name", "test");
64
65        let builder = BatchBuilder::new().add(record);
66        assert_eq!(builder.len(), 1);
67        assert!(!builder.is_empty());
68    }
69
70    #[test]
71    fn test_batch_builder_add_multiple() {
72        let mut record1 = Record::new();
73        record1.insert("name", "test1");
74
75        let mut record2 = Record::new();
76        record2.insert("name", "test2");
77
78        let builder = BatchBuilder::new().add(record1).add(record2);
79        assert_eq!(builder.len(), 2);
80    }
81
82    #[test]
83    fn test_batch_builder_build() {
84        let mut record = Record::new();
85        record.insert("name", "test");
86
87        let builder = BatchBuilder::new().add(record);
88        let records = builder.build();
89
90        assert_eq!(records.len(), 1);
91    }
92
93    #[test]
94    fn test_batch_builder_chaining() {
95        let records: Vec<Record> = (0..5)
96            .map(|i| {
97                let mut record = Record::new();
98                record.insert("id", i);
99                record
100            })
101            .fold(BatchBuilder::new(), |builder, record| builder.add(record))
102            .build();
103
104        assert_eq!(records.len(), 5);
105    }
106}