java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java
branchv_0
changeset 233 0fb3b92e01c5
parent 225 906f767ef9b3
equal deleted inserted replaced
232:4061e0c7f907 233:0fb3b92e01c5
    23 import static info.globalcode.sql.dk.Functions.notNull;
    23 import static info.globalcode.sql.dk.Functions.notNull;
    24 import info.globalcode.sql.dk.NamedParameter;
    24 import info.globalcode.sql.dk.NamedParameter;
    25 import info.globalcode.sql.dk.configuration.PropertyDeclaration;
    25 import info.globalcode.sql.dk.configuration.PropertyDeclaration;
    26 import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
    26 import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
    27 import java.sql.Array;
    27 import java.sql.Array;
       
    28 import java.sql.ResultSet;
    28 import java.sql.SQLException;
    29 import java.sql.SQLException;
    29 import java.sql.SQLXML;
    30 import java.sql.SQLXML;
       
    31 import java.util.ArrayList;
    30 import java.util.LinkedHashMap;
    32 import java.util.LinkedHashMap;
    31 import java.util.List;
    33 import java.util.List;
    32 import java.util.Map;
    34 import java.util.Map;
    33 import java.util.logging.Level;
    35 import java.util.logging.Level;
    34 import java.util.logging.Logger;
    36 import java.util.logging.Logger;
   169 				Object[] array = (Object[]) sqlArray.getArray();
   171 				Object[] array = (Object[]) sqlArray.getArray();
   170 				printStartElement(qname("column"), attributes);
   172 				printStartElement(qname("column"), attributes);
   171 				printArray(array);
   173 				printArray(array);
   172 				printEndElement();
   174 				printEndElement();
   173 			} catch (SQLException e) {
   175 			} catch (SQLException e) {
       
   176 				// FIXME: rewrite array formatting, remember array mode, don't try sqlArray.getArray() again and again if it has failed
   174 				log.log(Level.SEVERE, "Unable to format array", e);
   177 				log.log(Level.SEVERE, "Unable to format array", e);
       
   178 				try {
       
   179 					ResultSet arrayResultSet = sqlArray.getResultSet();
       
   180 					//int columnCount = arrayResultSet.getMetaData().getColumnCount();
       
   181 					ArrayList<Object> arrayList = new ArrayList<>();
       
   182 					while (arrayResultSet.next()) {
       
   183 						arrayList.add(arrayResultSet.getObject(2));
       
   184 						// for (int i = 1; i <= columnCount; i++) {
       
   185 						// 	log.log(Level.INFO, "Array column {0} = {1}", new Object[]{i, arrayResultSet.getObject(i)});
       
   186 						// }
       
   187 					}
       
   188 
       
   189 					printStartElement(qname("column"), attributes);
       
   190 					// FIXME: instanceof SQLXML, see below
       
   191 					printArray(arrayList.toArray());
       
   192 					printEndElement();
       
   193 
       
   194 				} catch (SQLException e2) {
       
   195 					// FIXME: fix logging, error recovery
       
   196 					log.log(Level.SEVERE, "Second level fuck up !!!", e2);
       
   197 				}
       
   198 
   175 				writeColumnValue(String.valueOf(value));
   199 				writeColumnValue(String.valueOf(value));
   176 			}
   200 			}
   177 
   201 
   178 		} else if (value instanceof SQLXML) {
   202 		} else if (value instanceof SQLXML) { // FIXME: move to separate method, to AbstractFormatter?
   179 			SQLXML xml = (SQLXML) value;
   203 			SQLXML xml = (SQLXML) value;
   180 			// TODO: parse DOM/SAX and transplant XML, don't escape (optional)
   204 			// TODO: parse DOM/SAX and transplant XML, don't escape (optional)
   181 			try {
   205 			try {
   182 				printTextElement(qname("column"), attributes, xml.getString());
   206 				printTextElement(qname("column"), attributes, xml.getString());
   183 			} catch (SQLException e) {
   207 			} catch (SQLException e) {