Update RESTORE behaviour for LIKE operator for CS_AI collation #3296
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
We introduced the support for LIKE operator for AI collations for Latin characters from versions 15.7 and 16.3 onwards. We use function remove_accents_internal to remove accents from the characters to find the base character. To improve the performance further, we introduced a cached version of remove_accents_internal function named remove_accents_internal_using_cache from 15.8 and 16.4 onwards.
In cases where there is CHECK constraint in the table definition for CS_AI, we observed that after upgrade from any version before 15.8 to 16.latest, the INSERT was failing on the table as another call to remove_accents_internal_using_cache was getting added on top of current node during restore. This issue is only observed for CS_AI as we do not modify the LIKE operator whereas for CI_AI we modify LIKE to ILIKE and BETWEEN operators.
We fix this issue by checking whether the incoming LIKE operator is for CS_AI. If yes, then we update the collation information for the OpExpr for that node and return from there directly. In this way, during restore we won't go in the code path where we add extra call to remove_accents_internal* on already modified node.
Issues Resolved
BABEL-5471
Cherry-picked from: 3fe245b3a16b47ddc05642f23c26a238f7641a04
Signed-off-by: Shameem Ahmed [email protected]
Test Scenarios Covered
Use case based -
Boundary conditions -
Arbitrary inputs -
Negative test cases -
Minor version upgrade tests -
Major version upgrade tests -
Performance tests -
Tooling impact -
Client tests -
Check List
By submitting this pull request, I confirm that my contribution is under the terms of the Apache 2.0 and PostgreSQL licenses, and grant any person obtaining a copy of the contribution permission to relicense all or a portion of my contribution to the PostgreSQL License solely to contribute all or a portion of my contribution to the PostgreSQL open source project.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.