Files
fantaibao-qlexpress4/src/main/java/com/alibaba/qlexpress4/QLOptions.java
small-red-hat 2dfed7464e
Some checks failed
Reduce Adoc / reduce (push) Failing after 57s
Java Unit Test with Maven / test (push) Failing after 1m42s
first
2025-12-29 13:59:13 +08:00

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);
}
}
}