Skip to content

release: PostgreSQL Database Provider 3.0.4 - #10

Merged
BORNIOS merged 3 commits into
mainfrom
release/3.0.4
Oct 17, 2026
Merged

BORNIOS merged 3 commits into
mainfrom
release/3.0.4

Conversation

@BORNIOS

@BORNIOS BORNIOS commented Oct 17, 2026

Copy link
Copy Markdown
Owner

Español

PostgreSQL Database Provider 3.0.4

  • Corrige el cierre de Jellyfin Android TV al abrir bibliotecas: el caché de consultas descartaba DateTimeKind.Utc al bufferizar, el cliente recibía la fecha sin zona horaria y la sustituía por su valor mínimo. Las columnas de fecha se bufferizan como UTC y el lector restaura el Kind como segunda barrera.
  • Nueva migración que normaliza DateCreated no finito o mínimo ya guardado en BaseItems, junto con la normalización de los centinelas DateTime y DateTimeOffset antes de escribir.
  • La búsqueda deja de distinguir mayúsculas y minúsculas y cubre título visible, original y de orden (ILIKE sobre Name, OriginalTitle y SortName, con índice trigram sobre SortName).
  • Corrige el 500 al abrir la ficha de un artista o persona: los duplicados se resuelven con ON CONFLICT ... DO UPDATE sobre la clave primaria, que conserva la fila guardada y cuenta como una fila afectada, en lugar de DO NOTHING, que EF Core interpretaba como conflicto de concurrencia.
  • El proveedor fija QuerySplittingBehavior en SingleQuery, igual que el proveedor SQLite de Jellyfin, y deja de llenar el log con MultipleCollectionIncludeWarning.

Validación

  • Build Release sin advertencias.
  • Pruebas unitarias y de integración contra PostgreSQL 17: 118 correctas, 0 fallidas.
  • Ambos fallos reportados (cierre en Android TV y 500 en fichas de artistas) reproducidos antes de corregirlos.

English

PostgreSQL Database Provider 3.0.4

  • Fixes Jellyfin Android TV crashing when a library is opened: the query cache dropped DateTimeKind.Utc while buffering, so the client received dates without a time zone and replaced them with its minimum value. Date columns are buffered as UTC and the reader restores the Kind as a second safeguard.
  • New migration that normalizes non-finite or minimum DateCreated values already stored in BaseItems, plus normalization of DateTime and DateTimeOffset sentinels before writing.
  • Search is no longer case-sensitive and now covers display, original, and sort titles (ILIKE over Name, OriginalTitle, and SortName, with a trigram index on SortName).
  • Fixes the 500 returned when an artist or person page is opened: duplicates are resolved with ON CONFLICT ... DO UPDATE on the primary key, which keeps the stored row and counts as one affected row, instead of DO NOTHING, which EF Core reported as a concurrency conflict.
  • The provider pins QuerySplittingBehavior to SingleQuery, matching Jellyfin's SQLite provider, and stops flooding the log with MultipleCollectionIncludeWarning.

Validation

  • Release build with no warnings.
  • Unit and PostgreSQL 17 integration tests: 118 passed, 0 failed.
  • Both reported failures (Android TV crash and artist page 500) reproduced before the fix.

BORNIOS added 3 commits October 17, 2026 15:25
- Nueva migracion que normaliza DateCreated no finito o minimo en BaseItems.
- Normalizacion de los centinelas DateTime y DateTimeOffset antes de escribir en PostgreSQL.
- Busqueda de titulos con ILIKE en Name, OriginalTitle y SortName.
- SortName incluido en la busqueda rapida y en su indice GIN trigram.
- Pruebas de normalizacion de fechas y de reescritura de busquedas.
- La cache de consultas bufferiza las columnas de fecha como UTC y el lector restaura DateTimeKind: el cliente Android recibia la fecha sin zona horaria, la sustituia por su valor minimo y fallaba al convertirla.
- Las filas duplicadas se resuelven con ON CONFLICT ... DO UPDATE sobre la clave primaria en lugar de DO NOTHING, que informa 0 filas afectadas y EF Core interpreta como DbUpdateConcurrencyException.
- El proveedor fija QuerySplittingBehavior en SingleQuery, igual que el proveedor SQLite de Jellyfin, y deja de llenar el log con MultipleCollectionIncludeWarning.
- Pruebas de regresion de los tres casos y ajuste de las pruebas de reescritura SQL.
El prefetch es best effort y comparte un unico slot en todo el proceso, asi que puede descartarse cuando el runner esta cargado o coincide con otra prueba. La prueba repite el escenario en lugar de depender de un unico intento.
@BORNIOS
BORNIOS merged commit d921850 into main Oct 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant