Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions src/main/java/org/utplsql/api/DBHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
*/
public final class DBHelper {

public static final String UTPLSQL_VERSION = "3.0.3";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be called: UTPLSQL_COMPATIBILITY_VERSION


private DBHelper() {}

/**
Expand Down Expand Up @@ -52,4 +54,80 @@ public static String getCurrentSchema(Connection conn) throws SQLException {
}
}

/**
* Check the utPLSQL version compatibility.
* @param conn the connection
* @return true if the requested utPLSQL version is compatible with the one installed on database
* @throws SQLException any database error
*/
public static boolean versionCompatibilityCheck(Connection conn, String requested, String current)
throws SQLException {
CallableStatement callableStatement = null;
try {
callableStatement = conn.prepareCall("BEGIN ? := ut_runner.version_compatibility_check(?, ?); END;");
callableStatement.registerOutParameter(1, Types.SMALLINT);
callableStatement.setString(2, requested);

if (current == null)
callableStatement.setNull(3, Types.VARCHAR);
else
callableStatement.setString(3, current);

callableStatement.executeUpdate();
return callableStatement.getInt(1) == 1;
} catch (SQLException e) {
if (e.getErrorCode() == 6550)
return false;
else
throw e;
} finally {
if (callableStatement != null)
callableStatement.close();
}
}

public static boolean versionCompatibilityCheck(Connection conn, String requested)
throws SQLException {
return versionCompatibilityCheck(conn, requested, null);
}

public static boolean versionCompatibilityCheck(Connection conn)
throws SQLException {
return versionCompatibilityCheck(conn, UTPLSQL_VERSION);
}

/**
* Enables the dbms_output buffer.
* @param conn the connection
* @param bufferLen the buffer length
*/
public static void enableDBMSOutput(Connection conn, int bufferLen) {
try (CallableStatement call = conn.prepareCall("BEGIN dbms_output.enable(?); END;")) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would use NULL as max value of the buffer.
As per Oracle doc, ENABLE(NULL) makes the buffer size unlimited.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, I will remove the one with the size parameter, I think we don't need that anyways...

call.setInt(1, bufferLen);
call.execute();
} catch (SQLException e) {
System.out.println("Failed to enable dbms_output.");
}
}

/**
* Enables the dbms_output buffer.
* @param conn the connection
*/
public static void enableDBMSOutput(Connection conn) {
enableDBMSOutput(conn, Integer.MAX_VALUE);
}

/**
* Disables the dbms_output buffer.
* @param conn the connection
*/
public static void disableDBMSOutput(Connection conn) {
try (CallableStatement call = conn.prepareCall("BEGIN dbms_output.disable(); END;")) {
call.execute();
} catch (SQLException e) {
System.out.println("Failed to disable dbms_output.");
}
}

}
7 changes: 6 additions & 1 deletion src/main/java/org/utplsql/api/TestRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ public void run(Connection conn) throws SomeTestsFailedException, SQLException {
OracleConnection oraConn = conn.unwrap(OracleConnection.class);
CallableStatement callableStatement = null;
try {
DBHelper.enableDBMSOutput(conn);

callableStatement = conn.prepareCall(
"BEGIN " +
"ut_runner.run(" +
Expand Down Expand Up @@ -172,8 +174,11 @@ public void run(Connection conn) throws SomeTestsFailedException, SQLException {
throw e;
}
} finally {
if (callableStatement != null)
if (callableStatement != null) {
callableStatement.close();
}

DBHelper.disableDBMSOutput(conn);
}
}

Expand Down
37 changes: 37 additions & 0 deletions src/test/java/org/utplsql/api/DBHelperTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.utplsql.api;

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.utplsql.api.rules.DatabaseRule;

import java.sql.SQLException;

public class DBHelperTest {

@Rule
public final DatabaseRule db = new DatabaseRule();

@Test
public void compatibleVersion() {
try {
boolean isCompatible = DBHelper.versionCompatibilityCheck(db.newConnection(), "3.0.0", "3.0.0");
Assert.assertTrue(isCompatible);
} catch (SQLException e) {
e.printStackTrace();
Assert.fail();
}
}

@Test
public void incompatibleVersion() {
try {
boolean isCompatible = DBHelper.versionCompatibilityCheck(db.newConnection(), "3.1.0", "3.0.0");
Assert.assertFalse(isCompatible);
} catch (SQLException e) {
e.printStackTrace();
Assert.fail();
}
}

}