From bd4a1d8ca72599d58f62054c17c22ddeed887721 Mon Sep 17 00:00:00 2001 From: Kevin Nguyen Date: Wed, 15 May 2024 09:11:34 +0200 Subject: [PATCH] :zap: Avoid systematic count query (#285) * :zap: Avoid systematic count query * fix CI * Fix PHPStan * fix CI again --- src/EmptyResultIterator.php | 7 +++++++ src/PageIterator.php | 2 +- .../FindObjectsFromRawSqlQueryFactory.php | 2 +- src/Utils/BeanDescriptor.php | 4 ++-- tests/AbstractTDBMObjectTest.php | 2 +- tests/NativeWeakrefObjectStorageTest.php | 2 +- tests/Performance/ManyToOneBench.php | 6 +++--- tests/TDBMAbstractServiceTest.php | 8 ++++---- tests/Utils/Annotation/AnnotationParserTest.php | 12 ++++++------ tests/Utils/DbalUtilsTest.php | 2 +- tests/Utils/DefaultNamingStrategyTest.php | 2 +- 11 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 src/EmptyResultIterator.php diff --git a/src/EmptyResultIterator.php b/src/EmptyResultIterator.php new file mode 100644 index 00000000..662a09f6 --- /dev/null +++ b/src/EmptyResultIterator.php @@ -0,0 +1,7 @@ +innerResultIterator === null) { - if ($this->parentResult->count() === 0) { + if ($this->parentResult instanceof EmptyResultIterator) { $this->innerResultIterator = new EmptyInnerResultIterator(); } elseif ($this->mode === TDBMService::MODE_CURSOR) { $this->innerResultIterator = InnerResultIterator::createInnerResultIterator($this->magicSql, $this->parameters, $this->limit, $this->offset, $this->columnDescriptors, $this->objectStorage, $this->className, $this->tdbmService, $this->magicQuery, $this->logger); diff --git a/src/QueryFactory/FindObjectsFromRawSqlQueryFactory.php b/src/QueryFactory/FindObjectsFromRawSqlQueryFactory.php index 457b7bd4..b04398b0 100644 --- a/src/QueryFactory/FindObjectsFromRawSqlQueryFactory.php +++ b/src/QueryFactory/FindObjectsFromRawSqlQueryFactory.php @@ -403,7 +403,7 @@ private function generateGroupedSqlCount(array $parsedSql): array $item['delim'] = ','; $innerColumns[] = $item; } - $innerColumns[count($innerColumns)-1]['delim'] = false; + $innerColumns[count($innerColumns) - 1]['delim'] = false; $parsedSql['SELECT'] = $innerColumns; $parsedSql = [ diff --git a/src/Utils/BeanDescriptor.php b/src/Utils/BeanDescriptor.php index cb092208..fb30d023 100644 --- a/src/Utils/BeanDescriptor.php +++ b/src/Utils/BeanDescriptor.php @@ -1333,7 +1333,7 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa $parameter = new ParameterGenerator(ltrim($element->getSafeVariableName(), '$')); if (!$first && !($element->isCompulsory() && $index->isUnique())) { $parameterType = '?'; - //$functionParameter = '?'; + //$functionParameter = '?'; } else { $parameterType = ''; //$functionParameter = ''; @@ -1765,7 +1765,7 @@ private function generateGetForeignKeys(array $fks): MethodGenerator * @param string $indent * @return string */ - private function psr2VarExport($var, string $indent=''): string + private function psr2VarExport($var, string $indent = ''): string { if (is_array($var)) { $indexed = array_keys($var) === range(0, count($var) - 1); diff --git a/tests/AbstractTDBMObjectTest.php b/tests/AbstractTDBMObjectTest.php index 3a79559d..a0e79532 100644 --- a/tests/AbstractTDBMObjectTest.php +++ b/tests/AbstractTDBMObjectTest.php @@ -44,7 +44,7 @@ public function testEmptyResultIterator() public function testEmptyPageIterator() { - $a = ResultIterator::createEmpyIterator(); + $a = EmptyResultIterator::createEmpyIterator(); $b = $a->take(0, 10); foreach ($b as $empty) { throw new \LogicException("Not supposed to iterate on an empty page iterator."); diff --git a/tests/NativeWeakrefObjectStorageTest.php b/tests/NativeWeakrefObjectStorageTest.php index e6f6730a..86344e99 100644 --- a/tests/NativeWeakrefObjectStorageTest.php +++ b/tests/NativeWeakrefObjectStorageTest.php @@ -30,7 +30,7 @@ public function testDanglingPointers(): void $objectStorage = new NativeWeakrefObjectStorage(); $dbRow = $this->createMock(DbRow::class); - for ($i=0; $i<10001; $i++) { + for ($i = 0; $i < 10001; $i++) { $objectStorage->set('foo', $i, clone $dbRow); } $this->assertNull($objectStorage->get('foo', 42)); diff --git a/tests/Performance/ManyToOneBench.php b/tests/Performance/ManyToOneBench.php index 07d1ec70..aaf485c6 100644 --- a/tests/Performance/ManyToOneBench.php +++ b/tests/Performance/ManyToOneBench.php @@ -73,18 +73,18 @@ private static function initSchema(Connection $connection): void $connection->exec($sqlStmt); } - for ($i = 1; $i<200; $i++) { + for ($i = 1; $i < 200; $i++) { TDBMAbstractServiceTest::insert($connection, 'countries', [ 'id' => $i, 'label' => 'Country '.$i, ]); } - for ($i = 1; $i<1000; $i++) { + for ($i = 1; $i < 1000; $i++) { TDBMAbstractServiceTest::insert($connection, 'users', [ 'id' => $i, 'name' => 'User '.$i, - 'country_id' => ($i%199) +1, + 'country_id' => ($i % 199) + 1, ]); } } diff --git a/tests/TDBMAbstractServiceTest.php b/tests/TDBMAbstractServiceTest.php index 25ac2675..ff275e82 100644 --- a/tests/TDBMAbstractServiceTest.php +++ b/tests/TDBMAbstractServiceTest.php @@ -211,9 +211,9 @@ private static function initSchema(Connection $connection): void ->column('manager_id')->references('contact')->null(); $db->table('users') - ->addAnnotation('AddTrait', ['name'=>TestUserTrait::class], false) - ->addAnnotation('AddTrait', ['name'=>TestOtherUserTrait::class, 'modifiers'=>['\\'.TestOtherUserTrait::class.'::method1 insteadof \\'.TestUserTrait::class, '\\'.TestUserTrait::class.'::method1 as method1renamed']], false) - ->addAnnotation('AddTraitOnDao', ['name'=>TestUserDaoTrait::class], false) + ->addAnnotation('AddTrait', ['name' => TestUserTrait::class], false) + ->addAnnotation('AddTrait', ['name' => TestOtherUserTrait::class, 'modifiers' => ['\\'.TestOtherUserTrait::class.'::method1 insteadof \\'.TestUserTrait::class, '\\'.TestUserTrait::class.'::method1 as method1renamed']], false) + ->addAnnotation('AddTraitOnDao', ['name' => TestUserDaoTrait::class], false) ->implementsInterface(TestUserInterface::class) ->implementsInterfaceOnDao(TestUserDaoInterface::class) ->extends('contact') @@ -721,7 +721,7 @@ private static function initSchema(Connection $connection): void self::insert($connection, 'tracks', [ 'album_id' => 1, - 'title' =>'Pigs on the Wing 1', + 'title' => 'Pigs on the Wing 1', // Note: Oracle does not have a TIME column type 'duration' => $timeType->convertToDatabaseValue(new DateTimeImmutable('1970-01-01 00:01:25'), $connection->getDatabasePlatform()), ]); diff --git a/tests/Utils/Annotation/AnnotationParserTest.php b/tests/Utils/Annotation/AnnotationParserTest.php index 35428302..35c934e5 100644 --- a/tests/Utils/Annotation/AnnotationParserTest.php +++ b/tests/Utils/Annotation/AnnotationParserTest.php @@ -19,7 +19,7 @@ public function testParse(): void 'UUID' => UUID::class, 'Autoincrement' => Autoincrement::class ]); - $column = new Column('foo', Type::getType(Type::STRING), ['comment'=>'@UUID']); + $column = new Column('foo', Type::getType(Type::STRING), ['comment' => '@UUID']); $table = new Table('bar'); $annotations = $parser->getColumnAnnotations($column, $table); @@ -40,7 +40,7 @@ public function testParseMultiLine(): void 'UUID' => UUID::class, 'Autoincrement' => Autoincrement::class ]); - $column = new Column('foo', Type::getType(Type::STRING), ['comment'=>"\n@UUID"]); + $column = new Column('foo', Type::getType(Type::STRING), ['comment' => "\n@UUID"]); $table = new Table('bar'); $annotations = $parser->getColumnAnnotations($column, $table); @@ -54,7 +54,7 @@ public function testParseMultiAnnotations(): void 'UUID' => UUID::class, 'Autoincrement' => Autoincrement::class ]); - $column = new Column('foo', Type::getType(Type::STRING), ['comment'=>"\n@UUID\n@Autoincrement"]); + $column = new Column('foo', Type::getType(Type::STRING), ['comment' => "\n@UUID\n@Autoincrement"]); $table = new Table('bar'); $annotations = $parser->getColumnAnnotations($column, $table); @@ -68,7 +68,7 @@ public function testException(): void 'UUID' => UUID::class, 'Autoincrement' => Autoincrement::class ]); - $table = new Table('bar', [], [], [], 0, ['comment'=>"@UUID\n@UUID"]); + $table = new Table('bar', [], [], [], 0, ['comment' => "@UUID\n@UUID"]); $annotations = $parser->getTableAnnotations($table); $this->expectException(TDBMException::class); @@ -81,7 +81,7 @@ public function testParseParameters(): void 'UUID' => UUID::class, 'Autoincrement' => Autoincrement::class ]); - $table = new Table('bar', [], [], [], 0, ['comment'=>'@UUID("v4")']); + $table = new Table('bar', [], [], [], 0, ['comment' => '@UUID("v4")']); $annotations = $parser->getTableAnnotations($table); $annotation = $annotations->findAnnotation(UUID::class); @@ -94,7 +94,7 @@ public function testParseOldUUID(): void 'UUID' => UUID::class, ]); // First generation UUID did not use the Doctrine syntax. - $table = new Table('bar', [], [], [], 0, ['comment'=>'@UUID v4']); + $table = new Table('bar', [], [], [], 0, ['comment' => '@UUID v4']); $annotations = $parser->getTableAnnotations($table); $annotation = $annotations->findAnnotation(UUID::class); diff --git a/tests/Utils/DbalUtilsTest.php b/tests/Utils/DbalUtilsTest.php index 14dbb74b..7f39b50c 100644 --- a/tests/Utils/DbalUtilsTest.php +++ b/tests/Utils/DbalUtilsTest.php @@ -17,6 +17,6 @@ public function testGenerateTypes(): void 'key4' => 1, ]; - $this->assertSame(['key2'=>Connection::PARAM_INT_ARRAY, 'key3'=>Connection::PARAM_STR_ARRAY, 'key4'=>ParameterType::INTEGER], DbalUtils::generateTypes($params)); + $this->assertSame(['key2' => Connection::PARAM_INT_ARRAY, 'key3' => Connection::PARAM_STR_ARRAY, 'key4' => ParameterType::INTEGER], DbalUtils::generateTypes($params)); } } diff --git a/tests/Utils/DefaultNamingStrategyTest.php b/tests/Utils/DefaultNamingStrategyTest.php index 20318a92..58e7163e 100644 --- a/tests/Utils/DefaultNamingStrategyTest.php +++ b/tests/Utils/DefaultNamingStrategyTest.php @@ -131,7 +131,7 @@ public function testExceptions(): void public function testBeanAnnotation(): void { - $table = new Table('chevaux', [], [], [], 0, ['comment'=>'@Bean(name="Cheval")']); + $table = new Table('chevaux', [], [], [], 0, ['comment' => '@Bean(name="Cheval")']); $strategy = $this->getDefaultNamingStrategyWithStubTables([$table]); $this->assertSame('ChevalDao', $strategy->getDaoClassName('chevaux')); }