Shopware 6 | Variant Listing Updater Patch

Wir haben seit kurzem unregelmäßig einen Error beim indexieren mit bin/console dal:refresh:index – wie Ihr das erstmal patchen könnt seht Ihr hier …

Problem

Beim indexieren mit bin/console dal:refresh:index passiert folgendes:

13:16:32 ERROR [console] Error thrown while running command "dal:refresh:index". Message: "An exception occurred while executing '\n UPDATE product SET display_group = MD5(\n CONCAT(\n LOWER(HEX(product.parent_id)),\n (SELECT CONCAT(LOWER(HEX(optione68b1472be97423cbda291f01a859565.id))) FROM (SELECT 1) root INNER JOIN product_option mappinge68b1472be97423cbda291f01a859565 ON mappinge68b1472be97423cbda291f01a859565.product_id IS NOT NULL INNER JOIN property_group_option optione68b1472be97423cbda291f01a859565 ON optione68b1472be97423cbda291f01a859565.id = mappinge68b1472be97423cbda291f01a859565.property_group_option_id AND optione68b1472be97423cbda291f01a859565.property_group_id = ? WHERE mappinge68b1472be97423cbda291f01a859565.product_id = product.id)\n )\n ) WHERE parent_id = ? AND version_id = ?' with params ["\xe6\x8b\x14\x72\xbe\x97\x42\x3c\xbd\xa2\x91\xf0\x1a\x85\x95\x65", "\x6e\xde\x78\x69\xf6\xa3\x4e\x96\xaf\x50\x90\x89\x64\x08\x31\xa2", "\x0f\xa9\x1c\xe3\xe9\x6a\x4b\xc2\xbe\x4b\xd9\xce\x75\x2c\x34\x25"]:\n\nSQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row" ["exception" => Doctrine\DBAL\Exception\DriverException^ { …},"command" => "dal:refresh:index","message" => """ An exception occurred while executing '\n UPDATE product SET display_group = MD5(\n CONCAT(\n LOWER(HEX(product.parent_id)),\n (SELECT CONCAT(LOWER(HEX(optione68b1472be97423cbda291f01a859565.id))) FROM (SELECT 1) root INNER JOIN product_option mappinge68b1472be97423cbda291f01a859565 ON mappinge68b1472be97423cbda291f01a859565.product_id IS NOT NULL INNER JOIN property_group_option optione68b1472be97423cbda291f01a859565 ON optione68b1472be97423cbda291f01a859565.id = mappinge68b1472be97423cbda291f01a859565.property_group_option_id AND optione68b1472be97423cbda291f01a859565.property_group_id = ? WHERE mappinge68b1472be97423cbda291f01a859565.product_id = product.id)\n )\n ) WHERE parent_id = ? AND version_id = ?' with params ["\xe6\x8b\x14\x72\xbe\x97\x42\x3c\xbd\xa2\x91\xf0\x1a\x85\x95\x65", "\x6e\xde\x78\x69\xf6\xa3\x4e\x96\xaf\x50\x90\x89\x64\x08\x31\xa2", "\x0f\xa9\x1c\xe3\xe9\x6a\x4b\xc2\xbe\x4b\xd9\xce\x75\x2c\x34\x25"]:\n \n SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row """]

In AbstractMySQLDriver.php line 106:

An exception occurred while executing '
UPDATE product SET display_group = MD5(
CONCAT(
LOWER(HEX(product.parent_id)),
(SELECT CONCAT(LOWER(HEX(optione68b1472be97423cbda291f01a859565.id))) FROM (SELECT 1) root INNER JOIN product_option mappinge68b1472be97423cbda291f01a859565 ON mappinge68b1472be97423cbda
291f01a859565.product_id IS NOT NULL INNER JOIN property_group_option optione68b1472be97423cbda291f01a859565 ON optione68b1472be97423cbda291f01a859565.id = mappinge68b1472be97423cbda291f01a859565.property_g
roup_option_id AND optione68b1472be97423cbda291f01a859565.property_group_id = ? WHERE mappinge68b1472be97423cbda291f01a859565.product_id = product.id)
)
) WHERE parent_id = ? AND version_id = ?' with params ["\xe6\x8b\x14\x72\xbe\x97\x42\x3c\xbd\xa2\x91\xf0\x1a\x85\x95\x65", "\x6e\xde\x78\x69\xf6\xa3\x4e\x96\xaf\x50\x90\x89\x64\x08\x31\xa2", "\x
0f\xa9\x1c\xe3\xe9\x6a\x4b\xc2\xbe\x4b\xd9\xce\x75\x2c\x34\x25"]:

SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

In PDOStatement.php line 123:

SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

In PDOStatement.php line 121:

SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

dal:refresh:index [--use-queue] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>

Wie SQL schon sagt, wird hier nur eine Row erwartet. Ob die Lösung von pottnik im PR bei Shopware nun optimal ist, weiß ich aktuell nicht (da ich nicht im Detail weiß / debuggen möchte was die displaygroup macht und welchen Einfluss das haben könnte). Aber alles ist aktuell besser als ein Error und damit der komplette Abbruch des CLI Commands.

Lösung

Die Lösung ist das setzen eines Limits, welches ich einfach mal in eine .patch Datei gepackt habe. Die könnt Ihr mit Composer Patches einbinden.

Gitlab Patch Link

Ihr müsst dafür definitiv die raw Datei nehmen, Ihr könnt aber noch die anderen Patches unter https://gitlab.com/mh2017/shopware6-patches anschauen und gerne ergänzen.

Wichtig

Denkt daran vor jedem Update auch eure Patches zu prüfen! Ich denke jeder von euch testet vorher lokal oder auf einem Staging. Soll aber hier nochmal erwähnt sein. Stimmen die Zeilen nicht mehr, raucht euch das ganze nämlich ab.

Danke geht raus an pottink für den PR

Schreibe einen Kommentar

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