Skip to content
Open
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
21 changes: 10 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nordstrom.tools</groupId>
<artifactId>java-utils</artifactId>
Expand Down Expand Up @@ -38,7 +41,7 @@
<gpg-plugin.version>3.2.8</gpg-plugin.version>
<staging-plugin.version>1.7.0</staging-plugin.version>
<release-plugin.version>3.1.1</release-plugin.version>
<apache-derby.version>10.14.2.0</apache-derby.version>
<hsqldb.version>2.7.4</hsqldb.version>
<skipSigning>true</skipSigning>
</properties>

Expand All @@ -52,7 +55,7 @@
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>>https://ossrh-staging-api.central.sonatype.com/content/repositories/snapshots</url>
<url>https://ossrh-staging-api.central.sonatype.com/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
Expand Down Expand Up @@ -86,9 +89,10 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>${apache-derby.version}</version>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${hsqldb.version}</version>
<classifier>jdk8</classifier>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down Expand Up @@ -142,11 +146,6 @@
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
<passphraseServerId>${gpg.keyname}</passphraseServerId>
<skip>${skipSigning}</skip>
</configuration>
</execution>
</executions>
</plugin>
Expand Down
14 changes: 9 additions & 5 deletions src/test/java/com/nordstrom/common/jar/JarUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@
import static org.testng.Assert.assertTrue;

import java.io.File;

import org.testng.annotations.Test;

public class JarUtilsTest {

private static final String[] CONTEXTS = { "org.testng.annotations.Test", "com.beust.jcommander.JCommander",
"org.apache.derby.jdbc.EmbeddedDriver", "org.slf4j.Logger" };


private static final String[] CONTEXTS = {
"org.testng.annotations.Test",
"com.beust.jcommander.JCommander",
"org.hsqldb.jdbc.JDBCDriver",
"org.slf4j.Logger"
};

@Test
public void testClasspath() {
String result = JarUtils.getClasspath(CONTEXTS);
Expand All @@ -21,5 +26,4 @@ public void testClasspath() {
assertTrue(file.exists(), "nonexistent path entry: " + thisPath);
}
}

}
174 changes: 103 additions & 71 deletions src/test/java/com/nordstrom/common/jdbc/DatabaseUtilsTest.java
Original file line number Diff line number Diff line change
@@ -1,68 +1,84 @@
package com.nordstrom.common.jdbc;

import static org.testng.Assert.assertEquals;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLSyntaxErrorException;
import java.sql.Statement;
import java.sql.Types;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.nordstrom.common.jdbc.DatabaseUtils.QueryAPI;
import com.nordstrom.common.jdbc.DatabaseUtils.ResultPackage;
import com.nordstrom.common.jdbc.DatabaseUtils.SProcAPI;

