Skip to content

Commit

Permalink
storage: Add default limit to variant annotation query. #830
Browse files Browse the repository at this point in the history
  • Loading branch information
j-coll committed Jul 19, 2018
1 parent d3003fa commit 2141435
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 22 deletions.
Expand Up @@ -68,12 +68,11 @@
import static org.opencb.commons.datastore.core.QueryOptions.empty;
import static org.opencb.opencga.catalog.db.api.StudyDBAdaptor.QueryParams.FQN;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam.*;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryUtils.addDefaultLimit;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryUtils.getDefaultLimit;

public class VariantStorageManager extends StorageManager {

public static final int LIMIT_DEFAULT = 1000;
public static final int LIMIT_MAX = 5000;

private final VariantCatalogQueryUtils catalogUtils;

public VariantStorageManager(CatalogManager catalogManager, StorageEngineFactory storageEngineFactory) {
Expand Down Expand Up @@ -562,25 +561,6 @@ Map<String, List<Sample>> checkSamplesPermissions(Query query, QueryOptions quer

// Some aux methods

private int addDefaultLimit(QueryOptions queryOptions) {
return addDefaultLimit(queryOptions, LIMIT_MAX, LIMIT_DEFAULT);
}

private int addDefaultLimit(QueryOptions queryOptions, int limitMax, int limitDefault) {
// Add default limit
int limit = getDefaultLimit(queryOptions.getInt(QueryOptions.LIMIT, -1), limitMax, limitDefault);
queryOptions.put(QueryOptions.LIMIT, limit);
return limit;
}

private int getDefaultLimit(int limit, int limitMax, int limitDefault) {
if (limit > limitMax) {
logger.info("Unable to return more than {} variants. Change limit from {} to {}", limitMax, limit, limitMax);
}
limit = (limit > 0) ? Math.min(limit, limitMax) : limitDefault;
return limit;
}

private String[] getRegions(Query query) {
String[] regions;
String regionStr = query.getString(VariantQueryParam.REGION.key());
Expand Down
Expand Up @@ -80,6 +80,7 @@
import static org.opencb.opencga.storage.core.variant.VariantStorageEngine.Options.*;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam.ANNOT_CLINICAL_SIGNIFICANCE;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam.ID;
import static org.opencb.opencga.storage.core.variant.adaptors.VariantQueryUtils.addDefaultLimit;
import static org.opencb.opencga.storage.core.variant.annotation.annotators.AbstractCellBaseVariantAnnotator.toCellBaseSpeciesName;
import static org.opencb.opencga.storage.core.variant.search.solr.VariantSearchManager.SEARCH_ENGINE_ID;
import static org.opencb.opencga.storage.core.variant.search.solr.VariantSearchUtils.*;
Expand Down Expand Up @@ -377,6 +378,7 @@ public void deleteAnnotation(String name, ObjectMap params) throws StorageEngine
}

public QueryResult<VariantAnnotation> getAnnotation(String name, Query query, QueryOptions options) throws StorageEngineException {
options = addDefaultLimit(options);
return getDBAdaptor().getAnnotation(name, query, options);
}

Expand Down
Expand Up @@ -66,6 +66,9 @@ public final class VariantQueryUtils {
public static final String ALL = "all";
public static final String GT = "GT";

private static final int LIMIT_DEFAULT = 1000;
private static final int LIMIT_MAX = 5000;

public static final QueryParam ANNOT_EXPRESSION_GENES = QueryParam.create("annot_expression_genes", "", QueryParam.Type.TEXT_ARRAY);
public static final QueryParam ANNOT_GO_GENES = QueryParam.create("annot_go_genes", "", QueryParam.Type.TEXT_ARRAY);
public static final QueryParam ANNOT_GENE_REGIONS = QueryParam.create("annot_gene_regions", "", QueryParam.Type.TEXT_ARRAY);
Expand Down Expand Up @@ -1234,4 +1237,26 @@ public static String printQuery(Query query) {
}
}


public static QueryOptions addDefaultLimit(QueryOptions queryOptions) {
return addDefaultLimit(queryOptions, LIMIT_MAX, LIMIT_DEFAULT);
}

public static QueryOptions addDefaultLimit(QueryOptions queryOptions, int limitMax, int limitDefault) {
queryOptions = queryOptions == null ? new QueryOptions() : queryOptions;
// Add default limit
int limit = getDefaultLimit(queryOptions.getInt(QueryOptions.LIMIT, -1), limitMax, limitDefault);
queryOptions.put(QueryOptions.LIMIT, limit);
return queryOptions;
}

public static int getDefaultLimit(int limit, int limitMax, int limitDefault) {
if (limit > limitMax) {
logger.info("Unable to return more than {} variants. Change limit from {} to {}", limitMax, limit, limitMax);
}
limit = (limit > 0) ? Math.min(limit, limitMax) : limitDefault;
return limit;
}


}

0 comments on commit 2141435

Please sign in to comment.