206 lines
5.5 KiB
Java
206 lines
5.5 KiB
Java
package com.alibaba.qlexpress4;
|
|
|
|
import java.util.Collections;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Author: DQinYuan
|
|
* date 2022/1/12 2:35 下午
|
|
*/
|
|
public class QLOptions {
|
|
|
|
public static QLOptions DEFAULT_OPTIONS = QLOptions.builder().build();
|
|
|
|
/**
|
|
* precise evaluate based on BigDecimal
|
|
* default false
|
|
*/
|
|
private final boolean precise;
|
|
|
|
/**
|
|
* define global symbol in user context
|
|
* default false
|
|
*/
|
|
private final boolean polluteUserContext;
|
|
|
|
/**
|
|
* script timeout millisecond, default is -1, namely time unlimited
|
|
* <= 0, time unlimited
|
|
* default -1
|
|
*/
|
|
private final long timeoutMillis;
|
|
|
|
/**
|
|
* attachments will be carried to user defined function/operator/macro
|
|
* only used to pass data, not as variable value
|
|
*
|
|
* default empty map
|
|
*/
|
|
private final Map<String, Object> attachments;
|
|
|
|
/**
|
|
* allow cache compile result of script
|
|
*
|
|
* default false
|
|
*/
|
|
private final boolean cache;
|
|
|
|
/**
|
|
* avoid null pointer
|
|
* default false
|
|
*/
|
|
private final boolean avoidNullPointer;
|
|
|
|
/**
|
|
* max length of arrays allowed to be created
|
|
* -1 means no limit
|
|
* default -1
|
|
*/
|
|
private final int maxArrLength;
|
|
|
|
/**
|
|
* Track the execution process of all expressions and return the path to the `execute` caller.
|
|
* To enable expression tracing, please ensure that the InitOptions.traceExpression is alse set to true.
|
|
* default false
|
|
*/
|
|
private final boolean traceExpression;
|
|
|
|
/**
|
|
* disable short circuit in logic operator
|
|
* default false
|
|
*/
|
|
private final boolean shortCircuitDisable;
|
|
|
|
private QLOptions(boolean precise, boolean polluteUserContext, long timeoutMillis, Map<String, Object> attachments,
|
|
boolean cache, boolean avoidNullPointer, int maxArrLength, boolean traceExpression,
|
|
boolean shortCircuitDisable) {
|
|
this.precise = precise;
|
|
this.polluteUserContext = polluteUserContext;
|
|
this.timeoutMillis = timeoutMillis;
|
|
this.attachments = attachments;
|
|
this.cache = cache;
|
|
this.avoidNullPointer = avoidNullPointer;
|
|
this.maxArrLength = maxArrLength;
|
|
this.traceExpression = traceExpression;
|
|
this.shortCircuitDisable = shortCircuitDisable;
|
|
}
|
|
|
|
public static Builder builder() {
|
|
return new Builder();
|
|
}
|
|
|
|
public boolean isPrecise() {
|
|
return precise;
|
|
}
|
|
|
|
public boolean isPolluteUserContext() {
|
|
return polluteUserContext;
|
|
}
|
|
|
|
public long getTimeoutMillis() {
|
|
return timeoutMillis;
|
|
}
|
|
|
|
public Map<String, Object> getAttachments() {
|
|
return attachments;
|
|
}
|
|
|
|
public boolean isCache() {
|
|
return cache;
|
|
}
|
|
|
|
public boolean isAvoidNullPointer() {
|
|
return avoidNullPointer;
|
|
}
|
|
|
|
public int getMaxArrLength() {
|
|
return maxArrLength;
|
|
}
|
|
|
|
/**
|
|
* @param newArrLen new arr length in runtime
|
|
* @return true if less or equal to max arr len
|
|
*/
|
|
public boolean checkArrLen(int newArrLen) {
|
|
return maxArrLength == -1 || newArrLen <= maxArrLength;
|
|
}
|
|
|
|
public boolean isTraceExpression() {
|
|
return traceExpression;
|
|
}
|
|
|
|
public boolean isShortCircuitDisable() {
|
|
return shortCircuitDisable;
|
|
}
|
|
|
|
public static class Builder {
|
|
private boolean precise = false;
|
|
|
|
private boolean polluteUserContext = false;
|
|
|
|
private long timeoutMillis = -1;
|
|
|
|
private Map<String, Object> attachments = Collections.emptyMap();
|
|
|
|
private boolean cache = false;
|
|
|
|
private boolean avoidNullPointer = false;
|
|
|
|
private int maxArrLength = -1;
|
|
|
|
private boolean traceExpression = false;
|
|
|
|
private boolean shortCircuitDisable = false;
|
|
|
|
public Builder precise(boolean precise) {
|
|
this.precise = precise;
|
|
return this;
|
|
}
|
|
|
|
public Builder polluteUserContext(boolean polluteUserContext) {
|
|
this.polluteUserContext = polluteUserContext;
|
|
return this;
|
|
}
|
|
|
|
public Builder timeoutMillis(long timeoutMillis) {
|
|
this.timeoutMillis = timeoutMillis;
|
|
return this;
|
|
}
|
|
|
|
public Builder attachments(Map<String, Object> attachments) {
|
|
this.attachments = attachments;
|
|
return this;
|
|
}
|
|
|
|
public Builder cache(boolean cache) {
|
|
this.cache = cache;
|
|
return this;
|
|
}
|
|
|
|
public Builder avoidNullPointer(boolean avoidNullPointer) {
|
|
this.avoidNullPointer = avoidNullPointer;
|
|
return this;
|
|
}
|
|
|
|
public Builder maxArrLength(int maxArrLength) {
|
|
this.maxArrLength = maxArrLength;
|
|
return this;
|
|
}
|
|
|
|
public Builder traceExpression(boolean traceExpression) {
|
|
this.traceExpression = traceExpression;
|
|
return this;
|
|
}
|
|
|
|
public Builder shortCircuitDisable(boolean shortCircuitDisable) {
|
|
this.shortCircuitDisable = shortCircuitDisable;
|
|
return this;
|
|
}
|
|
|
|
public QLOptions build() {
|
|
return new QLOptions(precise, polluteUserContext, timeoutMillis, attachments, cache, avoidNullPointer,
|
|
maxArrLength, traceExpression, shortCircuitDisable);
|
|
}
|
|
}
|
|
}
|