Class AbstractSqlLikeQueryBuilder
- java.lang.Object
-
- io.micronaut.data.model.query.builder.AbstractSqlLikeQueryBuilder
-
- All Implemented Interfaces:
QueryBuilder
- Direct Known Subclasses:
JpaQueryBuilder
,SqlQueryBuilder
public abstract class AbstractSqlLikeQueryBuilder extends java.lang.Object implements QueryBuilder
An abstract class for builders that build SQL-like queries.- Since:
- 1.0.0
- Author:
- graemerocher
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
AbstractSqlLikeQueryBuilder.CriteriaContext
A criterion context.protected static interface
AbstractSqlLikeQueryBuilder.CriterionHandler<T extends QueryModel.Criterion>
A criterion handler.static class
AbstractSqlLikeQueryBuilder.Placeholder
Represents a placeholder in query.protected static class
AbstractSqlLikeQueryBuilder.QueryPosition
protected class
AbstractSqlLikeQueryBuilder.QueryPropertyPath
Represents a path to a property.protected class
AbstractSqlLikeQueryBuilder.QueryState
The state of the query.
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.String
ALIAS_REPLACE
protected static java.lang.String
ALIAS_REPLACE_QUOTED
protected static java.lang.String
AND
protected static java.lang.String
AS_CLAUSE
protected static java.lang.String
AVG
protected static char
CLOSE_BRACKET
protected static char
COMMA
protected static java.lang.String
COUNT_DISTINCT
protected static java.lang.String
DELETE_CLAUSE
protected static java.lang.String
DISTINCT
protected static char
DOT
protected static java.lang.String
EQUALS
protected static java.lang.String
EQUALS_FALSE
protected static java.lang.String
EQUALS_TRUE
protected static java.lang.String
FROM_CLAUSE
protected static java.lang.String
FUNCTION_COUNT
protected static java.lang.String
GREATER_THAN
protected static java.lang.String
GREATER_THAN_OR_EQUALS
protected static java.lang.String
IS_EMPTY
protected static java.lang.String
IS_NOT_EMPTY
protected static java.lang.String
IS_NOT_NULL
protected static java.lang.String
IS_NULL
protected static java.lang.String
LESS_THAN
protected static java.lang.String
LESS_THAN_OR_EQUALS
protected static java.lang.String
LOGICAL_AND
protected static java.lang.String
LOGICAL_OR
protected static java.lang.String
MAX
protected static java.lang.String
MIN
protected static java.lang.String
NOT
protected static java.lang.String
NOT_EQUALS
protected static char
OPEN_BRACKET
protected static java.lang.String
OR
static java.lang.String
ORDER_BY_CLAUSE
protected java.util.Map<java.lang.Class,AbstractSqlLikeQueryBuilder.CriterionHandler>
queryHandlers
protected static java.lang.String
SELECT_CLAUSE
protected static char
SPACE
protected static java.lang.String
SUM
protected static java.lang.String
UPDATE_CLAUSE
protected static java.lang.String
WHERE_CLAUSE
-
Fields inherited from interface io.micronaut.data.model.query.builder.QueryBuilder
IN_VARIABLES_PATTERN, VARIABLE_PATTERN
-
-
Constructor Summary
Constructors Constructor Description AbstractSqlLikeQueryBuilder()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected <T extends QueryModel.Criterion>
voidaddCriterionHandler(java.lang.Class<T> clazz, AbstractSqlLikeQueryBuilder.CriterionHandler<T> handler)
Adds criterion handler.protected java.lang.StringBuilder
appendDeleteClause(java.lang.StringBuilder queryString)
Append the delete clause.protected void
appendForUpdate(AbstractSqlLikeQueryBuilder.QueryPosition queryPosition, QueryModel query, java.lang.StringBuilder queryBuilder)
Adds "forUpdate" pisimmistic locking.protected abstract void
appendProjectionRowCount(java.lang.StringBuilder queryString, java.lang.String logicalName)
Appends a row count projection to the query string.protected void
appendTransformed(java.lang.StringBuilder sb, java.lang.String transformed, java.lang.Runnable appendParameter)
Appends custom query part.protected void
appendUpdateSetParameter(java.lang.StringBuilder sb, java.lang.String alias, PersistentProperty prop, java.lang.Runnable appendParameter)
Appends the SET=? call to the query string.protected java.lang.String
asLiteral(java.lang.Object value)
Convert the literal value to it's SQL representation.protected java.lang.String
asPath(java.util.List<Association> associations, PersistentProperty property)
Join associations and property as path.QueryResult
buildDelete(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryModel query)
Encode the given query into the encoded query instance.protected abstract java.lang.String[]
buildJoin(java.lang.String alias, JoinPath joinPath, java.lang.String joinType, java.lang.StringBuilder stringBuilder, java.util.Map<java.lang.String,java.lang.String> appliedJoinPaths, AbstractSqlLikeQueryBuilder.QueryState queryState)
Build a join expression for the given alias, association, join type and builder.QueryResult
buildOrderBy(PersistentEntity entity, Sort sort)
Encode the given query into the encoded query instance.QueryResult
buildOrderBy(java.lang.String query, PersistentEntity entity, Sort sort)
Encode the given query into the encoded query instance.QueryResult
buildQuery(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryModel query)
Encode the given query for the passed annotation metadata and query.QueryResult
buildUpdate(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryModel query, java.util.List<java.lang.String> propertiesToUpdate)
Encode the given query into the encoded query instance.QueryResult
buildUpdate(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, QueryModel query, java.util.Map<java.lang.String,java.lang.Object> propertiesToUpdate)
Encode the given query into the encoded query instance.protected abstract boolean
computePropertyPaths()
Whether property path expressions require computation by the implementation.protected void
concat(java.lang.StringBuilder writer, java.util.Collection<java.lang.Runnable> partsWriters)
protected abstract AbstractSqlLikeQueryBuilder.Placeholder
formatParameter(int index)
Format the parameter at the given index.protected java.lang.String
getAliasName(PersistentEntity entity)
Get an alias name for the given entity.java.lang.String
getAliasName(JoinPath joinPath)
Get the alias name.protected abstract java.lang.String
getColumnName(PersistentProperty persistentProperty)
Get the column name for the given property.protected java.util.Optional<java.lang.String>
getDataTransformerReadValue(java.lang.String alias, PersistentProperty prop)
Returns transformed value if the data transformer id defined.protected java.util.Optional<java.lang.String>
getDataTransformerWriteValue(java.lang.String alias, PersistentProperty prop)
Returns transformed value if the data transformer id defined.protected Dialect
getDialect()
Get dialect.protected java.lang.String
getPathOnlyAliasName(JoinPath joinPath)
Get the alias name for just the join path.protected java.lang.String
getTableAsKeyword()
Get the AS keyword to use for table aliases.protected abstract java.lang.String
getTableName(PersistentEntity entity)
Get the table name for the given entity.protected java.lang.String
getUnescapedTableName(PersistentEntity entity)
Get the table name for the given entity.protected void
handleSubQuery(AbstractSqlLikeQueryBuilder.CriteriaContext ctx, QueryModel.SubqueryCriterion subqueryCriterion, java.lang.String comparisonExpression)
For handling subqueries.protected abstract boolean
isAliasForBatch()
Should aliases be used in batch statements.protected boolean
isExpandEmbedded()
Should embedded queries by expanded by the implementation.protected java.lang.String
quote(java.lang.String persistedName)
Quote a column name for the dialect.abstract java.lang.String
resolveJoinType(Join.Type jt)
Resolves the join type.protected abstract void
selectAllColumns(PersistentEntity entity, java.lang.String alias, java.lang.StringBuilder queryBuffer)
Selects all columns for the given entity and alias.protected abstract void
selectAllColumns(AbstractSqlLikeQueryBuilder.QueryState queryState, java.lang.StringBuilder queryBuffer)
Obtain the string that selects all columns from the entity.protected void
selectAllColumnsFromJoinPaths(AbstractSqlLikeQueryBuilder.QueryState queryState, java.lang.StringBuilder queryBuffer, java.util.Collection<JoinPath> allPaths, java.util.Map<JoinPath,java.lang.String> joinAliasOverride)
protected boolean
shouldEscape(PersistentEntity entity)
Whether queries should be escaped for the given entity.protected void
traversePersistentProperties(PersistentEntity persistentEntity, boolean includeIdentity, boolean includeVersion, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.protected void
traversePersistentProperties(PersistentEntity persistentEntity, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.protected void
traversePersistentProperties(PersistentProperty property, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.micronaut.data.model.query.builder.QueryBuilder
buildDelete, buildInsert, buildPagination, buildQuery, buildUpdate, buildUpdate, shouldAliasProjections, supportsForUpdate
-
-
-
-
Field Detail
-
ORDER_BY_CLAUSE
public static final java.lang.String ORDER_BY_CLAUSE
- See Also:
- Constant Field Values
-
SELECT_CLAUSE
protected static final java.lang.String SELECT_CLAUSE
- See Also:
- Constant Field Values
-
AS_CLAUSE
protected static final java.lang.String AS_CLAUSE
- See Also:
- Constant Field Values
-
FROM_CLAUSE
protected static final java.lang.String FROM_CLAUSE
- See Also:
- Constant Field Values
-
WHERE_CLAUSE
protected static final java.lang.String WHERE_CLAUSE
- See Also:
- Constant Field Values
-
COMMA
protected static final char COMMA
- See Also:
- Constant Field Values
-
CLOSE_BRACKET
protected static final char CLOSE_BRACKET
- See Also:
- Constant Field Values
-
OPEN_BRACKET
protected static final char OPEN_BRACKET
- See Also:
- Constant Field Values
-
SPACE
protected static final char SPACE
- See Also:
- Constant Field Values
-
DOT
protected static final char DOT
- See Also:
- Constant Field Values
-
NOT
protected static final java.lang.String NOT
- See Also:
- Constant Field Values
-
AND
protected static final java.lang.String AND
- See Also:
- Constant Field Values
-
LOGICAL_AND
protected static final java.lang.String LOGICAL_AND
- See Also:
- Constant Field Values
-
UPDATE_CLAUSE
protected static final java.lang.String UPDATE_CLAUSE
- See Also:
- Constant Field Values
-
DELETE_CLAUSE
protected static final java.lang.String DELETE_CLAUSE
- See Also:
- Constant Field Values
-
OR
protected static final java.lang.String OR
- See Also:
- Constant Field Values
-
LOGICAL_OR
protected static final java.lang.String LOGICAL_OR
- See Also:
- Constant Field Values
-
FUNCTION_COUNT
protected static final java.lang.String FUNCTION_COUNT
- See Also:
- Constant Field Values
-
AVG
protected static final java.lang.String AVG
- See Also:
- Constant Field Values
-
DISTINCT
protected static final java.lang.String DISTINCT
- See Also:
- Constant Field Values
-
SUM
protected static final java.lang.String SUM
- See Also:
- Constant Field Values
-
MIN
protected static final java.lang.String MIN
- See Also:
- Constant Field Values
-
MAX
protected static final java.lang.String MAX
- See Also:
- Constant Field Values
-
COUNT_DISTINCT
protected static final java.lang.String COUNT_DISTINCT
- See Also:
- Constant Field Values
-
IS_NOT_NULL
protected static final java.lang.String IS_NOT_NULL
- See Also:
- Constant Field Values
-
IS_EMPTY
protected static final java.lang.String IS_EMPTY
- See Also:
- Constant Field Values
-
IS_NOT_EMPTY
protected static final java.lang.String IS_NOT_EMPTY
- See Also:
- Constant Field Values
-
IS_NULL
protected static final java.lang.String IS_NULL
- See Also:
- Constant Field Values
-
EQUALS_TRUE
protected static final java.lang.String EQUALS_TRUE
- See Also:
- Constant Field Values
-
EQUALS_FALSE
protected static final java.lang.String EQUALS_FALSE
- See Also:
- Constant Field Values
-
GREATER_THAN_OR_EQUALS
protected static final java.lang.String GREATER_THAN_OR_EQUALS
- See Also:
- Constant Field Values
-
LESS_THAN_OR_EQUALS
protected static final java.lang.String LESS_THAN_OR_EQUALS
- See Also:
- Constant Field Values
-
LESS_THAN
protected static final java.lang.String LESS_THAN
- See Also:
- Constant Field Values
-
GREATER_THAN
protected static final java.lang.String GREATER_THAN
- See Also:
- Constant Field Values
-
EQUALS
protected static final java.lang.String EQUALS
- See Also:
- Constant Field Values
-
NOT_EQUALS
protected static final java.lang.String NOT_EQUALS
- See Also:
- Constant Field Values
-
ALIAS_REPLACE
protected static final java.lang.String ALIAS_REPLACE
- See Also:
- Constant Field Values
-
ALIAS_REPLACE_QUOTED
protected static final java.lang.String ALIAS_REPLACE_QUOTED
- See Also:
- Constant Field Values
-
queryHandlers
protected final java.util.Map<java.lang.Class,AbstractSqlLikeQueryBuilder.CriterionHandler> queryHandlers
-
-
Method Detail
-
getDialect
protected Dialect getDialect()
Get dialect.- Returns:
- dialect
-
asLiteral
@NonNull protected java.lang.String asLiteral(@Nullable java.lang.Object value)
Convert the literal value to it's SQL representation.- Parameters:
value
- The literal value- Returns:
- converter value
-
concat
protected void concat(java.lang.StringBuilder writer, java.util.Collection<java.lang.Runnable> partsWriters)
- Parameters:
writer
- The writerpartsWriters
- The parts writers
-
buildQuery
public QueryResult buildQuery(@NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull QueryModel query)
Description copied from interface:QueryBuilder
Encode the given query for the passed annotation metadata and query.- Specified by:
buildQuery
in interfaceQueryBuilder
- Parameters:
annotationMetadata
- The annotation metadataquery
- The query model- Returns:
- The query result
-
getTableName
protected abstract java.lang.String getTableName(PersistentEntity entity)
Get the table name for the given entity.- Parameters:
entity
- The entity- Returns:
- The table name
-
getUnescapedTableName
protected java.lang.String getUnescapedTableName(PersistentEntity entity)
Get the table name for the given entity.- Parameters:
entity
- The entity- Returns:
- The table name
-
getAliasName
protected java.lang.String getAliasName(PersistentEntity entity)
Get an alias name for the given entity.- Parameters:
entity
- The entity- Returns:
- The alias name
-
getAliasName
public java.lang.String getAliasName(JoinPath joinPath)
Get the alias name.- Parameters:
joinPath
- The join path- Returns:
- The alias
-
getPathOnlyAliasName
@NonNull protected java.lang.String getPathOnlyAliasName(JoinPath joinPath)
Get the alias name for just the join path.- Parameters:
joinPath
- The join path- Returns:
- The alias
-
buildJoin
protected abstract java.lang.String[] buildJoin(java.lang.String alias, JoinPath joinPath, java.lang.String joinType, java.lang.StringBuilder stringBuilder, java.util.Map<java.lang.String,java.lang.String> appliedJoinPaths, AbstractSqlLikeQueryBuilder.QueryState queryState)
Build a join expression for the given alias, association, join type and builder.- Parameters:
alias
- The aliasjoinPath
- The join pathjoinType
- The join type stringstringBuilder
- The target builderappliedJoinPaths
- The applied joins pathsqueryState
- The query state- Returns:
- An array representing the aliases for each join association in the specified join path
-
getColumnName
protected abstract java.lang.String getColumnName(PersistentProperty persistentProperty)
Get the column name for the given property.- Parameters:
persistentProperty
- The property- Returns:
- The column name
-
selectAllColumns
protected abstract void selectAllColumns(AbstractSqlLikeQueryBuilder.QueryState queryState, java.lang.StringBuilder queryBuffer)
Obtain the string that selects all columns from the entity.- Parameters:
queryState
- The query statequeryBuffer
-
-
selectAllColumns
protected abstract void selectAllColumns(PersistentEntity entity, java.lang.String alias, java.lang.StringBuilder queryBuffer)
Selects all columns for the given entity and alias.- Parameters:
entity
- The entityalias
- The aliasqueryBuffer
- The buffer to append the columns
-
selectAllColumnsFromJoinPaths
@Internal protected void selectAllColumnsFromJoinPaths(AbstractSqlLikeQueryBuilder.QueryState queryState, java.lang.StringBuilder queryBuffer, java.util.Collection<JoinPath> allPaths, @Nullable java.util.Map<JoinPath,java.lang.String> joinAliasOverride)
-
shouldEscape
protected boolean shouldEscape(@NonNull PersistentEntity entity)
Whether queries should be escaped for the given entity.- Parameters:
entity
- The entity- Returns:
- True if they should be escaped
-
getTableAsKeyword
protected java.lang.String getTableAsKeyword()
Get the AS keyword to use for table aliases.- Returns:
- The AS keyword if any
-
quote
protected java.lang.String quote(java.lang.String persistedName)
Quote a column name for the dialect.- Parameters:
persistedName
- The persisted name.- Returns:
- The quoted name
-
appendProjectionRowCount
protected abstract void appendProjectionRowCount(java.lang.StringBuilder queryString, java.lang.String logicalName)
Appends a row count projection to the query string.- Parameters:
queryString
- The query stringlogicalName
- The alias to the table name
-
appendForUpdate
protected void appendForUpdate(AbstractSqlLikeQueryBuilder.QueryPosition queryPosition, QueryModel query, java.lang.StringBuilder queryBuilder)
Adds "forUpdate" pisimmistic locking.- Parameters:
queryPosition
- The query positionquery
- The queryqueryBuilder
- The builder
-
handleSubQuery
protected void handleSubQuery(AbstractSqlLikeQueryBuilder.CriteriaContext ctx, QueryModel.SubqueryCriterion subqueryCriterion, java.lang.String comparisonExpression)
For handling subqueries.- Parameters:
ctx
- The criteria contextsubqueryCriterion
- The subquery criterioncomparisonExpression
- The comparison expression
-
isExpandEmbedded
protected boolean isExpandEmbedded()
Should embedded queries by expanded by the implementation.- Returns:
- True if they should
-
appendUpdateSetParameter
protected void appendUpdateSetParameter(java.lang.StringBuilder sb, java.lang.String alias, PersistentProperty prop, java.lang.Runnable appendParameter)
Appends the SET=? call to the query string.- Parameters:
sb
- The string builderalias
- The aliasprop
- The propertyappendParameter
- The append parameter action
-
appendTransformed
protected void appendTransformed(java.lang.StringBuilder sb, java.lang.String transformed, java.lang.Runnable appendParameter)
Appends custom query part.- Parameters:
sb
- The string buildertransformed
- The transformed query partappendParameter
- The append parameter action
-
computePropertyPaths
protected abstract boolean computePropertyPaths()
Whether property path expressions require computation by the implementation. In a certain query dialects property paths are supported (such as JPA-QL where you can do select foo.bar) whilst for explicit SQL queries paths like this have to be computed into aliases / column name references.- Returns:
- True if property path computation is required.
-
buildUpdate
public QueryResult buildUpdate(@NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull QueryModel query, @NonNull java.util.List<java.lang.String> propertiesToUpdate)
Description copied from interface:QueryBuilder
Encode the given query into the encoded query instance.- Specified by:
buildUpdate
in interfaceQueryBuilder
- Parameters:
annotationMetadata
- The annotation metadataquery
- The querypropertiesToUpdate
- The property names to update- Returns:
- The encoded query
-
buildUpdate
public QueryResult buildUpdate(@NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull QueryModel query, @NonNull java.util.Map<java.lang.String,java.lang.Object> propertiesToUpdate)
Description copied from interface:QueryBuilder
Encode the given query into the encoded query instance.- Specified by:
buildUpdate
in interfaceQueryBuilder
- Parameters:
annotationMetadata
- The annotation metadataquery
- The querypropertiesToUpdate
- The property names to update- Returns:
- The encoded query
-
buildDelete
public QueryResult buildDelete(@NonNull io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, @NonNull QueryModel query)
Description copied from interface:QueryBuilder
Encode the given query into the encoded query instance.- Specified by:
buildDelete
in interfaceQueryBuilder
- Parameters:
annotationMetadata
- The annotation metadataquery
- The query- Returns:
- The encoded query
-
isAliasForBatch
protected abstract boolean isAliasForBatch()
Should aliases be used in batch statements.- Returns:
- True if they should
-
appendDeleteClause
@NonNull protected java.lang.StringBuilder appendDeleteClause(java.lang.StringBuilder queryString)
Append the delete clause.- Parameters:
queryString
- The query string- Returns:
- The delete clause
-
buildOrderBy
@NonNull public QueryResult buildOrderBy(@NonNull PersistentEntity entity, @NonNull Sort sort)
Description copied from interface:QueryBuilder
Encode the given query into the encoded query instance.- Specified by:
buildOrderBy
in interfaceQueryBuilder
- Parameters:
entity
- The root entitysort
- The sort- Returns:
- The encoded query
-
buildOrderBy
@NonNull public QueryResult buildOrderBy(java.lang.String query, @NonNull PersistentEntity entity, @NonNull Sort sort)
Encode the given query into the encoded query instance.- Parameters:
query
- The queryentity
- The root entitysort
- The sort- Returns:
- The encoded query
-
asPath
protected java.lang.String asPath(java.util.List<Association> associations, PersistentProperty property)
Join associations and property as path.- Parameters:
associations
- The associationsproperty
- The property- Returns:
- joined path
-
traversePersistentProperties
protected void traversePersistentProperties(PersistentProperty property, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.- Parameters:
property
- The property to start traversing fromconsumer
- The function to invoke on every property
-
traversePersistentProperties
protected void traversePersistentProperties(PersistentEntity persistentEntity, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.- Parameters:
persistentEntity
- The persistent entityconsumer
- The function to invoke on every property
-
traversePersistentProperties
protected void traversePersistentProperties(PersistentEntity persistentEntity, boolean includeIdentity, boolean includeVersion, java.util.function.BiConsumer<java.util.List<Association>,PersistentProperty> consumer)
Traverses properties that should be persisted.- Parameters:
persistentEntity
- The persistent entityincludeIdentity
- Should be identifier includedincludeVersion
- Should be version includedconsumer
- The function to invoke on every property
-
getDataTransformerReadValue
protected java.util.Optional<java.lang.String> getDataTransformerReadValue(java.lang.String alias, PersistentProperty prop)
Returns transformed value if the data transformer id defined.- Parameters:
alias
- query table aliasprop
- a property- Returns:
- optional transformed value
-
getDataTransformerWriteValue
protected java.util.Optional<java.lang.String> getDataTransformerWriteValue(java.lang.String alias, PersistentProperty prop)
Returns transformed value if the data transformer id defined.- Parameters:
alias
- query table aliasprop
- a property- Returns:
- optional transformed value
-
formatParameter
protected abstract AbstractSqlLikeQueryBuilder.Placeholder formatParameter(int index)
Format the parameter at the given index.- Parameters:
index
- The parameter- Returns:
- The index
-
resolveJoinType
public abstract java.lang.String resolveJoinType(Join.Type jt)
Resolves the join type.- Parameters:
jt
- The join type- Returns:
- The join type.
-
addCriterionHandler
protected <T extends QueryModel.Criterion> void addCriterionHandler(java.lang.Class<T> clazz, AbstractSqlLikeQueryBuilder.CriterionHandler<T> handler)
Adds criterion handler.- Type Parameters:
T
- The criterion type- Parameters:
clazz
- The handler classhandler
- The handler
-
-