]> source.dussan.org Git - nextcloud-server.git/commitdiff
Prevent query error when use subquery
authorVitor Mattos <vitor@php.rio>
Tue, 11 Jan 2022 15:20:13 +0000 (12:20 -0300)
committerVitor Mattos <vitor@php.rio>
Fri, 21 Jan 2022 11:37:06 +0000 (08:37 -0300)
Signed-off-by: Vitor Mattos <vitor@php.rio>
build/psalm-baseline.xml
lib/private/DB/QueryBuilder/QueryBuilder.php
lib/public/DB/QueryBuilder/IQueryBuilder.php
tests/lib/DB/QueryBuilder/QueryBuilderTest.php

index 485a3fe706c8a3a780a5b18b6477a922e8ff47cb..f02a11ec7ea97a42c6104ddc1165b0c834e94bf3 100644 (file)
     </TypeDoesNotContainType>
   </file>
   <file src="lib/private/Repair/RemoveLinkShares.php">
-    <ImplicitToStringCast occurrences="2">
-      <code>$query-&gt;createFunction('(' . $subQuery-&gt;getSQL() . ')')</code>
-      <code>$subQuery-&gt;createFunction('(' . $subSubQuery-&gt;getSQL() . ')')</code>
-    </ImplicitToStringCast>
     <InvalidPropertyAssignmentValue occurrences="1">
       <code>$this-&gt;userToNotify</code>
     </InvalidPropertyAssignmentValue>
index a362ff8016e2cfed7bba465e858bf11024250b81..de326a2a3179b9297cee7b9d808ab29fa6d35317 100644 (file)
@@ -694,7 +694,7 @@ class QueryBuilder implements IQueryBuilder {
         *         ->from('users', 'u')
         * </code>
         *
-        * @param string $from The table.
+        * @param string|IQueryFunction $from The table.
         * @param string|null $alias The alias of the table.
         *
         * @return $this This QueryBuilder instance.
@@ -1303,7 +1303,7 @@ class QueryBuilder implements IQueryBuilder {
        /**
         * Returns the table name quoted and with database prefix as needed by the implementation
         *
-        * @param string $table
+        * @param string|IQueryFunction $table
         * @return string
         */
        public function getTableName($table) {
index 7829696970cdbf6a8de4703bb85f9c6fb83cbe14..669003246d939e3339b2273a5ebfaf8234a2140c 100644 (file)
@@ -470,7 +470,7 @@ interface IQueryBuilder {
         *         ->from('users', 'u')
         * </code>
         *
-        * @param string $from The table.
+        * @param string|IQueryFunction $from The table.
         * @param string|null $alias The alias of the table.
         *
         * @return $this This QueryBuilder instance.
@@ -994,7 +994,7 @@ interface IQueryBuilder {
        /**
         * Returns the table name quoted and with database prefix as needed by the implementation
         *
-        * @param string $table
+        * @param string|IQueryFunction $table
         * @return string
         * @since 9.0.0
         */
index 1927850470743cd581dbabceea99b95e0f4b1048..d94fda4852c6cdee6b817bf0b053a2d8c128b246 100644 (file)
@@ -1204,6 +1204,9 @@ class QueryBuilderTest extends \Test\TestCase {
        }
 
        public function dataGetTableName() {
+               $config = $this->createMock(SystemConfig::class);
+               $logger = $this->createMock(ILogger::class);
+               $qb = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger);
                return [
                        ['*PREFIX*table', null, '`*PREFIX*table`'],
                        ['*PREFIX*table', true, '`*PREFIX*table`'],
@@ -1212,13 +1215,17 @@ class QueryBuilderTest extends \Test\TestCase {
                        ['table', null, '`*PREFIX*table`'],
                        ['table', true, '`*PREFIX*table`'],
                        ['table', false, '`table`'],
+
+                       [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), null, '(SELECT * FROM `*PREFIX*table`)'],
+                       [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), true, '(SELECT * FROM `*PREFIX*table`)'],
+                       [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), false, '(SELECT * FROM `*PREFIX*table`)'],
                ];
        }
 
        /**
         * @dataProvider dataGetTableName
         *
-        * @param string $tableName
+        * @param string|IQueryFunction $tableName
         * @param bool $automatic
         * @param string $expected
         */