protected Query createReplacementQuery()

in cayenne/src/main/java/org/apache/cayenne/query/MappedSelect.java [184:287]


    protected Query createReplacementQuery(EntityResolver resolver) {
        QueryDescriptor descriptor = resolver.getQueryDescriptor(queryName);

        Query query = super.createReplacementQuery(resolver);

        QueryCacheStrategy cacheStrategyOverride = null;

        if (forceNoCache) {
            QueryCacheStrategy cacheStrategy = query.getMetaData(resolver).getCacheStrategy();
            if (QueryCacheStrategy.LOCAL_CACHE == cacheStrategy) {
                cacheStrategyOverride = QueryCacheStrategy.LOCAL_CACHE_REFRESH;
            } else if (QueryCacheStrategy.SHARED_CACHE == cacheStrategy) {
                cacheStrategyOverride = QueryCacheStrategy.SHARED_CACHE_REFRESH;
            }
        }

        switch (descriptor.getType()) {
            case QueryDescriptor.SELECT_QUERY:
                ObjectSelect<?> selectQuery = (ObjectSelect<?>) query;
                if (fetchLimit != null) {
                    selectQuery.limit(fetchLimit);
                }
                if (fetchOffset != null) {
                    selectQuery.offset(fetchOffset);
                }
                if (statementFetchSize != null) {
                    selectQuery.statementFetchSize(statementFetchSize);
                }
                if (pageSize != null) {
                    selectQuery.pageSize(pageSize);
                }
                if (cacheStrategyOverride != null) {
                    selectQuery.setCacheStrategy(cacheStrategyOverride);
                }
                break;
            case QueryDescriptor.SQL_TEMPLATE:
                SQLTemplate sqlTemplate = (SQLTemplate) query;
                if (fetchLimit != null) {
                    sqlTemplate.setFetchLimit(fetchLimit);
                }
                if (fetchOffset != null) {
                    sqlTemplate.setFetchOffset(fetchOffset);
                }
                if (statementFetchSize != null) {
                    sqlTemplate.setStatementFetchSize(statementFetchSize);
                }
                if(queryTimeout != null) {
                    sqlTemplate.setQueryTimeout(queryTimeout);
                }
                if (pageSize != null) {
                    sqlTemplate.setPageSize(pageSize);
                }
                if (cacheStrategyOverride != null) {
                    sqlTemplate.setCacheStrategy(cacheStrategyOverride);
                }
                break;
            case QueryDescriptor.EJBQL_QUERY:
                EJBQLQuery ejbqlQuery = (EJBQLQuery) query;
                if (fetchLimit != null) {
                    ejbqlQuery.setFetchLimit(fetchLimit);
                }
                if (fetchOffset != null) {
                    ejbqlQuery.setFetchOffset(fetchOffset);
                }
                if (statementFetchSize != null) {
                    ejbqlQuery.setStatementFetchSize(statementFetchSize);
                }
                if(queryTimeout != null) {
                    ejbqlQuery.setQueryTimeout(queryTimeout);
                }
                if (pageSize != null) {
                    ejbqlQuery.setPageSize(pageSize);
                }
                if (cacheStrategyOverride != null) {
                    ejbqlQuery.setCacheStrategy(cacheStrategyOverride);
                }
                break;
            case QueryDescriptor.PROCEDURE_QUERY:
                ProcedureQuery procedureQuery = (ProcedureQuery) query;
                if (fetchLimit != null) {
                    procedureQuery.setFetchLimit(fetchLimit);
                }
                if (fetchOffset != null) {
                    procedureQuery.setFetchOffset(fetchOffset);
                }
                if (statementFetchSize != null) {
                    procedureQuery.setStatementFetchSize(statementFetchSize);
                }
                if(queryTimeout != null) {
                    procedureQuery.setQueryTimeout(queryTimeout);
                }
                if (pageSize != null) {
                    procedureQuery.setPageSize(pageSize);
                }
                if (cacheStrategyOverride != null) {
                    procedureQuery.setCacheStrategy(cacheStrategyOverride);
                }
                break;
            default:
                throw new CayenneRuntimeException("Unknown query type: %s", descriptor.getType());
        }

        return query;
    }