Class PropertyConditionGenerator

java.lang.Object
io.jmix.data.impl.jpql.generator.PropertyConditionGenerator
All Implemented Interfaces:
ConditionGenerator<PropertyCondition>
Direct Known Subclasses:
DynAttrPropertyConditionGenerator, DynModelPropertyConditionGenerator, KeyValuePropertyConditionGenerator

@Component("data_PropertyConditionGenerator") @Order(1000) public class PropertyConditionGenerator extends Object implements ConditionGenerator<PropertyCondition>
  • Field Details

    • metadataTools

      protected MetadataTools metadataTools
    • metadata

      protected Metadata metadata
    • dataProperties

      protected DataProperties dataProperties
    • inIntervalResolver

      protected @Nullable InIntervalParametersResolver inIntervalResolver
    • useInnerJoinInCondition

      @Value("${jmix.eclipselink.use-inner-join-in-condition:false}") protected boolean useInnerJoinInCondition
    • joinAliasPrefix

      @Value("${jmix.eclipselink.condition-join-alias-prefix:cje_}") protected String joinAliasPrefix
  • Constructor Details

    • PropertyConditionGenerator

      @Autowired public PropertyConditionGenerator(MetadataTools metadataTools, Metadata metadata)
  • Method Details

    • setDataProperties

      @Autowired public void setDataProperties(DataProperties dataProperties)
    • setInIntervalResolver

      @Autowired(required=false) public void setInIntervalResolver(InIntervalParametersResolver inIntervalResolver)
    • supports

      public boolean supports(ConditionGenerationContext context)
      Description copied from interface: ConditionGenerator
      Checks whether the condition generator supports the given context.
      Specified by:
      supports in interface ConditionGenerator<PropertyCondition>
      Parameters:
      context - condition generation context
      Returns:
      true if the condition generator supports the given context, or false otherwise
    • generateJoin

      public String generateJoin(ConditionGenerationContext context)
      Description copied from interface: ConditionGenerator
      Returns a JPQL 'join' clause modified according to the given context.
      Specified by:
      generateJoin in interface ConditionGenerator<PropertyCondition>
      Parameters:
      context - condition generation context
      Returns:
      a JPQL 'join' clause modified according to the given context
    • generateWhere

      public String generateWhere(ConditionGenerationContext context)
      Description copied from interface: ConditionGenerator
      Returns a JPQL 'where' clause modified according to the given context.
      Specified by:
      generateWhere in interface ConditionGenerator<PropertyCondition>
      Parameters:
      context - condition generation context
      Returns:
      a JPQL 'where' clause modified according to the given context
    • processParameters

      public Map<String,Object> processParameters(Map<String,Object> parameters, Map<String,Object> queryParameters, PropertyCondition condition, @Nullable String entityName)
      Description copied from interface: ConditionGenerator
      Returns parameters modified according to the given condition.
      Specified by:
      processParameters in interface ConditionGenerator<PropertyCondition>
      Parameters:
      parameters - result parameters
      queryParameters - query parameters
      condition - the condition
      Returns:
      modified parameters
    • generateParameterValue

      public @Nullable Object generateParameterValue(@Nullable Condition condition, @Nullable Object parameterValue, @Nullable String entityName)
      Description copied from interface: ConditionGenerator
      Returns a parameter value modified according to the given condition.
      Specified by:
      generateParameterValue in interface ConditionGenerator<PropertyCondition>
      Parameters:
      condition - a condition
      parameterValue - parameter value
      entityName - entity name
      Returns:
      a modified parameter value
    • generateWhere

      protected String generateWhere(PropertyCondition propertyCondition, String entityAlias, @Nullable String property, boolean isElementCollection)
    • isGeneratedAsSubquery

      protected boolean isGeneratedAsSubquery(MetaClass metaClass, String property)
      Returns true if the condition on the given property path is generated as a self-contained 'exists' subquery instead of a top-level join. This is the case for a path crossing a to-many association or composition (e.g. tags.name): a top-level join would multiply rows of the main query. Paths ending with an element collection keep join-based generation, as well as paths not resolvable in the static metadata (e.g. containing a dynamic attribute).
    • isMatchingEmptyCollection

      protected boolean isMatchingEmptyCollection(PropertyCondition propertyCondition)
      Returns true if the condition must match entities whose to-many collection is empty. With join-based generation such entities produce an all-null left-joined row that satisfies these operations.
    • getLikeEscapeClause

      protected String getLikeEscapeClause(PropertyCondition propertyCondition)
      Returns a trailing ESCAPE clause for LIKE-based operations so that _ and % produced by QueryUtils.escapeForLike(String) are recognised as literals by the database. Empty for non-LIKE operations.
    • getProperty

      protected String getProperty(String property, @Nullable String entityName)
    • isCrossDataStoreReference

      protected boolean isCrossDataStoreReference(String property, @Nullable String entityName)
    • isNegativeComparison

      protected boolean isNegativeComparison(String operation)