Avant RAD Studio 10.4, l’option par défaut d’isolation de transaction pour les connexions FireDAc était lue validée. C’est TFDConnection.TxOptions.Isolation était xiReadCommitted. C’était la valeur définie pour le composant, et étant la valeur par défaut, il n’a pas été envoyé à la base de données. FireDAC a simplement supposé que la valeur par défaut dans sa configuration était la valeur par défaut de la base de données et il n’a pas explicitement envoyé cette configuration d’isolation à la base de données au début d’une session. Par exemple, dans MySQL, la commande requise est SET SESSION TRANSACTION ISOLATION LEVEL n’a pas été exécutée si la valeur par défaut n’a pas été modifiée. Dans ce cas, l’isolation de transaction MySQL restait à la valeur par défaut de la base de données, qui est xiRepeatableRead, peu importe ce qui était défini dans la configuration par défaut de FireDAC.
Pour résoudre ce problème, nous avons décidé qu’il était préférable de conserver le niveau d’isolement par défaut à xiUnspecified, ce qui signifie que si vous n’avez pas besoin d’un niveau d’isolement spécifique, la configuration par défaut pour la base de données spécifique est utilisée – c’est celle déjà prédéfinie int la base de données et vous n’avez pas besoin de demander la configuration. Le niveau d’isolation par défaut est optimisé pour une base de données spécifique, car les valeurs par défaut sont différentes et certains des niveaux d’isolation ne sont même pas pris en charge de la même manière par tous les moteurs de base de données.
Si un développeur souhaite utiliser un niveau d’isolement différent du niveau par défaut utilisé par la base de données, il doit être défini explicitement dans la configuration du composant ou dans le code. Si le développeur souhaite utiliser la base de données par défaut, aucun code n’est requis.
Voici les niveaux d’isolement par défaut des principales bases de données en termes FireDAC – encore une fois, la valeur de la propriété est simplement xiUnspecified:
DB2 – xiReadCommitted
InterBase et Firebird – xiSnapshot
MySQL et MariaDB – xiRepeatableRead
Oracle – xiReadCommitted
Microsoft SQL Server – xiReadCommitted
SQLite – xiSerializible
PostgreSQL – xiReadCommitted
J’espère que cela aidera à clarifier le changement et à expliquer comment le contourner, en changeant le niveau d’isolation des transactions de votre connexion FireDAC à celui dont vous avez spécifiquement besoin, s’il est différent de la base de données par défaut. Ce changement n’était pas répertorié dans les notes de publication de RAD Studio 10.4 et cela a causé quelques problèmes (et des rapports de bogues).
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition