[#1674] Export data types with Result.formatXML() and

Result.formatJSON() exports
This commit is contained in:
Ivan Dugic 2012-09-04 21:25:03 +02:00
parent 79f36b69df
commit 9242a5c510
3 changed files with 66 additions and 4 deletions

View File

@ -65,6 +65,10 @@ import org.jooq.test.jOOQAbstractTest;
import org.junit.Test;
import org.w3c.dom.Document;
/**
* @author Lukas Eder
* @author Ivan Dugic
*/
public class FormatTests<
A extends UpdatableRecord<A>,
AP,
@ -312,7 +316,8 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, I, IPK, T658,
String token2 = "";
String separator = "";
for (Field<?> field : fields) {
token2 += separator + "\"" + field.getName() + "\"";
token2 += separator + "{\"name\":\"" + field.getName() + "\"" + ",\"type\":\""
+ field.getDataType().getTypeName().toUpperCase() + "\"}";
separator = ",";
}
assertTrue(json.startsWith(token2));
@ -389,6 +394,8 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, I, IPK, T658,
for (int i = 0; i < fields.size(); i++) {
assertEquals(fields.get(i).getName(),
xp.evaluate("/result/fields/field[" + (i + 1) + "]/@name", doc));
assertEquals(fields.get(i).getDataType().getTypeName().toUpperCase(),
xp.evaluate("/result/fields/field[" + (i + 1) + "]/@type", doc));
}
assertEquals("1", xp.evaluate("count(/result/records)", doc));

View File

@ -1225,11 +1225,16 @@ class ResultImpl<R extends Record> implements Result<R>, AttachableInternal {
@Override
public final String formatJSON() {
List<String> f = new ArrayList<String>();
List<Map<String, String>> f = new ArrayList<Map<String, String>>();
List<List<Object>> r = new ArrayList<List<Object>>();
Map<String, String> fieldMap;
for (Field<?> field : getFields()) {
f.add(field.getName());
fieldMap = new LinkedHashMap<String, String>();
fieldMap.put("name", field.getName());
fieldMap.put("type", field.getDataType().getTypeName().toUpperCase());
f.add(fieldMap);
}
for (Record record : this) {
@ -1260,6 +1265,9 @@ class ResultImpl<R extends Record> implements Result<R>, AttachableInternal {
for (Field<?> field : getFields()) {
sb.append("<field name=\"");
sb.append(escapeXML(field.getName()));
sb.append("\" ");
sb.append("type=\"");
sb.append(field.getDataType().getTypeName().toUpperCase());
sb.append("\"/>");
}
@ -1308,7 +1316,7 @@ class ResultImpl<R extends Record> implements Result<R>, AttachableInternal {
Document document = builder.newDocument();
Element eResult = document.createElement("result");
eResult.setAttribute("xmlns", "http://www.jooq.org/xsd/jooq-export-1.6.2.xsd");
eResult.setAttribute("xmlns", "http://www.jooq.org/xsd/jooq-export-2.6.0.xsd");
document.appendChild(eResult);
Element eFields = document.createElement("fields");
@ -1317,6 +1325,7 @@ class ResultImpl<R extends Record> implements Result<R>, AttachableInternal {
for (Field<?> field : getFields()) {
Element eField = document.createElement("field");
eField.setAttribute("name", field.getName());
eField.setAttribute("type", field.getDataType().getTypeName().toUpperCase());
eFields.appendChild(eField);
}

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:jooq-export="http://www.jooq.org/xsd/jooq-export-1.6.2.xsd"
targetNamespace="http://www.jooq.org/xsd/jooq-export-1.6.2.xsd">
<element name="result" type="jooq-export:Result"/>
<complexType name="Result">
<sequence>
<element name="fields" type="jooq-export:Fields" maxOccurs="1" minOccurs="1"/>
<element name="records" type="jooq-export:Records" maxOccurs="1" minOccurs="1"/>
</sequence>
</complexType>
<complexType name="Fields">
<sequence>
<element name="field" type="jooq-export:Field" maxOccurs="unbounded" minOccurs="0"/>
</sequence>
</complexType>
<complexType name="Field">
<attribute name="name" type="string"/>
<attribute name="type" type="string"/>
</complexType>
<complexType name="Records">
<sequence>
<element name="record" type="jooq-export:Record" maxOccurs="unbounded" minOccurs="0"/>
</sequence>
</complexType>
<complexType name="Record">
<sequence>
<element name="value" type="jooq-export:Value" maxOccurs="unbounded" minOccurs="0"/>
</sequence>
</complexType>
<complexType name="Value">
<simpleContent>
<extension base="string">
<attribute name="field" type="string"/>
</extension>
</simpleContent>
</complexType>
</schema>