Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for duplicating parent relation columns to child tables in JTI #100

Open
wants to merge 12 commits into
base: 4.x
Choose a base branch
from

Conversation

peldax
Copy link

@peldax peldax commented Jun 21, 2024

Partial fix of #97

🔍 What was changed

I removed initialization of relations if the declaring class differs from currently processed reflection class. This solves a case from issue above, where BelongsTo relation column were duplicated to child tables as well.

📝 Checklist

📃 Documentation

Not needed, this is expected behaviour.

NOTE

This solution is just a hotfix identifying the problem. The real solution will be more complex as it probably needs to deduce whether the declaring class is really the parent entity or some other class in the hierarchy between the parent entity and the child entity..

@peldax
Copy link
Author

peldax commented Jun 21, 2024

In ad29886 I added a logic to identify whether the property belongs to current entity or any parent entity in the hierarchy. This renders the note above as resolved.

@peldax
Copy link
Author

peldax commented Jun 21, 2024

Tests in CI fail due to phpunit deprecation, it is still needed to add a new testcases to cover the relevant usecases though.

@roxblnfk
Copy link
Member

roxblnfk commented Jun 21, 2024

To fix tests try to set mysql:8.0.37 there

image: mysql:latest

@peldax
Copy link
Author

peldax commented Jun 21, 2024

Sure, right now I am working on a fix to #101 as it is somewhat related.

@peldax
Copy link
Author

peldax commented Jun 21, 2024

In 90989a4 I implemented a logic to lookup an entity which truly owns the property.

This solves various issues:

  • Relations from JTI parent are not included in the child entity in case of JTI (the original purpose of this PR)
    • Relations from base class which is not an entity should be included normally.
  • Columns from parent/base classes are correctly included in the table schema.

@peldax
Copy link
Author

peldax commented Jun 23, 2024

@roxblnfk Hi, I have downgraded mysql to 8.0 and also resolved the PHPUnit deprecation. However, there are 2 failing tests related to the proxyFieldWithAnnotation and I am currently not sure what that means. Would you please help me to resolve the final bits in order to mainstream the fixes introduced in this PR?

@roxblnfk
Copy link
Member

roxblnfk commented Jun 24, 2024

Hi. It looks like this warning (Note) has gone off 😃

image

You can adjust this test for the new behavior if we talk about this:

Failed asserting that 'value' is null.
tests/Annotated/Functional/Driver/Common/Inheritance/JoinedTableTestCase.php:128

@roxblnfk
Copy link
Member

roxblnfk commented Jun 24, 2024

Hm.. The inheritance tests aren't passed even on the main branche

Looks like this assertion has unnecessary check isset($parent)

\assert($child->getRole() !== null && $entity !== null && isset($parent));

But I`m not sure

@peldax
Copy link
Author

peldax commented Jun 24, 2024

Hi. It looks like this warning (Note) has gone off 😃

Yes, this is a side effect of this PR - to support base classes that are not entitites, but declare columns. Base classes can be placed anywehere in the table inheritance hierarchy and on as many levels as needed.

@peldax
Copy link
Author

peldax commented Jun 24, 2024

Hm.. The inheritance tests aren't passed even on the main branche

Looks like this assertion has extra check isset($parent)

\assert($child->getRole() !== null && $entity !== null && isset($parent));

But I`m not sure

I am also not sure about that part. The edits from maintainers are allowed, so feel free to jump into my branch.

@peldax
Copy link
Author

peldax commented Jun 25, 2024

Hi @roxblnfk , thanks for looking into it! The metadata reader provider changes were made due to phpunits deprecation, which was introduced in 10.5.18.

@peldax
Copy link
Author

peldax commented Jul 1, 2024

Hi, I would love to see this patch to land into a release. :shipit:

@roxblnfk
Copy link
Member

roxblnfk commented Jul 1, 2024

Hello. Do these changes require additional testing?
If not, then I'll review it again and merge.

@peldax
Copy link
Author

peldax commented Jul 1, 2024

Well, there is always a possibility to add additional automated tests. I am running this patch locally and so far it has been working well.

Comment on lines +125 to +127
if ($this->findOwningEntity($class, $property->getDeclaringClass())->getName() !== $class->getName()) {
continue;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added tests for this case and there is an issue when an entity extended from another entity without STI or JTI.

In thos case all the relations of the parent entity have to be cloned into the child class.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is TableInheritance generator. It might be better to clean unnecessary relations there in cases STI or JTI

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review.

You are right, it is quite a nasty use case though. I will take a look at it in the evening,
It makes sense to clear the entity in the inheritance generator, I will try to move the logic there.

The column ownership use cases are alright?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, columns look great. Thank you.

@peldax
Copy link
Author

peldax commented Oct 17, 2024

@roxblnfk Hi,
Feel free to take over from here and alter the patch according to your needs, I am no longer using Cycle and will not invest time to implement the comments from your latest review.

@roxblnfk
Copy link
Member

@roxblnfk Hi, Feel free to take over from here and alter the patch according to your needs, I am no longer using Cycle and will not invest time to implement the comments from your latest review.

Thank you for bringing this to my attention. And thank you for the work you've done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants