提交 6b9c3623 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Implement get/set/updateObject() for SQLXML

上级 1cfd2ffa
......@@ -3877,6 +3877,10 @@ public class JdbcResultSet extends TraceObject implements ResultSet, JdbcResultS
int id = getNextId(TraceObject.CLOB);
return type.cast(value == ValueNull.INSTANCE
? null : new JdbcClob(conn, value, JdbcLob.State.WITH_VALUE, id));
} else if (type == SQLXML.class) {
int id = getNextId(TraceObject.SQLXML);
return type.cast(value == ValueNull.INSTANCE
? null : new JdbcSQLXML(conn, value, JdbcLob.State.WITH_VALUE, id));
} else if (type == TimestampWithTimeZone.class) {
return type.cast(value.getObject());
} else if (DataType.isGeometryClass(type)) {
......
......@@ -1120,6 +1120,15 @@ public class DataType {
} catch (SQLException e) {
throw DbException.convert(e);
}
} else if (x instanceof java.sql.SQLXML) {
try {
java.sql.SQLXML clob = (java.sql.SQLXML) x;
Reader r = new BufferedReader(clob.getCharacterStream());
return session.getDataHandler().getLobStorage().
createClob(r, -1);
} catch (SQLException e) {
throw DbException.convert(e);
}
} else if (x instanceof java.sql.Array) {
java.sql.Array array = (java.sql.Array) x;
try {
......
......@@ -84,7 +84,11 @@ public class TestSQLXML extends TestDb {
assertEquals(1, stat.executeUpdate("UPDATE TEST SET X = '" + XML + '\''));
rs = stat.executeQuery("SELECT * FROM TEST");
assertTrue(rs.next());
SQLXML sqlxml = rs.getSQLXML(2);
// ResultSet.getObject()
SQLXML sqlxml = rs.getObject(2, SQLXML.class);
assertEquals(XML, sqlxml.getString());
sqlxml = rs.getSQLXML(2);
// getBinaryStream()
assertEquals(XML, IOUtils.readStringAndClose(IOUtils.getReader(sqlxml.getBinaryStream()), -1));
// getCharacterStream()
......@@ -176,6 +180,13 @@ public class TestSQLXML extends TestDb {
ResultSet rs = stat.executeQuery("SELECT X FROM TEST");
assertTrue(rs.next());
assertXML(rs.getSQLXML(1).getString());
prep.setObject(1, sqlxml);
assertEquals(1, prep.executeUpdate());
rs = stat.executeQuery("SELECT X FROM TEST");
assertTrue(rs.next());
assertXML(rs.getSQLXML(1).getString());
Statement st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
rs = st.executeQuery("SELECT * FROM TEST FOR UPDATE");
assertTrue(rs.next());
......@@ -184,6 +195,14 @@ public class TestSQLXML extends TestDb {
rs = stat.executeQuery("SELECT X FROM TEST");
assertTrue(rs.next());
assertXML(rs.getSQLXML(1).getString());
rs = st.executeQuery("SELECT * FROM TEST FOR UPDATE");
assertTrue(rs.next());
rs.updateObject(2, sqlxml);
rs.updateRow();
rs = stat.executeQuery("SELECT X FROM TEST");
assertTrue(rs.next());
assertXML(rs.getSQLXML(1).getString());
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论