Commit 4fa0dbe2 authored by Claus Due's avatar Claus Due Committed by Anja Leichsenring
Browse files

[BUGFIX] Avoid duplicate calls to update reference index

This patch adds a check when processing the update
reference index stack, in order to avoid calling the
update function more than once with the same input
arguments (which are $table and $uid).

Saves around 100 SQL queries when doing a standard
copy of 25 (nested) pages with 25 content elements.

Change-Id: If162218d4eabb749a92270e18c7c39108fd15f34
Resolves: #78761
Releases: master, 7.6

Reviewed-by: Wouter Wolters's avatarWouter Wolters <>
Tested-by: default avatarTYPO3com <>
Reviewed-by: default avatarStefan Neufeind <>
Reviewed-by: Susanne Moog's avatarSusanne Moog <>
Tested-by: Susanne Moog's avatarSusanne Moog <>
Reviewed-by: Anja Leichsenring's avatarAnja Leichsenring <>
Tested-by: Anja Leichsenring's avatarAnja Leichsenring <>
parent e498f65f
......@@ -5049,11 +5049,22 @@ class DataHandler
// Update reference index:
$this->updateRefIndex($table, $uid);
// We track calls to update the reference index as to avoid calling it twice
// with the same arguments. This is done because reference indexing is quite
// costly and the update reference index stack usually contain duplicates.
// NB: also filled and checked in loop below. The initialisation prevents
// running the "root" record twice if it appears in the stack twice.
$updateReferenceIndexCalls = [[$table, $uid]];
// If there are entries in the updateRefIndexStack
if (is_array($this->updateRefIndexStack[$table]) && is_array($this->updateRefIndexStack[$table][$uid])) {
while ($args = array_pop($this->updateRefIndexStack[$table][$uid])) {
// $args[0]: table, $args[1]: uid
$this->updateRefIndex($args[0], $args[1]);
if (!in_array($args, $updateReferenceIndexCalls, true)) {
// $args[0]: table, $args[1]: uid
$this->updateRefIndex($args[0], $args[1]);
$updateReferenceIndexCalls[] = $args;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment