@Override public boolean hasFullValuePrecision( IndexQuery... predicates ) { for ( IndexQuery predicate : predicates ) { ValueGroup valueGroup = predicate.valueGroup(); if ( valueGroup == ValueGroup.GEOMETRY_ARRAY || valueGroup == ValueGroup.GEOMETRY ) { return false; } } return true; }
private static boolean isNumericOrGeometricPredicate( IndexQuery predicate ) { if ( predicate.type() == IndexQuery.IndexQueryType.exact ) { IndexQuery.ExactPredicate exactPredicate = (IndexQuery.ExactPredicate) predicate; return isNumberGeometryOrArray( exactPredicate.value() ); } else { return predicate.type() == IndexQuery.IndexQueryType.range && (predicate.valueGroup() == ValueGroup.NUMBER || predicate.valueGroup() == ValueGroup.GEOMETRY); } }
static void validateQuery( IndexCapability capability, IndexOrder indexOrder, IndexQuery[] predicates ) { if ( indexOrder != IndexOrder.NONE ) { ValueCategory valueCategory = predicates[0].valueGroup().category(); IndexOrder[] orderCapability = capability.orderCapability( valueCategory ); if ( !ArrayUtil.contains( orderCapability, indexOrder ) ) { orderCapability = ArrayUtils.add( orderCapability, IndexOrder.NONE ); throw new UnsupportedOperationException( format( "Tried to query index with unsupported order %s. Supported orders for query %s are %s.", indexOrder, Arrays.toString( predicates ), Arrays.toString( orderCapability ) ) ); } } } }
public ValueCategory[] getValueCategories( IndexQuery[] predicates ) { return Arrays.stream( predicates ) .map( iq -> iq.valueGroup().category() ) .toArray( ValueCategory[]::new ); }
/** * Run the Value[] from a particular entityId through the list of IndexQuery[] predicates to see if they all accept the value. */ private boolean passesFilter( long entityId, IndexQuery[] predicates ) { if ( predicates.length == 1 && predicates[0] instanceof IndexQuery.ExistsPredicate ) { return true; } Value[] values = committedValues.get( entityId ); for ( int i = 0; i < values.length; i++ ) { IndexQuery predicate = predicates[i]; if ( predicate.valueGroup() == ValueGroup.GEOMETRY || predicate.valueGroup() == ValueGroup.GEOMETRY_ARRAY || (predicate.valueGroup() == ValueGroup.NUMBER && !testSuite.supportFullValuePrecisionForNumbers()) ) { if ( !predicates[i].acceptsValue( values[i] ) ) { return false; } } // else there's no functional need to let values, other than those of GEOMETRY type, to pass through the IndexQuery filtering // avoiding this filtering will have testing be more strict in what index readers returns. } return true; }
IndexOrder[] orderCapability( IndexQuery... predicates ) { ValueCategory[] categories = new ValueCategory[predicates.length]; for ( int i = 0; i < predicates.length; i++ ) { categories[i] = predicates[i].valueGroup().category(); } return indexProvider.getCapability( descriptor ).orderCapability( categories ); }
NativeIndexReader<?,NativeIndexValue> part = uncheckedSelect( predicate.valueGroup() ); if ( part != null )
case range: assertNotComposite( predicates ); switch ( predicate.valueGroup() ) format( "Range scans of value group %s are not supported", predicate.valueGroup() ) );
ValueGroup valueGroup = q.valueGroup(); if ( ( valueGroup == NUMBER || valueGroup == GEOMETRY) && !reader.hasFullValuePrecision( q ) )
@Override public boolean hasFullValuePrecision( IndexQuery... predicates ) { for ( IndexQuery predicate : predicates ) { ValueGroup valueGroup = predicate.valueGroup(); if ( valueGroup == ValueGroup.GEOMETRY_ARRAY || valueGroup == ValueGroup.GEOMETRY ) { return false; } } return true; }
private static boolean isNumericOrGeometricPredicate( IndexQuery predicate ) { if ( predicate.type() == IndexQuery.IndexQueryType.exact ) { IndexQuery.ExactPredicate exactPredicate = (IndexQuery.ExactPredicate) predicate; return isNumberGeometryOrArray( exactPredicate.value() ); } else { return predicate.type() == IndexQuery.IndexQueryType.range && (predicate.valueGroup() == ValueGroup.NUMBER || predicate.valueGroup() == ValueGroup.GEOMETRY); } }
static void validateQuery( IndexCapability capability, IndexOrder indexOrder, IndexQuery[] predicates ) { if ( indexOrder != IndexOrder.NONE ) { ValueCategory valueCategory = predicates[0].valueGroup().category(); IndexOrder[] orderCapability = capability.orderCapability( valueCategory ); if ( !ArrayUtil.contains( orderCapability, indexOrder ) ) { orderCapability = ArrayUtils.add( orderCapability, IndexOrder.NONE ); throw new UnsupportedOperationException( format( "Tried to query index with unsupported order %s. Supported orders for query %s are %s.", indexOrder, Arrays.toString( predicates ), Arrays.toString( orderCapability ) ) ); } } } }
NativeIndexReader<?,NativeIndexValue> part = uncheckedSelect( predicate.valueGroup() ); if ( part != null )
ValueGroup valueGroup = q.valueGroup(); if ( ( valueGroup == NUMBER || valueGroup == GEOMETRY) && !reader.hasFullValuePrecision( q ) )