Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
269 changes: 134 additions & 135 deletions psalm-baseline.xml
Original file line number Diff line number Diff line change
@@ -1,138 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="6.12.1@e71404b0465be25cf7f8a631b298c01c5ddd864f">
<file src="src/CreatedAt.php">
<PropertyNotSetInConstructor>
<code><![CDATA[CreatedAt]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Dispatcher/ListenerProvider.php">
<DocblockTypeContradiction>
<code><![CDATA[!\is_array($event)]]></code>
</DocblockTypeContradiction>
<MixedArgument>
<code><![CDATA[$arguments]]></code>
<code><![CDATA[$definition]]></code>
<code><![CDATA[$definition[self::DEFINITION_CLASS]]]></code>
<code><![CDATA[$role]]></code>
</MixedArgument>
<MixedArrayAccess>
<code><![CDATA[$definition[self::DEFINITION_CLASS]]]></code>
</MixedArrayAccess>
<MixedAssignment>
<code><![CDATA[$arguments]]></code>
<code><![CDATA[$role]]></code>
</MixedAssignment>
<RedundantConditionGivenDocblockType>
<code><![CDATA[\assert($listen instanceof Listen)]]></code>
</RedundantConditionGivenDocblockType>
</file>
<file src="src/Event/Mapper/Command/OnCreate.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnCreate]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Event/Mapper/Command/OnDelete.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnDelete]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Event/Mapper/Command/OnUpdate.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnUpdate]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/EventDrivenCommandGenerator.php">
<MixedReturnStatement>
<code><![CDATA[$event->command]]></code>
<code><![CDATA[$event->command]]></code>
<code><![CDATA[$event->command]]></code>
</MixedReturnStatement>
<PropertyNotSetInConstructor>
<code><![CDATA[$timestamp]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/EventListener.php">
<MixedArrayAssignment>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
</MixedArrayAssignment>
<PropertyNotSetInConstructor>
<code><![CDATA[$role]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Exception/OptimisticLock/ChangedVersionException.php">
<ClassMustBeFinal>
<code><![CDATA[ChangedVersionException]]></code>
</ClassMustBeFinal>
<MixedArgument>
<code><![CDATA[$new]]></code>
<code><![CDATA[$old]]></code>
</MixedArgument>
</file>
<file src="src/Exception/OptimisticLock/RecordIsLockedException.php">
<ClassMustBeFinal>
<code><![CDATA[RecordIsLockedException]]></code>
</ClassMustBeFinal>
</file>
<file src="src/Hook.php">
<PropertyNotSetInConstructor>
<code><![CDATA[Hook]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Listener/OptimisticLock.php">
<MixedAssignment>
<code><![CDATA[$nodeValue]]></code>
<code><![CDATA[$stateValue]]></code>
</MixedAssignment>
</file>
<file src="src/OptimisticLock.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OptimisticLock]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Schema/BaseModifier.php">
<MixedArrayAssignment>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
</MixedArrayAssignment>
</file>
<file src="src/Schema/RegistryModifier.php">
<ArgumentTypeCoercion>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$rule]]></code>
</ArgumentTypeCoercion>
<ClassMustBeFinal>
<code><![CDATA[RegistryModifier]]></code>
</ClassMustBeFinal>
<MixedAssignment>
<code><![CDATA[$defaultHandlers]]></code>
</MixedAssignment>
</file>
<file src="src/SoftDelete.php">
<PropertyNotSetInConstructor>
<code><![CDATA[SoftDelete]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/UpdatedAt.php">
<PropertyNotSetInConstructor>
<code><![CDATA[UpdatedAt]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/CreatedAt.php">
<PropertyNotSetInConstructor>
<code><![CDATA[CreatedAt]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Dispatcher/ListenerProvider.php">
<DocblockTypeContradiction>
<code><![CDATA[!\is_array($event)]]></code>
</DocblockTypeContradiction>
<MixedArgument>
<code><![CDATA[$arguments]]></code>
<code><![CDATA[$definition]]></code>
<code><![CDATA[$definition[self::DEFINITION_CLASS]]]></code>
<code><![CDATA[$role]]></code>
</MixedArgument>
<MixedArrayAccess>
<code><![CDATA[$definition[self::DEFINITION_CLASS]]]></code>
</MixedArrayAccess>
<MixedAssignment>
<code><![CDATA[$arguments]]></code>
<code><![CDATA[$role]]></code>
</MixedAssignment>
<RedundantConditionGivenDocblockType>
<code><![CDATA[\assert($listen instanceof Listen)]]></code>
</RedundantConditionGivenDocblockType>
</file>
<file src="src/Event/Mapper/Command/OnCreate.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnCreate]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Event/Mapper/Command/OnDelete.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnDelete]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Event/Mapper/Command/OnUpdate.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OnUpdate]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/EventDrivenCommandGenerator.php">
<MixedReturnStatement>
<code><![CDATA[$event->command]]></code>
<code><![CDATA[$event->command]]></code>
<code><![CDATA[$event->command]]></code>
</MixedReturnStatement>
<PropertyNotSetInConstructor>
<code><![CDATA[$timestamp]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/EventListener.php">
<MixedArrayAssignment>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
</MixedArrayAssignment>
<PropertyNotSetInConstructor>
<code><![CDATA[$role]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Exception/OptimisticLock/ChangedVersionException.php">
<ClassMustBeFinal>
<code><![CDATA[ChangedVersionException]]></code>
</ClassMustBeFinal>
<MixedArgument>
<code><![CDATA[$new]]></code>
<code><![CDATA[$old]]></code>
</MixedArgument>
</file>
<file src="src/Exception/OptimisticLock/RecordIsLockedException.php">
<ClassMustBeFinal>
<code><![CDATA[RecordIsLockedException]]></code>
</ClassMustBeFinal>
</file>
<file src="src/Hook.php">
<PropertyNotSetInConstructor>
<code><![CDATA[Hook]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Listener/OptimisticLock.php">
<MixedAssignment>
<code><![CDATA[$nodeValue]]></code>
<code><![CDATA[$stateValue]]></code>
</MixedAssignment>
</file>
<file src="src/OptimisticLock.php">
<PropertyNotSetInConstructor>
<code><![CDATA[OptimisticLock]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/Schema/BaseModifier.php">
<MixedArrayAssignment>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
<code><![CDATA[$schema[SchemaInterface::LISTENERS][]]]></code>
</MixedArrayAssignment>
</file>
<file src="src/Schema/RegistryModifier.php">
<ArgumentTypeCoercion>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$columnName]]></code>
<code><![CDATA[$rule]]></code>
</ArgumentTypeCoercion>
<ClassMustBeFinal>
<code><![CDATA[RegistryModifier]]></code>
</ClassMustBeFinal>
<MixedAssignment>
<code><![CDATA[$defaultHandlers]]></code>
</MixedAssignment>
</file>
<file src="src/SoftDelete.php">
<PropertyNotSetInConstructor>
<code><![CDATA[SoftDelete]]></code>
</PropertyNotSetInConstructor>
</file>
<file src="src/UpdatedAt.php">
<PropertyNotSetInConstructor>
<code><![CDATA[UpdatedAt]]></code>
</PropertyNotSetInConstructor>
</file>
</files>
43 changes: 40 additions & 3 deletions src/Schema/RegistryModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class RegistryModifier
protected const STRING_COLUMN = AbstractColumn::STRING;
protected const BIG_INTEGER_COLUMN = 'bigInteger';
protected const DATETIME_COLUMN = 'datetime';
protected const ULID_COLUMN = 'ulid';
protected const UUID_COLUMN = 'uuid';

protected FieldMap $fields;
Expand Down Expand Up @@ -84,11 +85,18 @@ public static function isStringType(string $type): bool
return $matches['type'] === 'string';
}

public static function isUlidType(string $type): bool
{
\preg_match(self::DEFINITION, $type, $matches);

return $matches['type'] === self::ULID_COLUMN;
}

public static function isUuidType(string $type): bool
{
\preg_match(self::DEFINITION, $type, $matches);

return $matches['type'] === 'uuid';
return $matches['type'] === self::UUID_COLUMN;
}

public function addDatetimeColumn(string $columnName, string $fieldName, int|null $generated = null): AbstractColumn
Expand Down Expand Up @@ -179,22 +187,47 @@ public function addStringColumn(string $columnName, string $fieldName, int|null
return $this->table->column($columnName)->type(self::STRING_COLUMN);
}

/**
* @throws BehaviorCompilationException
*/
public function addUlidColumn(string $columnName, string $fieldName, int|null $generated = null): AbstractColumn
{
if ($this->fields->has($fieldName)) {
if (!static::isUlidType($this->fields->get($fieldName)->getType())) {
throw new BehaviorCompilationException(
\sprintf('Field %s must be of type %s.', $fieldName, self::ULID_COLUMN),
);
}
$this->validateColumnName($fieldName, $columnName);
$this->fields->get($fieldName)->setGenerated($generated);

return $this->table->column($columnName);
}

$field = (new Field())->setColumn($columnName)->setType(self::ULID_COLUMN)->setGenerated($generated);
$this->fields->set($fieldName, $field);

return $this->table->column($columnName)->type(self::ULID_COLUMN);
}

/**
* @throws BehaviorCompilationException
*/
public function addUuidColumn(string $columnName, string $fieldName, int|null $generated = null): AbstractColumn
{
if ($this->fields->has($fieldName)) {
if (!static::isUuidType($this->fields->get($fieldName)->getType())) {
throw new BehaviorCompilationException(\sprintf('Field %s must be of type uuid.', $fieldName));
throw new BehaviorCompilationException(
\sprintf('Field %s must be of type %s.', $fieldName, self::UUID_COLUMN),
);
}
$this->validateColumnName($fieldName, $columnName);
$this->fields->get($fieldName)->setGenerated($generated);

return $this->table->column($columnName);
}

$field = (new Field())->setColumn($columnName)->setType('uuid')->setGenerated($generated);
$field = (new Field())->setColumn($columnName)->setType(self::UUID_COLUMN)->setGenerated($generated);
$this->fields->set($fieldName, $field);

return $this->table->column($columnName)->type(self::UUID_COLUMN);
Expand Down Expand Up @@ -257,6 +290,10 @@ protected function validateColumnName(string $fieldName, string $columnName): vo

/**
* @deprecated since v1.2
*
* @param non-empty-string $type
* @param non-empty-string $fieldName
* @param non-empty-string $columnName
*/
protected function isType(string $type, string $fieldName, string $columnName): bool
{
Expand Down
Loading
Loading