/**************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package com.espertech.esper.epl.spec;
import com.espertech.esper.epl.expression.ExprNode;
import com.espertech.esper.epl.expression.ExprSubstitutionNode;
import com.espertech.esper.util.MetaDefItem;
import java.util.*;
import java.io.Serializable;
/**
* Specification object representing a complete EPL statement including all EPL constructs.
*/
public class StatementSpecRaw implements MetaDefItem, Serializable
{
private ExpressionDeclDesc expressionDeclDesc;
private OnTriggerDesc onTriggerDesc;
private UpdateDesc updateDesc;
private CreateWindowDesc createWindowDesc;
private CreateVariableDesc createVariableDesc;
private CreateIndexDesc createIndexDesc;
private CreateSchemaDesc createSchemaDesc;
private InsertIntoDesc insertIntoDesc;
private SelectClauseStreamSelectorEnum selectStreamDirEnum;
private SelectClauseSpecRaw selectClauseSpec = new SelectClauseSpecRaw();
private List<StreamSpecRaw> streamSpecs = new LinkedList<StreamSpecRaw>();
private List<OuterJoinDesc> outerJoinDescList = new LinkedList<OuterJoinDesc>();
private ExprNode filterExprRootNode;
private List<ExprNode> groupByExpressions = new LinkedList<ExprNode>();
private ExprNode havingExprRootNode;
private OutputLimitSpec outputLimitSpec;
private RowLimitSpec rowLimitSpec;
private List<OrderByItem> orderByList = new LinkedList<OrderByItem>();
private boolean hasVariables;
private List<AnnotationDesc> annotations = new ArrayList<AnnotationDesc>(1);
private String expressionNoAnnotations;
private MatchRecognizeSpec matchRecognizeSpec;
private Set<String> referencedVariables;
private ForClauseSpec forClauseSpec;
private Map<Integer, List<ExprNode>> sqlParameters;
private List<ExprSubstitutionNode> substitutionParameters;
private CreateContextDesc createContextDesc;
private String optionalContextName;
private List<ExpressionScriptProvided> scriptExpressions;
private CreateDataFlowDesc createDataFlowDesc;
private CreateExpressionDesc createExpressionDesc;
private static final long serialVersionUID = 5390766716794133693L;
/**
* Ctor.
* @param defaultStreamSelector stream selection for the statement
*/
public StatementSpecRaw(SelectClauseStreamSelectorEnum defaultStreamSelector)
{
selectStreamDirEnum = defaultStreamSelector;
}
/**
* Returns the FROM-clause stream definitions.
* @return list of stream specifications
*/
public List<StreamSpecRaw> getStreamSpecs()
{
return streamSpecs;
}
/**
* Returns SELECT-clause list of expressions.
* @return list of expressions and optional name
*/
public SelectClauseSpecRaw getSelectClauseSpec()
{
return selectClauseSpec;
}
/**
* Returns the WHERE-clause root node of filter expression.
* @return filter expression root node
*/
public ExprNode getFilterRootNode()
{
return filterExprRootNode;
}
/**
* Returns the LEFT/RIGHT/FULL OUTER JOIN-type and property name descriptor, if applicable. Returns null if regular join.
* @return outer join type, stream names and property names
*/
public List<OuterJoinDesc> getOuterJoinDescList()
{
return outerJoinDescList;
}
/**
* Returns list of group-by expressions.
* @return group-by expression nodes as specified in group-by clause
*/
public List<ExprNode> getGroupByExpressions()
{
return groupByExpressions;
}
/**
* Returns expression root node representing the having-clause, if present, or null if no having clause was supplied.
* @return having-clause expression top node
*/
public ExprNode getHavingExprRootNode()
{
return havingExprRootNode;
}
/**
* Returns the output limit definition, if any.
* @return output limit spec
*/
public OutputLimitSpec getOutputLimitSpec()
{
return outputLimitSpec;
}
/**
* Return a descriptor with the insert-into event name and optional list of columns.
* @return insert into specification
*/
public InsertIntoDesc getInsertIntoDesc()
{
return insertIntoDesc;
}
/**
* Returns the list of order-by expression as specified in the ORDER BY clause.
* @return Returns the orderByList.
*/
public List<OrderByItem> getOrderByList() {
return orderByList;
}
/**
* Returns the stream selector (rstream/istream).
* @return stream selector
*/
public SelectClauseStreamSelectorEnum getSelectStreamSelectorEnum()
{
return selectStreamDirEnum;
}
/**
* Sets the output limiting definition.
* @param outputLimitSpec defines the rules for output limiting
*/
public void setOutputLimitSpec(OutputLimitSpec outputLimitSpec)
{
this.outputLimitSpec = outputLimitSpec;
}
/**
* Sets the where clause filter expression node.
* @param filterExprRootNode the where clause expression
*/
public void setFilterRootNode(ExprNode filterExprRootNode)
{
this.filterExprRootNode = filterExprRootNode;
}
/**
* Sets the having-clause filter expression node.
* @param havingExprRootNode the having-clause expression
*/
public void setHavingExprRootNode(ExprNode havingExprRootNode)
{
this.havingExprRootNode = havingExprRootNode;
}
/**
* Sets the definition for any insert-into clause.
* @param insertIntoDesc is the descriptor for insert-into rules
*/
public void setInsertIntoDesc(InsertIntoDesc insertIntoDesc)
{
this.insertIntoDesc = insertIntoDesc;
}
/**
* Sets the stream selector (rstream/istream/both etc).
* @param selectStreamDirEnum to be set
*/
public void setSelectStreamDirEnum(SelectClauseStreamSelectorEnum selectStreamDirEnum)
{
this.selectStreamDirEnum = selectStreamDirEnum;
}
/**
* Sets the select clause.
* @param selectClauseSpec is the new select clause specification
*/
public void setSelectClauseSpec(SelectClauseSpecRaw selectClauseSpec)
{
this.selectClauseSpec = selectClauseSpec;
}
/**
* Returns the create-window specification.
* @return descriptor for creating a named window
*/
public CreateWindowDesc getCreateWindowDesc()
{
return createWindowDesc;
}
/**
* Sets the create-window specification.
* @param createWindowDesc descriptor for creating a named window
*/
public void setCreateWindowDesc(CreateWindowDesc createWindowDesc)
{
this.createWindowDesc = createWindowDesc;
}
/**
* Returns the on-delete statement specification.
* @return descriptor for creating a an on-delete statement
*/
public OnTriggerDesc getOnTriggerDesc()
{
return onTriggerDesc;
}
/**
* Sets the on-delete statement specification.
* @param onTriggerDesc descriptor for creating an on-delete statement
*/
public void setOnTriggerDesc(OnTriggerDesc onTriggerDesc)
{
this.onTriggerDesc = onTriggerDesc;
}
/**
* Gets the where clause.
* @return where clause or null if none
*/
public ExprNode getFilterExprRootNode()
{
return filterExprRootNode;
}
/**
* Sets the where clause or null if none
* @param filterExprRootNode where clause expression
*/
public void setFilterExprRootNode(ExprNode filterExprRootNode)
{
this.filterExprRootNode = filterExprRootNode;
}
/**
* Returns true if a statement (or subquery sub-statements) use variables.
* @return indicator if variables are used
*/
public boolean isHasVariables()
{
return hasVariables;
}
/**
* Sets the flag indicating the statement uses variables.
* @param hasVariables true if variables are used
*/
public void setHasVariables(boolean hasVariables)
{
this.hasVariables = hasVariables;
}
/**
* Returns the descriptor for create-variable statements.
* @return create-variable info
*/
public CreateVariableDesc getCreateVariableDesc()
{
return createVariableDesc;
}
/**
* Sets the descriptor for create-variable statements, if this is one.
* @param createVariableDesc create-variable info
*/
public void setCreateVariableDesc(CreateVariableDesc createVariableDesc)
{
this.createVariableDesc = createVariableDesc;
}
/**
* Returns the row limit, or null if none.
* @return row limit
*/
public RowLimitSpec getRowLimitSpec()
{
return rowLimitSpec;
}
/**
* Sets the row limit, or null if none.
* @param rowLimitSpec row limit
*/
public void setRowLimitSpec(RowLimitSpec rowLimitSpec)
{
this.rowLimitSpec = rowLimitSpec;
}
/**
* Returns a list of annotation descriptors.
* @return annotation descriptors
*/
public List<AnnotationDesc> getAnnotations()
{
return annotations;
}
/**
* Sets a list of annotation descriptors.
* @param annotations annotation descriptors
*/
public void setAnnotations(List<AnnotationDesc> annotations)
{
this.annotations = annotations;
}
/**
* Sets the update specification.
* @param updateDesc update spec
*/
public void setUpdateDesc(UpdateDesc updateDesc)
{
this.updateDesc = updateDesc;
}
/**
* Returns the update spec.
* @return update spec
*/
public UpdateDesc getUpdateDesc()
{
return updateDesc;
}
/**
* Sets the expression text without annotations.
* @param expressionNoAnnotations text
*/
public void setExpressionNoAnnotations(String expressionNoAnnotations)
{
this.expressionNoAnnotations = expressionNoAnnotations;
}
/**
* Returns the expression text without annotations.
* @return expressionNoAnnotations text
*/
public String getExpressionNoAnnotations()
{
return expressionNoAnnotations;
}
/**
* Returns the match recognize spec.
* @return spec
*/
public MatchRecognizeSpec getMatchRecognizeSpec() {
return matchRecognizeSpec;
}
/**
* Sets the match recognize spec
* @param matchRecognizeSpec spec
*/
public void setMatchRecognizeSpec(MatchRecognizeSpec matchRecognizeSpec) {
this.matchRecognizeSpec = matchRecognizeSpec;
}
/**
* Set variables referenced
* @param referencedVariables vars
*/
public void setReferencedVariables(Set<String> referencedVariables) {
this.referencedVariables = referencedVariables;
}
/**
* Returns variables referenced
* @return vars
*/
public Set<String> getReferencedVariables() {
return referencedVariables;
}
/**
* Returns create-index if any.
* @return index create
*/
public CreateIndexDesc getCreateIndexDesc() {
return createIndexDesc;
}
/**
* Set create-index if any.
* @param createIndexDesc index create
*/
public void setCreateIndexDesc(CreateIndexDesc createIndexDesc) {
this.createIndexDesc = createIndexDesc;
}
public CreateSchemaDesc getCreateSchemaDesc()
{
return createSchemaDesc;
}
public void setCreateSchemaDesc(CreateSchemaDesc createSchemaDesc)
{
this.createSchemaDesc = createSchemaDesc;
}
public ForClauseSpec getForClauseSpec()
{
return forClauseSpec;
}
public void setForClauseSpec(ForClauseSpec forClauseSpec)
{
this.forClauseSpec = forClauseSpec;
}
public Map<Integer, List<ExprNode>> getSqlParameters()
{
return sqlParameters;
}
public void setSqlParameters(Map<Integer, List<ExprNode>> sqlParameters)
{
this.sqlParameters = sqlParameters;
}
public List<ExprSubstitutionNode> getSubstitutionParameters()
{
return substitutionParameters;
}
public void setSubstitutionParameters(List<ExprSubstitutionNode> substitutionParameters)
{
this.substitutionParameters = substitutionParameters;
}
public ExpressionDeclDesc getExpressionDeclDesc() {
return expressionDeclDesc;
}
public void setExpressionDeclDesc(ExpressionDeclDesc expressionDeclDesc) {
this.expressionDeclDesc = expressionDeclDesc;
}
public CreateContextDesc getCreateContextDesc() {
return createContextDesc;
}
public void setCreateContextDesc(CreateContextDesc createContextDesc) {
this.createContextDesc = createContextDesc;
}
public String getOptionalContextName() {
return optionalContextName;
}
public void setOptionalContextName(String optionalContextName) {
this.optionalContextName = optionalContextName;
}
public List<ExpressionScriptProvided> getScriptExpressions() {
return scriptExpressions;
}
public void setScriptExpressions(List<ExpressionScriptProvided> scriptExpressions) {
this.scriptExpressions = scriptExpressions;
}
public CreateDataFlowDesc getCreateDataFlowDesc() {
return createDataFlowDesc;
}
public void setCreateDataFlowDesc(CreateDataFlowDesc createDataFlowDesc) {
this.createDataFlowDesc = createDataFlowDesc;
}
public CreateExpressionDesc getCreateExpressionDesc() {
return createExpressionDesc;
}
public void setCreateExpressionDesc(CreateExpressionDesc createExpressionDesc) {
this.createExpressionDesc = createExpressionDesc;
}
}