/* Generated By:JJTree: Do not edit this line. CreateProcedureCommand.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package org.teiid.query.sql.proc;
import java.util.Collections;
import java.util.List;
import org.teiid.designer.annotation.Since;
import org.teiid.designer.query.sql.lang.ICommand;
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.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
/**
*
*/
@Since(Version.TEIID_8_0)
public class CreateProcedureCommand extends Command
implements ICreateProcedureCommand<Block, GroupSymbol, Expression, LanguageVisitor> {
// top level block for the procedure
protected Block block;
private List<? extends Expression> projectedSymbols;
private List<? extends Expression> resultSetColumns;
private GroupSymbol virtualGroup;
private ElementSymbol returnVariable;
private int updateType = ICommand.TYPE_UNKNOWN;
/**
* @param p
* @param id
*/
public CreateProcedureCommand(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;
}
@Override
@Since(Version.TEIID_8_5)
public boolean returnsResultSet() {
if (isTeiidVersionOrGreater(Version.TEIID_8_5))
return this.resultSetColumns != null && !this.resultSetColumns.isEmpty();
return super.returnsResultSet();
}
@Override
public List<? extends Expression> getResultSetColumns() {
return resultSetColumns;
}
/**
* @param resultSetColumns
*/
public void setResultSetColumns(List<? extends Expression> resultSetColumns) {
this.resultSetColumns = resultSetColumns;
}
/**
* 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<Expression> getProjectedSymbols(){
if(this.projectedSymbols != null){
return (List<Expression>) this.projectedSymbols;
}
//user may have not entered any query yet
return Collections.EMPTY_LIST;
}
/**
* @param projSymbols
*/
public void setProjectedSymbols(List<? extends Expression> projSymbols) {
projectedSymbols = projSymbols;
}
/**
* @return virtual group
*/
public GroupSymbol getVirtualGroup() {
return this.virtualGroup;
}
/**
* @param virtualGroup
*/
public void setVirtualGroup(GroupSymbol virtualGroup) {
this.virtualGroup = virtualGroup;
}
/**
* @return return variable
*/
public ElementSymbol getReturnVariable() {
return returnVariable;
}
/**
* @param symbol
*/
public void setReturnVariable(ElementSymbol symbol) {
this.returnVariable = symbol;
}
/**
* @return update type
*/
public int getUpdateType() {
return updateType;
}
/**
* @param type
*/
public void setUpdateType(int type) {
if (isTeiidVersionOrGreater(Version.TEIID_8_5))
//we select the count as the last operation
this.resultSetColumns = getUpdateCommandSymbol();
else
this.resultSetColumns = Collections.emptyList();
this.updateType = type;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((this.block == null) ? 0 : this.block.hashCode());
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;
CreateProcedureCommand other = (CreateProcedureCommand)obj;
if (this.block == null) {
if (other.block != null) return false;
} else if (!this.block.equals(other.block)) return false;
return true;
}
/** Accept the visitor. **/
@Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public CreateProcedureCommand clone() {
CreateProcedureCommand clone = new CreateProcedureCommand(getTeiidVersion(), this.id);
if(getBlock() != null)
clone.setBlock(getBlock().clone());
if(getSourceHint() != null)
clone.setSourceHint(getSourceHint());
if(getOption() != null)
clone.setOption(getOption().clone());
if (this.projectedSymbols != null)
clone.projectedSymbols = cloneList(getProjectedSymbols());
if (this.resultSetColumns != null)
clone.resultSetColumns = cloneList(this.resultSetColumns);
if (this.virtualGroup != null)
clone.virtualGroup = this.virtualGroup.clone();
if (this.returnVariable != null)
clone.returnVariable = this.returnVariable;
this.copyMetadataState(clone);
return clone;
}
}
/* JavaCC - OriginalChecksum=14790ffe7d56203cb640dd53367c0c33 (do not edit this line) */