Skip to content

Commit e22ba07

Browse files
authored
Merge pull request #41 from vadeg/featute/postgres-driver-and-spring-update
Update postgres driver and spring versions.
2 parents 269d45e + 1678111 commit e22ba07

File tree

10 files changed

+120
-106
lines changed

10 files changed

+120
-106
lines changed

.travis.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
language: java
22

33
jdk:
4-
- openjdk7
5-
- oraclejdk7
4+
- openjdk8
65
- oraclejdk8
6+
7+
dist: trusty
78

89
addons:
9-
postgresql: "9.5"
10+
postgresql: "9.6"
1011

1112
# go faster on travis
1213
sudo: false

pom.xml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</parent>
1010
<groupId>de.zalando</groupId>
1111
<artifactId>zalando-sprocwrapper</artifactId>
12-
<version>1.5.2-SNAPSHOT</version>
12+
<version>2.0.0-SNAPSHOT</version>
1313
<packaging>jar</packaging>
1414
<name>Stored Procedure Wrapper</name>
1515
<description>Library to make PostgreSQL stored procedures available through simple Java "*SProcService" interfaces including automatic object serialization and deserialization (using typemapper and convention-over-configuration). Supports sharding, advisory locking, statement timeouts and PostgreSQL types such as enums and hstore.</description>
@@ -61,9 +61,8 @@
6161
<properties>
6262
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
6363
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
64-
<spring.version>3.2.3.RELEASE</spring.version>
65-
<postgresql.version>9.3-1102-jdbc41</postgresql.version>
66-
64+
<spring.version>4.3.8.RELEASE</spring.version>
65+
<postgresql.version>42.1.1</postgresql.version>
6766
</properties>
6867

6968
<build>
@@ -73,8 +72,8 @@
7372
<artifactId>maven-compiler-plugin</artifactId>
7473
<version>3.5.1</version>
7574
<configuration>
76-
<source>1.7</source>
77-
<target>1.7</target>
75+
<source>1.8</source>
76+
<target>1.8</target>
7877
</configuration>
7978
</plugin>
8079
<plugin>

src/main/java/de/zalando/sprocwrapper/proxy/OtherStoredProcedureParameter.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,44 @@
11
package de.zalando.sprocwrapper.proxy;
22

33
import java.lang.reflect.Method;
4-
54
import java.sql.Connection;
65
import java.sql.SQLException;
76
import java.util.UUID;
87

98
import org.postgresql.util.PGobject;
10-
119
import org.slf4j.Logger;
1210
import org.slf4j.LoggerFactory;
1311

12+
1413
import de.zalando.typemapper.postgres.PgTypeHelper;
1514

