Skip to content

Commit

Permalink
add test to cover all primitives
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaudroger committed Oct 30, 2019
1 parent 62d327b commit b8f4a03
Show file tree
Hide file tree
Showing 2 changed files with 317 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.sql.ResultSet;
import java.util.Arrays;

import static org.simpleflatmapper.jdbc.impl.getter.ArrayResultSetGetter.VALUE_INDEX;

public class ArrayCharacterResultSetGetter implements Getter<ResultSet, char[]>, ContextualGetter<ResultSet, char[]> {
private static final char[] INIT = new char[0];
private final int index;
Expand Down Expand Up @@ -38,7 +40,7 @@ public char[] get(ResultSet target) throws Exception {
array = Arrays.copyOf(array, newCapacity);
capacity = newCapacity;
}
array[size++] = (char) rs.getInt(1);
array[size++] = (char) rs.getInt(VALUE_INDEX);
}
} finally {
rs.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.simpleflatmapper.jdbc.JdbcMapperFactory;
import org.simpleflatmapper.test.jdbc.DbHelper;

import java.net.InetAddress;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
Expand All @@ -15,7 +14,197 @@
import static org.junit.Assert.assertEquals;

public class Issue687ArrayMappingTest {
@Test
public void mapBooleanArrayToBooleanArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjBoolean> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjBoolean.class);

ResultSet rs = s.executeQuery("select 123 as id, array[true, false]::boolean[] as array");


rs.next();

MyObjBoolean map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new boolean[]{true, false}, map.array);

} finally {
c.close();
}
}

public static class MyObjBoolean {
public final boolean[] array;
public final long id;

public MyObjBoolean(boolean[] array, long id) {
this.array = array;
this.id = id;
}
}


@Test
public void mapByteArrayToByteArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjByte> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjByte.class);

ResultSet rs = s.executeQuery("select 123 as id, bytea '\\x407F' as array");


rs.next();

MyObjByte map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new byte[]{64, 127}, map.array);

} finally {
c.close();
}
}

public static class MyObjByte {
public final byte[] array;
public final long id;

public MyObjByte(byte[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapCharArrayToCharArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjChar> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjChar.class);

ResultSet rs = s.executeQuery("select 123 as id, array[456, 678]::smallint[] as array");


rs.next();

MyObjChar map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new char[]{456, 678}, map.array);

} finally {
c.close();
}
}

public static class MyObjChar {
public final char[] array;
public final long id;

public MyObjChar(char[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapShortArrayToShortArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjShort> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjShort.class);

ResultSet rs = s.executeQuery("select 123 as id, array[456, 678]::smallint[] as array");


rs.next();

MyObjShort map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new short[]{456, 678}, map.array);

} finally {
c.close();
}
}

public static class MyObjShort {
public final short[] array;
public final long id;

public MyObjShort(short[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapIntArrayToIntArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjInt> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjInt.class);

ResultSet rs = s.executeQuery("select 123 as id, array[456, 678]::int[] as array");


rs.next();

MyObjInt map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new int[]{456, 678}, map.array);

} finally {
c.close();
}
}

public static class MyObjInt {
public final int[] array;
public final long id;

public MyObjInt(int[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapBigintArrayToLongArray() throws SQLException {

Expand All @@ -26,31 +215,146 @@ public void mapBigintArrayToLongArray() throws SQLException {
Statement s = c.createStatement();


DynamicJdbcMapper<MyObj> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObj.class);
DynamicJdbcMapper<MyObjLong> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjLong.class);

ResultSet rs = s.executeQuery("select 123 as id, array[456, 678]::bigint[] as array");


rs.next();

MyObjLong map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new long[]{456l, 678l}, map.array);

} finally {
c.close();
}
}

public static class MyObjLong {
public final long[] array;
public final long id;

public MyObjLong(long[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapFloatsToFloatArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjFloat> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjFloat.class);

ResultSet rs = s.executeQuery("select 123 as id, array[1, 2]::bigint[] as ids");
ResultSet rs = s.executeQuery("select 123 as id, array[456.54, 678.78]::real[] as array");


rs.next();

MyObj map = mapper.map(rs);
MyObjFloat map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new long[]{1l, 2l}, map.ids);
assertArrayEquals(new float[]{456.54f, 678.78f}, map.array, 0.001f);

} finally {
c.close();
}
}

public static class MyObj {
public final long[] ids;
public static class MyObjFloat {
public final float[] array;
public final long id;

public MyObj(long[] ids, long id) {
this.ids = ids;
public MyObjFloat(float[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapDoublesToDoubleArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjDouble> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjDouble.class);

ResultSet rs = s.executeQuery("select 123 as id, array[456.54, 678.78]::double precision[] as array");


rs.next();

MyObjDouble map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new double[]{456.54, 678.78}, map.array, 0.001f);

} finally {
c.close();
}
}

public static class MyObjDouble {
public final double[] array;
public final long id;

public MyObjDouble(double[] array, long id) {
this.array = array;
this.id = id;
}
}

@Test
public void mapStringsToStringArray() throws SQLException {

Connection c = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
if (c == null) return;
try
{
Statement s = c.createStatement();


DynamicJdbcMapper<MyObjString> mapper = JdbcMapperFactory
.newInstance().newMapper(MyObjString.class);

ResultSet rs = s.executeQuery("select 123 as id, array['hello', 'world']::text[] as array");


rs.next();

MyObjString map = mapper.map(rs);

assertEquals(123l, map.id);
assertArrayEquals(new String[]{"hello", "world"}, map.array);

} finally {
c.close();
}
}

public static class MyObjString {
public final String[] array;
public final long id;

public MyObjString(String[] array, long id) {
this.array = array;
this.id = id;
}
}

}

0 comments on commit b8f4a03

Please sign in to comment.