package org.araqne.logdb.query.expr;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.araqne.logdb.QueryContext;
import org.araqne.logdb.Row;
public class Typeof extends FunctionExpression {
private Expression expr;
public Typeof(QueryContext ctx, List<Expression> exprs) {
super("typeof", exprs, 1);
expr = exprs.get(0);
}
@Override
public Object eval(Row map) {
Object o = expr.eval(map);
if (o == null)
return null;
if (o instanceof String)
return "string";
else if (o instanceof Integer)
return "int";
else if (o instanceof Long)
return "long";
else if (o instanceof Short)
return "short";
else if (o instanceof Double)
return "double";
else if (o instanceof Inet4Address)
return "ipv4";
else if (o instanceof Inet6Address)
return "ipv6";
else if (o instanceof Boolean)
return "bool";
else if (o instanceof Date)
return "date";
else if (o instanceof Float)
return "float";
else if (o instanceof Map)
return "map";
else if (o instanceof List)
return "list";
else if (o.getClass().isArray()) {
Class<?> c = o.getClass().getComponentType();
if (c == byte.class) {
return "byte[]";
} else if (c == int.class) {
return "int[]";
} else if (c == long.class) {
return "long[]";
} else if (c == short.class) {
return "short[]";
} else if (c == boolean.class) {
return "bool[]";
} else if (c == double.class) {
return "double[]";
} else if (c == float.class) {
return "float[]";
} else {
return "object[]";
}
}
// should not reach here
return o.getClass().getName();
}
}