1615
/**
17-
* @author jmussler
16+
* @author jmussler
1817
*/
1918
class OtherStoredProcedureParameter extends StoredProcedureParameter {
2019
private static final Logger LOG = LoggerFactory.getLogger(OtherStoredProcedureParameter.class);
2120

2221
public OtherStoredProcedureParameter(final Class<?> clazz, final Method m, final String typeName, final int sqlType,
23-
final int javaPosition, final boolean sensitive) {
22+
final int javaPosition, final boolean sensitive) {
2423
super(clazz, m, typeName, sqlType, javaPosition, sensitive);
2524
}
2625

2726
@Override
2827
public Object mapParam(final Object value, final Connection connection) {
2928
if (value == null) {
29+
if (clazz.isEnum()) {
30+
/*
31+
* In situation when there is null value passed as an argument and
32+
* argument type maps to custom database type which inherited from ENUM
33+
* sql type "OTHER" will fallback to sql type "VARCHAR" what will cause an exception
34+
* "No function matches the given name and argument types. You might need to add explicit type casts."
35+
* That happens because SP expects custom type but not VARCHAR
36+
*
37+
*/
38+
final PGobject pgobj = new PGobject();
39+
pgobj.setType(typeName);
40+
return pgobj;
41+
}
3042
return null;
3143
}
3244

src/main/java/de/zalando/typemapper/core/TypeMapper.java

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,25 @@
11
package de.zalando.typemapper.core;
22

3-
import java.sql.ResultSet;
4-
import java.sql.ResultSetMetaData;
5-
import java.sql.SQLException;
6-
7-
import java.util.List;
8-
import java.util.Map;
9-
10-
import org.postgresql.jdbc4.Jdbc4Array;
11-
import org.postgresql.jdbc4.Jdbc4ResultSet;
12-
13-
import org.postgresql.util.PGobject;
14-
15-
import org.slf4j.Logger;
16-
import org.slf4j.LoggerFactory;
17-
18-
import org.springframework.jdbc.core.RowMapper;
19-
203
import de.zalando.typemapper.core.db.DbFunction;
214
import de.zalando.typemapper.core.db.DbFunctionRegister;
225
import de.zalando.typemapper.core.db.DbTypeField;
236
import de.zalando.typemapper.core.fieldMapper.ArrayFieldMapper;
247
import de.zalando.typemapper.core.fieldMapper.ObjectFieldMapper;
25-
import de.zalando.typemapper.core.result.ArrayResultNode;
26-
import de.zalando.typemapper.core.result.DbResultNode;
27-
import de.zalando.typemapper.core.result.DbResultNodeType;
28-
import de.zalando.typemapper.core.result.MapResultNode;
29-
import de.zalando.typemapper.core.result.ObjectResultNode;
30-
import de.zalando.typemapper.core.result.ResultTree;
31-
import de.zalando.typemapper.core.result.SimpleResultNode;
8+
import de.zalando.typemapper.core.result.*;
329
import de.zalando.typemapper.parser.exception.RowParserException;
3310
import de.zalando.typemapper.parser.postgres.ParseUtils;
11+
import org.postgresql.jdbc.PgArray;
12+
import org.postgresql.jdbc.PgResultSet;
13+
import org.postgresql.util.PGobject;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
import org.springframework.jdbc.core.RowMapper;
17+
18+
import java.sql.ResultSet;
19+
import java.sql.ResultSetMetaData;
20+
import java.sql.SQLException;
21+
import java.util.List;
22+
import java.util.Map;
3423

3524
public class TypeMapper<ITEM> implements RowMapper<ITEM> {
3625

@@ -76,7 +65,7 @@ private ResultTree extractResultTree(final ResultSet set) throws SQLException {
7665
LOG.trace("Extracting result tree");
7766

7867
// cast to obtain more information from the result set.
79-
final Jdbc4ResultSet pgSet = set.unwrap(Jdbc4ResultSet.class);
68+
final PgResultSet pgSet = set.unwrap(PgResultSet.class);
8069
final ResultSetMetaData rsMetaData = pgSet.getMetaData();
8170

8271
final ResultTree tree = new ResultTree();
@@ -126,8 +115,8 @@ private ResultTree extractResultTree(final ResultSet set) throws SQLException {
126115
final PGobject pgObj = (PGobject) obj;
127116
node = new ObjectResultNode(pgObj.getValue(), name, pgObj.getType(), typeId,
128117
pgSet.getStatement().getConnection());
129-
} else if (obj instanceof Jdbc4Array) {
130-
final Jdbc4Array arrayObj = (Jdbc4Array) obj;
118+
} else if (obj instanceof PgArray) {
119+
final PgArray arrayObj = (PgArray) obj;
131120

132121
// TODO pribeiro jdbc driver lacks support for arrays of user defined types. We should whether
133122
// implement the missing feature in driver or use the current approach (parse string).

src/main/java/de/zalando/typemapper/core/fieldMapper/DateFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.sql.SQLException;
55
import java.sql.Timestamp;
66

7-
import org.postgresql.jdbc2.PostgresJDBCDriverReusedTimestampUtils;
7+
import org.postgresql.jdbc.PostgresJDBCDriverReusedTimestampUtils;
88

99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;

src/main/java/de/zalando/typemapper/postgres/PgTypeHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import org.postgresql.core.BaseConnection;
1616

17-
import org.postgresql.jdbc2.PostgresJDBCDriverReusedTimestampUtils;
17+
import org.postgresql.jdbc.PostgresJDBCDriverReusedTimestampUtils;
1818

1919
import org.postgresql.util.PGobject;
2020

Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
1-
package org.postgresql.jdbc2;
1+
package org.postgresql.jdbc;
2+
3+
import org.postgresql.core.Provider;
4+
5+
import java.util.TimeZone;
26

37
/**
48
* Helper class to reuse TimestampUtils from the postgres jdbc-driver. Must be placed in org.postgresql.jdbc2 package
59
* because of package based constructor
610
*
7-
* @author wolters
11+
* @author wolters
812
*/
913
public class PostgresJDBCDriverReusedTimestampUtils extends TimestampUtils {
1014
public PostgresJDBCDriverReusedTimestampUtils() {
11-
super(true, true, false);
15+
super(false, new Provider<TimeZone>() {
16+
@Override
17+
public TimeZone get() {
18+
return TimeZone.getDefault();
19+
}
20+
});
1221
}
1322
}

src/test/java/de/zalando/sprocwrapper/SimpleIT.java

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,39 @@
11
package de.zalando.sprocwrapper;
22

3-
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertFalse;
5-
import static org.junit.Assert.assertNotNull;
6-
import static org.junit.Assert.assertNull;
7-
import static org.junit.Assert.assertTrue;
8-
93
import java.math.BigDecimal;
10-
114
import java.sql.Connection;
125
import java.sql.ResultSet;
136
import java.sql.SQLException;
147
import java.sql.Statement;
158
import java.sql.Timestamp;
16-
179
import java.text.SimpleDateFormat;
18-
1910
import java.util.ArrayList;
2011
import java.util.Arrays;
2112
import java.util.Collections;
2213
import java.util.Date;
2314
import java.util.HashMap;
2415
import java.util.List;
25-
2616
import javax.sql.DataSource;
27-
2817
import javax.validation.ConstraintViolationException;
2918

19+
import com.google.common.collect.Lists;
20+
import com.google.common.collect.Sets;
3021
import org.joda.time.DateTime;
31-
3222
import org.junit.Assert;
3323
import org.junit.Ignore;
3424
import org.junit.Test;
35-
3625
import org.junit.runner.RunWith;
37-
3826
import org.springframework.beans.factory.annotation.Autowired;
3927
import org.springframework.beans.factory.annotation.Qualifier;
40-
4128
import org.springframework.jdbc.core.JdbcTemplate;
42-
4329
import org.springframework.test.context.ContextConfiguration;
4430
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
31+
import static org.junit.Assert.assertEquals;
32+
import static org.junit.Assert.assertFalse;
33+
import static org.junit.Assert.assertNotNull;
34+
import static org.junit.Assert.assertNull;
35+
import static org.junit.Assert.assertTrue;
4536

46-
import com.google.common.collect.Lists;
47-
import com.google.common.collect.Sets;
4837

4938
import de.zalando.sprocwrapper.example.AddressPojo;
5039
import de.zalando.sprocwrapper.example.Example1DomainObject1;
@@ -77,7 +66,6 @@
7766
import de.zalando.sprocwrapper.example.TestInheritanceChild;
7867
import de.zalando.sprocwrapper.example.WrapperLookupSchema;
7968
import de.zalando.sprocwrapper.example.WrapperOptionalLookupType;
80-
8169
import de.zalando.typemapper.parser.DateTimeUtil;
8270

8371
@RunWith(SpringJUnit4ClassRunner.class)
@@ -574,11 +562,11 @@ public void testRuntime() {
574562

575563
final String sql = "SELECT ";
576564

577-
final int xx = (new JdbcTemplate(dataSource1)).queryForInt(sql + 11111);
565+
final int xx = (new JdbcTemplate(dataSource1)).queryForObject(sql + 11111, Integer.class);
578566

579567
final long startTime = System.currentTimeMillis();
580568
for (int i = 0; i < loops; i++) {
581-
final int j = (new JdbcTemplate(dataSource1)).queryForInt(sql + i);
569+
final int j = (new JdbcTemplate(dataSource1)).queryForObject(sql + i, Integer.class);
582570
}
583571

584572
final long endTime = System.currentTimeMillis();
@@ -1088,4 +1076,14 @@ public void testSQLUpdate() {
10881076
assertTrue(l1.size() == 1);
10891077
assertTrue(l2.size() == 0);
10901078
}
1079+
1080+
@Test
1081+
public void testNullComplexParam() throws Exception {
1082+
exampleSProcService.createOrder(null);
1083+
}
1084+
1085+
@Test
1086+
public void testNullEnumParam() {
1087+
exampleSProcService.useEnumParam(null);
1088+
}
10911089
}

0 commit comments

Comments
 (0)