This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openjpa.git
The following commit(s) were added to refs/heads/master by this push: new 044c7d2 OPENJPA-2860 PostgreSQL >= 10 supports setQueryTimeout 044c7d2 is described below commit 044c7d27b1e787509d00837443511a9f76cbf6dc Author: Mark Struberg <strub...@apache.org> AuthorDate: Mon Apr 5 18:16:48 2021 +0200 OPENJPA-2860 PostgreSQL >= 10 supports setQueryTimeout --- .../org/apache/openjpa/jdbc/schema/SchemaTool.java | 3 +-- .../openjpa/jdbc/sql/PostgresDictionary.java | 23 +++++++++++++++++----- .../openjpa/jdbc/sql/sql-error-state-codes.xml | 2 +- .../persistence/query/TestTimeoutException.java | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java index e138c74..6abe8cd 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java @@ -1317,8 +1317,7 @@ public class SchemaTool { } } if (!tables.isEmpty()) - gen.generateSchemas((DBIdentifier[]) tables.toArray - (new DBIdentifier[tables.size()])); + gen.generateSchemas(tables.toArray(new DBIdentifier[tables.size()])); } _db = gen.getSchemaGroup(); } diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java index c6a94b6..dd47fc2 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java @@ -176,7 +176,6 @@ public class PostgresDictionary extends DBDictionary { booleanRepresentation = BooleanRepresentationFactory.BOOLEAN; supportsLockingWithDistinctClause = false; - supportsQueryTimeout = false; supportsLockingWithOuterJoin = false; reservedWordSet.addAll(Arrays.asList(new String[]{ @@ -212,8 +211,13 @@ public class PostgresDictionary extends DBDictionary { _timestampTypes.add(timestampTypeName.toUpperCase(Locale.ENGLISH)); // handle user configured timestamp types. indexPhysicalForeignKeys = true; // PostgreSQL does not automatically create an index for a foreign key so we will + + // PostgreSQL requires to escape search strings + requiresSearchStringEscapeForLike = true; } + + @Override public Date getDate(ResultSet rs, int column) throws SQLException { @@ -796,7 +800,7 @@ public class PostgresDictionary extends DBDictionary { } /** - * Determine XML column support and backslash handling. + * Determine XML column support and backslash handling, etc */ @Override public void connectedConfiguration(Connection conn) throws SQLException { @@ -825,9 +829,10 @@ public class PostgresDictionary extends DBDictionary { if ((maj >= 9 || (maj == 8 && min >= 3))) { supportsXMLColumn = true; } - - // PostgreSQL requires to escape search strings - requiresSearchStringEscapeForLike = true; + if (maj < 10) { + // setQueryTimeout only got implemented pretty late + supportsQueryTimeout = false; + } // Old PostgreSQL requires double-escape for strings. if ((maj <= 8 || (maj == 9 && min == 0))) { @@ -835,6 +840,14 @@ public class PostgresDictionary extends DBDictionary { } } + @Override + public boolean isFatalException(int subtype, SQLException ex) { + if ((subtype == StoreException.LOCK && "57014".equals(ex.getSQLState()))) { + return false; + } + return super.isFatalException(subtype, ex); + } + /** * If column is an XML column, PostgreSQL requires that its value is set * by using {@link PreparedStatement#setObject(int, Object, int)} diff --git a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/sql-error-state-codes.xml b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/sql-error-state-codes.xml index afcff44..6e9a4a5 100644 --- a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/sql-error-state-codes.xml +++ b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/sql-error-state-codes.xml @@ -191,7 +191,7 @@ </dictionary> <dictionary class="org.apache.openjpa.jdbc.sql.PostgresDictionary"> - <lock>55P03,40P01</lock> + <lock>55P03,40P01,57014</lock> <referential-integrity>23000,23502,23503,23514</referential-integrity> <object-exists>23505</object-exists> <object-not-found></object-not-found> diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestTimeoutException.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestTimeoutException.java index 7956455..cbf276a 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestTimeoutException.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestTimeoutException.java @@ -53,6 +53,7 @@ public class TestTimeoutException extends SingleEMFTestCase { assertNotNull(dict); if (!dict.supportsSelectForUpdate || !dict.supportsQueryTimeout || dict instanceof SolidDBDictionary) setTestsDisabled(true); + if (emf == null) { closeEMF(tempEMF); }