[jOOQ/jOOQ#8555] in-memory enum types members are not sanitized

This commit is contained in:
Lukas Eder 2019-09-26 16:34:01 +02:00
parent 85195604c9
commit a7cd78e488

View File

@ -9428,25 +9428,34 @@ final class ParserImpl implements Parser {
// [#7025] TODO, replace this by a dynamic enum data type encoding, once available
String className = "GeneratedEnum" + (literals.hashCode() & 0x7FFFFFF);
return SQLDataType.VARCHAR(length)
.asEnumDataType(Reflect
.compile(
"org.jooq.impl." + className,
StringBuilder content = new StringBuilder();
content.append(
"package org.jooq.impl;\n"
+ "enum " + className + " implements org.jooq.EnumType {\n"
+ " " + String.join(", ", literals) + ";\n"
+ "enum ").append(className).append(" implements org.jooq.EnumType {\n");
for (int i = 0; i < literals.size(); i++) {
content.append(" E").append(i).append("(\"").append(literals.get(i).replace("\"", "\\\"")).append("\"),\n");
}
content.append(
" ;\n"
+ " final String literal;\n"
+ " private ").append(className).append("(String literal) { this.literal = literal; }\n"
+ " @Override\n"
+ " public String getName() {\n"
+ " return getClass().getName();\n"
+ " }\n"
+ " @Override\n"
+ " public String getLiteral() {\n"
+ " return name();"
+ " return literal;\n"
+ " }\n"
+ "}")
.get()
)
+ "}");
return SQLDataType.VARCHAR(length)
.asEnumDataType(Reflect.compile("org.jooq.impl." + className, content.toString()).get())
;
}