From dde2366e3d4003c99c7f9ce6ebf1c01a210d7c76 Mon Sep 17 00:00:00 2001
From: Morton Jonuschat <m.jonuschat@mojocode.de>
Date: Fri, 17 Feb 2017 01:03:43 -0800
Subject: [PATCH] [BUGFIX] Fix functional tests for EXT:extbase on PostgreSQL

Fix ExpressionBuilder::inSet() to allow working with columns
on a seondary table on Non-MySQL databases. Fix the usage of
inSet() within Typo3DbQueryParser to properly quote the table
identifier and ensure that all places that use inSet() use it
to compare a string value or a field on a table.

Fix assertions to take string/int differences into account and
ensure consistent order when asserting lists of records.

Change-Id: I9fecd228cde1a7d5a6202702616d806b4354eb4f
Resolves: #79796
Releases: master
Reviewed-on: https://review.typo3.org/51733
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Query/Expression/ExpressionBuilder.php    |  6 +-
 .../DatabaseTreeDataProvider.php              |  2 +-
 .../Expression/ExpressionBuilderTest.php      | 21 ++++-
 .../Generic/Storage/Typo3DbQueryParser.php    |  3 +-
 .../Tests/Functional/Persistence/AddTest.php  |  2 +-
 .../Persistence/QueryParserTest.php           | 24 +++---
 .../Functional/Persistence/RelationTest.php   | 84 +++++++++----------
 .../Persistence/TranslationTest.php           |  8 +-
 .../Hooks/TreelistCacheUpdateHooks.php        |  4 +-
 9 files changed, 90 insertions(+), 64 deletions(-)

diff --git a/typo3/sysext/core/Classes/Database/Query/Expression/ExpressionBuilder.php b/typo3/sysext/core/Classes/Database/Query/Expression/ExpressionBuilder.php
index a75cbafa0f0b..ad5cf5bdb840 100644
--- a/typo3/sysext/core/Classes/Database/Query/Expression/ExpressionBuilder.php
+++ b/typo3/sysext/core/Classes/Database/Query/Expression/ExpressionBuilder.php
@@ -272,10 +272,12 @@ class ExpressionBuilder
      *
      * @param string $fieldName The fieldname. Will be quoted according to database platform automatically.
      * @param string $value Argument to be used in FIND_IN_SET() comparison. No automatic quoting/escaping is done.
+     * @param bool $isColumn Set when the value to compare is a column on a table to activate casting
      * @return string
+     * @throws \InvalidArgumentException
      * @throws \RuntimeException
      */
