METAMODEL-1224: Fixed PostgreSQL compatibility (upgrading driver+tests)
diff --git a/CHANGES.md b/CHANGES.md
index 99b8611..d843e20 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,4 +1,9 @@
+### Apache MetaModel [WIP]
+
+ * [METAMODEL-1224] - Ensured compatibility with newer versions of PostgreSQL
+
### Apache MetaModel 5.3.2
+
* Upgrade to Jackson 2.10.1
* Upgrade to Spring 5.2.2
* [METAMODEL-82] - Detect Column Types with Excel datastores
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
index 6945d4b..441cf5d 100644
--- a/jdbc/pom.xml
+++ b/jdbc/pom.xml
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
- <version>9.3-1104-jdbc4</version>
+ <version>42.2.11</version>
<!-- optional instead of test-scoped because we code against it in the rewriter class -->
<optional>true</optional>
</dependency>
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriterTest.java
index d7ecb3a..5d311fc 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriterTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriterTest.java
@@ -18,12 +18,17 @@
*/
package org.apache.metamodel.jdbc.dialects;
+import static org.junit.Assert.assertEquals;
+
import java.sql.PreparedStatement;
import java.sql.SQLException;
+import org.apache.metamodel.query.Query;
+import org.apache.metamodel.query.SelectItem;
import org.apache.metamodel.schema.Column;
import org.apache.metamodel.schema.ColumnType;
import org.apache.metamodel.schema.MutableColumn;
+import org.apache.metamodel.schema.MutableTable;
import org.easymock.EasyMock;
import org.junit.Test;
@@ -46,4 +51,18 @@
EasyMock.verify(statementMock);
}
+
+ @Test
+ public void testApproximateCountQuery() {
+ final SelectItem selectItem = SelectItem.getCountAllItem();
+ selectItem.setFunctionApproximationAllowed(true);
+ final Query query = new Query();
+ query.select(selectItem);
+ query.from(new MutableTable("tbl"));
+ assertEquals("SELECT APPROXIMATE COUNT(*) FROM tbl", query.toSql());
+
+ final PostgresqlQueryRewriter queryRewriter = new PostgresqlQueryRewriter(null);
+ final String sql = queryRewriter.rewriteQuery(query);
+ assertEquals("SELECT COUNT(*) FROM tbl", sql);
+ }
}
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
index a34be81..b72b89e 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
@@ -502,15 +502,22 @@
cb.insertInto(table).value("foo", "world").execute();
}
});
-
- final Optional<Integer> insertedRows = updateSummary.getInsertedRows();
- assertTrue(insertedRows.isPresent());
- assertEquals(2, insertedRows.get().intValue());
- final Optional<Iterable<Object>> generatedKeys = updateSummary.getGeneratedKeys();
- assertTrue(generatedKeys.isPresent());
- assertEquals("[1, 2]", generatedKeys.get().toString());
-
+ try {
+
+ final Optional<Integer> insertedRows = updateSummary.getInsertedRows();
+ assertTrue(insertedRows.isPresent());
+ assertEquals(2, insertedRows.get().intValue());
+
+ final Optional<Iterable<Object>> generatedKeys = updateSummary.getGeneratedKeys();
+ assertTrue(generatedKeys.isPresent());
+ assertEquals("[1, 2]", generatedKeys.get().toString());
+
+ } finally {
+ if (schema.getTableByName(tableName) != null) {
+ dc.executeUpdate(new DropTable(schema, tableName));
+ }
+ }
}
public void testBlob() throws Exception {
@@ -737,7 +744,7 @@
} catch (Exception e) {
String message = e.getMessage().replaceAll("\n", " ");
assertEquals(
- "Could not execute batch: INSERT INTO \"public\".\"my_table\" (\"person name\",age) VALUES ('John Doe','42'): Batch entry 0 INSERT INTO \"public\".\"my_table\" (\"person name\",age) VALUES ('John Doe','42') was aborted. Call getNextException to see the cause.",
+ "java.sql.BatchUpdateException: Batch entry 0 INSERT INTO \"public\".\"my_table\" (\"person name\",age) VALUES ('John Doe','42') was aborted: ERROR: column \"age\" is of type integer but expression is of type character varying Hint: You will need to rewrite or cast the expression. Position: 64 Call getNextException to see other errors in the batch.",
message);
} finally {
dc.refreshSchemas();