From 62e252bf6d4051ca40f3fc5ff9289d98393f6407 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 16 Mar 2022 15:30:01 +0100 Subject: [PATCH] [jOOQ/jOOQ#7803] Support ArrayRecord.format() --- .../java/org/jooq/impl/AbstractResult.java | 11 ++++++++--- .../java/org/jooq/impl/ArrayRecordImpl.java | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java index a4875e40ae..83764c5892 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java @@ -154,7 +154,7 @@ abstract class AbstractResult extends AbstractFormattable impl // Buffer some rows for formatting purposes for (int i = 0; i < MAX_RECORDS && it.hasNext(); i++) - buffer.offer(it.next()); + buffer.offer(nullSafe(it.next())); // Get max decimal places for numeric type columns int size = fields.size(); @@ -258,7 +258,7 @@ abstract class AbstractResult extends AbstractFormattable impl if (record == null) if (it.hasNext()) - record = it.next(); + record = nullSafe(it.next()); else break recordLoop; @@ -322,6 +322,11 @@ abstract class AbstractResult extends AbstractFormattable impl } } + @SuppressWarnings("unchecked") + private final R nullSafe(R r) { + return r != null ? r : (R) Tools.configuration(this).dsl().newRecord(fields()); + } + private final void formatHorizontalLine(Writer writer, TXTFormat format, final int[] widths) throws java.io.IOException { if (format.verticalTableBorder()) if (format.intersectLines()) @@ -1352,7 +1357,7 @@ abstract class AbstractResult extends AbstractFormattable impl * @param visual Whether the formatted output is to be consumed visually * (HTML, TEXT) or by a machine (CSV, JSON, XML) */ - private static final String format0(Object value, boolean changed, boolean visual) { + static final String format0(Object value, boolean changed, boolean visual) { // [#2741] TODO: This logic will be externalised in new SPI String formatted = changed && visual ? "*" : ""; diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java index b6c78aaa9e..2243fde891 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java @@ -402,6 +402,24 @@ package org.jooq.impl; + + + + + + + + + + + + + + + + + +