[#3456] Name clash in generated code when Routine argument is called "f" (functions) or "p" (procedures)
This commit is contained in:
parent
8a7aa8e254
commit
4da811b6bb
@ -2542,6 +2542,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
final String className = getStrategy().getFullJavaClassName(function);
|
||||
final String localVar = disambiguateJavaMemberName(function.getInParameters(), "f");
|
||||
|
||||
out.tab(1).javadoc("Get <code>%s</code> as a field", function.getQualifiedOutputName());
|
||||
out.tab(1).print("public static %s<%s> %s(",
|
||||
@ -2564,17 +2565,17 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
out.println(") {");
|
||||
out.tab(2).println("%s f = new %s();", className, className);
|
||||
out.tab(2).println("%s %s = new %s();", className, localVar, className);
|
||||
|
||||
for (ParameterDefinition parameter : function.getInParameters()) {
|
||||
final String paramSetter = getStrategy().getJavaSetterName(parameter, Mode.DEFAULT);
|
||||
final String paramMember = getStrategy().getJavaMemberName(parameter);
|
||||
|
||||
out.tab(2).println("f.%s(%s);", paramSetter, paramMember);
|
||||
out.tab(2).println("%s.%s(%s);", localVar, paramSetter, paramMember);
|
||||
}
|
||||
|
||||
out.println();
|
||||
out.tab(2).println("return f.as%s();", function.isAggregate() ? "AggregateFunction" : "Field");
|
||||
out.tab(2).println("return %s.as%s();", localVar, function.isAggregate() ? "AggregateFunction" : "Field");
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
|
||||
@ -2662,7 +2663,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
final String functionName = function.getQualifiedOutputName();
|
||||
final String functionType = getJavaType(function.getReturnType());
|
||||
final String methodName = getStrategy().getJavaMethodName(function, Mode.DEFAULT);
|
||||
|
||||
// [#3456] Local variables should not collide with actual function arguments
|
||||
final String configurationArgument = disambiguateJavaMemberName(function.getInParameters(), "configuration");
|
||||
final String localVar = disambiguateJavaMemberName(function.getInParameters(), "f");
|
||||
|
||||
out.tab(1).javadoc("Call <code>%s</code>", functionName);
|
||||
out.tab(1).print("public %s%s %s(",
|
||||
@ -2688,7 +2692,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
out.println(") {");
|
||||
out.tab(2).println("%s f = new %s();", className, className);
|
||||
out.tab(2).println("%s %s = new %s();", className, localVar, className);
|
||||
|
||||
for (ParameterDefinition parameter : function.getInParameters()) {
|
||||
final String paramSetter = getStrategy().getJavaSetterName(parameter, Mode.DEFAULT);
|
||||
@ -2696,15 +2700,15 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
? "this"
|
||||
: getStrategy().getJavaMemberName(parameter);
|
||||
|
||||
out.tab(2).println("f.%s(%s);", paramSetter, paramMember);
|
||||
out.tab(2).println("%s.%s(%s);", localVar, paramSetter, paramMember);
|
||||
}
|
||||
|
||||
out.println();
|
||||
out.tab(2).println("f.execute(%s);", instance ? "configuration()" : configurationArgument);
|
||||
out.tab(2).println("%s.execute(%s);", localVar, instance ? "configuration()" : configurationArgument);
|
||||
|
||||
// TODO [#956] Find a way to register "SELF" as OUT parameter
|
||||
// in case this is a UDT instance (member) function
|
||||
out.tab(2).println("return f.getReturnValue();");
|
||||
out.tab(2).println("return %s.getReturnValue();", localVar);
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
|
||||
@ -2717,6 +2721,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
final String className = getStrategy().getFullJavaClassName(procedure);
|
||||
final String configurationArgument = disambiguateJavaMemberName(procedure.getInParameters(), "configuration");
|
||||
final String localVar = disambiguateJavaMemberName(procedure.getInParameters(), "p");
|
||||
|
||||
out.tab(1).javadoc("Call <code>%s</code>", procedure.getQualifiedOutputName());
|
||||
out.print("\tpublic ");
|
||||
@ -2762,7 +2767,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
out.println(") {");
|
||||
out.tab(2).println("%s p = new %s();", className, className);
|
||||
out.tab(2).println("%s %s = new %s();", className, localVar, className);
|
||||
|
||||
for (ParameterDefinition parameter : procedure.getInParameters()) {
|
||||
final String setter = getStrategy().getJavaSetterName(parameter, Mode.DEFAULT);
|
||||
@ -2770,11 +2775,11 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
? "this"
|
||||
: getStrategy().getJavaMemberName(parameter);
|
||||
|
||||
out.tab(2).println("p.%s(%s);", setter, arg);
|
||||
out.tab(2).println("%s.%s(%s);", localVar, setter, arg);
|
||||
}
|
||||
|
||||
out.println();
|
||||
out.tab(2).println("p.execute(%s);", instance ? "configuration()" : configurationArgument);
|
||||
out.tab(2).println("%s.execute(%s);", localVar, instance ? "configuration()" : configurationArgument);
|
||||
|
||||
if (procedure.getOutParameters().size() > 0) {
|
||||
final ParameterDefinition parameter = procedure.getOutParameters().get(0);
|
||||
@ -2787,18 +2792,18 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
// [#3117] Avoid funny call-site ambiguity if this is a UDT that is implemented by an interface
|
||||
if (generateInterfaces() && isUDT) {
|
||||
out.tab(2).println("from((%s) p.%s());", columnTypeInterface, getter);
|
||||
out.tab(2).println("from((%s) %s.%s());", columnTypeInterface, localVar, getter);
|
||||
}
|
||||
else {
|
||||
out.tab(2).println("from(p.%s());", getter);
|
||||
out.tab(2).println("from(%s.%s());", localVar, getter);
|
||||
}
|
||||
}
|
||||
|
||||
if (procedure.getOutParameters().size() == 1) {
|
||||
out.tab(2).println("return p.%s();", getter);
|
||||
out.tab(2).println("return %s.%s();", localVar, getter);
|
||||
}
|
||||
else if (procedure.getOutParameters().size() > 1) {
|
||||
out.tab(2).println("return p;");
|
||||
out.tab(2).println("return %s;", localVar);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2734,7 +2734,7 @@
|
||||
</strategy>
|
||||
<database>
|
||||
<name>org.jooq.util.postgres.PostgresDatabase</name>
|
||||
<includes>t_.*|x_.*|v_.*|m_.*|V_.*|p_.*|f_.*|u_.*|(f|p)[0-9]+|s_.*</includes>
|
||||
<includes>t_.*|x_.*|v_.*|m_.*|V_.*|p(_.*)?|f(_.*)?|u_.*|(f|p)[0-9]+|s_.*</includes>
|
||||
<excludes>t_book_details|.*?_seq|_.*</excludes>
|
||||
<dateAsTimestamp>false</dateAsTimestamp>
|
||||
<unsignedTypes>true</unsignedTypes>
|
||||
|
||||
@ -29,6 +29,8 @@ DROP FUNCTION p391(
|
||||
/
|
||||
DROP FUNCTION f_author_exists(author_name VARCHAR);/
|
||||
DROP FUNCTION f_one();/
|
||||
DROP FUNCTION f(f int, f_ int);/
|
||||
DROP FUNCTION p(p int, p_ int);/
|
||||
DROP FUNCTION f_number(n int);/
|
||||
DROP FUNCTION f317(p1 int, p2 int, p3 int, p4 int);/
|
||||
DROP FUNCTION p_get_two_cursors(books OUT refcursor, authors OUT refcursor)/
|
||||
@ -784,11 +786,28 @@ END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
/
|
||||
|
||||
CREATE FUNCTION f (f int, f_ int)
|
||||
RETURNS INT
|
||||
AS $$
|
||||
BEGIN
|
||||
RETURN f;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
/
|
||||
|
||||
CREATE FUNCTION p (p int, p_ int)
|
||||
RETURNS VOID
|
||||
AS $$
|
||||
BEGIN
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
/
|
||||
|
||||
CREATE FUNCTION f_one ()
|
||||
RETURNS INT
|
||||
AS $$
|
||||
BEGIN
|
||||
RETURN 1;
|
||||
RETURN 1;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user