package org.infinispan.query.dsl;

import org.infinispan.query.dsl.impl.ParameterExpression;
import org.infinispan.query.dsl.impl.PathExpression;

/**
 * @author anistor@redhat.com
 * @since 8.0
 */
public interface Expression {

   static Expression param(String paramName) {
      return new ParameterExpression(paramName);
   }

   static Expression property(String attributePath) {
      return new PathExpression(null, attributePath);
   }

   static Expression count(String attributePath) {
      return new PathExpression(PathExpression.AggregationType.COUNT, attributePath);
   }

   static Expression sum(String attributePath) {
      return new PathExpression(PathExpression.AggregationType.SUM, attributePath);
   }

   static Expression avg(String attributePath) {
      return new PathExpression(PathExpression.AggregationType.AVG, attributePath);
   }

   static Expression min(String attributePath) {
      return new PathExpression(PathExpression.AggregationType.MIN, attributePath);
   }

   static Expression max(String attributePath) {
      return new PathExpression(PathExpression.AggregationType.MAX, attributePath);
   }
}
