// TODO: cache? public static LiteralExpression newConstant(Object value, Determinism determinism) { if (value instanceof Boolean) { return getBooleanLiteralExpression((Boolean) value, determinism); } else if (value == null) { return getNullLiteralExpression(determinism); } PDataType type = PDataType.fromLiteral(value); byte[] b = type.toBytes(value); if (type.isNull(b)) { return getTypedNullLiteralExpression(type, determinism); } if (type == PVarchar.INSTANCE) { String s = (String) value; if (s.length() == b.length) { // single byte characters only type = PChar.INSTANCE; } } return new LiteralExpression(value, type, b, determinism); }