SessionStatement.java
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2025 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class SessionStatement implements Statement {
public enum Action {
START, APPLY, DROP, SHOW, DESCRIBE;
public static Action from(String flag) {
return Enum.valueOf(Action.class, flag.toUpperCase());
}
}
final private Action action;
final private String id;
final private LinkedHashMap<String, String> options = new LinkedHashMap<>();
public SessionStatement(Action action, String id) {
this.action = action;
this.id = id;
}
public SessionStatement(String action, String id) {
this(Action.from(action), id);
}
public SessionStatement(String action) {
this(action, null);
}
public Action getAction() {
return action;
}
public String getId() {
return id;
}
public int size() {
return options.size();
}
public String putOption(String key, String value) {
return options.put(key.replaceAll("[\"']", "").toLowerCase(), value.toLowerCase());
}
public boolean hasOptions() {
return !options.isEmpty();
}
public void clearOptions() {
options.clear();
}
public boolean removeOption(String key, String value) {
return options.remove(key, value);
}
public boolean containsOption(String value) {
return options.containsValue(value);
}
public String removeOption(String key) {
return options.remove(key);
}
public String getOption(String key) {
return options.get(key);
}
public Set<String> getOptionKeySet() {
return options.keySet();
}
public Map<String, String> getOptions() {
return options;
}
public Set<Map.Entry<String, String>> getOptionEntrySet() {
return options.entrySet();
}
public boolean hasOption(String key) {
return options.containsKey(key);
}
public String getOptionOrDefault(String key, String defaultValue) {
return options.getOrDefault(key, defaultValue);
}
@Override
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
return statementVisitor.visit(this, context);
}
@Override
public void accept(StatementVisitor<?> statementVisitor) {
Statement.super.accept(statementVisitor);
}
@Override
public String toString() {
StringBuilder builder =
new StringBuilder("SESSION " + action + " " + (id != null ? id : ""));
if (!options.isEmpty()) {
builder.append(" WITH ");
int i = 0;
for (Map.Entry<String, String> e : options.entrySet()) {
if (i++ > 0) {
builder.append(", ");
}
builder.append(e.getKey()).append("=").append(e.getValue());
}
}
builder.append(";");
return builder.toString();
}
}