Ich versuche einige rohe DBI-Aufrufe in DBIx :: Class zu konvertieren. Ich laufe hin und wieder über so etwas wie:Wie erhöht man eine Spalte mit DBIx :: Class?
UPDATE 'foo' SET bar = bar + 1 WHERE ...
Gibt es Weise DBIx :: Klasse ausführen genau diese Art der Abfrage zu tun? Ich will nicht so etwas wie zu tun:
$row->update({ bar => $row->bar() + 1 });
, weil es eine Race-Bedingung ist es, wenn mehr Prozesse die gleiche Sache zu tun versuchen.
Ich könnte das mit einer Art von Sperren auf Datenbankebene umgehen, aber das scheint mir schlimmer als nur die ursprüngliche Abfrage verwenden. Im Grunde möchte ich nur wissen, ob es eine saubere Möglichkeit gibt, DBIC zu verwenden, oder ob ich einfach weiterhin rohe DBI-Aufrufe hier verwenden soll.
Ich nehme an, Sie bedeuten '$ row -> {bar} 'und nicht' $ row-> bar() ' – TLP
Increments by 1 ist normalerweise für Zähler. Welche Arten von Rennbedingungen erleben Sie in diesem Bereich? –
@TLP Ich meinte $ row-> bar() wobei $ row ein DBIC-Ergebnisobjekt ist. – oalders