Ce qui se passe
Prisma 8.0.0-rc.5 est sortie. C'est une release candidate, donc une étape vers la version finale — mais elle contient une rupture qui mérite d'être vue avant la mise à jour, et trois correctifs qui touchent le fonctionnement en production.
Le breaking change
La famille de commandes de l'ORM, publiée par @prisma/orm-toolchain, expose
désormais les six commandes déplacées sous leur orthographe unifiée, et
abandonne la grammaire autonome retirée :
| Avant | Après |
|---|---|
format |
contract format |
migrate |
db migrate |
ref list | set | delete |
migration ref list | set | delete |
init |
orm init |
Concrètement :
# avant
prisma migrate --to production
prisma ref set staging 4cb4256
# après
prisma db migrate --to production
prisma migration ref set staging 4cb4256Le point à comprendre, parce qu'il détermine si vous êtes concerné : à travers
le CLI prisma unifié, rien ne bouge. Ces chemins y étaient déjà montés,
c'est la famille de commandes qui s'aligne dessus. Les exemples d'aide et les
messages de remédiation nomment désormais ces chemins, avec un
placeholder {bin} au lieu d'un nom de binaire codé en dur.
Ceux qui cassent sont ailleurs :
- un hôte qui monte la famille de commandes par sa clé ;
- un script qui pilote le binaire du workspace avec l'ancienne grammaire — déploiement, tâche de CI, Makefile, alias shell oublié.
Les correctifs qui comptent en production
Le runtime Postgres ne meurt plus sur une connexion coupée. C'est le plus
important. Le runtime attache désormais un listener 'error' à chaque pool et
chaque client qu'il crée ou reçoit. Une connexion inactive qui saute —
redémarrage de la base, timeout du pooler, coupure réseau — ne fait plus
tomber le processus en exception non capturée. Attention à la limite, elle est
explicite dans les notes : les pools que votre propre code construit et utilise
directement ont toujours besoin de leur propre listener.
aggregate() respecte enfin la chaîne qu'il termine. L'agrégation réduisait
silencieusement sur toutes les lignes correspondantes, en ignorant take,
skip, cursor, distinct et distinctOn. C'est le type de bug qui ne lève
aucune erreur et donne simplement un mauvais chiffre — à vérifier dans votre
code existant, un total juste peut le devenir davantage.
groupBy() ne perd plus sa pagination. La pagination appliquée avant le
regroupement est désormais portée sur les lignes groupées au lieu d'être
abandonnée, et GroupedCollection gagne take, skip et orderBy pour
paginer les groupes eux-mêmes.
La nouveauté
Une requête brute avec spécification de lignes expose maintenant .returns,
un enregistrement de références de colonnes typées. Une requête externe peut
ainsi réutiliser la colonne déclarée d'une requête interne — l'agrégat d'un CTE,
typiquement — au lieu de redéclarer son identifiant de codec. C'est une petite
addition, mais elle supprime une duplication de type qui se désynchronise
volontiers.
Le reste tient du polissage : le serveur de langage PSL ne plante plus quand une
copie dupliquée de vscode-jsonrpc lève une erreur de connexion, les messages
d'erreur du CLI interpolent le répertoire de migrations configuré au lieu de
supposer le chemin par défaut, et les messages d'échec d'orm init ne citent
plus de drapeaux retirés.
Comment s'y prendre
- Repérez d'abord vos appels à l'ancienne grammaire ailleurs que via le binaire
prisma— c'est là qu'est le risque de casse silencieuse. - Relisez vos usages d'
aggregate()sur des requêtes paginées : le résultat changera, et dans le bon sens. - Une recette d'upgrade de la rc.4 vers la rc.5 est publiée dans le dépôt, avec le détail des listeners Postgres à ajouter le cas échéant.
Rappel de prudence : il s'agit d'une release candidate, pas d'une version finale.