public class DatabaseUtilsTest {

static {
System.setProperty("derby.system.home", "target");
}


private static Connection connection;

@BeforeClass
public static void startDerby() {
Connection conn = null;
try {
conn = DriverManager.getConnection(TestQuery.connection() + ";create=true");
} catch (SQLException e) {
printSQLException(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
printSQLException(e);
}
}
}
public static void startDB() throws SQLException {
connection = DriverManager.getConnection("jdbc:hsqldb:mem:testdb", "SA", "");
}

@AfterClass
public static void stopDerby() {
Connection conn = null;
try {
conn = DriverManager.getConnection(TestQuery.connection() + ";shutdown=true");
} catch (SQLException e) {
if ( (e.getErrorCode() == 45000) && ("08006".equals(e.getSQLState())) ) {
// we got the expected exception
System.out.println("Derby shut down normally");
} else {
System.err.println("Derby did not shut down normally");
printSQLException(e);
}
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
printSQLException(e);
}
}
public static void stopDB() throws SQLException {
if (connection != null && !connection.isClosed()) {
connection.close();
}
}


// /**
// * Ensures the required tables and procedures exist before tests run.
// */
// private static void createObjects() throws SQLException {
// try (Statement stmt = connection.createStatement()) {
// // Table
// stmt.executeUpdate("CREATE TABLE IF NOT EXISTS LOCATION (" +
// "id INT PRIMARY KEY, " +
// "name VARCHAR(255))");
//
// // Drop procedures if they exist
// stmt.executeUpdate("DROP PROCEDURE IF EXISTS IN_VARARGS");
// stmt.executeUpdate("DROP PROCEDURE IF EXISTS OUT_VARARGS");
// stmt.executeUpdate("DROP PROCEDURE IF EXISTS INOUT_VARARGS");
//
// // Create stored procedures
// stmt.execute(
// "CREATE PROCEDURE IN_VARARGS(IN param1 INT, OUT param2 INT) " +
// "MODIFIES SQL DATA " +
// "BEGIN ATOMIC SET param2 = param1 * 2; END"
// );
//
// stmt.execute(
// "CREATE PROCEDURE OUT_VARARGS(OUT param1 INT, OUT param2 INT) " +
// "MODIFIES SQL DATA " +
// "BEGIN ATOMIC SET param1 = 1; SET param2 = 2; END"
// );
//
// stmt.execute(
// "CREATE PROCEDURE INOUT_VARARGS(INOUT param1 INT, INOUT param2 INT) " +
// "MODIFIES SQL DATA " +
// "BEGIN ATOMIC SET param1 = param1 + 1; SET param2 = param2 + 1; END"
// );
// }
// }

@BeforeMethod
public void cleanTable() throws SQLException {
try (Statement stmt = connection.createStatement()) {
stmt.executeUpdate("DELETE FROM LOCATION");
} catch (SQLSyntaxErrorException e) {
printSQLException(e);
}
}

@Test
public void createTable() {
DatabaseUtils.update(TestQuery.CREATE);
Expand Down Expand Up @@ -130,7 +146,10 @@ public void dropTable() {
public void testInVarargs() {
try {
DatabaseUtils.update(TestQuery.IN_VARARGS);
} catch (Exception ignored) {
} catch (Exception e) {
if (e instanceof SQLException) {
printSQLException((SQLException) e);
}
}

String result = DatabaseUtils.getString(TestSProc.IN_VARARGS, "", 5, 4, 3);
Expand Down Expand Up @@ -183,33 +202,46 @@ public void testInOutVarargs() throws SQLException {
}

enum TestQuery implements QueryAPI {
CREATE("create table location(num int, addr varchar(40))"),
INSERT("insert into location values (?, ?)", "num", "addr"),
UPDATE("update location set num=?, addr=? where num=?", "num", "addr", "whereNum"),
SHOW_ADDRESSES("create procedure SHOW_ADDRESSES() parameter style java "
+ "language java dynamic result sets 1 "
+ "external name 'com.nordstrom.common.jdbc.StoredProcedure.showAddresses'"),
DROP_PROC_SHOW("drop procedure SHOW_ADDRESSES"),
GET_NUM("select num from location where addr='Union St.'"),
GET_STR("select addr from location where num=1910"),
GET_RESULT_PACKAGE("select * from location"),
DROP("drop table location"),
IN_VARARGS("create procedure IN_VARARGS(out result varchar( 32672 ), b int ...) "
+ "language java parameter style derby no sql deterministic "
+ "external name 'com.nordstrom.common.jdbc.StoredProcedure.inVarargs'"),
DROP_PROC_IN("drop procedure IN_VARARGS"),
OUT_VARARGS("create procedure OUT_VARARGS(seed int, out b int ...) "
+ "language java parameter style derby no sql deterministic "
+ "external name 'com.nordstrom.common.jdbc.StoredProcedure.outVarargs'"),
DROP_PROC_OUT("drop procedure OUT_VARARGS"),
INOUT_VARARGS("create procedure INOUT_VARARGS(seed int, inout b int ...) "
+ "language java parameter style derby no sql deterministic "
+ "external name 'com.nordstrom.common.jdbc.StoredProcedure.inoutVarargs'"),
DROP_PROC_INOUT("drop procedure INOUT_VARARGS");

CREATE("CREATE TABLE location(num INT, addr VARCHAR(40))"),
INSERT("INSERT INTO location VALUES (?, ?)", "num", "addr"),
UPDATE("UPDATE location SET num=?, addr=? WHERE num=?", "num", "addr", "whereNum"),
SHOW_ADDRESSES(
"CREATE PROCEDURE SHOW_ADDRESSES() "
+ "READS SQL DATA "
+ "DYNAMIC RESULT SETS 1 "
+ "EXTERNAL NAME 'CLASSPATH:com.nordstrom.common.jdbc.StoredProcedure.showAddresses' "
+ "LANGUAGE JAVA"
),
DROP_PROC_SHOW("DROP PROCEDURE SHOW_ADDRESSES"),
GET_NUM("SELECT num FROM location WHERE addr='Union St.'"),
GET_STR("SELECT addr FROM location WHERE num=1910"),
GET_RESULT_PACKAGE("SELECT * FROM location"),
DROP("DROP TABLE location"),
IN_VARARGS(
"CREATE PROCEDURE IN_VARARGS(OUT result VARCHAR(32672), IN values INTEGER ARRAY) "
+ "READS SQL DATA "
+ "EXTERNAL NAME 'CLASSPATH:com.nordstrom.common.jdbc.StoredProcedure.inVarargs' "
+ "LANGUAGE JAVA"
),
DROP_PROC_IN("DROP PROCEDURE IN_VARARGS"),
OUT_VARARGS(
"CREATE PROCEDURE OUT_VARARGS(IN seed INT, OUT b INTEGER ARRAY) "
+ "READS SQL DATA "
+ "EXTERNAL NAME 'CLASSPATH:com.nordstrom.common.jdbc.StoredProcedure.outVarargs' "
+ "LANGUAGE JAVA"
),
DROP_PROC_OUT("DROP PROCEDURE OUT_VARARGS"),
INOUT_VARARGS(
"CREATE PROCEDURE INOUT_VARARGS(IN seed INT, INOUT b INTEGER ARRAY) "
+ "READS SQL DATA "
+ "EXTERNAL NAME 'CLASSPATH:com.nordstrom.common.jdbc.StoredProcedure.inoutVarargs' "
+ "LANGUAGE JAVA"
),
DROP_PROC_INOUT("DROP PROCEDURE INOUT_VARARGS");

private final String query;
private final String[] args;

TestQuery(String query, String... args) {
this.query = query;
this.args = args;
Expand All @@ -234,9 +266,9 @@ public String getConnection() {
public Enum<TestQuery> getEnum() {
return this;
}

public static String connection() {
return "jdbc:derby:@TestDB";
return "jdbc:hsqldb:mem:testdb";
}
}

Expand Down
22 changes: 5 additions & 17 deletions src/test/java/com/nordstrom/common/jdbc/StoredProcedure.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,16 @@ public class StoredProcedure {

public static void showAddresses(ResultSet[] rs) throws SQLException {
Connection con = DriverManager.getConnection("jdbc:default:connection");
String query = "select NUM, ADDR from LOCATION";
Statement stmt = con.createStatement();
rs[0] = stmt.executeQuery(query);
rs[0] = stmt.executeQuery("SELECT NUM, ADDR FROM LOCATION");
}

//////////////////////////
//
// IN, OUT, IN/OUT PARAMETERS
//
//////////////////////////

public static void inVarargs(String[] result, int... values) {
String retval;
if (values == null) {
retval = null;
} else if (values.length == 0) {
if (values == null || values.length == 0) {
retval = null;
} else {
StringBuilder buffer = new StringBuilder();

buffer.append("RESULT: ");

StringBuilder buffer = new StringBuilder("RESULT:");
for (int value : values) {
buffer.append(" ").append(value);
}
Expand All @@ -42,15 +30,15 @@ public static void inVarargs(String[] result, int... values) {
result[0] = retval;
}

public static void outVarargs(int seed, int[]... values) throws Exception {
public static void outVarargs(int seed, int[]... values) {
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i][0] = seed + i;
}
}
}

public static void inoutVarargs(int seed, int[]... values) throws Exception {
public static void inoutVarargs(int seed, int[]... values) {
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i][0] += seed;
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/META-INF/services/java.sql.Driver
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.apache.derby.jdbc.EmbeddedDriver
org.hsqldb.jdbc.JDBCDriver