forked from apache/doris
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Feat](Nereids) support unset command
- Loading branch information
1 parent
e8e3fd7
commit 0a7db4f
Showing
7 changed files
with
224 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
...n/java/org/apache/doris/nereids/trees/plans/commands/UnsetDefaultStorageVaultCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package org.apache.doris.nereids.trees.plans.commands; | ||
|
||
import org.apache.doris.analysis.Analyzer; | ||
import org.apache.doris.catalog.Env; | ||
import org.apache.doris.cloud.catalog.CloudEnv; | ||
import org.apache.doris.common.*; | ||
import org.apache.doris.mysql.privilege.PrivPredicate; | ||
import org.apache.doris.nereids.trees.plans.PlanType; | ||
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; | ||
import org.apache.doris.qe.ConnectContext; | ||
import org.apache.doris.qe.StmtExecutor; | ||
|
||
public class UnsetDefaultStorageVaultCommand extends Command implements ForwardWithSync { | ||
public UnsetDefaultStorageVaultCommand() { | ||
super(PlanType.UNSET_DEFAULT_STORAGE_VAULT_COMMAND); | ||
|
||
} | ||
|
||
// @Override | ||
// public void analyze(Analyzer analyzer) throws UserException { | ||
// if (Config.isNotCloudMode()) { | ||
// throw new AnalysisException("Storage Vault is only supported for cloud mode"); | ||
// } | ||
// if (!FeConstants.runningUnitTest) { | ||
// // In legacy cloud mode, some s3 back-ended storage does need to use storage vault. | ||
// if (!((CloudEnv) Env.getCurrentEnv()).getEnableStorageVault()) { | ||
// throw new AnalysisException("Your cloud instance doesn't support storage vault"); | ||
// } | ||
// } | ||
// | ||
// // check auth | ||
// if (!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), PrivPredicate.ADMIN)) { | ||
// ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, "ADMIN"); | ||
// } | ||
// | ||
// super.analyze(analyzer); | ||
// } | ||
// | ||
// @Override | ||
// public String toSql() { | ||
// final String stmt = "UNSET DEFAULT STORAGE VAULT"; | ||
// return stmt; | ||
// } | ||
|
||
@Override | ||
public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { | ||
|
||
} | ||
|
||
@Override | ||
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) { | ||
return visitor.visitUnsetDefaultStorageVaultCommand(this, context); | ||
} | ||
} |
126 changes: 126 additions & 0 deletions
126
...ore/src/main/java/org/apache/doris/nereids/trees/plans/commands/UnsetVariableCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
package org.apache.doris.nereids.trees.plans.commands; | ||
|
||
import com.amazonaws.util.StringUtils; | ||
import org.apache.doris.analysis.SetType; | ||
import org.apache.doris.analysis.SetVar; | ||
import org.apache.doris.analysis.StringLiteral; | ||
import org.apache.doris.catalog.Env; | ||
import org.apache.doris.common.*; | ||
import org.apache.doris.mysql.privilege.PrivPredicate; | ||
import org.apache.doris.nereids.trees.plans.PlanType; | ||
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; | ||
import org.apache.doris.qe.ConnectContext; | ||
import org.apache.doris.qe.StmtExecutor; | ||
import org.apache.doris.qe.VariableMgr; | ||
|
||
import static org.apache.hadoop.fs.FileSystem.LOG; | ||
|
||
public class UnsetVariableCommand extends Command implements ForwardWithSync { | ||
private SetType setType; | ||
|
||
// variables to restore | ||
private String variable = null; | ||
|
||
private boolean applyToAll = false; | ||
|
||
public UnsetVariableCommand(SetType setType, String varName) { | ||
super(PlanType.UNSET_VARIABLE_COMMAND); | ||
this.setType = setType; | ||
this.variable = varName; | ||
} | ||
|
||
public UnsetVariableCommand(SetType setType, boolean applyToAll) { | ||
super(PlanType.UNSET_VARIABLE_COMMAND); | ||
this.setType = setType; | ||
this.applyToAll = applyToAll; | ||
} | ||
|
||
public SetType getSetType() { | ||
return setType; | ||
} | ||
|
||
public String getVariable() { | ||
return variable; | ||
} | ||
|
||
public boolean isApplyToAll() { | ||
return applyToAll; | ||
} | ||
|
||
// todo: change type global to session avoid to write in non-master node. | ||
// public void modifySetVarsForExecute() { | ||
// if (setType == SetType.GLOBAL) { | ||
// setType = SetType.SESSION; | ||
// } | ||
// } | ||
|
||
private void validate() throws UserException { | ||
if (StringUtils.isNullOrEmpty(variable) && !applyToAll) { | ||
throw new AnalysisException("You should specific the unset variable."); | ||
} | ||
|
||
if (setType == SetType.GLOBAL) { | ||
if (!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), PrivPredicate.ADMIN)) { | ||
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, | ||
"ADMIN"); | ||
} | ||
} | ||
} | ||
|
||
// @Override | ||
// public String toSql() { | ||
// StringBuilder sb = new StringBuilder(); | ||
// | ||
// sb.append("UNSET "); | ||
// sb.append(setType).append(" VARIABLE "); | ||
// if (!StringUtils.isNullOrEmpty(variable)) { | ||
// sb.append(variable).append(" "); | ||
// } else if (applyToAll) { | ||
// sb.append("ALL"); | ||
// } | ||
// return sb.toString(); | ||
// } | ||
// | ||
// @Override | ||
// public String toString() { | ||
// return toSql(); | ||
// } | ||
// | ||
// @Override | ||
// public RedirectStatus getRedirectStatus() { | ||
// if (setType == SetType.GLOBAL) { | ||
// return RedirectStatus.FORWARD_WITH_SYNC; | ||
// } | ||
// | ||
// return RedirectStatus.NO_FORWARD; | ||
// } | ||
|
||
@Override | ||
public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { | ||
validate(); | ||
try { | ||
if (isApplyToAll()) { | ||
VariableMgr.setAllVarsToDefaultValue(ctx.getSessionVariable(), getSetType()); | ||
} else { | ||
String defaultValue = VariableMgr.getDefaultValue(getVariable()); | ||
if (defaultValue == null) { | ||
ErrorReport.reportDdlException(ErrorCode.ERR_UNKNOWN_SYSTEM_VARIABLE, getVariable()); | ||
} | ||
SetVar var = new SetVar(getSetType(), getVariable(), | ||
new StringLiteral(defaultValue), SetVar.SetVarType.SET_SESSION_VAR); | ||
VariableMgr.setVar(ctx.getSessionVariable(), var); | ||
} | ||
} catch (DdlException e) { | ||
LOG.warn("", e); | ||
// Return error message to client. | ||
ctx.getState().setError(ErrorCode.ERR_LOCAL_VARIABLE, e.getMessage()); | ||
return; | ||
} | ||
ctx.getState().setOk(); | ||
} | ||
|
||
@Override | ||
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) { | ||
return visitor.visitUnsetVariableCommand(this, context); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters