diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GeneratorStrategyWrapper.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GeneratorStrategyWrapper.java
index f4412e503e..b457446548 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GeneratorStrategyWrapper.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GeneratorStrategyWrapper.java
@@ -173,26 +173,26 @@ class GeneratorStrategyWrapper extends AbstractGeneratorStrategy {
return identifier + "_";
}
+ identifier = overload(definition, Mode.DEFAULT, identifier);
return identifier;
}
@Override
public String getJavaSetterName(Definition definition, Mode mode) {
- return disambiguateMethod(definition,
- convertToIdentifier(delegate.getJavaSetterName(definition, mode), language));
+ return fixMethodName(definition, mode, delegate.getJavaSetterName(definition, mode));
}
@Override
public String getJavaGetterName(Definition definition, Mode mode) {
- return disambiguateMethod(definition,
- convertToIdentifier(delegate.getJavaGetterName(definition, mode), language));
+ return fixMethodName(definition, mode, delegate.getJavaGetterName(definition, mode));
}
@Override
public String getJavaMethodName(Definition definition, Mode mode) {
- String methodName;
+ return fixMethodName(definition, mode, delegate.getJavaMethodName(definition, mode));
+ }
- methodName = delegate.getJavaMethodName(definition, mode);
+ private String fixMethodName(Definition definition, Mode mode, String methodName) {
methodName = overload(definition, mode, methodName);
methodName = convertToIdentifier(methodName, language);
@@ -203,9 +203,8 @@ class GeneratorStrategyWrapper extends AbstractGeneratorStrategy {
* [#1358] Add an overload suffix if needed
*/
private String overload(Definition definition, Mode mode, String identifier) {
- if (!StringUtils.isBlank(definition.getOverload())) {
+ if (!StringUtils.isBlank(definition.getOverload()))
identifier += getOverloadSuffix(definition, mode, definition.getOverload());
- }
return identifier;
}
diff --git a/jOOQ-examples/jOOQ-jpa-example/pom.xml b/jOOQ-examples/jOOQ-jpa-example/pom.xml
index 417ca359af..0f47bdcabc 100644
--- a/jOOQ-examples/jOOQ-jpa-example/pom.xml
+++ b/jOOQ-examples/jOOQ-jpa-example/pom.xml
@@ -3,13 +3,9 @@
4.0.0
-
- org.jooq
- jooq-examples
- 3.13.0-SNAPSHOT
-
-
+ org.jooq
jooq-jpa-example
+ 3.13.0-SNAPSHOT
jOOQ JPA Example
@@ -22,7 +18,7 @@
UTF-8
- 1.4.199
+ 1.4.200
5.4.4.Final
5.0.7.RELEASE
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
index da81dfb57b..5aa465a583 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
@@ -73,10 +73,15 @@ public abstract class AbstractTypedElementDefinition
private transient DataTypeDefinition resolvedType;
public AbstractTypedElementDefinition(T container, String name, int position, DataTypeDefinition definedType, String comment) {
+ this(container, name, position, definedType, comment, null);
+ }
+
+ public AbstractTypedElementDefinition(T container, String name, int position, DataTypeDefinition definedType, String comment, String overload) {
super(container.getDatabase(),
container.getSchema(),
protectName(container, name, position),
- comment);
+ comment,
+ overload);
this.container = container;
this.definedType = definedType;
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultParameterDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultParameterDefinition.java
index e946cc83ac..171527ddf0 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultParameterDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultParameterDefinition.java
@@ -64,7 +64,11 @@ public class DefaultParameterDefinition
}
public DefaultParameterDefinition(RoutineDefinition routine, String name, int position, DataTypeDefinition type, boolean isDefaulted, boolean isUnnamed, String comment) {
- super(routine, name, position, type, comment);
+ this(routine, name, position, type, isDefaulted, isUnnamed, comment, null);
+ }
+
+ public DefaultParameterDefinition(RoutineDefinition routine, String name, int position, DataTypeDefinition type, boolean isDefaulted, boolean isUnnamed, String comment, String overload) {
+ super(routine, name, position, type, comment, overload);
this.isDefaulted = isDefaulted;
this.isUnnamed = isUnnamed;
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java
index 2c0f6a10f1..fce2300c20 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java
@@ -38,14 +38,17 @@
package org.jooq.meta.postgres;
+import static org.jooq.impl.DSL.count;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.name;
+import static org.jooq.impl.DSL.partitionBy;
import static org.jooq.meta.postgres.information_schema.Tables.PARAMETERS;
import static org.jooq.meta.postgres.information_schema.Tables.ROUTINES;
import java.sql.SQLException;
import java.util.Arrays;
+import org.jooq.Field;
import org.jooq.Record;
import org.jooq.meta.AbstractRoutineDefinition;
import org.jooq.meta.DataTypeDefinition;
@@ -55,6 +58,8 @@ import org.jooq.meta.DefaultParameterDefinition;
import org.jooq.meta.InOutDefinition;
import org.jooq.meta.ParameterDefinition;
import org.jooq.meta.SchemaDefinition;
+import org.jooq.meta.postgres.information_schema.tables.Parameters;
+import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
/**
@@ -64,7 +69,8 @@ import org.jooq.tools.StringUtils;
*/
public class PostgresRoutineDefinition extends AbstractRoutineDefinition {
- private final String specificName;
+ private static final JooqLogger log = JooqLogger.getLogger(PostgresRoutineDefinition.class);
+ private final String specificName;
public PostgresRoutineDefinition(Database database, Record record) {
super(database.getSchema(record.get(ROUTINES.ROUTINE_SCHEMA)),
@@ -113,54 +119,64 @@ public class PostgresRoutineDefinition extends AbstractRoutineDefinition {
@Override
protected void init0() throws SQLException {
- for (Record record : create().select(
- PARAMETERS.PARAMETER_NAME,
- PARAMETERS.DATA_TYPE,
- PARAMETERS.CHARACTER_MAXIMUM_LENGTH,
- PARAMETERS.NUMERIC_PRECISION,
- PARAMETERS.NUMERIC_SCALE,
- PARAMETERS.UDT_SCHEMA,
- PARAMETERS.UDT_NAME,
- PARAMETERS.ORDINAL_POSITION,
- PARAMETERS.PARAMETER_MODE,
- ((PostgresDatabase) getDatabase()).is94()
- ? PARAMETERS.PARAMETER_DEFAULT
- : inline((String) null).as(PARAMETERS.PARAMETER_DEFAULT))
- .from(PARAMETERS)
- .where(PARAMETERS.SPECIFIC_SCHEMA.equal(getSchema().getName()))
- .and(PARAMETERS.SPECIFIC_NAME.equal(specificName))
- .orderBy(PARAMETERS.ORDINAL_POSITION.asc())
- .fetch()) {
+ Parameters p = PARAMETERS;
+ Field count = count()
+ .filterWhere(p.PARAMETER_NAME.ne(inline("")))
+ .over(partitionBy(p.SPECIFIC_NAME, p.PARAMETER_NAME));
+ Field c = count.as("c");
- String inOut = record.get(PARAMETERS.PARAMETER_MODE);
+ for (Record record : create().select(
+ p.PARAMETER_NAME,
+ p.DATA_TYPE,
+ p.CHARACTER_MAXIMUM_LENGTH,
+ p.NUMERIC_PRECISION,
+ p.NUMERIC_SCALE,
+ p.UDT_SCHEMA,
+ p.UDT_NAME,
+ p.ORDINAL_POSITION,
+ p.PARAMETER_MODE,
+ ((PostgresDatabase) getDatabase()).is94()
+ ? p.PARAMETER_DEFAULT
+ : inline((String) null).as(p.PARAMETER_DEFAULT),
+ c
+ )
+ .from(p)
+ .where(p.SPECIFIC_SCHEMA.equal(getSchema().getName()))
+ .and(p.SPECIFIC_NAME.equal(specificName))
+ .orderBy(p.ORDINAL_POSITION.asc())) {
+
+ String parameterName = record.get(p.PARAMETER_NAME);
+ String inOut = record.get(p.PARAMETER_MODE);
SchemaDefinition typeSchema = null;
- String schemaName = record.get(PARAMETERS.UDT_SCHEMA);
+ String schemaName = record.get(p.UDT_SCHEMA);
if (schemaName != null)
typeSchema = getDatabase().getSchema(schemaName);
DataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
typeSchema,
- record.get(PARAMETERS.DATA_TYPE),
- record.get(PARAMETERS.CHARACTER_MAXIMUM_LENGTH),
- record.get(PARAMETERS.NUMERIC_PRECISION),
- record.get(PARAMETERS.NUMERIC_SCALE),
+ record.get(p.DATA_TYPE),
+ record.get(p.CHARACTER_MAXIMUM_LENGTH),
+ record.get(p.NUMERIC_PRECISION),
+ record.get(p.NUMERIC_SCALE),
null,
- record.get(PARAMETERS.PARAMETER_DEFAULT),
+ record.get(p.PARAMETER_DEFAULT),
name(
- record.get(PARAMETERS.UDT_SCHEMA),
- record.get(PARAMETERS.UDT_NAME)
+ record.get(p.UDT_SCHEMA),
+ record.get(p.UDT_NAME)
)
);
ParameterDefinition parameter = new DefaultParameterDefinition(
this,
- record.get(PARAMETERS.PARAMETER_NAME),
- record.get(PARAMETERS.ORDINAL_POSITION),
+ parameterName,
+ record.get(p.ORDINAL_POSITION),
type,
- record.get(PARAMETERS.PARAMETER_DEFAULT) != null,
- StringUtils.isBlank(record.get(PARAMETERS.PARAMETER_NAME))
+ record.get(p.PARAMETER_DEFAULT) != null,
+ StringUtils.isBlank(parameterName),
+ "",
+ record.get(c) > 1 ? record.get(p.ORDINAL_POSITION, String.class) : null
);
addParameter(InOutDefinition.getFromString(inOut), parameter);