diff --git a/src/main/java/org/utplsql/api/outputBuffer/AbstractOutputBuffer.java b/src/main/java/org/utplsql/api/outputBuffer/AbstractOutputBuffer.java index 1f2ab60..0211663 100644 --- a/src/main/java/org/utplsql/api/outputBuffer/AbstractOutputBuffer.java +++ b/src/main/java/org/utplsql/api/outputBuffer/AbstractOutputBuffer.java @@ -3,7 +3,10 @@ import org.utplsql.api.reporter.Reporter; import java.io.PrintStream; -import java.sql.*; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -62,8 +65,6 @@ public void printAvailable(Connection conn, List printStreams) thro }); } - protected abstract PreparedStatement getLinesStatement( Connection conn ) throws SQLException; - protected abstract CallableStatement getLinesCursorStatement( Connection conn ) throws SQLException; /** @@ -74,11 +75,13 @@ public void printAvailable(Connection conn, List printStreams) thro */ public void fetchAvailable(Connection conn, Consumer onLineFetched) throws SQLException { - try (PreparedStatement pstmt = getLinesStatement(conn)) { + try (CallableStatement cstmt = getLinesCursorStatement(conn)) { + cstmt.execute(); + cstmt.setFetchSize(1); - try (ResultSet resultSet = pstmt.executeQuery() ) { + try ( ResultSet resultSet = (ResultSet) cstmt.getObject(1)) { while (resultSet.next()) - onLineFetched.accept(resultSet.getString(1)); + onLineFetched.accept(resultSet.getString("text")); } } } diff --git a/src/main/java/org/utplsql/api/outputBuffer/CompatibilityOutputBufferPre310.java b/src/main/java/org/utplsql/api/outputBuffer/CompatibilityOutputBufferPre310.java index ab0683b..eb96fa8 100644 --- a/src/main/java/org/utplsql/api/outputBuffer/CompatibilityOutputBufferPre310.java +++ b/src/main/java/org/utplsql/api/outputBuffer/CompatibilityOutputBufferPre310.java @@ -5,7 +5,6 @@ import java.sql.CallableStatement; import java.sql.Connection; -import java.sql.PreparedStatement; import java.sql.SQLException; /** Compatibility Output-Buffer for 3.0.0 - 3.0.4 @@ -18,13 +17,6 @@ class CompatibilityOutputBufferPre310 extends AbstractOutputBuffer { super(reporter); } - @Override - protected PreparedStatement getLinesStatement(Connection conn) throws SQLException { - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table(ut_output_buffer.get_lines(?))"); - pstmt.setString(1, getReporter().getId()); - return pstmt; - } - @Override protected CallableStatement getLinesCursorStatement(Connection conn) throws SQLException { CallableStatement cstmt = conn.prepareCall("BEGIN ? := ut_output_buffer.get_lines_cursor(?); END;"); diff --git a/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java b/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java index d3794eb..f3d5761 100644 --- a/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java +++ b/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java @@ -2,16 +2,12 @@ import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleConnection; -import oracle.jdbc.OraclePreparedStatement; -import org.utplsql.api.reporter.Reporter; import oracle.jdbc.OracleTypes; +import org.utplsql.api.reporter.Reporter; -import javax.xml.transform.Result; -import java.io.PrintStream; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.SQLException; /** * Fetches the lines produced by a reporter. @@ -29,14 +25,6 @@ class DefaultOutputBuffer extends AbstractOutputBuffer { super(reporter); } - @Override - protected PreparedStatement getLinesStatement(Connection conn) throws SQLException { - OracleConnection oraConn = conn.unwrap(OracleConnection.class); - OraclePreparedStatement pstmt = (OraclePreparedStatement)oraConn.prepareStatement("select * from table(?.get_lines())"); - pstmt.setORAData(1, getReporter()); - return pstmt; - } - @Override protected CallableStatement getLinesCursorStatement(Connection conn) throws SQLException { OracleConnection oraConn = conn.unwrap(OracleConnection.class); diff --git a/src/main/java/org/utplsql/api/reporter/Reporter.java b/src/main/java/org/utplsql/api/reporter/Reporter.java index 193bf30..7797c57 100644 --- a/src/main/java/org/utplsql/api/reporter/Reporter.java +++ b/src/main/java/org/utplsql/api/reporter/Reporter.java @@ -5,8 +5,6 @@ import oracle.jdbc.OracleTypes; import oracle.sql.Datum; import oracle.sql.ORAData; -import oracle.sql.STRUCT; -import oracle.sql.StructDescriptor; import org.utplsql.api.compatibility.CompatibilityProxy; import org.utplsql.api.outputBuffer.OutputBuffer; @@ -103,9 +101,7 @@ public String getId() { public Datum toDatum(Connection c) throws SQLException { - StructDescriptor sd = - StructDescriptor.createDescriptor(getTypeName(), c); - return new STRUCT(sd, c, getAttributes()); + return (Datum)c.createStruct(getTypeName(), getAttributes()); } public OutputBuffer getOutputBuffer() { diff --git a/src/main/java/org/utplsql/api/reporter/ReporterFactory.java b/src/main/java/org/utplsql/api/reporter/ReporterFactory.java index ec35787..8e9fb4b 100644 --- a/src/main/java/org/utplsql/api/reporter/ReporterFactory.java +++ b/src/main/java/org/utplsql/api/reporter/ReporterFactory.java @@ -3,10 +3,10 @@ import oracle.sql.Datum; import oracle.sql.ORAData; import oracle.sql.ORADataFactory; -import oracle.sql.STRUCT; import org.utplsql.api.compatibility.CompatibilityProxy; import java.sql.SQLException; +import java.sql.Struct; import java.util.HashMap; import java.util.Map; import java.util.function.BiFunction; @@ -117,9 +117,9 @@ public Map getRegisteredReporterInfo() { @Override public ORAData create(Datum d, int sqlType) throws SQLException { if (d == null) return null; - if ( d instanceof STRUCT) { - String sqlName = ((STRUCT)d).getDescriptor().getName(); - return createReporter(sqlName, ((STRUCT)d).getAttributes()); + if ( d instanceof Struct) { + String sqlName = ((Struct)d).getSQLTypeName(); + return createReporter(sqlName, ((Struct)d).getAttributes()); } return null;