Skip to content

Enable dbms_output before calling ut_runner.run #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 26, 2017
Merged
Show file tree
Hide file tree
Changes from all 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
68 changes: 68 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_COMPATIBILITY_VERSION = "3.0.3";

private DBHelper() {}

/**
Expand Down Expand Up @@ -52,4 +54,70 @@ 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_COMPATIBILITY_VERSION);
}

/**
* Enable the dbms_output buffer with unlimited size.
* @param conn the connection
*/
public static void enableDBMSOutput(Connection conn) {
try (CallableStatement call = conn.prepareCall("BEGIN dbms_output.enable(NULL); END;")) {
call.execute();
} catch (SQLException e) {
System.out.println("Failed to enable dbms_output.");
}
}

/**
* Disable 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();
}
}

}