From 73e5405dde93ace3395b3a702ca34bdd3d89d5d7 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 18 Mar 2015 18:53:35 +0100 Subject: [PATCH] [#4146] Generate PL/SQL constants --- .../java/org/jooq/util/JavaGenerator.java | 29 +++++++++++++++++++ .../jooq/util/AbstractPackageDefinition.java | 23 +++++++++++++-- .../org/jooq/util/AbstractUDTDefinition.java | 6 ++++ .../java/org/jooq/util/PackageDefinition.java | 7 ++++- 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index ca9ffeccc8..d224643e56 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -1842,6 +1842,31 @@ public class JavaGenerator extends AbstractGenerator { watch.splitInfo("Routines generated"); } + protected void printConstant(JavaWriter out, AttributeDefinition constant) { + final String constantType = out.ref(getJavaType(constant.getType())); + final String constantId = out.ref(getStrategy().getJavaIdentifier(constant)); + + out.tab(1).javadoc("The constant %s.", constant.getQualifiedOutputName()); + + if (scala) { + out.tab(1).println("val %s = %s.field(%s.name(\"%s\", \"%s\", \"%s\"), classOf[%s]);", + constantId, DSL.class, DSL.class, + constant.getSchema().getOutputName().replace("\"", "\\\""), + constant.getContainer().getOutputName().replace("\"", "\\\""), + constant.getOutputName().replace("\"", "\\\""), + constantType); + } + else { + out.tab(1).println("public static final %s<%s> %s = %s.field(%s.name(\"%s\", \"%s\", \"%s\"), %s.class);", + Field.class, constantType, constantId, + DSL.class, DSL.class, + constant.getSchema().getOutputName().replace("\"", "\\\""), + constant.getContainer().getOutputName().replace("\"", "\\\""), + constant.getOutputName().replace("\"", "\\\""), + constantType); + } + } + protected void printRoutine(JavaWriter out, RoutineDefinition routine) { if (!routine.isSQLUsable()) { @@ -1914,6 +1939,10 @@ public class JavaGenerator extends AbstractGenerator { printSingletonInstance(out, pkg); } + for (AttributeDefinition constant : pkg.getConstants()) { + printConstant(out, constant); + } + for (RoutineDefinition routine : pkg.getRoutines()) { printRoutine(out, routine); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java index f002ada0b7..cd6ba1571c 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java @@ -52,9 +52,10 @@ import org.jooq.tools.JooqLogger; */ public abstract class AbstractPackageDefinition extends AbstractDefinition implements PackageDefinition { - private static final JooqLogger log = JooqLogger.getLogger(AbstractPackageDefinition.class); + private static final JooqLogger log = JooqLogger.getLogger(AbstractPackageDefinition.class); - private List routines; + private List routines; + private List constants; public AbstractPackageDefinition(SchemaDefinition schema, String name, String comment) { super(schema.getDatabase(), schema, name, comment); @@ -82,4 +83,22 @@ public abstract class AbstractPackageDefinition extends AbstractDefinition imple } protected abstract List getRoutines0() throws SQLException; + + @Override + public final List getConstants() { + if (constants == null) { + constants = new ArrayList(); + + try { + constants = getConstants0(); + } + catch (SQLException e) { + log.error("Error while initialising package", e); + } + } + + return constants; + } + + protected abstract List getConstants0() throws SQLException; } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java index 84322f001c..0ce3fdb793 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java @@ -40,6 +40,7 @@ */ package org.jooq.util; +import java.util.Collections; import java.util.List; /** @@ -84,4 +85,9 @@ implements } protected abstract List getRoutines0(); + + @Override + public List getConstants() { + return Collections.emptyList(); + } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/PackageDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/PackageDefinition.java index a0b3eeff08..a19c59928e 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/PackageDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/PackageDefinition.java @@ -50,7 +50,12 @@ import java.util.List; public interface PackageDefinition extends Definition { /** - * Fetch all routines from the package + * Fetch all routines from the package. */ List getRoutines(); + + /** + * Fetch all constants from the package. + */ + List getConstants(); }