#!/bin/bash DB_FILE="finance.db" HISTORY_TABLE="finance_history" # Current date in the format you've been using DATE_STR=$(date +%Y-%m-%d) # 1. Identify which table exists (finance or finance_data) SRC_TABLE=finance if [ -z "$SRC_TABLE" ]; then echo "Error: Source table not found." exit 1 fi # 2. Get columns dynamically (excluding 'id') COLS=$(sqlite3 "$DB_FILE" "PRAGMA table_info($SRC_TABLE);" | cut -d'|' -f2 | grep -v '^id$' | xargs | tr ' ' ',') # 3. Change Detection Logic # We grab the latest row from history and compare it to the current source data CURRENT_VALS=$(sqlite3 "$DB_FILE" "SELECT $COLS FROM $SRC_TABLE ORDER BY id DESC LIMIT 1;") LAST_VALS=$(sqlite3 "$DB_FILE" "SELECT $COLS FROM $HISTORY_TABLE ORDER BY snapshot_date DESC LIMIT 1;") if [ "$CURRENT_VALS" == "$LAST_VALS" ]; then echo "Data identical to last snapshot ($DATE_STR). Skipping." exit 0 fi # 4. Auto-Migration # Ensure any new columns in 'finance' also exist in 'finance_history' for col in ${COLS//,/ }; do sqlite3 "$DB_FILE" "ALTER TABLE $HISTORY_TABLE ADD COLUMN $col NUMERIC;" 2>/dev/null done # 5. The Snapshot Insert # INSERT OR IGNORE ensures that if Docker restarts today, we don't duplicate the row. echo "Changes detected. Recording snapshot for $DATE_STR..." sqlite3 "$DB_FILE" <