sql_cli/data/adapters/
buffer_adapter.rs

1// Simplified BufferAdapter - just delegates to DataView
2// This is a temporary migration adapter until we remove DataProvider completely
3
4use crate::buffer::BufferAPI;
5use crate::data::data_provider::DataProvider;
6use std::fmt::Debug;
7
8/// Minimal adapter that just uses DataView for everything
9pub struct BufferAdapter<'a> {
10    buffer: &'a (dyn BufferAPI + Send + Sync),
11}
12
13impl<'a> BufferAdapter<'a> {
14    pub fn new(buffer: &'a (dyn BufferAPI + Send + Sync)) -> Self {
15        Self { buffer }
16    }
17}
18
19impl<'a> Debug for BufferAdapter<'a> {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        f.debug_struct("BufferAdapter").finish()
22    }
23}
24
25impl<'a> DataProvider for BufferAdapter<'a> {
26    fn get_row(&self, index: usize) -> Option<Vec<String>> {
27        // Use DataView if available
28        if let Some(dataview) = self.buffer.get_dataview() {
29            if let Some(row) = dataview.get_row(index) {
30                return Some(row.values.iter().map(|v| v.to_string()).collect());
31            }
32        }
33
34        // Fallback to DataTable if no DataView
35        if let Some(datatable) = self.buffer.get_datatable() {
36            if let Some(row) = datatable.get_row_as_strings(index) {
37                return Some(row);
38            }
39        }
40
41        None
42    }
43
44    fn get_column_names(&self) -> Vec<String> {
45        // Use DataView if available (respects hidden columns)
46        if let Some(dataview) = self.buffer.get_dataview() {
47            return dataview.column_names();
48        }
49
50        // Fallback to DataTable
51        if let Some(datatable) = self.buffer.get_datatable() {
52            return datatable.column_names();
53        }
54
55        Vec::new()
56    }
57
58    fn get_row_count(&self) -> usize {
59        // Use DataView if available (respects filtering)
60        if let Some(dataview) = self.buffer.get_dataview() {
61            return dataview.row_count();
62        }
63
64        // Fallback to DataTable
65        if let Some(datatable) = self.buffer.get_datatable() {
66            return datatable.row_count();
67        }
68
69        0
70    }
71
72    fn get_column_count(&self) -> usize {
73        // Use DataView if available (respects hidden columns)
74        if let Some(dataview) = self.buffer.get_dataview() {
75            return dataview.column_count();
76        }
77
78        // Fallback to DataTable
79        if let Some(datatable) = self.buffer.get_datatable() {
80            return datatable.column_count();
81        }
82
83        0
84    }
85}