initial comment
This commit is contained in:
59
DATABASE-INIT-FIX.md
Normal file
59
DATABASE-INIT-FIX.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Database Initialization Fix
|
||||
|
||||
## Issue
|
||||
Dashboard was showing errors:
|
||||
```
|
||||
sqlite3.OperationalError: no such table: files
|
||||
```
|
||||
|
||||
## Root Cause
|
||||
The `DatabaseReader._ensure_database()` method only initialized the database if the file didn't exist:
|
||||
|
||||
```python
|
||||
if not self.db_path.exists():
|
||||
self._initialize_database()
|
||||
```
|
||||
|
||||
This caused problems when:
|
||||
- Database file exists but is empty
|
||||
- Database file exists but schema is outdated
|
||||
- Database was created but initialization failed partway through
|
||||
|
||||
## Fix
|
||||
Changed to always run initialization (dashboard.py:129-133):
|
||||
|
||||
```python
|
||||
def _ensure_database(self):
|
||||
"""Ensure database exists and has correct schema"""
|
||||
# Always run initialization - it's safe with CREATE TABLE IF NOT EXISTS
|
||||
# This ensures migrations run even if the file exists but schema is outdated
|
||||
self._initialize_database()
|
||||
```
|
||||
|
||||
## Why This Is Safe
|
||||
|
||||
1. **CREATE TABLE IF NOT EXISTS** - Won't recreate existing tables
|
||||
2. **Migration checks** - Only adds columns that don't exist
|
||||
3. **Idempotent** - Can run multiple times safely
|
||||
4. **Auto-repair** - Fixes incomplete or corrupted schemas
|
||||
|
||||
## Benefits
|
||||
|
||||
✅ Database always has correct schema
|
||||
✅ Migrations run automatically on startup
|
||||
✅ Handles edge cases (empty files, partial schemas)
|
||||
✅ No manual intervention needed
|
||||
✅ Works for fresh installs and upgrades
|
||||
|
||||
## Similar Fix Applied
|
||||
|
||||
The same initialization logic exists in `reencode.py`'s `StateDatabase` class, which already runs migrations every time. This change brings `dashboard.py` in line with that behavior.
|
||||
|
||||
## Testing
|
||||
|
||||
After this fix:
|
||||
1. Dashboard starts successfully
|
||||
2. Database is created if missing
|
||||
3. Tables are created if missing
|
||||
4. New columns are added via migration
|
||||
5. All API endpoints work properly
|
||||
Reference in New Issue
Block a user