/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* 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.declexpr.ExprDeclaredNode;
import com.espertech.esper.epl.expression.core.ExprNode;
import com.espertech.esper.epl.expression.core.ExprNodeUtility;
import com.espertech.esper.epl.expression.subquery.ExprSubselectNode;
import com.espertech.esper.epl.expression.table.ExprTableAccessNode;
import com.espertech.esper.filter.FilterSpecCompiled;
import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Specification object representing a complete EPL statement including all EPL constructs.
*/
public class StatementSpecCompiled {
public static final StatementSpecCompiled DEFAULT_SELECT_ALL_EMPTY;
static {
DEFAULT_SELECT_ALL_EMPTY = new StatementSpecCompiled();
DEFAULT_SELECT_ALL_EMPTY.getSelectClauseSpec().setSelectExprList(new SelectClauseElementWildcard());
}
private final OnTriggerDesc onTriggerDesc;
private final CreateWindowDesc createWindowDesc;
private final CreateIndexDesc createIndexDesc;
private final CreateVariableDesc createVariableDesc;
private final CreateTableDesc createTableDesc;
private final CreateSchemaDesc createSchemaDesc;
private InsertIntoDesc insertIntoDesc;
private SelectClauseStreamSelectorEnum selectStreamDirEnum;
private SelectClauseSpecCompiled selectClauseSpec;
private StreamSpecCompiled[] streamSpecs;
private final OuterJoinDesc[] outerJoinDescList;
private ExprNode filterExprRootNode;
private ExprNode havingExprRootNode;
private final OutputLimitSpec outputLimitSpec;
private final OrderByItem[] orderByList;
private final ExprSubselectNode[] subSelectExpressions;
private final ExprDeclaredNode[] declaredExpressions;
private final ExpressionScriptProvided[] scripts;
private final Set<String> variableReferences;
private final RowLimitSpec rowLimitSpec;
private final String[] eventTypeReferences;
private final Annotation[] annotations;
private final UpdateDesc updateSpec;
private final MatchRecognizeSpec matchRecognizeSpec;
private final ForClauseSpec forClauseSpec;
private final Map<Integer, List<ExprNode>> sqlParameters;
private final CreateContextDesc contextDesc;
private final String optionalContextName;
private final CreateDataFlowDesc createGraphDesc;
private final CreateExpressionDesc createExpressionDesc;
private final FireAndForgetSpec fireAndForgetSpec;
private final GroupByClauseExpressions groupByExpressions;
private final IntoTableSpec intoTableSpec;
private final ExprTableAccessNode[] tableNodes;
private FilterSpecCompiled[] filterSpecsOverall;
private NamedWindowConsumerStreamSpec[] namedWindowConsumersAll;
public StatementSpecCompiled(OnTriggerDesc onTriggerDesc,
CreateWindowDesc createWindowDesc,
CreateIndexDesc createIndexDesc,
CreateVariableDesc createVariableDesc,
CreateTableDesc createTableDesc,
CreateSchemaDesc createSchemaDesc,
InsertIntoDesc insertIntoDesc,
SelectClauseStreamSelectorEnum selectClauseStreamSelectorEnum,
SelectClauseSpecCompiled selectClauseSpec,
StreamSpecCompiled[] streamSpecs,
OuterJoinDesc[] outerJoinDescList,
ExprNode filterExprRootNode,
ExprNode havingExprRootNode,
OutputLimitSpec outputLimitSpec,
OrderByItem[] orderByList,
ExprSubselectNode[] subSelectExpressions,
ExprDeclaredNode[] declaredExpressions,
ExpressionScriptProvided[] scripts,
Set<String> variableReferences,
RowLimitSpec rowLimitSpec,
String[] eventTypeReferences,
Annotation[] annotations,
UpdateDesc updateSpec,
MatchRecognizeSpec matchRecognizeSpec,
ForClauseSpec forClauseSpec,
Map<Integer, List<ExprNode>> sqlParameters,
CreateContextDesc contextDesc,
String optionalContextName,
CreateDataFlowDesc createGraphDesc,
CreateExpressionDesc createExpressionDesc,
FireAndForgetSpec fireAndForgetSpec,
GroupByClauseExpressions groupByExpressions,
IntoTableSpec intoTableSpec,
ExprTableAccessNode[] tableNodes) {
this.onTriggerDesc = onTriggerDesc;
this.createWindowDesc = createWindowDesc;
this.createIndexDesc = createIndexDesc;
this.createVariableDesc = createVariableDesc;
this.createTableDesc = createTableDesc;
this.createSchemaDesc = createSchemaDesc;
this.insertIntoDesc = insertIntoDesc;
this.selectStreamDirEnum = selectClauseStreamSelectorEnum;
this.selectClauseSpec = selectClauseSpec;
this.streamSpecs = streamSpecs;
this.outerJoinDescList = outerJoinDescList;
this.filterExprRootNode = filterExprRootNode;
this.havingExprRootNode = havingExprRootNode;
this.outputLimitSpec = outputLimitSpec;
this.orderByList = orderByList;
this.subSelectExpressions = subSelectExpressions;
this.declaredExpressions = declaredExpressions;
this.scripts = scripts;
this.variableReferences = variableReferences;
this.rowLimitSpec = rowLimitSpec;
this.eventTypeReferences = eventTypeReferences;
this.annotations = annotations;
this.updateSpec = updateSpec;
this.matchRecognizeSpec = matchRecognizeSpec;
this.forClauseSpec = forClauseSpec;
this.sqlParameters = sqlParameters;
this.contextDesc = contextDesc;
this.optionalContextName = optionalContextName;
this.createGraphDesc = createGraphDesc;
this.createExpressionDesc = createExpressionDesc;
this.fireAndForgetSpec = fireAndForgetSpec;
this.groupByExpressions = groupByExpressions;
this.intoTableSpec = intoTableSpec;
this.tableNodes = tableNodes;
}
/**
* Ctor.
*/
public StatementSpecCompiled() {
onTriggerDesc = null;
createWindowDesc = null;
createIndexDesc = null;
createVariableDesc = null;
createTableDesc = null;
createSchemaDesc = null;
insertIntoDesc = null;
selectStreamDirEnum = SelectClauseStreamSelectorEnum.RSTREAM_ISTREAM_BOTH;
selectClauseSpec = new SelectClauseSpecCompiled(false);
streamSpecs = StreamSpecCompiled.EMPTY_STREAM_ARRAY;
outerJoinDescList = OuterJoinDesc.EMPTY_OUTERJOIN_ARRAY;
filterExprRootNode = null;
havingExprRootNode = null;
outputLimitSpec = null;
orderByList = OrderByItem.EMPTY_ORDERBY_ARRAY;
subSelectExpressions = ExprSubselectNode.EMPTY_SUBSELECT_ARRAY;
declaredExpressions = ExprNodeUtility.EMPTY_DECLARED_ARR;
scripts = ExprNodeUtility.EMPTY_SCRIPTS;
variableReferences = new HashSet<String>();
rowLimitSpec = null;
eventTypeReferences = new String[0];
annotations = new Annotation[0];
updateSpec = null;
matchRecognizeSpec = null;
forClauseSpec = null;
sqlParameters = null;
contextDesc = null;
optionalContextName = null;
createGraphDesc = null;
createExpressionDesc = null;
fireAndForgetSpec = null;
groupByExpressions = null;
intoTableSpec = null;
tableNodes = null;
}
/**
* Returns the specification for an create-window statement.
*
* @return create-window spec, or null if not such a statement
*/
public CreateWindowDesc getCreateWindowDesc() {
return createWindowDesc;
}
/**
* Returns the create-variable statement descriptor.
*
* @return create-variable spec
*/
public CreateVariableDesc getCreateVariableDesc() {
return createVariableDesc;
}
/**
* Returns the FROM-clause stream definitions.
*
* @return list of stream specifications
*/
public StreamSpecCompiled[] getStreamSpecs() {
return streamSpecs;
}
/**
* Sets the FROM-clause stream definitions.
*
* @param streamSpecs list of stream specifications
*/
public void setStreamSpecs(StreamSpecCompiled[] streamSpecs) {
this.streamSpecs = streamSpecs;
}
/**
* Returns SELECT-clause list of expressions.
*
* @return list of expressions and optional name
*/
public SelectClauseSpecCompiled 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 OuterJoinDesc[] getOuterJoinDescList() {
return outerJoinDescList;
}
/**
* 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;
}
public void setHavingExprRootNode(ExprNode havingExprRootNode) {
this.havingExprRootNode = 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 OrderByItem[] getOrderByList() {
return orderByList;
}
/**
* Returns the stream selector (rstream/istream).
*
* @return stream selector
*/
public SelectClauseStreamSelectorEnum getSelectStreamSelectorEnum() {
return selectStreamDirEnum;
}
/**
* Set the where clause filter node.
*
* @param optionalFilterNode is the where-clause filter node
*/
public void setFilterExprRootNode(ExprNode optionalFilterNode) {
filterExprRootNode = optionalFilterNode;
}
/**
* Returns the list of lookup expression nodes.
*
* @return lookup nodes
*/
public ExprSubselectNode[] getSubSelectExpressions() {
return subSelectExpressions;
}
/**
* Returns the specification for an on-delete or on-select statement.
*
* @return on-trigger spec, or null if not such a statement
*/
public OnTriggerDesc getOnTriggerDesc() {
return onTriggerDesc;
}
/**
* Returns true to indicate the statement has variables.
*
* @return true for statements that use variables
*/
public boolean isHasVariables() {
return variableReferences != null && !variableReferences.isEmpty();
}
/**
* Sets the stream selection.
*
* @param selectStreamDirEnum stream selection
*/
public void setSelectStreamDirEnum(SelectClauseStreamSelectorEnum selectStreamDirEnum) {
this.selectStreamDirEnum = selectStreamDirEnum;
}
/**
* Returns the row limit specification, or null if none supplied.
*
* @return row limit spec if any
*/
public RowLimitSpec getRowLimitSpec() {
return rowLimitSpec;
}
/**
* Returns the event type name in used by the statement.
*
* @return set of event type name
*/
public String[] getEventTypeReferences() {
return eventTypeReferences;
}
/**
* Returns annotations or empty array if none.
*
* @return annotations
*/
public Annotation[] getAnnotations() {
return annotations;
}
/**
* Sets the insert-into clause.
*
* @param insertIntoDesc insert-into clause.
*/
public void setInsertIntoDesc(InsertIntoDesc insertIntoDesc) {
this.insertIntoDesc = insertIntoDesc;
}
/**
* Sets the select clause.
*
* @param selectClauseSpec select clause
*/
public void setSelectClauseSpec(SelectClauseSpecCompiled selectClauseSpec) {
this.selectClauseSpec = selectClauseSpec;
}
/**
* Returns the update spec if update clause is used.
*
* @return update desc
*/
public UpdateDesc getUpdateSpec() {
return updateSpec;
}
/**
* Returns the match recognize spec, if used
*
* @return match recognize spec
*/
public MatchRecognizeSpec getMatchRecognizeSpec() {
return matchRecognizeSpec;
}
/**
* Return variables referenced.
*
* @return variables
*/
public Set<String> getVariableReferences() {
return variableReferences;
}
/**
* Returns create index
*
* @return create index
*/
public CreateIndexDesc getCreateIndexDesc() {
return createIndexDesc;
}
public CreateSchemaDesc getCreateSchemaDesc() {
return createSchemaDesc;
}
public ForClauseSpec getForClauseSpec() {
return forClauseSpec;
}
public Map<Integer, List<ExprNode>> getSqlParameters() {
return sqlParameters;
}
public ExprDeclaredNode[] getDeclaredExpressions() {
return declaredExpressions;
}
public CreateContextDesc getContextDesc() {
return contextDesc;
}
public String getOptionalContextName() {
return optionalContextName;
}
public CreateDataFlowDesc getCreateGraphDesc() {
return createGraphDesc;
}
public CreateExpressionDesc getCreateExpressionDesc() {
return createExpressionDesc;
}
public FireAndForgetSpec getFireAndForgetSpec() {
return fireAndForgetSpec;
}
public GroupByClauseExpressions getGroupByExpressions() {
return groupByExpressions;
}
public IntoTableSpec getIntoTableSpec() {
return intoTableSpec;
}
public ExprTableAccessNode[] getTableNodes() {
return tableNodes;
}
public CreateTableDesc getCreateTableDesc() {
return createTableDesc;
}
public void setFilterSpecsOverall(FilterSpecCompiled[] filterSpecsOverall) {
this.filterSpecsOverall = filterSpecsOverall;
}
public FilterSpecCompiled[] getFilterSpecsOverall() {
return filterSpecsOverall;
}
public NamedWindowConsumerStreamSpec[] getNamedWindowConsumersAll() {
return namedWindowConsumersAll;
}
public void setNamedWindowConsumersAll(NamedWindowConsumerStreamSpec[] namedWindowConsumersAll) {
this.namedWindowConsumersAll = namedWindowConsumersAll;
}
public ExpressionScriptProvided[] getScripts() {
return scripts;
}
}