diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index 03bd04b974..1f6e5017e4 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -357,6 +357,11 @@ public class GenerationTool { database.setDateAsTimestamp(d.isDateAsTimestamp()); if (d.isUnsignedTypes() != null) database.setSupportsUnsignedTypes(d.isUnsignedTypes()); + if (d.isIgnoreProcedureReturnValues() != null) + database.setIgnoreProcedureReturnValues(d.isIgnoreProcedureReturnValues()); + + if (Boolean.TRUE.equals(d.isIgnoreProcedureReturnValues())) + log.warn("DEPRECATED", "The flag is deprecated and used for backwards-compatibility only. It will be removed in the future."); if (StringUtils.isBlank(g.getTarget().getPackageName())) g.getTarget().setPackageName("org.jooq.generated"); 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 d3745da85d..16065ad040 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -3836,6 +3836,7 @@ public class JavaGenerator extends AbstractGenerator { final String className = out.ref(getStrategy().getFullJavaClassName(procedure)); final String configurationArgument = disambiguateJavaMemberName(procedure.getInParameters(), "configuration"); final String localVar = disambiguateJavaMemberName(procedure.getInParameters(), "p"); + final List outParams = list(procedure.getReturnValue(), procedure.getOutParameters()); out.tab(1).javadoc("Call %s", procedure.getQualifiedOutputName()); @@ -3849,11 +3850,11 @@ public class JavaGenerator extends AbstractGenerator { out.print("static "); } - if (procedure.getOutParameters().size() == 0) { + if (outParams.size() == 0) { out.print("void "); } - else if (procedure.getOutParameters().size() == 1) { - out.print(out.ref(getJavaType(procedure.getOutParameters().get(0).getType()))); + else if (outParams.size() == 1) { + out.print(out.ref(getJavaType(outParams.get(0).getType()))); out.print(" "); } else { @@ -3893,11 +3894,11 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.print(") : "); - if (procedure.getOutParameters().size() == 0) { + if (outParams.size() == 0) { out.print("Unit"); } - else if (procedure.getOutParameters().size() == 1) { - out.print(out.ref(getJavaType(procedure.getOutParameters().get(0).getType()))); + else if (outParams.size() == 1) { + out.print(out.ref(getJavaType(outParams.get(0).getType()))); } else { out.print(className); @@ -3931,10 +3932,13 @@ public class JavaGenerator extends AbstractGenerator { else out.tab(2).println("%s.execute(%s);", localVar, instance ? "configuration()" : configurationArgument); - if (procedure.getOutParameters().size() > 0) { - final ParameterDefinition parameter = procedure.getOutParameters().get(0); + if (outParams.size() > 0) { + final ParameterDefinition parameter = outParams.get(0); - final String getter = getStrategy().getJavaGetterName(parameter, Mode.DEFAULT); + // Avoid disambiguation for RETURN_VALUE getter + final String getter = parameter == procedure.getReturnValue() + ? "getReturnValue" + : getStrategy().getJavaGetterName(parameter, Mode.DEFAULT); final boolean isUDT = parameter.getType().isUDT(); if (instance) { @@ -3956,13 +3960,13 @@ public class JavaGenerator extends AbstractGenerator { } } - if (procedure.getOutParameters().size() == 1) { + if (outParams.size() == 1) { if (scala) out.tab(2).println("return %s.%s", localVar, getter); else out.tab(2).println("return %s.%s();", localVar, getter); } - else if (procedure.getOutParameters().size() > 1) { + else if (outParams.size() > 1) { if (scala) out.tab(2).println("return %s", localVar); else diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java index 08368f9c53..423fc02c28 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -111,6 +111,7 @@ public abstract class AbstractDatabase implements Database { private String[] syntheticPrimaryKeys; private String[] overridePrimaryKeys; private boolean supportsUnsignedTypes; + private boolean ignoreProcedureReturnValues; private boolean dateAsTimestamp; private List configuredSchemata; private List configuredCustomTypes; @@ -541,6 +542,16 @@ public abstract class AbstractDatabase implements Database { return supportsUnsignedTypes; } + @Override + public final void setIgnoreProcedureReturnValues(boolean ignoreProcedureReturnValues) { + this.ignoreProcedureReturnValues = ignoreProcedureReturnValues; + } + + @Override + public final boolean ignoreProcedureReturnValues() { + return ignoreProcedureReturnValues; + } + @Override public final void setDateAsTimestamp(boolean dateAsTimestamp) { this.dateAsTimestamp = dateAsTimestamp; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java index c8d3dac623..90b211949f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java @@ -163,7 +163,7 @@ public abstract class AbstractRoutineDefinition extends AbstractDefinition imple } @Override - public final boolean isSQLUsable() { + public /* non-final */ boolean isSQLUsable() { return getReturnValue() != null && getOutParameters().isEmpty(); } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Database.java b/jOOQ-meta/src/main/java/org/jooq/util/Database.java index b787b01c31..7ef1ae4d98 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -392,6 +392,16 @@ public interface Database { */ boolean supportsUnsignedTypes(); + /** + * Whether this database should ignore procedure return values. + */ + void setIgnoreProcedureReturnValues(boolean ignoreProcedureReturnValues); + + /** + * Whether this database should ignore procedure return values. + */ + boolean ignoreProcedureReturnValues(); + /** * Whether DATE columns should be treated as TIMESTAMP columns. */ diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.6.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.6.0.xsd index 959494fe2b..b2483ed3df 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.6.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.6.0.xsd @@ -7,7 +7,7 @@ - + - + - + - + - + - + - + - + @@ -165,13 +165,13 @@ - + - + @@ -180,7 +180,7 @@ matched by this expression. If left empty, this matcher applies to all tables. --> - + @@ -193,20 +193,20 @@ --> - + - + - + @@ -215,22 +215,22 @@ - + - + - + - + @@ -240,22 +240,22 @@ - + - + - + - + @@ -264,13 +264,13 @@ - + - + @@ -279,21 +279,21 @@ matched by this expression. If left empty, this matcher applies to all sequences. --> - + - + - + @@ -303,13 +303,13 @@ - + - + - + @@ -368,10 +368,10 @@ Use the pipe to separate several expressions) Watch out for case-sensitivity. Depending on your database, this might be important! - + You can create case-insensitive regular expressions using this syntax: (?i:expr) - + Whitespace is ignored and comments are possible. --> @@ -402,31 +402,31 @@ See UpdatableRecord.store() and UpdatableRecord.delete() for details --> - + - + @@ -437,6 +437,17 @@ --> + + + - + @@ -474,7 +485,7 @@ production schema. Use this to override your local development schema name for source code generation. If not specified, this will be the same as the input-schema. - + This will be ignored if outputSchemaToDefault is set to true --> @@ -560,7 +571,7 @@ - + @@ -600,7 +611,7 @@ The same as expression. This is kept for backwards compatibility reasons. --> - + - + @@ -675,20 +686,20 @@ Annotate POJOs and Records with JSR-303 validation annotations --> - + - + - + - + - + - + - +