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) { |