# HG changeset patch # User František Kučera # Date 1389871688 -3600 # Node ID 871185e406b3f5df9f70bcd8ed0f5b2248ed9cc0 # Parent 8cc7862605a1f8e74fb4c8450db973f5fa93ebd3 XmlFormatter: support (multidimensional) arrays diff -r 8cc7862605a1 -r 871185e406b3 java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Thu Jan 16 12:23:16 2014 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Thu Jan 16 12:28:08 2014 +0100 @@ -20,12 +20,16 @@ import info.globalcode.sql.dk.Parameter; import info.globalcode.sql.dk.Xmlns; import info.globalcode.sql.dk.configuration.DatabaseDefinition; -import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname; import static info.globalcode.sql.dk.Functions.notNull; import info.globalcode.sql.dk.NamedParameter; +import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname; +import java.sql.Array; +import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.xml.namespace.QName; /** @@ -40,6 +44,7 @@ public static final String NAME = "xml"; // bash-completion:formatter public static final String PROPERTY_LABELED_COLUMNS = "labeledColumns"; + private static final Logger log = Logger.getLogger(XmlFormatter.class.getName()); private final boolean labeledColumns; public XmlFormatter(FormatterContext formatterContext) { @@ -152,10 +157,40 @@ } attributes.put(qname("null"), "true"); printEmptyElement(qname("column"), attributes); + } else if (value instanceof Array) { + + + + Array sqlArray = (Array) value; + try { + Object[] array = (Object[]) sqlArray.getArray(); + printStartElement(qname("column"), attributes); + printArray(array); + printEndElement(); + } catch (SQLException e) { + log.log(Level.SEVERE, "Unable to format array", e); + writeColumnValue(String.valueOf(value)); + } + + } else { printTextElement(qname("column"), attributes, toString(value)); } } + + private void printArray(Object[] array) { + printStartElement(qname("array")); + for (Object o : array) { + if (o instanceof Object[]) { + printStartElement(qname("item")); + printArray((Object[]) o); + printEndElement(); + } else { + printTextElement(qname("item"), null, String.valueOf(o)); + } + } + printEndElement(); + } @Override public void writeEndRow() {