/*
***************************************************************************************
* 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.expression.table;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.epl.expression.core.*;
import com.espertech.esper.epl.table.mgmt.TableMetadata;
import com.espertech.esper.epl.table.mgmt.TableMetadataColumn;
import com.espertech.esper.epl.table.mgmt.TableMetadataColumnAggregation;
import com.espertech.esper.epl.table.mgmt.TableMetadataColumnPlain;
import com.espertech.esper.metrics.instrumentation.InstrumentationHelper;
import com.espertech.esper.util.JavaClassHelper;
import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.Map;
public class ExprTableAccessNodeTopLevel extends ExprTableAccessNode implements ExprEvaluatorTypableReturn {
private static final long serialVersionUID = -5475434962878200767L;
private transient LinkedHashMap<String, Object> eventType;
public ExprTableAccessNodeTopLevel(String tableName) {
super(tableName);
}
public void setStrategy(ExprTableAccessEvalStrategy strategy) {
this.strategy = strategy;
}
public ExprEvaluator getExprEvaluator() {
return this;
}
protected void validateBindingInternal(ExprValidationContext validationContext, TableMetadata tableMetadata) throws ExprValidationException {
validateGroupKeys(tableMetadata);
eventType = new LinkedHashMap<String, Object>();
for (Map.Entry<String, TableMetadataColumn> entry : tableMetadata.getTableColumns().entrySet()) {
Class classResult;
if (entry.getValue() instanceof TableMetadataColumnPlain) {
classResult = tableMetadata.getInternalEventType().getPropertyType(entry.getKey());
} else {
TableMetadataColumnAggregation aggcol = (TableMetadataColumnAggregation) entry.getValue();
classResult = JavaClassHelper.getBoxedType(aggcol.getFactory().getResultType());
}
eventType.put(entry.getKey(), classResult);
}
}
public Class getType() {
return Map.class;
}
public Object evaluate(EventBean[] eventsPerStream, boolean isNewData, ExprEvaluatorContext exprEvaluatorContext) {
if (InstrumentationHelper.ENABLED) {
InstrumentationHelper.get().qExprTableTop(this, tableName);
Object result = strategy.evaluate(eventsPerStream, isNewData, exprEvaluatorContext);
InstrumentationHelper.get().aExprTableTop(result);
return result;
}
return strategy.evaluate(eventsPerStream, isNewData, exprEvaluatorContext);
}
public LinkedHashMap<String, Object> getRowProperties() throws ExprValidationException {
return eventType;
}
public Boolean isMultirow() {
return false;
}
public Object[] evaluateTypableSingle(EventBean[] eventsPerStream, boolean isNewData, ExprEvaluatorContext context) {
return strategy.evaluateTypableSingle(eventsPerStream, isNewData, context);
}
public Object[][] evaluateTypableMulti(EventBean[] eventsPerStream, boolean isNewData, ExprEvaluatorContext context) {
throw new UnsupportedOperationException();
}
public void toPrecedenceFreeEPL(StringWriter writer) {
toPrecedenceFreeEPLInternal(writer);
}
protected boolean equalsNodeInternal(ExprTableAccessNode other) {
return true;
}
}