Skip to content

Commit

Permalink
HSEARCH-4167 Check param get by param method exists
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever authored and yrodiere committed May 26, 2021
1 parent a8a90d8 commit 167be60
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 7 deletions.
Expand Up @@ -761,4 +761,7 @@ SearchException incompatibleElasticsearchVersionOnStart(ElasticsearchVersion ver
+ " but multi-tenancy strategy is set.")
SearchException multiTenancyNotRequiredButExplicitlyEnabledByTheBackend();

@Message(id = ID_OFFSET + 150, value = "Param with name '%1$s' has not been defined for the named predicate.")
SearchException paramNotDefined(String name);

}
Expand Up @@ -130,7 +130,12 @@ public SearchPredicateFactory predicate() {
@Override
public Object param(String name) {
Contracts.assertNotNull( name, "name" );
return params.get( name );

Object value = params.get( name );
if ( value == null ) {
throw log.paramNotDefined( name );
}
return value;
}

@Override
Expand Down
Expand Up @@ -664,4 +664,7 @@ SearchException indexSchemaNamedPredicateNameConflict(String relativeFilterName,
+ " but multi-tenancy strategy is set.")
SearchException multiTenancyNotRequiredButExplicitlyEnabledByTheBackend();

@Message(id = ID_OFFSET + 150, value = "Param with name '%1$s' has not been defined for the named predicate.")
SearchException paramNotDefined(String name);

}
Expand Up @@ -127,7 +127,12 @@ public SearchPredicateFactory predicate() {
@Override
public Object param(String name) {
Contracts.assertNotNull( name, "name" );
return params.get( name );

Object value = params.get( name );
if ( value == null ) {
throw log.paramNotDefined( name );
}
return value;
}

@Override
Expand Down
Expand Up @@ -10,6 +10,7 @@

import org.hibernate.search.engine.search.predicate.dsl.NamedPredicateOptionsStep;
import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory;
import org.hibernate.search.util.common.SearchException;
import org.hibernate.search.util.common.annotation.Incubating;

/**
Expand All @@ -30,14 +31,16 @@ public interface NamedPredicateProviderContext {
/**
* @param name The name of the parameter.
* @return The value provided to {@link NamedPredicateOptionsStep#param(String, Object)} for this parameter.
* @see NamedPredicateOptionsStep#param(java.lang.String, java.lang.Object)
* @throws SearchException no value was provided for this parameter.
* @see NamedPredicateOptionsStep#param(String, Object)
*/
Object param(String name);

/**
* @param name The name of the parameter.
* @return An optional containing the value provided to {@link NamedPredicateOptionsStep#param(String, Object)}
* for this parameter, or {@code Optional.empty()} if no value was provided for this parameter.
* @see NamedPredicateOptionsStep#param(String, Object)
*/
Optional<Object> paramOptional(String name);

Expand Down
Expand Up @@ -10,6 +10,8 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.hibernate.search.util.impl.integrationtest.common.assertion.SearchResultAssert.assertThatQuery;

import java.util.Optional;

import org.hibernate.search.engine.backend.document.IndexObjectFieldReference;
import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaElement;
import org.hibernate.search.engine.backend.document.model.dsl.IndexSchemaObjectField;
Expand Down Expand Up @@ -47,7 +49,7 @@ public static void setup() {

@Test
public void param() {
Object[] givenParams = new Object[] { "string", new Object(), 5L, null };
Object[] givenParams = new Object[] { "string", new Object(), 5L, Optional.empty() };
Object[] receivedParams = new Object[givenParams.length];

assertThatQuery( index.query()
Expand All @@ -60,7 +62,7 @@ public void param() {
receivedParams[0] = context.param( "param1" );
receivedParams[1] = context.param( "param2" );
receivedParams[2] = context.param( "param3" );
receivedParams[3] = context.param( "param5" );
receivedParams[3] = context.paramOptional( "param5" );
return context.predicate().matchAll().toPredicate();
} ) ) )
.hasDocRefHitsAnyOrder( index.typeName(), DOCUMENT_1 );
Expand All @@ -70,13 +72,13 @@ public void param() {

@Test
public void param_absent() {
Object[] expectedParams = new Object[] { null };
Object[] expectedParams = new Object[] { Optional.empty() };
Object[] actualsParams = new Object[1];

assertThatQuery( index.query()
.where( f -> f.named( "stub-predicate" )
.param( "impl", (NamedPredicateProvider) context -> {
actualsParams[0] = context.param( "absent" );
actualsParams[0] = context.paramOptional( "absent" );
return context.predicate().matchAll().toPredicate();
} ) ) )
.hasDocRefHitsAnyOrder( index.typeName(), DOCUMENT_1 );
Expand Down

0 comments on commit 167be60

Please sign in to comment.