Skip to content

Commit 3714b15

Browse files
committed
🐛 Fix optional declared before required parameter in findOneBy with UNIQUE
Given UNIQUE(a INT, ?b INT, c INT) this fixes the collowing case: ```diff -findOneByAAndBAndC(int $a, ?int $b = null, int $c) +findOneByAAndBAndC(int $a, ?int $b, int $c) ``` Cleanup dead code This as-well fix deprecation: - `createSchema` becomes `introspectSchema` - `${var}` becomes `{$var}`
1 parent 2028a7e commit 3714b15

File tree

3 files changed

+9
-33
lines changed

3 files changed

+9
-33
lines changed

src/SchemaVersionControl/SchemaVersionControlService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function dumpSchema(): void
5757
{
5858
$schemaManager = $this->connection->createSchemaManager();
5959
$schemaConfig = $schemaManager->createSchemaConfig();
60-
$schema = $schemaManager->createSchema();
60+
$schema = $schemaManager->introspectSchema();
6161
$normalizer = new SchemaNormalizer();
6262
$desc = $normalizer->normalize($schema, $schemaConfig);
6363
$yamlSchema = Yaml::dump(['schema' => $desc], 10, 2);

src/Utils/BeanDescriptor.php

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,6 @@ private function removeDuplicateIndexes(array $indexes): array
12921292
private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespace, string $beanClassName): ?MethodGenerator
12931293
{
12941294
$columns = $index->getColumns();
1295-
$usedBeans = [];
12961295

12971296
/**
12981297
* The list of elements building this index (expressed as columns or foreign keys)
@@ -1318,42 +1317,23 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
13181317
}
13191318

13201319
$parameters = [];
1321-
//$functionParameters = [];
13221320
$first = true;
13231321
/** @var AbstractBeanPropertyDescriptor $element */
13241322
foreach ($elements as $element) {
13251323
$parameter = new ParameterGenerator(ltrim($element->getSafeVariableName(), '$'));
1326-
if (!$first && !($element->isCompulsory() && $index->isUnique())) {
1327-
$parameterType = '?';
1328-
//$functionParameter = '?';
1329-
} else {
1330-
$parameterType = '';
1331-
//$functionParameter = '';
1332-
}
1324+
1325+
$parameterType = !$first && (!$index->isUnique() || !$element->isCompulsory()) ? '?' : '';
13331326
$parameterType .= $element->getPhpType();
13341327
$parameter->setType($parameterType);
1335-
if (!$first && !($element->isCompulsory() && $index->isUnique())) {
1328+
1329+
if (!$first && !$index->isUnique()) {
13361330
$parameter->setDefaultValue(null);
13371331
}
1338-
//$functionParameter .= $element->getPhpType();
1339-
$elementClassName = $element->getClassName();
1340-
if ($elementClassName) {
1341-
$usedBeans[] = $beanNamespace.'\\'.$elementClassName;
1342-
}
1343-
//$functionParameter .= ' '.$element->getVariableName();
1344-
if ($first) {
1345-
$first = false;
1346-
} /*else {
1347-
$functionParameter .= ' = null';
1348-
}*/
1349-
//$functionParameters[] = $functionParameter;
1332+
13501333
$parameters[] = $parameter;
1334+
$first = false;
13511335
}
13521336

1353-
//$functionParametersString = implode(', ', $functionParameters);
1354-
1355-
$count = 0;
1356-
13571337
$params = [];
13581338
$filterArrayCode = '';
13591339
$commentArguments = [];
@@ -1375,12 +1355,11 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
13751355
} elseif ($element instanceof ObjectBeanPropertyDescriptor) {
13761356
$foreignKey = $element->getForeignKey();
13771357
$columns = array_combine($foreignKey->getUnquotedLocalColumns(), $foreignKey->getUnquotedForeignColumns());
1378-
++$count;
13791358
$foreignTable = $this->schema->getTable($foreignKey->getForeignTableName());
13801359
foreach ($columns as $localColumn => $foreignColumn) {
13811360
// TODO: a foreign key could point to another foreign key. In this case, there is no getter for the pointed column. We don't support this case.
13821361
$targetedElement = new ScalarBeanPropertyDescriptor($foreignTable, $foreignTable->getColumn($foreignColumn), $this->namingStrategy, $this->annotationParser);
1383-
if ($first || $element->isCompulsory() && $index->isUnique()) {
1362+
if ($first || ($element->isCompulsory() && $index->isUnique())) {
13841363
// First parameter for index is not nullable
13851364
$filterArrayCode .= ' '.var_export($localColumn, true).' => '.$element->getSafeVariableName().'->'.$targetedElement->getGetterName()."(),\n";
13861365
} else {
@@ -1395,9 +1374,6 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
13951374
}
13961375
}
13971376

1398-
//$paramsString = implode("\n", $params);
1399-
1400-
14011377
$methodName = $this->namingStrategy->getFindByIndexMethodName($index, $elements);
14021378

14031379
$method = new MethodGenerator($methodName);

src/Utils/DirectForeignKeyMethodDescriptor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public function getJsonSerializeCode(): string
261261
} else {
262262
$code = <<<PHP
263263
\$array['$index'] = array_map(function ($class $variableName) {
264-
return ${variableName}->$format;
264+
return {$variableName}->$format;
265265
}, \$this->$getter()->toArray());
266266
PHP;
267267
}

0 commit comments

Comments
 (0)