Sort and look up text columns case-insensitively

Add COLLATE NOCASE on every text content column (names, owners, vendors,
device types, MAC addresses, notification titles/bodies/types, event
types) so DESC-by-name lists no longer order "iPad" before "Lutron".
Normalize MAC addresses to lowercase at the DB layer so the now
case-insensitive primary key cannot accept duplicate-looking rows.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
rzuasti
2026-06-01 07:33:37 -04:00
co-authored by Claude Opus 4.7
parent 0304c50efb
commit 0beca44496
8 changed files with 225 additions and 15 deletions
@@ -1,18 +1,18 @@
CREATE TABLE devices(
mac_address TEXT PRIMARY KEY,
mac_address TEXT PRIMARY KEY COLLATE NOCASE,
ipv4_address TEXT NOT NULL,
vendor TEXT,
vendor TEXT COLLATE NOCASE,
last_seen TEXT NOT NULL,
is_registered INTEGER NOT NULL,
owner TEXT,
device_type TEXT
owner TEXT COLLATE NOCASE,
device_type TEXT COLLATE NOCASE
);
CREATE TABLE notifications(
id INTEGER PRIMARY KEY,
created_on TEXT NOT NULL,
notification_type TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT,
notification_type TEXT NOT NULL COLLATE NOCASE,
title TEXT NOT NULL COLLATE NOCASE,
body TEXT COLLATE NOCASE,
is_new INTEGER NOT NULL
);
@@ -1 +1 @@
ALTER TABLE notifications ADD COLUMN mac_address TEXT;
ALTER TABLE notifications ADD COLUMN mac_address TEXT COLLATE NOCASE;
@@ -1,8 +1,8 @@
CREATE TABLE device_events(
id INTEGER PRIMARY KEY,
mac_address TEXT NOT NULL,
mac_address TEXT NOT NULL COLLATE NOCASE,
created_on TEXT NOT NULL,
event_type TEXT NOT NULL,
event_type TEXT NOT NULL COLLATE NOCASE,
ipv4_address TEXT NOT NULL,
vendor TEXT NOT NULL
vendor TEXT NOT NULL COLLATE NOCASE
);
@@ -1 +1 @@
ALTER TABLE devices ADD COLUMN name TEXT;
ALTER TABLE devices ADD COLUMN name TEXT COLLATE NOCASE;