sql-cli 1.70.0

SQL query tool for CSV/JSON with both interactive TUI and non-interactive CLI modes - perfect for exploration and automation
Documentation
# TUI Cleanup Summary

## Overview
Successfully completed a major refactoring to make the TUI only interact with DataView, establishing a clean separation of concerns and preparing for Redux-like state management.

## Architecture Achieved

```
┌─────────────┐
│     TUI     │ (Enhanced TUI, widgets)
└──────┬──────┘
       │ Uses only
┌─────────────┐
│  DataView   │ (Filtering, sorting, column visibility, exports)
└──────┬──────┘
       │ Wraps
┌─────────────┐
│  DataTable  │ (Immutable data storage)
└─────────────┘
```

## What Was Removed

### From Buffer Trait
- `get_filtered_data()` / `set_filtered_data()` - DataView handles filtering
- `get_hidden_columns()` / `add_hidden_column()` / etc. - DataView handles column visibility
- `get_csv_client()` / `set_csv_client()` - Legacy CSV access removed
- `get_cache_mode()` / `set_cache_mode()` - Cache mode obsolete
- `get_cached_data()` / `set_cached_data()` - No longer needed
- CSV-related fields: `csv_client`, `csv_mode`, `csv_table_name`
- Cache-related fields: `cache_mode`, `cached_data`

### From TUI
- Direct DataTable access patterns
- Legacy filtering through Buffer
- Manual column hiding logic
- Complex filter state management

## What Was Added

### DataView Enhancements
1. **Filtering**
   - `apply_text_filter()` - Case-sensitive/insensitive text search
   - `apply_fuzzy_filter()` - Fuzzy matching with exact mode support
   - `clear_filter()` - Restore to base rows
   - Filter state tracking with `filter_pattern`

2. **Sorting**
   - `apply_sort()` - Sort by column with persistence
   - `clear_sort()` - Restore original order
   - Sort persists through filter changes via `base_rows`

3. **Column Management**
   - `hide_column()` / `hide_column_by_name()` - Hide specific columns
   - `unhide_all_columns()` - Restore to base columns
   - `move_column_left()` / `move_column_right()` - Reorder columns
   - `base_columns` tracking for restoration

4. **Export Methods**
   - `to_json()` - Export visible data as JSON
   - `to_csv()` - Export as CSV with proper escaping
   - `to_tsv()` - Export as TSV for Excel compatibility

### Testing
- Comprehensive DataView test suite in `tests/data_view_tests.rs`
- Tests for filtering, sorting, column operations, and combined operations

## Migration Patterns

### Before (Direct DataTable Access)
```rust
let row_count = if let Some(filtered) = self.buffer().get_filtered_data() {
    filtered.len()
} else if let Some(datatable) = self.buffer().get_datatable() {
    datatable.row_count()
} else {
    0
};
```

### After (DataView Only)
```rust
let row_count = self.buffer()
    .get_dataview()
    .map(|v| v.row_count())
    .unwrap_or(0);
```

## Key Benefits

1. **Single Source of Truth**: DataView manages all view state
2. **Immutable Data**: DataTable never modified, only wrapped
3. **Clean Separation**: TUI knows nothing about data storage
4. **Testability**: DataView can be tested in isolation
5. **Performance**: Arc-based sharing, no data copying
6. **Redux Ready**: Clear data flow prepares for state management

## Next Steps

With this clean architecture in place, we're ready to:

1. **Extract Key Handling**: Move keyboard handling out of TUI into action dispatchers
2. **Implement Redux Store**: Create centralized state management
3. **Create Action System**: Define actions for all state changes
4. **Convert to Subscriptions**: Make widgets render from store state
5. **Add Middleware**: Time-travel debugging, logging, persistence

The foundation is now solid for implementing a proper state management system that will make the TUI more maintainable, testable, and extensible.