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
-->
-
+
-
+
-
+
-
+
-
+
-
+
-
+