[#6794] Custom type converters ignored for table-valued (set-returning) function parameters

This commit is contained in:
lukaseder 2018-05-16 17:52:49 +02:00
parent 42f9cf414e
commit 2a3a57faf8

View File

@ -4203,15 +4203,14 @@ public class JavaGenerator extends AbstractGenerator {
for (ParameterDefinition parameter : table.getParameters()) {
final String paramArgName = getStrategy().getJavaMemberName(parameter);
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()));
final List<String> converter = out.ref(list(parameter.getType(resolver()).getConverter()));
out.tab(3).print(separator);
if (parametersAsField) {
if (parametersAsField)
out.println("%s", paramArgName);
}
else {
out.println("%s.value(%s, %s)", DSL.class, paramArgName, paramTypeRef);
}
else
out.println("%s.value(%s, %s" + converterTemplateForTableValuedFunction(converter) + ")", DSL.class, paramArgName, paramTypeRef, converter);
separator = ", ";
}
@ -4229,15 +4228,14 @@ public class JavaGenerator extends AbstractGenerator {
for (ParameterDefinition parameter : table.getParameters()) {
final String paramArgName = getStrategy().getJavaMemberName(parameter);
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()));
final List<String> converter = out.ref(list(parameter.getType(resolver()).getConverter()));
out.tab(3).print(separator);
if (parametersAsField) {
if (parametersAsField)
out.println("%s", paramArgName);
}
else {
out.println("%s.val(%s, %s)", DSL.class, paramArgName, paramTypeRef);
}
else
out.println("%s.val(%s, %s" + converterTemplateForTableValuedFunction(converter) + ")", DSL.class, paramArgName, paramTypeRef, converter);
separator = ", ";
}
@ -4268,6 +4266,21 @@ public class JavaGenerator extends AbstractGenerator {
}
}
private String converterTemplateForTableValuedFunction(List<String> converter) {
if (converter == null || converter.isEmpty())
return "[[]]";
if (converter.size() > 1)
throw new IllegalArgumentException();
switch (GenerationUtil.expressionType(converter.get(0))) {
case CONSTRUCTOR_REFERENCE:
return "[[before=.asConvertedDataType(][after=)][new %s()]]";
case EXPRESSION:
return "[[before=.asConvertedDataType(][after=)][%s]]";
default:
throw new IllegalArgumentException();
}
}
private String escapeString(String comment) {
if (comment == null)