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

Fixes #1332: Deep Comparison for Array-based Concurrency tokens. #1334

Open
wants to merge 5 commits into
base: release-8.x
Choose a base branch
from

Conversation

anasik
Copy link

@anasik anasik commented Oct 28, 2024

Fixes #1332

A popular convention today for concurrency check fields is to use a byte[] field called RowVersion with a Timestamp or ConcurrencyCheck attribute.

However, when using such a field, the queryOptions.ifNoneMatch.ApplyTo call was having absolutely no effect. That's because ApplyTo was internally using Expression.Equal which is perfect for value types but doesn't fare very well against reference types or particularly Arrays.

I fixed this by adding a case for arrays that, through a helper method, generates an expression that performs a deep comparison.

@anasik anasik marked this pull request as ready for review October 28, 2024 21:12
@anasik
Copy link
Author

anasik commented Nov 4, 2024

@WanjohiSammy , may I interest you in this?

@anasik
Copy link
Author

anasik commented Nov 13, 2024

@xuzhg, it's been a little quiet here. Maybe I can help with something?

@anasik
Copy link
Author

anasik commented Nov 27, 2024

@xuzhg , @WanjohiSammy, I see you guys were busy with the 8.2.6 release. Just bumping this in case it got lost or forgotten.

@anasik
Copy link
Author

anasik commented Jan 15, 2025

@WanjohiSammy, bumping this up just in case.

@@ -60,6 +61,8 @@ private static IEdmModel GetDerivedEdmModel()
EntitySetConfiguration<ETagsDerivedCustomer> eTagsDerivedCustomersSet = builder.EntitySet<ETagsDerivedCustomer>("ETagsDerivedCustomers");
eTagsDerivedCustomersSet.HasRequiredBinding(c => c.RelatedCustomer, eTagsCustomersSet);
eTagsDerivedCustomersSet.HasRequiredBinding(c => c.ContainedCustomer, eTagsCustomersSet);
eTagsDerivedCustomersSet.EntityType.Ignore(d=>d.RowVersion);
Copy link
Contributor

Choose a reason for hiding this comment

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

What's the purpose of excluding this property from EdmModel

Copy link
Author

@anasik anasik Jan 16, 2025

Choose a reason for hiding this comment

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

@WanjohiSammy I added a new field. Most of these tests were written with the assumption that this field does not exist and therefore do not take its existence into account.

Me ignoring this field from these tests basically ensures that they continue to pass as they did previously since their test cases have nothing to do with the new field I created or the problem at hand.

I'm not overly fond of purposefully ignoring new code that breaks an existing test. Especially considering that the rest of the PR literally revolves around re-passing another existing test.

However, I only resolved to do this after I noticed that other test bases were ignoring one of the fields too for a similar reason. If you go to ETagsOtherTypesTest, you'd see that both the EDM Models there are ignoring the StringWithConcurrencyCheckAttributeProperty field.

@WanjohiSammy
Copy link
Contributor

@anasik tests are missing. Can you add several tests for this Deep Comparison feature

@anasik
Copy link
Author

anasik commented Jan 16, 2025

@anasik tests are missing. Can you add several tests for this Deep Comparison feature

@WanjohiSammy,
All I did was prove that an existing test was failing under certain circumstances and then I passed that test by adding the deep comparison feature. Since there's already a test that passes only when the feature exists, I am not sure what an additional test would look like?

If there's something specific you're looking for in terms of tests, please let me know and I'll see what I can do?

@anasik anasik requested a review from WanjohiSammy January 16, 2025 17:39
Copy link
Contributor

@WanjohiSammy WanjohiSammy left a comment

Choose a reason for hiding this comment

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

I want to test and make sure that this is not a breaking change

@anasik
Copy link
Author

anasik commented Jan 20, 2025

I want to test and make sure that this is not a breaking change

@WanjohiSammy, makes perfect sense. Let me know if any tests are failing and I'll take a look.

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