/* Generated By:JJTree: Do not edit this line. CreateUpdateProcedureCommand.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=TeiidNodeFactory,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package org.teiid.query.sql.proc;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.teiid.designer.annotation.Removed;
import org.teiid.designer.query.sql.proc.ICreateProcedureCommand;
import org.teiid.designer.runtime.version.spi.ITeiidServerVersion;
import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
import org.teiid.query.parser.LanguageVisitor;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.StoredProcedure;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
/**
*
*/
@Removed(Version.TEIID_8_0)
public class CreateUpdateProcedureCommand extends Command
implements ICreateProcedureCommand<Block, GroupSymbol, Expression, LanguageVisitor> {
// top level block for the procedure
private Block block;
//whether it is update procedure or virtual stored procedure, default to update procedure
private boolean isUpdateProcedure = true;
private List<? extends Expression> projectedSymbols;
//command that returns resultset. For virtual procedure only.
private Command resultsCommand;
// the command the user submitted against the virtual group being updated
private Command userCommand;
private GroupSymbol virtualGroup;
// map between elements on the virtual groups and the elements in the
// transformation query that define it.
private Map<ElementSymbol, Expression> symbolMap;
/**
* @param p
* @param id
*/
public CreateUpdateProcedureCommand(ITeiidServerVersion p, int id) {
super(p, id);
}
/**
* Return type of command to make it easier to build switch statements by command type.
* @return The type of this command
*/
@Override
public int getType() {
return TYPE_UPDATE_PROCEDURE;
}
/**
* @return the block
*/
@Override
public Block getBlock() {
return block;
}
/**
* @param block the block to set
*/
@Override
public void setBlock(Block block) {
this.block = block;
}
/**
* @return the isUpdateProcedure
*/
public boolean isUpdateProcedure() {
return this.isUpdateProcedure;
}
/**
* @param isUpdateProcedure the isUpdateProcedure to set
*/
public void setUpdateProcedure(boolean isUpdateProcedure) {
this.isUpdateProcedure = isUpdateProcedure;
}
/**
* Get the ordered list of all elements returned by this query. These elements
* may be ElementSymbols or ExpressionSymbols but in all cases each represents a
* single column.
* @return Ordered list of SingleElementSymbol
*/
@Override
public List getProjectedSymbols(){
if(this.projectedSymbols != null){
return this.projectedSymbols;
}
if(!isUpdateProcedure){
if(this.resultsCommand == null){
//user may have not entered any query yet
return Collections.EMPTY_LIST;
}
List<? extends Expression> symbols = this.resultsCommand.getProjectedSymbols();
if (this.resultsCommand instanceof StoredProcedure) {
StoredProcedure sp = (StoredProcedure)this.resultsCommand;
if (sp.isCallableStatement()) {
symbols = sp.getResultSetColumns();
}
}
setProjectedSymbols(symbols);
return this.projectedSymbols;
}
this.projectedSymbols = getUpdateCommandSymbol();
return this.projectedSymbols;
}
/**
* @param projSymbols
*/
public void setProjectedSymbols(List<? extends Expression> projSymbols) {
projectedSymbols = projSymbols;
}
/**
* @return Command
*/
public Command getResultsCommand() {
return resultsCommand;
}
/**
* @param command
*/
public void setResultsCommand(Command command) {
resultsCommand = command;
}
/**
* Get the user's command to which this obj which is the subcommand
* @return The user's command
*/
public Command getUserCommand() {
return this.userCommand;
}
/**
* Set the user's command to which this obj which is the subcommand
* @param command The user's command
*/
public void setUserCommand(Command command) {
this.userCommand = command;
}
/**
* @return virtual group
*/
public GroupSymbol getVirtualGroup() {
return this.virtualGroup;
}
/**
* @param virtualGroup
*/
@Override
public void setVirtualGroup(GroupSymbol virtualGroup) {
this.virtualGroup = virtualGroup;
}
/**
* Set the symbol map between elements on the virtual group being updated and the
* elements on the transformation query.
* @param symbolMap Map of virtual group elements -> elements that define those
*/
public void setSymbolMap(Map<ElementSymbol, Expression> symbolMap) {
this.symbolMap = symbolMap;
}
/**
* Get the symbol map between elements on the virtual group being updated and the
* elements on the transformation query.
* @return Map of virtual group elements -> elements that define those
*/
public Map<ElementSymbol, Expression> getSymbolMap() {
return this.symbolMap;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + (this.isUpdateProcedure ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!super.equals(obj)) return false;
if (getClass() != obj.getClass()) return false;
CreateUpdateProcedureCommand other = (CreateUpdateProcedureCommand)obj;
if (this.isUpdateProcedure != other.isUpdateProcedure) return false;
return true;
}
/** Accept the visitor. **/
@Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public CreateUpdateProcedureCommand clone() {
CreateUpdateProcedureCommand clone = new CreateUpdateProcedureCommand(getTeiidVersion(), this.id);
clone.setUpdateProcedure(isUpdateProcedure());
if(getBlock() != null)
clone.setBlock(getBlock().clone());
if(getSourceHint() != null)
clone.setSourceHint(getSourceHint());
if(getOption() != null)
clone.setOption(getOption().clone());
if (this.virtualGroup != null)
clone.virtualGroup = this.virtualGroup.clone();
this.copyMetadataState(clone);
return clone;
}
}
/* JavaCC - OriginalChecksum=f346ab2e5ff020b1b349d6d7fdcc5974 (do not edit this line) */