XML array hack v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 26 Feb 2019 15:57:49 +0100
branchv_0
changeset 233 0fb3b92e01c5
parent 232 4061e0c7f907
child 234 305871254838
XML array hack
java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java
--- 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 {