From a7cd78e4887d62d539dcdb62098e8c836450f66f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 26 Sep 2019 16:34:01 +0200 Subject: [PATCH] [jOOQ/jOOQ#8555] in-memory enum types members are not sanitized --- .../main/java/org/jooq/impl/ParserImpl.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index bc3d17933b..2fefdd11a8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -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()) ; }