Class SearchQueryRenderer

  • All Implemented Interfaces:
    SearchQueryVisitor<QueryData>

    public class SearchQueryRenderer
    extends Object
    implements SearchQueryVisitor<QueryData>
    Used to render the domain model into a physical, executable query modeled as a Select statement. The domain model knows about resources and parameters. This class is used to translate the logical structure of the query into a physical one, using the correct table names, join predicates and filter expressions.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      QueryData addCanonicalParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given canonical parameter
      QueryData addChained​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter currentParm)
      Add a chain subquery element as part of a chained parameter search
      QueryData addCompositeParam​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Add a composite query parameter filter to the query
      QueryData addCompositeParam​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter queryParm, boolean isMissing)
      Add a composite query which only tests missing/not missing, not the actual parameter value
      QueryData addDateParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given date parameter
      void addFilter​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter currentParm)
      Add a filter predicate to the given chained sub-query element.
      protected void addIdFilter​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Add a filter on the LOGICAL_ID for the given query parameter values
      QueryData addIncludeFilter​(QueryData queryData, com.ibm.fhir.search.parameters.InclusionParameter inclusionParm, List<Long> logicalResourceIds)  
      QueryData addInclusionParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Special case to handle inclusion related to compartment-based searches
      QueryData addLocationParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given location (lat/lng) param
      QueryData addLocationPosition​(QueryData queryData, List<com.ibm.fhir.search.parameters.QueryParameter> queryParameters)  
      QueryData addMissingParam​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter queryParm, boolean isMissing)
      Add a missing (NOT EXISTS) parameter clause to the query
      QueryData addNumberParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given number parameter
      QueryData addPagination​(QueryData queryData)
      Add pagination (LIMIT/OFFSET) to the query
      QueryData addQuantityParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given quantity parameter
      QueryData addReferenceParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given reference parameter
      QueryData addReverseChained​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter currentParm)
      Add a reverse chain subquery element as part of a chained parameter search
      QueryData addRevIncludeFilter​(QueryData queryData, com.ibm.fhir.search.parameters.InclusionParameter inclusionParm, List<Long> logicalResourceIds)  
      QueryData addSecurityParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given security query parameter
      QueryData addSorting​(QueryData queryData, String lrAlias)
      Add sorting (order by) to the query
      void addSortParam​(QueryData queryData, String code, com.ibm.fhir.search.SearchConstants.Type type, com.ibm.fhir.search.sort.Sort.Direction direction)
      Add the given sort parameter to the sort query
      QueryData addStringParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given string parameter
      QueryData addTagParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given tag query parameter
      QueryData addTokenParam​(QueryData queryData, String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Filter the query using the given parameter id and token value
      QueryData addWholeSystemDataFilter​(QueryData queryData, String resourceType, List<Long> logicalResourceIds)  
      QueryData addWholeSystemResourceTypeFilter​(QueryData queryData, List<Integer> resourceTypeIds)  
      QueryData addWholeSystemSorting​(QueryData queryData, List<DomainSortParameter> sortParms, String lrAlias)
      Add sorting (order by) for whole-system search to the query
      QueryData countRoot​(String rootResourceType)
      The root query (select statement) for a count query
      QueryData dataRoot​(String rootResourceType)
      The root query (select statement) for the data query
      protected int getCanonicalId​(String canonicalValue)
      Get the id for the given canonicalValue (cache lookup).
      protected int getCodeSystemId​(String codeSystemName)
      Get the id for the given code system name (cache lookup)
      protected Long getCommonTokenValueId​(String system, String code)
      Get the common token value id matching the unique tuple {system, code}
      protected List<Long> getCommonTokenValueIdList​(String code)
      Get a list of common token values matching the given code
      protected Set<Long> getCommonTokenValueIds​(Collection<CommonTokenValue> tokenValues)
      Get the common token value ids for the passed list of token values {system, code}.
      protected com.ibm.fhir.database.utils.query.WhereFragment getDateFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Add a filter predicate to the given exists sub-query
      protected com.ibm.fhir.database.utils.query.WhereFragment getFilterPredicate​(QueryData queryData, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Get a simple filter predicate which can be used in the WHERE clause of a search query.
      protected com.ibm.fhir.database.utils.query.WhereFragment getLocationFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Add a filter predicate to the given exists sub-query
      protected String getLRAlias​(int aliasIndex)
      Get the string to use as a logical resource alias for the given aliasIndex value
      protected int getNextAliasIndex()
      Get the next index number to use as a parameter table alias
      protected com.ibm.fhir.database.utils.query.WhereFragment getNumberFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Get a filter predicate for the given number query parameter
      protected com.ibm.fhir.database.utils.query.Operator getOperator​(com.ibm.fhir.search.parameters.QueryParameter queryParameter)
      Get the operator we need to use for matching values for this parameter
      protected com.ibm.fhir.database.utils.query.Operator getOperator​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String defaultOverride)
      Map the Modifier in the passed Parameter to a supported query operator.
      protected String getParamAlias​(int aliasIndex)
      Get the string to use as a parameter table alias for the given aliasIndex value
      QueryData getParameterBaseQuery​(QueryData parent)
      Get the join to which we want to attach all the parameter tables.
      protected int getParameterNameId​(String parameterName)
      Get the id for the given parameter name (cache lookup)
      protected com.ibm.fhir.database.utils.query.WhereFragment getQuantityFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Add a filter predicate to the given exists sub-query
      protected com.ibm.fhir.database.utils.query.WhereFragment getReferenceFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Create a filter predicate for the given reference query parameter
      protected String getSortParameterTableName​(String resourceType, String code, com.ibm.fhir.search.SearchConstants.Type type)
      Returns the name of the database table corresponding to the code and type of the passed sort parameter.
      protected com.ibm.fhir.database.utils.query.WhereFragment getStringFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Add a filter expression to the given parameter sub-query (which is used as an EXISTS clause)
      protected com.ibm.fhir.database.utils.query.WhereFragment getTokenFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramAlias)
      Get the filter predicate for the given token query parameter.
      protected String getTokenParamTable​(com.ibm.fhir.database.utils.query.node.ExpNode filter, String resourceType, String paramAlias)
      Compute the token parameter table name we want to use to join with.
      QueryData includeRoot​(String rootResourceType)
      The root query (select statement) for the include query.
      QueryData joinResources​(QueryData queryData)
      Finish the data query by wrapping the root and joining the resources table
      protected int nullCheck​(Integer value)
      Use -1 as a simple substitute for null literal ids because we know -1 will never exist as a value in the database (for fields populated by sequence values).
      protected long nullCheck​(Long value)
      Use -1 as a simple substitute for null literal ids because we know -1 will never exist as a value in the database (for fields populated by sequence values).
      protected com.ibm.fhir.database.utils.query.WhereFragment paramFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm, String paramTableAlias)
      Get the filter predicate expression for the given query parameter taking into account its type, modifiers etc.
      String paramValuesColumnName​(com.ibm.fhir.search.SearchConstants.Type paramType)
      Get the column name to use for the given paramType
      String paramValuesTableName​(String resourceType, com.ibm.fhir.search.parameters.QueryParameter queryParm)
      Get the parameter values table name (e.g.
      protected String resourceLogicalResources​(String resourceType)
      Get the table name for the xx_logical_resources table where xx is the resource type name
      protected String resourceResources​(String resourceType)
      Get the table name for the xx_resources table where xx is the resource type name
      QueryData sortRoot​(String rootResourceType)
      The root of the FHIR search sort query
      QueryData wholeSystemDataRoot​(String rootResourceType)
      The root of the FHIR whole-system data search query
      QueryData wholeSystemFilterRoot()
      The root of the FHIR whole-system filter search query
      QueryData wrapInclude​(QueryData query)  
      QueryData wrapWholeSystem​(List<QueryData> queries, boolean isCountQuery)
      The wrapper for whole-system search
    • Constructor Detail

      • SearchQueryRenderer

        public SearchQueryRenderer​(JDBCIdentityCache identityCache,
                                   int rowOffset,
                                   int rowsPerPage)
        Public constructor
        Parameters:
        identityCache -
        rowOffset -
        rowsPerPage -
    • Method Detail

      • getNextAliasIndex

        protected int getNextAliasIndex()
        Get the next index number to use as a parameter table alias
        Returns:
      • resourceLogicalResources

        protected String resourceLogicalResources​(String resourceType)
        Get the table name for the xx_logical_resources table where xx is the resource type name
        Parameters:
        resourceType -
        Returns:
        the table name
      • resourceResources

        protected String resourceResources​(String resourceType)
        Get the table name for the xx_resources table where xx is the resource type name
        Parameters:
        resourceType -
        Returns:
      • getParameterNameId

        protected int getParameterNameId​(String parameterName)
                                  throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the id for the given parameter name (cache lookup)
        Parameters:
        parameterName -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getCommonTokenValueId

        protected Long getCommonTokenValueId​(String system,
                                             String code)
                                      throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the common token value id matching the unique tuple {system, code}
        Parameters:
        system -
        code -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getCommonTokenValueIds

        protected Set<Long> getCommonTokenValueIds​(Collection<CommonTokenValue> tokenValues)
                                            throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the common token value ids for the passed list of token values {system, code}.
        Parameters:
        tokenValues -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getCommonTokenValueIdList

        protected List<Long> getCommonTokenValueIdList​(String code)
                                                throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get a list of common token values matching the given code
        Parameters:
        code -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getCodeSystemId

        protected int getCodeSystemId​(String codeSystemName)
                               throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the id for the given code system name (cache lookup)
        Parameters:
        codeSystemName -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getCanonicalId

        protected int getCanonicalId​(String canonicalValue)
                              throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the id for the given canonicalValue (cache lookup).
        Parameters:
        canonicalValue -
        Returns:
        the database id, or -1 if the value does not exist
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • includeRoot

        public QueryData includeRoot​(String rootResourceType)
        Description copied from interface: SearchQueryVisitor
        The root query (select statement) for the include query. This query is different than the data root because of the need to support version references for _include searches. For this, we join: xx_RESOURCES.LOGICAL_RESOURCE_ID = xx_LOGICAL_RESOURCES.LOGICAL_RESOURCE_ID and allow the filter to specify the version_id constraint. However, we still need to assert that the resource has not been deleted, so we keep: xx_LOGICAL_RESOURCES.IS_DELETED = 'N'
        Specified by:
        includeRoot in interface SearchQueryVisitor<QueryData>
        Returns:
      • getTokenFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getTokenFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                 String paramAlias)
                                                                          throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the filter predicate for the given token query parameter.
        Parameters:
        queryParm - the token query parameter
        paramAlias - the alias used for the token values table
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getStringFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getStringFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                  String paramAlias)
                                                                           throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Add a filter expression to the given parameter sub-query (which is used as an EXISTS clause)
        Parameters:
        paramExists - the query statement to which we need to add the filter predicate
        queryParm - the query parameter for which we need to compute and add the filter predicate
        paramAlias - the alias for the query parameter table
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • paramValuesTableName

        public String paramValuesTableName​(String resourceType,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm)
        Get the parameter values table name (e.g. Patient_STR_VALUES) for the given resource and parameter type. Note that this is now different from the original QuerySegmentAggregator implementation - it does not differentiate on chaining...that is left up to the building logic.
        Parameters:
        resourceType -
        paramType -
        Returns:
      • paramValuesColumnName

        public String paramValuesColumnName​(com.ibm.fhir.search.SearchConstants.Type paramType)
        Get the column name to use for the given paramType
        Parameters:
        paramType -
        Returns:
      • getFilterPredicate

        protected com.ibm.fhir.database.utils.query.WhereFragment getFilterPredicate​(QueryData queryData,
                                                                                     com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                                                              throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get a simple filter predicate which can be used in the WHERE clause of a search query. This is used at the "leaf level" of parameter processing, where the queryParm relates to a single parameter (i.e. it is the caller's responsibility to handle chaining and other more complex behavior.
        Parameters:
        queryData -
        queryParm -
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addIdFilter

        protected void addIdFilter​(QueryData queryData,
                                   String resourceType,
                                   com.ibm.fhir.search.parameters.QueryParameter queryParm)
                            throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Add a filter on the LOGICAL_ID for the given query parameter values
        Parameters:
        queryData -
        resourceType -
        queryParm -
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getNumberFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getNumberFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                  String paramAlias)
                                                                           throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get a filter predicate for the given number query parameter
        Parameters:
        queryParm -
        paramAlias -
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getQuantityFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getQuantityFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                    String paramAlias)
                                                                             throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Add a filter predicate to the given exists sub-query
        Parameters:
        queryParm -
        paramAlias -
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getDateFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getDateFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                String paramAlias)
        Add a filter predicate to the given exists sub-query
        Parameters:
        queryParm -
        paramAlias -
      • getLocationFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getLocationFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                    String paramAlias)
                                                                             throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Add a filter predicate to the given exists sub-query
        Parameters:
        queryParm -
        paramAlias -
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getParamAlias

        protected String getParamAlias​(int aliasIndex)
        Get the string to use as a parameter table alias for the given aliasIndex value
        Parameters:
        aliasIndex -
        Returns:
      • getLRAlias

        protected String getLRAlias​(int aliasIndex)
        Get the string to use as a logical resource alias for the given aliasIndex value
        Parameters:
        aliasIndex -
        Returns:
      • getTokenParamTable

        protected String getTokenParamTable​(com.ibm.fhir.database.utils.query.node.ExpNode filter,
                                            String resourceType,
                                            String paramAlias)
        Compute the token parameter table name we want to use to join with. This method inspects the content of the given filter ExpNode. If the filter contains a reference to the TOKEN_VALUE column, the returned table name will be based on xx_TOKEN_VALUES_V, otherwise it will be based on xx_RESOURCE_TOKEN_REFS. The latter is preferable because it eliminates an unnecessary join, improves cardinality estimation and (usually) results in a better execution plan.
        Parameters:
        filter -
        resourceType -
        paramAlias -
        Returns:
      • getReferenceFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment getReferenceFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                                     String paramAlias)
                                                                              throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Create a filter predicate for the given reference query parameter
        Parameters:
        queryParm -
        paramAlias -
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • nullCheck

        protected int nullCheck​(Integer value)
        Use -1 as a simple substitute for null literal ids because we know -1 will never exist as a value in the database (for fields populated by sequence values).
        Parameters:
        value -
        Returns:
      • nullCheck

        protected long nullCheck​(Long value)
        Use -1 as a simple substitute for null literal ids because we know -1 will never exist as a value in the database (for fields populated by sequence values).
        Parameters:
        value -
        Returns:
      • getOperator

        protected com.ibm.fhir.database.utils.query.Operator getOperator​(com.ibm.fhir.search.parameters.QueryParameter queryParameter)
        Get the operator we need to use for matching values for this parameter
        Parameters:
        queryParameter -
        Returns:
      • getOperator

        protected com.ibm.fhir.database.utils.query.Operator getOperator​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                         String defaultOverride)
        Map the Modifier in the passed Parameter to a supported query operator. If the mapping results in the default operator, override the default operator with the passed operator if the passed operator is not null.
        Parameters:
        queryParm - - A valid query Parameter.
        defaultOverride - - An operator that should override the default operator.
        Returns:
        A supported operator.
      • paramFilter

        protected com.ibm.fhir.database.utils.query.WhereFragment paramFilter​(com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                                                              String paramTableAlias)
                                                                       throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Get the filter predicate expression for the given query parameter taking into account its type, modifiers etc.
        Parameters:
        paramTableAlias -
        queryParm -
        Returns:
        a valid expression
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addLocationPosition

        public QueryData addLocationPosition​(QueryData queryData,
                                             List<com.ibm.fhir.search.parameters.QueryParameter> queryParameters)
                                      throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Specified by:
        addLocationPosition in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addInclusionParam

        public QueryData addInclusionParam​(QueryData queryData,
                                           String resourceType,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Special case to handle inclusion related to compartment-based searches
        Specified by:
        addInclusionParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addIncludeFilter

        public QueryData addIncludeFilter​(QueryData queryData,
                                          com.ibm.fhir.search.parameters.InclusionParameter inclusionParm,
                                          List<Long> logicalResourceIds)
                                   throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Specified by:
        addIncludeFilter in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addRevIncludeFilter

        public QueryData addRevIncludeFilter​(QueryData queryData,
                                             com.ibm.fhir.search.parameters.InclusionParameter inclusionParm,
                                             List<Long> logicalResourceIds)
                                      throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Specified by:
        addRevIncludeFilter in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addTokenParam

        public QueryData addTokenParam​(QueryData queryData,
                                       String resourceType,
                                       com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given parameter id and token value
        Specified by:
        addTokenParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addTagParam

        public QueryData addTagParam​(QueryData queryData,
                                     String resourceType,
                                     com.ibm.fhir.search.parameters.QueryParameter queryParm)
                              throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given tag query parameter
        Specified by:
        addTagParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addSecurityParam

        public QueryData addSecurityParam​(QueryData queryData,
                                          String resourceType,
                                          com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                   throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given security query parameter
        Specified by:
        addSecurityParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addStringParam

        public QueryData addStringParam​(QueryData queryData,
                                        String resourceType,
                                        com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                 throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given string parameter
        Specified by:
        addStringParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addCanonicalParam

        public QueryData addCanonicalParam​(QueryData queryData,
                                           String resourceType,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given canonical parameter
        Specified by:
        addCanonicalParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addMissingParam

        public QueryData addMissingParam​(QueryData queryData,
                                         com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                         boolean isMissing)
                                  throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a missing (NOT EXISTS) parameter clause to the query
        Specified by:
        addMissingParam in interface SearchQueryVisitor<QueryData>
        isMissing - true if the condition should be that the parameter does not exist
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addChained

        public QueryData addChained​(QueryData queryData,
                                    com.ibm.fhir.search.parameters.QueryParameter currentParm)
                             throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a chain subquery element as part of a chained parameter search
        Specified by:
        addChained in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addFilter

        public void addFilter​(QueryData queryData,
                              String resourceType,
                              com.ibm.fhir.search.parameters.QueryParameter currentParm)
                       throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a filter predicate to the given chained sub-query element. This must be the last element of the chain.
        Specified by:
        addFilter in interface SearchQueryVisitor<QueryData>
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addReverseChained

        public QueryData addReverseChained​(QueryData queryData,
                                           com.ibm.fhir.search.parameters.QueryParameter currentParm)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a reverse chain subquery element as part of a chained parameter search
        Specified by:
        addReverseChained in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addNumberParam

        public QueryData addNumberParam​(QueryData queryData,
                                        String resourceType,
                                        com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                 throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given number parameter
        Specified by:
        addNumberParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addQuantityParam

        public QueryData addQuantityParam​(QueryData queryData,
                                          String resourceType,
                                          com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                   throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given quantity parameter
        Specified by:
        addQuantityParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addDateParam

        public QueryData addDateParam​(QueryData queryData,
                                      String resourceType,
                                      com.ibm.fhir.search.parameters.QueryParameter queryParm)
                               throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given date parameter
        Specified by:
        addDateParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addLocationParam

        public QueryData addLocationParam​(QueryData queryData,
                                          String resourceType,
                                          com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                   throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given location (lat/lng) param
        Specified by:
        addLocationParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addReferenceParam

        public QueryData addReferenceParam​(QueryData queryData,
                                           String resourceType,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Filter the query using the given reference parameter
        Specified by:
        addReferenceParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addCompositeParam

        public QueryData addCompositeParam​(QueryData queryData,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a composite query parameter filter to the query
        Specified by:
        addCompositeParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addCompositeParam

        public QueryData addCompositeParam​(QueryData queryData,
                                           com.ibm.fhir.search.parameters.QueryParameter queryParm,
                                           boolean isMissing)
                                    throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add a composite query which only tests missing/not missing, not the actual parameter value
        Specified by:
        addCompositeParam in interface SearchQueryVisitor<QueryData>
        Returns:
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • addSortParam

        public void addSortParam​(QueryData queryData,
                                 String code,
                                 com.ibm.fhir.search.SearchConstants.Type type,
                                 com.ibm.fhir.search.sort.Sort.Direction direction)
                          throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Description copied from interface: SearchQueryVisitor
        Add the given sort parameter to the sort query
        Specified by:
        addSortParam in interface SearchQueryVisitor<QueryData>
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException
      • getSortParameterTableName

        protected String getSortParameterTableName​(String resourceType,
                                                   String code,
                                                   com.ibm.fhir.search.SearchConstants.Type type)
                                            throws com.ibm.fhir.persistence.exception.FHIRPersistenceException
        Returns the name of the database table corresponding to the code and type of the passed sort parameter.
        Parameters:
        code - A SortParameter code
        type - A SortParameter type
        Returns:
        String - A database table name
        Throws:
        com.ibm.fhir.persistence.exception.FHIRPersistenceException