package edu.washington.escience.myria.expression; import edu.washington.escience.myria.Type; import edu.washington.escience.myria.expression.evaluate.ExpressionOperatorParameter; /** * Returns a sequence of substrings of a given string, split on a regular expression. */ public class SplitExpression extends BinaryExpression { /***/ private static final long serialVersionUID = 1L; /** * This is not really unused, it's used automagically by Jackson deserialization. */ @SuppressWarnings("unused") private SplitExpression() { super(); } /** * Takes the string to be split and the regex to split it on. * * @param left the left operand (index of string column). * @param right the right operand (regular expression string). */ public SplitExpression(final ExpressionOperator left, final ExpressionOperator right) { super(left, right); } @Override public Type getOutputType(final ExpressionOperatorParameter parameters) { checkOperandTypes(Type.STRING_TYPE, Type.STRING_TYPE, parameters); return Type.STRING_TYPE; } @Override public String getJavaString(final ExpressionOperatorParameter parameters) { return new StringBuilder("java.util.regex.Pattern.compile(") .append(getRight().getJavaString(parameters)) .append(")") .append(".split(") .append(getLeft().getJavaString(parameters)) .append(", -1)") .toString(); } @Override public boolean hasArrayOutputType() { return true; } }