mirror of
https://github.com/moparisthebest/JdbcMapper
synced 2024-11-21 16:45:02 -05:00
Add annother inlist test where an array is re-used, fix hsqldb string type
This commit is contained in:
parent
6e56622ce0
commit
4874968824
@ -129,7 +129,7 @@ public interface JdbcMapper extends Closeable {
|
||||
public enum DatabaseType {
|
||||
DEFAULT(null, null),
|
||||
STANDARD("numeric", "text"),
|
||||
UNNEST("numeric", "text"),
|
||||
UNNEST("NUMERIC", "VARCHAR"),
|
||||
ORACLE("ARRAY_NUM_TYPE", "ARRAY_STR_TYPE");
|
||||
|
||||
public final String arrayNumberTypeName, arrayStringTypeName;
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.moparisthebest.jdbc;
|
||||
|
||||
import com.moparisthebest.jdbc.codegen.JdbcMapper;
|
||||
|
||||
import java.sql.Array;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
@ -24,7 +26,7 @@ public class ArrayInList implements InList {
|
||||
}
|
||||
|
||||
public ArrayInList() {
|
||||
this("numeric", "text");
|
||||
this(JdbcMapper.DatabaseType.STANDARD.arrayNumberTypeName, JdbcMapper.DatabaseType.STANDARD.arrayStringTypeName);
|
||||
}
|
||||
|
||||
protected String columnAppend(final String columnName) {
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.moparisthebest.jdbc;
|
||||
|
||||
import com.moparisthebest.jdbc.codegen.JdbcMapper;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.sql.Array;
|
||||
@ -39,7 +41,7 @@ public class OracleArrayInList extends ArrayInList {
|
||||
}
|
||||
|
||||
public OracleArrayInList() {
|
||||
this("ARRAY_NUM_TYPE", "ARRAY_STR_TYPE");
|
||||
this(JdbcMapper.DatabaseType.ORACLE.arrayNumberTypeName, JdbcMapper.DatabaseType.ORACLE.arrayStringTypeName);
|
||||
}
|
||||
|
||||
protected String columnAppend(final String columnName) {
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.moparisthebest.jdbc;
|
||||
|
||||
import com.moparisthebest.jdbc.codegen.JdbcMapper;
|
||||
|
||||
/**
|
||||
* HSQLDB requires array in lists to be implemented this way:
|
||||
* https://stackoverflow.com/questions/35939489/createarrayof-string-in-hsqldb-jdbc-returns-abstractmethoderror/35964424#35964424
|
||||
@ -17,7 +19,7 @@ public class UnNestArrayInList extends ArrayInList {
|
||||
}
|
||||
|
||||
public UnNestArrayInList() {
|
||||
super();
|
||||
this(JdbcMapper.DatabaseType.UNNEST.arrayNumberTypeName, JdbcMapper.DatabaseType.UNNEST.arrayStringTypeName);
|
||||
}
|
||||
|
||||
protected String columnAppend(final String columnName) {
|
||||
|
@ -249,4 +249,7 @@ public interface QmDao extends JdbcMapper {
|
||||
|
||||
@SQL("SELECT person_no, first_name, last_name, birth_date from person WHERE {person_no IN personNos} ORDER BY person_no")
|
||||
List<FieldPerson> getFieldPeople(List<Long> personNos) throws SQLException;
|
||||
|
||||
@SQL("SELECT person_no, first_name, last_name, birth_date from person WHERE {person_no IN personNos} AND ({first_name IN names} OR {last_name IN names}) ORDER BY person_no")
|
||||
List<FieldPerson> getFieldPeopleByName(List<Long> personNos, List<String> names) throws SQLException;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import java.util.stream.Stream;
|
||||
import java.time.*;
|
||||
//IFJAVA8_END
|
||||
|
||||
import static com.moparisthebest.jdbc.ListQueryMapper.inListReplace;
|
||||
import static com.moparisthebest.jdbc.TryClose.tryClose;
|
||||
|
||||
public class QueryMapperQmDao implements QmDao {
|
||||
@ -456,6 +457,16 @@ public class QueryMapperQmDao implements QmDao {
|
||||
|
||||
@Override
|
||||
public List<FieldPerson> getFieldPeople(final List<Long> personNos) throws SQLException {
|
||||
return lqm.toList("SELECT * from person WHERE " + ListQueryMapper.inListReplace + " ORDER BY person_no", FieldPerson.class, lqm.inList("person_no", personNos));
|
||||
return lqm.toList("SELECT * from person WHERE " + inListReplace + " ORDER BY person_no", FieldPerson.class, lqm.inList("person_no", personNos));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FieldPerson> getFieldPeopleByName(final List<Long> personNos, final List<String> names) throws SQLException {
|
||||
return lqm.toList("SELECT * from person WHERE " + inListReplace + " AND (" + inListReplace + " OR " + inListReplace + ") ORDER BY person_no",
|
||||
FieldPerson.class,
|
||||
lqm.inList("person_no", personNos),
|
||||
lqm.inList("first_name", names),
|
||||
lqm.inList("last_name", names)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,8 @@ import java.util.Map;
|
||||
//IFJAVA8_START
|
||||
import java.util.stream.Stream;
|
||||
import java.time.*;
|
||||
|
||||
import static com.moparisthebest.jdbc.ListQueryMapper.inListReplace;
|
||||
//IFJAVA8_END
|
||||
|
||||
public class QueryMapperTypeQmDao extends QueryMapperQmDao {
|
||||
@ -336,4 +338,14 @@ public class QueryMapperTypeQmDao extends QueryMapperQmDao {
|
||||
public List<FieldPerson> getFieldPeople(final List<Long> personNos) throws SQLException {
|
||||
return lqm.toType("SELECT * from person WHERE " + ListQueryMapper.inListReplace + " ORDER BY person_no", new TypeReference<List<FieldPerson>>() {}, lqm.inList("person_no", personNos));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FieldPerson> getFieldPeopleByName(final List<Long> personNos, final List<String> names) throws SQLException {
|
||||
return lqm.toType("SELECT * from person WHERE " + inListReplace + " AND (" + inListReplace + " OR " + inListReplace + ") ORDER BY person_no",
|
||||
new TypeReference<List<FieldPerson>>() {},
|
||||
lqm.inList("person_no", personNos),
|
||||
lqm.inList("first_name", names),
|
||||
lqm.inList("last_name", names)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -533,6 +533,16 @@ public class QueryMapperTest {
|
||||
assertArrayEquals(people, fromDb.toArray());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListQueryMapperListMultiple() throws SQLException {
|
||||
if(!supportsInList(qm))
|
||||
return;
|
||||
final List<FieldPerson> fromDb = qm.getFieldPeopleByName(
|
||||
Arrays.asList(people[0].getPersonNo(), people[1].getPersonNo(), people[2].getPersonNo()),
|
||||
Arrays.asList(people[0].getFirstName(), people[1].getFirstName(), people[2].getFirstName()));
|
||||
assertArrayEquals(people, fromDb.toArray());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResultSetIterable() throws SQLException {
|
||||
final ResultSetIterable<FieldPerson> rsi = qm.getThreePeopleResultSetIterable(people[0].getPersonNo(), people[1].getPersonNo(), people[2].getPersonNo());
|
||||
|
Loading…
Reference in New Issue
Block a user