package org.araqne.logdb.query.expr; import java.util.List; import org.araqne.logdb.QueryContext; import org.araqne.logdb.Row; public class Signature extends FunctionExpression { private Expression expr; public Signature(QueryContext ctx, List<Expression> exprs) { super("signature", exprs, 1); this.expr = exprs.get(0); } @Override public Object eval(Row map) { Object v = expr.eval(map); if (v == null) return null; return makeSignature(v.toString()); } private static String makeSignature(String line) { StringBuilder sb = new StringBuilder(line.length() >> 2); boolean inQuote = false; for (int i = 0; i < line.length(); ++i) { char c = line.charAt(i); if (c == '\"') inQuote = !inQuote; if (Character.isLetterOrDigit(c)) continue; if (!inQuote) sb.append(c); } return sb.toString(); } }