From c0de46eef81f1f4cb182ca188237490e85a86b43 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Sun, 5 Feb 2017 15:54:42 +0100 Subject: [PATCH] [#5834] Improve formatting of multi-argument named parameter procedure calls --- .../java/org/jooq/impl/AbstractRoutine.java | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index e8e734bd9b..4ca132851f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -59,8 +59,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.jooq.AggregateFunction; @@ -609,6 +611,7 @@ public abstract class AbstractRoutine extends AbstractQueryPart implements Ro String separator = ""; List> parameters = getParameters(); + Map> indexes = new LinkedHashMap>(); for (int i = 0; i < parameters.size(); i++) { Parameter parameter = parameters.get(i); @@ -616,26 +619,49 @@ public abstract class AbstractRoutine extends AbstractQueryPart implements Ro if (parameter.equals(getReturnParameter())) continue; - // OUT and IN OUT parameters are always written as a '?' bind variable - if (getOutParameters().contains(parameter)) { - context.sql(separator); - toSQLOutParam(context, parameter, i); - } - // [#1183] [#3533] Omit defaulted parameters - else if (inValuesDefaulted.contains(parameter)) { + else if (inValuesDefaulted.contains(parameter)) continue; - } + + // Ordinary IN, INOUT, and OUT parameters + else + indexes.put(i, parameter); + } + + boolean indent = false; + + + + + + + if (indent) + context.formatIndentStart() + .formatNewLine(); + + int i = 0; + for (Entry> entry : indexes.entrySet()) { + Parameter parameter = entry.getValue(); + int index = entry.getKey(); + context.sql(separator); + + if (indent && i++ > 0) + context.formatNewLine(); + + // OUT and IN OUT parameters are always written as a '?' bind variable + if (getOutParameters().contains(parameter)) + toSQLOutParam(context, parameter, index); // IN parameters are rendered normally - else { - context.sql(separator); - toSQLInParam(context, parameter, i, getInValues().get(parameter)); - } + else + toSQLInParam(context, parameter, index, getInValues().get(parameter)); separator = ", "; } + if (indent) + context.formatIndentEnd().formatNewLine(); + context.sql(')'); toSQLEnd(context); }