Skip to content

[feature] 分页特性整改,支持全局、子查询指定limit,offset,rlimit,roffset,slimit #112

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public static class Builder {

private LastLimit limit;

private Integer rlimit;

private Integer roffset;

private Integer slimit;

private Map<String, Map<String, Integer>> hint;

// this field is only allowed for Lindorm TSDB
Expand Down Expand Up @@ -80,6 +86,30 @@ public Builder queryType(QueryType queryType) {
return this;
}

/**
* only support for multi field model
*/
public Builder rlimit(Integer rlimit) {
this.rlimit = rlimit;
return this;
}

/**
* only support for multi field model
*/
public Builder roffset(Integer roffset) {
this.roffset = roffset;
return this;
}

/**
* current only support for super tag model
*/
public Builder slimit(Integer slimit) {
this.slimit = slimit;
return this;
}

public LastPointQuery build() {
if (queries == null || queries.isEmpty()) {
throw new IllegalArgumentException("the LastPointSubQuery must be set");
Expand All @@ -91,6 +121,9 @@ public LastPointQuery build() {
query.setQueries(queries);
query.tupleFormat = tupleFormat;
query.limit = limit;
query.rlimit = rlimit;
query.roffset = roffset;
query.slimit = slimit;
query.hint = hint;
query.queryType = queryType;
return query;
Expand All @@ -110,6 +143,12 @@ public static Builder builder() {

private LastLimit limit;

private Integer rlimit;

private Integer roffset;

private Integer slimit;

/**
* Optional tupleFormat parameter.
* Used for multi-field latest data points query and show results in tuple format.
Expand Down Expand Up @@ -172,6 +211,30 @@ public void setLimit(LastLimit limit) {
this.limit = limit;
}

public Integer getRlimit() {
return rlimit;
}

public void setRLimit(int rlimit) {
this.rlimit = rlimit;
}

public Integer getRoffset() {
return roffset;
}

public void setRoffset(int roffset) {
this.roffset = roffset;
}

public Integer getSlimit() {
return slimit;
}

public void setSLimit(int slimit) {
this.slimit = slimit;
}

public Map<String, Map<String, Integer>> getHint() {
return hint;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ public class LastPointSubQuery extends HashMap<String, Object> {
public static class Builder {
private LastPointSubQuery query = new LastPointSubQuery();

private LastLimit limit;

private Integer rlimit;

private Integer roffset;

private Integer slimit;

public Builder(String metric) {
this.query.setMetric(metric);
}
Expand All @@ -37,6 +45,35 @@ public Builder hint(Map<String, Map<String, Integer>> hint) {
return this;
}

public Builder limit(LastLimit limit) {
this.query.setLimit(limit);
return this;
}

/**
* only support for multi field model
*/
public Builder rlimit(Integer rlimit) {
this.query.setRlimit(rlimit);
return this;
}

/**
* only support for multi field model
*/
public Builder roffset(Integer roffset) {
this.query.setRoffset(roffset);
return this;
}

/**
* current only support for super tag model
*/
public Builder slimit(Integer slimit) {
this.query.setSlimit(slimit);
return this;
}

public LastPointSubQuery build() {
// prevent an empty hint map
if ((this.query.getHint() != null) && (this.query.getHint().isEmpty())) {
Expand Down Expand Up @@ -71,6 +108,10 @@ public static Builder builder(List<String> tsuids){
private static final String TAGS = "tags";
private static final String TSUIDS = "tsuids";
private static final String HINT = "hint";
private static final String LIMIT = "limit";
private static final String RLIMIT = "rlimit";
private static final String ROFFSET = "roffset";
private static final String SLIMIT = "slimit";

public String getMetric() {
return (String) this.get(METRIC);
Expand Down Expand Up @@ -117,4 +158,20 @@ public Map<String, Map<String, Integer>> getHint() {
public void setHint(Map<String, Map<String, Integer>> hint) {
this.put(HINT, hint);
}

public void setLimit(LastLimit limit) {
this.put(LIMIT, limit);
}

public void setRlimit(Integer rlimit) {
this.put(RLIMIT, rlimit);
}

public void setRoffset(Integer roffset) {
this.put(ROFFSET, roffset);
}

public void setSlimit(Integer slimit) {
this.put(SLIMIT, slimit);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ public class MultiFieldQuery extends JSONValue {
// this field is only allowed for Lindorm TSDB
@JSONField(name = "type")
private String queryType;
private Integer limit;
private Integer offset;
private Integer rlimit;
private Integer roffset;
private Integer slimit;

public static class Builder {
private Long startTime;
Expand All @@ -35,6 +40,11 @@ public static class Builder {
private Map<String, Map<String, Integer>> hint;
// this field is only allowed for Lindorm TSDB
private String queryType;
private Integer limit;
private Integer offset;
private Integer rlimit;
private Integer roffset;
private Integer slimit;

/**
* 1970-02-20 00:59:28
Expand Down Expand Up @@ -109,6 +119,31 @@ public Builder queryType(QueryType queryType) {
return this;
}

public Builder limit(int limit) {
this.limit = limit;
return this;
}

public Builder offset(int offset) {
this.offset = offset;
return this;
}

public Builder rlimit(int rlimit) {
this.rlimit = rlimit;
return this;
}

public Builder roffset(int roffset) {
this.roffset = roffset;
return this;
}

public Builder slimit(int slimit) {
this.slimit = slimit;
return this;
}

public Builder sub(MultiFieldSubQuery... subQuerys) {
for (MultiFieldSubQuery subQuery : subQuerys) {
subQueryList.add(subQuery);
Expand Down Expand Up @@ -153,6 +188,11 @@ public MultiFieldQuery build() {
query.types = this.types;
query.hint = this.hint;
query.queryType = this.queryType;
query.limit = this.limit;
query.offset = this.offset;
query.rlimit = this.rlimit;
query.roffset = this.roffset;
query.slimit = this.slimit;
return query;
}
}
Expand Down Expand Up @@ -249,4 +289,25 @@ public String getQueryType() {
public void setQueryType(QueryType queryType) {
this.queryType = queryType.getName();
}


public Integer getLimit() {
return limit;
}

public Integer getOffset() {
return offset;
}

public Integer getRlimit() {
return rlimit;
}

public Integer getRoffset() {
return roffset;
}

public Integer getSlimit() {
return slimit;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,22 @@ public class MultiFieldSubQuery {
private List<Filter> filters;
private List<MultiFieldSubQueryDetails> fields;
private Integer limit;
private Integer globalLimit;
private Integer offset;
private Integer rlimit;
private Integer roffset;
private Integer slimit;
private Integer globalLimit;
private int index;
private Map<String, Map<String, Integer>> hint;

public static class Builder {
private String metric;
private Integer limit;
private Integer globalLimit;
private Integer offset;
private Integer rlimit;
private Integer roffset;
private Integer slimit;
private Integer globalLimit;
private Map<String, String> tags = new HashMap<String, String>();
private List<Filter> filters = new ArrayList<Filter>();
private List<MultiFieldSubQueryDetails> fieldsInfo = new ArrayList<MultiFieldSubQueryDetails>();
Expand Down Expand Up @@ -60,6 +66,46 @@ public Builder limit(Integer limit) {
return this;
}

/**
* only support for multi field model
*/
public Builder rlimit(Integer rlimit) {
if (rlimit != null) {
if (rlimit < 0 || rlimit > Integer.MAX_VALUE) {
throw new IllegalArgumentException("Illegal rlimit value.");
}
this.rlimit = rlimit;
}
return this;
}

/**
* only support for multi field model
*/
public Builder roffset(Integer roffset) {
if (roffset != null) {
if (roffset < 0 || roffset > Integer.MAX_VALUE) {
throw new IllegalArgumentException("Illegal roffset value.");
}
this.roffset = roffset;
}
return this;
}

/**
* current only support for super tag model
*/
public Builder slimit(Integer slimit) {
if (slimit != null) {
if (slimit < 0 || slimit > Integer.MAX_VALUE) {
throw new IllegalArgumentException("Illegal slimit value.");
}
this.slimit = slimit;
}
return this;
}

@Deprecated
public Builder globalLimit(Integer globalLimit) {
if (globalLimit != null) {
if (globalLimit < 0 || globalLimit > Integer.MAX_VALUE) {
Expand Down Expand Up @@ -166,18 +212,16 @@ public MultiFieldSubQuery build() {
}
subQuery.fields = this.fieldsInfo;

if (this.limit != null && this.limit > 0) {
subQuery.limit = this.limit;
}

// TSDB Server will set limit, offset, rlimit, roffset, slimit for subquery
if (this.globalLimit != null && this.globalLimit > 0) {
subQuery.globalLimit = this.globalLimit;
}

if (this.offset != null && this.offset > 0) {
subQuery.offset = this.offset;
}

subQuery.limit = limit;
subQuery.offset = offset;
subQuery.slimit = slimit;
subQuery.rlimit = rlimit;
subQuery.roffset = roffset;
subQuery.hint = this.hint;

return subQuery;
Expand Down Expand Up @@ -222,6 +266,18 @@ public Integer getLimit() {
return limit;
}

public Integer getRlimit() {
return rlimit;
}

public Integer getRoffset() {
return roffset;
}

public Integer getSlimit() {
return slimit;
}

public Integer getGlobalLimit() {
return globalLimit;
}
Expand Down
Loading