fix: change TIMESTAMP columns to TEXT to avoid SQLite auto-conversion errors

SQLite's TIMESTAMP type causes auto-conversion issues when data is in ISO format
- Changed all TIMESTAMP columns to TEXT in schema.sql
- Disabled detect_types in database.py to prevent auto-conversion
- This stores datetime as ISO strings without parsing issues
This commit is contained in:
LemonNexus 2026-02-11 13:13:55 +00:00
parent 381c0e2b50
commit b06b98e6cc
2 changed files with 18 additions and 18 deletions

View File

@ -110,7 +110,7 @@ class DatabaseManager:
if self._connection is None:
self._connection = sqlite3.connect(
self.db_path,
detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES
detect_types=0 # Disable auto type detection to avoid TIMESTAMP parsing issues
)
self._connection.row_factory = sqlite3.Row

View File

@ -17,9 +17,9 @@ CREATE TABLE IF NOT EXISTS projects (
description TEXT,
type TEXT NOT NULL CHECK (type IN ('hunt', 'mine', 'craft', 'inventory')),
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'paused', 'completed', 'archived')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
archived_at TIMESTAMP,
created_at TEXT, -- ISO format datetime (TEXT to avoid auto-conversion issues)
updated_at TEXT,
archived_at TEXT,
metadata TEXT -- JSON blob for extensible project data
);
@ -34,8 +34,8 @@ CREATE INDEX IF NOT EXISTS idx_projects_created ON projects(created_at);
CREATE TABLE IF NOT EXISTS sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ended_at TIMESTAMP,
started_at TEXT, -- ISO format datetime
ended_at TEXT,
status TEXT DEFAULT 'running' CHECK (status IN ('running', 'paused', 'completed', 'stopped')),
duration_seconds INTEGER DEFAULT 0,
total_spent_ped REAL DEFAULT 0.0, -- Decimal stored as REAL, handled in code
@ -56,8 +56,8 @@ CREATE TABLE IF NOT EXISTS loadouts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at TEXT, -- ISO format datetime
updated_at TEXT,
-- Weapon
weapon_name TEXT,
@ -121,8 +121,8 @@ CREATE TABLE IF NOT EXISTS hunting_sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL UNIQUE,
loadout_id INTEGER, -- Links to loadouts table
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ended_at TIMESTAMP,
started_at TEXT, -- ISO format datetime
ended_at TEXT,
-- Loot breakdown
total_loot_ped REAL DEFAULT 0.0,
@ -175,7 +175,7 @@ CREATE INDEX IF NOT EXISTS idx_hunting_sessions_weapon ON hunting_sessions(weapo
CREATE TABLE IF NOT EXISTS hunting_globals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hunting_session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
creature_name TEXT,
value_ped REAL NOT NULL,
is_hof BOOLEAN DEFAULT 0,
@ -193,7 +193,7 @@ CREATE INDEX IF NOT EXISTS idx_hunting_globals_value ON hunting_globals(value_pe
CREATE TABLE IF NOT EXISTS loot_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
event_type TEXT NOT NULL CHECK (event_type IN ('global', 'hof', 'regular', 'skill')),
-- Loot data
@ -228,7 +228,7 @@ CREATE INDEX IF NOT EXISTS idx_loot_value ON loot_events(value_ped);
CREATE TABLE IF NOT EXISTS combat_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
event_type TEXT NOT NULL CHECK (event_type IN ('damage_dealt', 'damage_taken', 'heal', 'evade', 'kill', 'critical_hit')),
damage_amount REAL,
@ -251,7 +251,7 @@ CREATE INDEX IF NOT EXISTS idx_combat_type ON combat_events(event_type);
CREATE TABLE IF NOT EXISTS skill_gains (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
skill_name TEXT NOT NULL,
gained_amount REAL DEFAULT 0.0,
new_total REAL,
@ -269,7 +269,7 @@ CREATE INDEX IF NOT EXISTS idx_skill_name ON skill_gains(skill_name);
CREATE TABLE IF NOT EXISTS decay_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
item_name TEXT NOT NULL,
decay_amount_ped REAL DEFAULT 0.0,
decay_amount_pec REAL DEFAULT 0.0,
@ -287,7 +287,7 @@ CREATE INDEX IF NOT EXISTS idx_decay_session ON decay_events(session_id);
CREATE TABLE IF NOT EXISTS screenshots (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
timestamp TEXT, -- ISO format datetime
file_path TEXT NOT NULL,
trigger_event TEXT, -- What triggered the screenshot
trigger_value_ped REAL,
@ -303,7 +303,7 @@ CREATE INDEX IF NOT EXISTS idx_screenshots_session ON screenshots(session_id);
CREATE TABLE IF NOT EXISTS app_state (
key TEXT PRIMARY KEY,
value TEXT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
updated_at TEXT -- ISO format datetime
);
-- ============================================================================
@ -312,7 +312,7 @@ CREATE TABLE IF NOT EXISTS app_state (
CREATE TABLE IF NOT EXISTS schema_version (
version INTEGER PRIMARY KEY,
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
applied_at TEXT, -- ISO format datetime
description TEXT
);