--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Feb 26 15:49:57 2019 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Feb 26 15:57:49 2019 +0100
@@ -25,8 +25,10 @@
import info.globalcode.sql.dk.configuration.PropertyDeclaration;
import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
import java.sql.Array;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLXML;
+import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -171,11 +173,33 @@
printArray(array);
printEndElement();
} catch (SQLException e) {
+ // FIXME: rewrite array formatting, remember array mode, don't try sqlArray.getArray() again and again if it has failed
log.log(Level.SEVERE, "Unable to format array", e);
+ try {
+ ResultSet arrayResultSet = sqlArray.getResultSet();
+ //int columnCount = arrayResultSet.getMetaData().getColumnCount();
+ ArrayList<Object> arrayList = new ArrayList<>();
+ while (arrayResultSet.next()) {
+ arrayList.add(arrayResultSet.getObject(2));
+ // for (int i = 1; i <= columnCount; i++) {
+ // log.log(Level.INFO, "Array column {0} = {1}", new Object[]{i, arrayResultSet.getObject(i)});
+ // }
+ }
+
+ printStartElement(qname("column"), attributes);
+ // FIXME: instanceof SQLXML, see below
+ printArray(arrayList.toArray());
+ printEndElement();
+
+ } catch (SQLException e2) {
+ // FIXME: fix logging, error recovery
+ log.log(Level.SEVERE, "Second level fuck up !!!", e2);
+ }
+
writeColumnValue(String.valueOf(value));
}
- } else if (value instanceof SQLXML) {
+ } else if (value instanceof SQLXML) { // FIXME: move to separate method, to AbstractFormatter?
SQLXML xml = (SQLXML) value;
// TODO: parse DOM/SAX and transplant XML, don't escape (optional)
try {