-    public function inSet(string $fieldName, string $value): string
+    public function inSet(string $fieldName, string $value, bool $isColumn = false): string
     {
         if ($value === '') {
             throw new \InvalidArgumentException(
@@ -295,7 +297,7 @@ class ExpressionBuilder
             case 'postgresql':
             case 'pdo_postgresql':
                 return $this->comparison(
-                    $this->literal($value),
+                    $isColumn ? $value . '::text' : $value,
                     self::EQ,
                     sprintf(
                         'ANY(string_to_array(%s, %s))',
diff --git a/typo3/sysext/core/Classes/Tree/TableConfiguration/DatabaseTreeDataProvider.php b/typo3/sysext/core/Classes/Tree/TableConfiguration/DatabaseTreeDataProvider.php
index 49e7d1c3a742..5d5029b0d07d 100644
--- a/typo3/sysext/core/Classes/Tree/TableConfiguration/DatabaseTreeDataProvider.php
+++ b/typo3/sysext/core/Classes/Tree/TableConfiguration/DatabaseTreeDataProvider.php
@@ -495,7 +495,7 @@ class DatabaseTreeDataProvider extends AbstractTableConfigurationTreeDataProvide
 
         $queryBuilder->select('uid')
             ->from($this->getTableName())
-            ->where($queryBuilder->expr()->inSet($fieldName, $queryId));
+            ->where($queryBuilder->expr()->inSet($fieldName, $queryBuilder->quote($queryId)));
 
         if ($queryId === 0) {
             $queryBuilder->orWhere(
diff --git a/typo3/sysext/core/Tests/Unit/Database/Query/Expression/ExpressionBuilderTest.php b/typo3/sysext/core/Tests/Unit/Database/Query/Expression/ExpressionBuilderTest.php
index 372053eb652e..30798ba895e9 100644
--- a/typo3/sysext/core/Tests/Unit/Database/Query/Expression/ExpressionBuilderTest.php
+++ b/typo3/sysext/core/Tests/Unit/Database/Query/Expression/ExpressionBuilderTest.php
@@ -260,7 +260,6 @@ class ExpressionBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCa
         $databasePlatform->getName()->willReturn('postgresql');
 
         $this->connectionProphet->quote(',', Argument::cetera())->shouldBeCalled()->willReturn("','");
-        $this->connectionProphet->quote('\'1\'', Argument::cetera())->shouldBeCalled()->willReturn("'1'");
         $this->connectionProphet->quoteIdentifier(Argument::cetera())->will(function ($args) {
             return '"' . $args[0] . '"';
         });
@@ -272,6 +271,26 @@ class ExpressionBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCa
         $this->assertSame('\'1\' = ANY(string_to_array("aField"::text, \',\'))', $result);
     }
 
+    /**
+     * @test
+     */
+    public function inSetForPostgreSQLWithColumn()
+    {
+        $databasePlatform = $this->prophesize(MockPlatform::class);
+        $databasePlatform->getName()->willReturn('postgresql');
+
+        $this->connectionProphet->quote(',', Argument::cetera())->shouldBeCalled()->willReturn("','");
+        $this->connectionProphet->quoteIdentifier(Argument::cetera())->will(function ($args) {
+            return '"' . $args[0] . '"';
+        });
+
+        $this->connectionProphet->getDatabasePlatform()->willReturn($databasePlatform->reveal());
+
+        $result = $this->subject->inSet('aField', '"testtable"."uid"', true);
+
+        $this->assertSame('"testtable"."uid"::text = ANY(string_to_array("aField"::text, \',\'))', $result);
+    }
+
     /**
      * @test
      */
diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php
index fb90ddb40e02..9aba64c24cd0 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php
@@ -941,7 +941,8 @@ class Typo3DbQueryParser
             } else {
                 $joinConditionExpression = $this->queryBuilder->expr()->inSet(
                     $tableName . '.' . $columnName,
-                    $childTableAlias . '.uid'
+                    $this->queryBuilder->quoteIdentifier($childTableAlias . '.uid'),
+                    true
                 );
             }
             $this->queryBuilder->leftJoin($tableName, $childTableName, $childTableAlias, $joinConditionExpression);
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
index 7baaa4d1f5a2..1c91cc99c83d 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
@@ -83,7 +83,7 @@ class AddTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTestCase
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(1, $newBlogCount);
+        $this->assertEquals(1, $newBlogCount);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
index 1652424a31c2..77dc94217bb4 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
@@ -110,11 +110,12 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
         /** @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository $frontendUserRepository */
         $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
         $query = $frontendUserRepository->createQuery();
-
-        $result = $query->matching(
+        $query->matching(
             $query->equals('usergroup.title', 'Group A')
-        )->execute();
-        $this->assertSame(2, count($result));
+        );
+
+        $result = $query->execute()->toArray();
+        $this->assertCount(2, $result);
     }
 
     /**
@@ -131,7 +132,7 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
             $query->equals('author.firstname', 'Author')
         );
         $result = $query->execute()->toArray();
-        $this->assertEquals(2, count($result));
+        $this->assertCount(2, $result);
     }
 
     /**
@@ -149,7 +150,7 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
             )
         );
         $result = $query->execute()->toArray();
-        $this->assertEquals(2, count($result));
+        $this->assertCount(2, $result);
     }
 
     /**
@@ -168,7 +169,7 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
             )
         );
         $result = $query->execute()->toArray();
-        $this->assertEquals(1, count($result));
+        $this->assertCount(1, $result);
     }
 
     /**
@@ -180,10 +181,9 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
         $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
         $query = $frontendUserRepository->createQuery();
 
-        $result = $query->matching(
-                $query->contains('usergroup', 1)
-        )->execute();
-        $this->assertSame(2, count($result));
+        $result = $query->matching($query->contains('usergroup', 1))
+            ->execute();
+        $this->assertCount(2, $result);
     }
 
     /**
@@ -194,6 +194,6 @@ class QueryParserTest extends \TYPO3\TestingFramework\Core\Functional\Functional
         $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
         $query = $postRepository->createQuery();
         $post = $query->matching($query->equals('uid', 1))->execute()->current();
-        $this->assertSame(3, count($post->getCategories()));
+        $this->assertCount(3, $post->getCategories());
     }
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
index 5505bf37886d..6cc153d3123e 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
@@ -103,7 +103,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
                 )
             )->execute()
             ->fetchColumn(0);
-        $this->assertSame(($countPostsOriginal + 1), $countPosts);
+        $this->assertEquals($countPostsOriginal + 1, $countPosts);
 
         $queryBuilder->resetQueryParts();
         $post = $queryBuilder
@@ -118,7 +118,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame($newPostTitle, $post['title']);
-        $this->assertSame((int)($countPostsOriginal + 1), $post['sorting']);
+        $this->assertEquals($countPostsOriginal + 1, $post['sorting']);
     }
 
     /**
@@ -180,7 +180,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(null, $post['uid']);
+        $this->assertNull($post['uid']);
 
         $queryBuilder->resetQueryParts();
         $post = $queryBuilder
@@ -195,7 +195,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame('Post9', $post['title']);
-        $this->assertSame(9, $post['sorting']);
+        $this->assertEquals(9, $post['sorting']);
     }
 
     /**
@@ -223,7 +223,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $newPostTitle = 'INSERTED POST at position 6';
         foreach ($posts as $post) {
             $this->blog->addPost($post);
-            if ($counter == 5) {
+            if ($counter === 5) {
                 $newPost->setBlog($this->blog);
                 $newPost->setTitle($newPostTitle);
                 $newPost->setContent('Bla Bla Bla');
@@ -239,7 +239,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->from('tx_blogexample_domain_model_post')
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(($countPostsOriginal + 1), $countPosts);
+        $this->assertEquals($countPostsOriginal + 1, $countPosts);
 
         //last post
         $queryBuilder->resetQueryParts();
@@ -255,7 +255,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame('Post10', $post['title']);
-        $this->assertSame(11, $post['sorting']);
+        $this->assertEquals(11, $post['sorting']);
 
         // check sorting of the post added in the middle
         $queryBuilder->resetQueryParts();
@@ -271,7 +271,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame($newPostTitle, $post['title']);
-        $this->assertSame(6, $post['sorting']);
+        $this->assertEquals(6, $post['sorting']);
     }
 
     /**
@@ -293,7 +293,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $posts = clone $this->blog->getPosts();
         $counter = 1;
         foreach ($posts as $post) {
-            if ($counter == 5) {
+            if ($counter === 5) {
                 $this->blog->removePost($post);
             }
             $counter++;
@@ -306,7 +306,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->from('tx_blogexample_domain_model_post')
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(($countPostsOriginal - 1), $countPosts);
+        $this->assertEquals($countPostsOriginal - 1, $countPosts);
 
         $queryBuilder->resetQueryParts();
         $post = $queryBuilder
@@ -321,7 +321,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame('Post10', $post['title']);
-        $this->assertSame(10, $post['sorting']);
+        $this->assertEquals(10, $post['sorting']);
     }
 
     /**
@@ -348,10 +348,10 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $counter = 0;
         $postCount = $posts->count();
         foreach ($posts as $post) {
-            if ($counter != ($postCount - 1)) {
+            if ($counter !== ($postCount - 1)) {
                 $this->blog->addPost($post);
             }
-            if ($counter == 4) {
+            if ($counter === 4) {
                 $latestPost->setTitle('MOVED POST ' . $latestPost->getTitle());
                 $this->blog->addPost($latestPost);
             }
@@ -365,7 +365,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->from('tx_blogexample_domain_model_post')
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame($countPostsOriginal, $countPosts);
+        $this->assertEquals($countPostsOriginal, $countPosts);
 
         $queryBuilder->getRestrictions()->removeAll();
         $post = $queryBuilder
@@ -380,7 +380,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame('Post9', $post['title']);
-        $this->assertSame(10, $post['sorting']);
+        $this->assertEquals(10, $post['sorting']);
 
         $queryBuilder->resetQueryParts();
         $post = $queryBuilder
@@ -398,7 +398,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetch();
         $this->assertSame('MOVED POST Post10', $post['title']);
-        $this->assertSame(10, $post['uid']);
+        $this->assertEquals(10, $post['uid']);
     }
 
     /**
@@ -436,7 +436,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->from('tx_blogexample_domain_model_tag')
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(($countOriginal + 1), $count);
+        $this->assertEquals($countOriginal + 1, $count);
 
         $queryBuilder = (new ConnectionPool())->getQueryBuilderForTable('tx_blogexample_post_tag_mm');
         $queryBuilder->getRestrictions()
@@ -452,7 +452,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame($newTag->getUid(), $tag['uid_foreign']);
+        $this->assertEquals($newTag->getUid(), $tag['uid_foreign']);
     }
 
     /**
@@ -507,7 +507,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(9, $tag['uid_foreign']);
+        $this->assertEquals(9, $tag['uid_foreign']);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -527,7 +527,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(null, $tag['uid_foreign']);
+        $this->assertNull($tag['uid_foreign']);
     }
 
     /**
@@ -561,7 +561,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $counter = 1;
         foreach ($tags as $tag) {
             $post->addTag($tag);
-            if ($counter == 5) {
+            if ($counter === 5) {
                 $post->addTag($newTag);
             }
             $counter++;
@@ -579,7 +579,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(($countTagsOriginal + 1), $countTags);
+        $this->assertEquals($countTagsOriginal + 1, $countTags);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -593,7 +593,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(10, $tag['uid_foreign']);
+        $this->assertEquals(10, $tag['uid_foreign']);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -610,7 +610,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame($newTag->getUid(), $tag['uid_foreign']);
+        $this->assertEquals($newTag->getUid(), $tag['uid_foreign']);
     }
 
     /**
@@ -631,7 +631,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(10, $countTags);
+        $this->assertEquals(10, $countTags);
 
         /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
         $postRepository = $this->objectManager->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
@@ -639,7 +639,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $tags = clone $post->getTags();
         $counter = 1;
         foreach ($tags as $tag) {
-            if ($counter == 5) {
+            if ($counter === 5) {
                 $post->removeTag($tag);
             }
             $counter++;
@@ -657,7 +657,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(9, $countTags);
+        $this->assertEquals(9, $countTags);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -671,8 +671,8 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(10, $tag['uid_foreign']);
-        $this->assertSame(10, $tag['sorting']);
+        $this->assertEquals(10, $tag['uid_foreign']);
+        $this->assertEquals(10, $tag['sorting']);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -689,7 +689,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetch();
-        $this->assertSame(null, $tag['uid_foreign']);
+        $this->assertNull($tag['uid_foreign']);
     }
 
     /**
@@ -710,7 +710,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(10, $countTags);
+        $this->assertEquals(10, $countTags);
 
         /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
         $postRepository = $this->objectManager->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
@@ -724,10 +724,10 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         $counter = 1;
         $tagCount = $tags->count();
         foreach ($tags as $tag) {
-            if ($counter != $tagCount) {
+            if ($counter !== $tagCount) {
                 $post->addTag($tag);
             }
-            if ($counter == 5) {
+            if ($counter === 5) {
                 $post->addTag($latestTag);
             }
             $counter++;
@@ -746,7 +746,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(10, $countTags);
+        $this->assertEquals(10, $countTags);
 
         $queryBuilder->resetQueryParts();
         $tag = $queryBuilder
@@ -760,8 +760,8 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )->orderBy('sorting', 'DESC')
             ->execute()
             ->fetch();
-        $this->assertSame(9, $tag['uid_foreign']);
-        $this->assertSame(10, $tag['sorting']);
+        $this->assertEquals(9, $tag['uid_foreign']);
+        $this->assertEquals(10, $tag['sorting']);
 
         $sorting = '6';
         $queryBuilder->resetQueryParts();
@@ -782,7 +782,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetch();
-        $this->assertSame(10, $tag['uid_foreign']);
+        $this->assertEquals(10, $tag['uid_foreign']);
     }
 
     /**
@@ -834,7 +834,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
         /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
         $postRepository = $this->objectManager->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
         $posts = $postRepository->findByTagAndBlog('Tag2', $this->blog);
-        $this->assertSame(1, count($posts));
+        $this->assertCount(1, $posts);
     }
 
     /**
@@ -863,7 +863,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(3, $countCategories);
+        $this->assertEquals(3, $countCategories);
 
         /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
         $postRepository = $this->objectManager->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
@@ -913,7 +913,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(3, $countCategories);
+        $this->assertEquals(3, $countCategories);
 
         /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
         $postRepository = $this->objectManager->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
@@ -947,7 +947,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             )
             ->execute()
             ->fetchColumn(0);
-        $this->assertSame(4, $countCategories);
+        $this->assertEquals(4, $countCategories);
     }
 
     /**
@@ -996,7 +996,7 @@ class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTes
             ->execute()
             ->fetchColumn(0);
 
-        $this->assertSame($this->blog->getCategories()->count(), $newBlogCategoryCount);
+        $this->assertEquals($this->blog->getCategories()->count(), $newBlogCategoryCount);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
index b5797ad5b3c1..3ad305d60beb 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
@@ -162,12 +162,14 @@ class TranslationTest extends \TYPO3\TestingFramework\Core\Functional\Functional
         $querySettings->setRespectSysLanguage(true);
         $querySettings->setLanguageUid(1);
 
+        $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]);
+
         /** @var Post[] $posts */
         $posts = $query->execute()->toArray();
 
         $this->assertCount(3, $posts);
-        $this->assertSame('B EN:Post1', $posts[0]->getTitle());
-        $this->assertSame('A EN:Post2', $posts[1]->getTitle());
+        $this->assertSame('A EN:Post2', $posts[0]->getTitle());
+        $this->assertSame('B EN:Post1', $posts[1]->getTitle());
         $this->assertSame('Post3', $posts[2]->getTitle());
     }
 
@@ -183,6 +185,8 @@ class TranslationTest extends \TYPO3\TestingFramework\Core\Functional\Functional
         $querySettings->setRespectSysLanguage(true);
         $querySettings->setLanguageUid(2);
 
+        $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]);
+
         /** @var Post[] $posts */
         $posts = $query->execute()->toArray();
 
diff --git a/typo3/sysext/frontend/Classes/Hooks/TreelistCacheUpdateHooks.php b/typo3/sysext/frontend/Classes/Hooks/TreelistCacheUpdateHooks.php
index e18d77380541..0bf670aaadb7 100644
--- a/typo3/sysext/frontend/Classes/Hooks/TreelistCacheUpdateHooks.php
+++ b/typo3/sysext/frontend/Classes/Hooks/TreelistCacheUpdateHooks.php
@@ -280,7 +280,7 @@ class TreelistCacheUpdateHooks
         $queryBuilder
             ->delete('cache_treelist')
             ->where(
-                $queryBuilder->expr()->inSet('treelist', (int)$affectedPage)
+                $queryBuilder->expr()->inSet('treelist', $queryBuilder->quote($affectedPage))
             )
             ->execute();
     }
@@ -300,7 +300,7 @@ class TreelistCacheUpdateHooks
         $queryBuilder
             ->update('cache_treelist')
             ->where(
-                $queryBuilder->expr()->inSet('treelist', (int)$affectedPage)
+                $queryBuilder->expr()->inSet('treelist', $queryBuilder->quote($affectedPage))
             )
             ->set('expires', $expirationTime)
             ->execute();
-- 
GitLab