Der kleine, aber feine Unterschied ab OXID 4.0 für ADOdb

Der kleine, aber feine Unterschied ab OXID 4.0 für ADOdb

Ein Gastbeitrag von Andreas Ziethen, babymarkt.de

ADOdb-Falle für OXID Alt-Module

Seit der Version 4.0 setzt OXID nicht mehr die Vollversion des ADOdb-Abstraktionslayers ein, sondern hat auf die Lite-Version umgestellt. In ADOdb-Lite gibt es einen kleinen aber feinen Unterschied bzgl. der Methode getOne():
Während in der Vollversion bei der Verwendung von getOne() automatisch ein LIMIT 1 zum jeweiligen Query hinzugefügt wird, geschieht dies bei ADOdb-Lite nicht. Für den OXID-eigenen Quellcode spielt dies keine Rolle, weil getOne() dort offenbar nur im Zusammenhang mit Queries der Art
SELECT COUNT(*) ...
oder
SELECT MAX(bla) ...
etc. benutzt wird.
Ein Problem kann aber entstehen, wenn man – weil man es von früher so gewohnt war – sich auch heute noch darauf verlässt, dass hier automatisch ein LIMIT 1 gesetzt wird und in eigenen Modulen diese Methode zusammen mit SELECT-Statements benutzt, die ohne das LIMIT eine sehr große Datenmenge holen – von der man aber eigentlich nur die erste ROW auslesen möchte.
Dasselbe Problem kann schleichend eine Rolle spielen, weil man eigene oder auch Fremdmodule einsetzt, die von OXID 3.x nach 4.x portiert wurden und bei denen nicht auf diesen Unterschied im Handling von getOne() geachtet wurde.

Lösung

Ab OXID 4.0 sollten alle Queries, die mit der ADOdb-Methode getOne() ausgeführt werden, am Ende um LIMIT 1 erweitert werden.

Andreas Ziethen, babymarkt.de GmbH

Andreas Ziethen – ehemals Geschäftsführer der anzido GmbH – leitet die Entwicklungsabteilung der babymarkt.de GmbH in Dortmund, war als Consultant und Trainer tätig und hat im Auftrag der OXID eSales AG die OXID-Partnerschulungen inhaltlich verantwortet und durchgeführt. Die stetige Performanceoptimierung des OXID eShops ist von Anfang an ein wichtiges Anliegen für ihn.

Share this post

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.