[jOOQ/jOOQ#12187] The XML MULTISET_AGG emulation doesn't work with unnamed bind values in Db2
This commit is contained in:
parent
4caea0581c
commit
61ca24dffa
@ -258,7 +258,7 @@ final class Multiset<R extends Record> extends AbstractField<Result<R>> {
|
||||
XMLAggOrderByStep<XML> order;
|
||||
AggregateFilterStep<XML> filter;
|
||||
|
||||
filter = order = xmlaggEmulation(select, multisetCondition, false);
|
||||
filter = order = xmlaggEmulation(select, false);
|
||||
|
||||
// TODO: Re-apply derived table's ORDER BY clause as aggregate ORDER BY
|
||||
if (multisetCondition)
|
||||
@ -385,11 +385,11 @@ final class Multiset<R extends Record> extends AbstractField<Result<R>> {
|
||||
)
|
||||
: field;
|
||||
}
|
||||
static final XMLAggOrderByStep<XML> xmlaggEmulation(Fields fields, boolean multisetCondition, boolean agg) {
|
||||
static final XMLAggOrderByStep<XML> xmlaggEmulation(Fields fields, boolean agg) {
|
||||
return xmlagg(
|
||||
xmlelement(N_RECORD,
|
||||
map(fields.fields(), (f, i) -> xmlelement(
|
||||
multisetCondition ? fieldNameString(i) : f.getName(),
|
||||
fieldNameString(i),
|
||||
agg ? f : DSL.field(fieldName(i), f.getDataType())
|
||||
))
|
||||
)
|
||||
|
||||
@ -137,7 +137,7 @@ final class MultisetAgg<R extends Record> extends DefaultAggregateFunction<Resul
|
||||
}
|
||||
|
||||
case XML: {
|
||||
XMLAggOrderByStep<XML> order = xmlaggEmulation(row, multisetCondition, true);
|
||||
XMLAggOrderByStep<XML> order = xmlaggEmulation(row, true);
|
||||
|
||||
Field<XML> f = xmlelement(N_RESULT,
|
||||
multisetCondition
|
||||
|
||||
@ -208,13 +208,8 @@ final class XMLHandler<R extends Record> extends DefaultHandler {
|
||||
else
|
||||
fieldName = qName;
|
||||
|
||||
Field<?> f;
|
||||
|
||||
if (s.row != null)
|
||||
if ((f = s.row.field(fieldName)) != null)
|
||||
s.fields.add(f);
|
||||
else
|
||||
s.fields.add(s.row.field(s.fields.size()));
|
||||
s.fields.add(s.row.field(s.fields.size()));
|
||||
else
|
||||
s.fields.add(field(name(fieldName), VARCHAR));
|
||||
}
|
||||
@ -233,7 +228,7 @@ final class XMLHandler<R extends Record> extends DefaultHandler {
|
||||
if (log.isDebugEnabled())
|
||||
log.debug("< " + qName);
|
||||
|
||||
if (s.inResult && s.inRecord == 0 && "result".equalsIgnoreCase(qName)) {
|
||||
if (states.isEmpty() && s.inResult && s.inRecord == 0 && "result".equalsIgnoreCase(qName)) {
|
||||
s.inResult = false;
|
||||
}
|
||||
else if (s.inResult && s.inFields && "fields".equalsIgnoreCase(qName)) {
|
||||
@ -269,10 +264,11 @@ final class XMLHandler<R extends Record> extends DefaultHandler {
|
||||
s = states.pop();
|
||||
break x;
|
||||
}
|
||||
else if (f.getName().equals(qName) && f.getDataType().isMultiset()) {
|
||||
else if ("result".equalsIgnoreCase(qName) && f.getDataType().isMultiset()) {
|
||||
initResult();
|
||||
peek.values.add(s.result);
|
||||
s = states.pop();
|
||||
break x;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user