albertogpz opened a new pull request #6279:
URL: https://github.com/apache/geode/pull/6279


   Queries in which map fields are involved
   in the condition, sometimes do not return the same entries
   if map indexes are used, compared to when map indexes
   are not used.
   
   Differences were found when the condition on the
   map field was of type '!=' and also when the condition
   on the map field was comparing the value with null.
   
   Example1:
   Running a query with the following condition:
   positions['SUN'] = null
   
   in a region with the following entries:
   entry1.positions=null
   entry2.positions={'a'=>'b'}
   entry3.positions={'SUN'=>null}
   
   - will return entry1 and entry3 if there are no
     indexes defined.
   - will return no entries if the following index is defined:
     positions['SUN','c']
   - will return entry3 if the following index is defined:
     positions[*]
   
   Example2:
   Running a query with the following condition:
   positions['SUN'] != '3'
   
   in a region with the following entries:
   entry1.positions=null
   entry2.positions={'a'=>'b'}
   entry3.positions={'SUN'=>'4'}
   entry4.positions={'SUN'=>'3'}
   entry5.positions={'SUN'=>null}
   
   - will return all entries except for entry4 if:
     there are no indexes defined.
   - will return entry3 if the following index is defined:
     positions['SUN','c']
   - will return entry3 and entry5 if the following index is defined:
     positions[*]
   
   In order to have the same results for these
   queries no matter if indexes are used,
   the following changes have been made:
   
   - When using compact map indexes or map indexes
   an index entry will be created for every entry
   added to the region even if the entry does not
   contain the indexed map (the map is null) or
   it does not contain any of the indexed keys.
   The above will not apply to indexes of type
   "allkeys" (e.g. positions[*]).
   
   - As a consequence of the statement above
   about indexes of type "allkeys", when the index
   configured is of "allkeys" type and the query
   is of type "!=" (e.g. positions['SUN'] != "3"
   or the query is comparing against a null value
   (e.g. positions['SUN'] = null) the index will
   not be used.
   This is a limitation of this solution
   as allowing the index to be used in this case
   would require bigger and more complex changes that
   have not been considered in this solution.
   
   Thank you for submitting a contribution to Apache Geode.
   
   In order to streamline the review of the contribution we ask you
   to ensure the following steps have been taken:
   
   ### For all changes:
   - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in 
the commit message?
   
   - [ ] Has your PR been rebased against the latest commit within the target 
branch (typically `develop`)?
   
   - [ ] Is your initial contribution a single, squashed commit?
   
   - [ ] Does `gradlew build` run cleanly?
   
   - [ ] Have you written or updated unit tests to verify your changes?
   
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)?
   
   ### Note:
   Please ensure that once the PR is submitted, check Concourse for build 
issues and
   submit an update to your PR as soon as possible. If you need help, please 
send an
   email to [email protected].
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to