110 lines
2.9 KiB
Markdown
110 lines
2.9 KiB
Markdown
# SQL WHERE Clause Fixes
|
|
|
|
## Problem
|
|
When activating the MOTM vote, the application was throwing an error: "Database not initialized. Please go to Database Setup to initialize the database."
|
|
|
|
## Root Cause
|
|
Multiple SQL queries on the `admin_settings` table were missing `WHERE userid = 'admin'` clauses, causing:
|
|
1. UPDATE queries to update ALL rows instead of just the admin row
|
|
2. SELECT queries to return unexpected results
|
|
3. The application to think the database wasn't initialized
|
|
|
|
## Fixes Applied
|
|
|
|
### 1. UPDATE Queries Fixed
|
|
|
|
**Line 599** - Main settings update:
|
|
```sql
|
|
-- BEFORE:
|
|
UPDATE admin_settings SET next_date = :next_date, next_club = :next_club, ...
|
|
|
|
-- AFTER:
|
|
UPDATE admin_settings SET next_date = :next_date, next_club = :next_club, ... WHERE userid = 'admin'
|
|
```
|
|
|
|
**Line 613** - Opponent logo update:
|
|
```sql
|
|
-- BEFORE:
|
|
UPDATE admin_settings SET oppo_logo = :logo_url
|
|
|
|
-- AFTER:
|
|
UPDATE admin_settings SET oppo_logo = :logo_url WHERE userid = 'admin'
|
|
```
|
|
|
|
### 2. SELECT Queries Fixed
|
|
|
|
**Line 256** - MOTM vote page:
|
|
```sql
|
|
-- BEFORE:
|
|
SELECT next_club, next_team, next_date, ... FROM admin_settings
|
|
|
|
-- AFTER:
|
|
SELECT next_club, next_team, next_date, ... FROM admin_settings WHERE userid = 'admin'
|
|
```
|
|
|
|
**Line 348** - Match comments page:
|
|
```sql
|
|
-- BEFORE:
|
|
SELECT next_club, next_team, next_date, oppo_logo, hkfc_logo FROM admin_settings
|
|
|
|
-- AFTER:
|
|
SELECT next_club, next_team, next_date, oppo_logo, hkfc_logo FROM admin_settings WHERE userid = 'admin'
|
|
```
|
|
|
|
**Line 683** - Admin settings page:
|
|
```sql
|
|
-- BEFORE:
|
|
SELECT next_club, oppo_logo FROM admin_settings
|
|
|
|
-- AFTER:
|
|
SELECT next_club, oppo_logo FROM admin_settings WHERE userid = 'admin'
|
|
```
|
|
|
|
## Why This Matters
|
|
|
|
Without the WHERE clause:
|
|
- **UPDATE** queries would modify all rows in the table (even if there's only one row, this is bad practice)
|
|
- **SELECT** queries might return multiple rows when only one is expected
|
|
- The application logic assumes only one admin settings row exists
|
|
|
|
## Testing
|
|
|
|
After these fixes:
|
|
1. ✅ The MOTM admin page should save settings correctly
|
|
2. ✅ Activating the MOTM vote should work without errors
|
|
3. ✅ The voting page should load correctly
|
|
4. ✅ All admin settings queries will target only the admin row
|
|
|
|
## Deployment
|
|
|
|
To apply these fixes to production:
|
|
1. Commit the changes to your repository
|
|
2. Rebuild and redeploy the Docker image
|
|
3. Restart the application pods
|
|
|
|
```bash
|
|
# Build new image
|
|
docker build -t your-registry/motm-app:latest .
|
|
|
|
# Push to registry
|
|
docker push your-registry/motm-app:latest
|
|
|
|
# Deploy to Kubernetes
|
|
helm upgrade motm-app ./helm-chart/motm-app --namespace motm-app
|
|
```
|
|
|
|
## Related Issues
|
|
|
|
These fixes are related to:
|
|
- The voting deadline feature implementation
|
|
- The table name migration from `motmadminsettings` to `admin_settings`
|
|
- The column name migration to snake_case
|
|
|
|
## Summary
|
|
|
|
All SQL queries on the `admin_settings` table now properly filter by `userid = 'admin'`, ensuring:
|
|
- Data integrity
|
|
- Predictable query results
|
|
- Proper application functionality
|
|
|