Merge remote-tracking branch 'kaspersorensen/METAMODEL-1224-newer-versions-of-postgresql'
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/core/src/main/java/org/apache/metamodel/query/FromItem.java b/core/src/main/java/org/apache/metamodel/query/FromItem.java
index 63eac69..397beba 100644
--- a/core/src/main/java/org/apache/metamodel/query/FromItem.java
+++ b/core/src/main/java/org/apache/metamodel/query/FromItem.java
@@ -222,7 +222,8 @@
}
StringBuilder sb = new StringBuilder();
if (_table != null) {
- if (_table.getSchema() != null && _table.getSchema().getName() != null) {
+ if (_table.getSchema() != null && _table.getSchema().getName() != null
+ && !_table.getSchema().getName().isEmpty()) {
sb.append(_table.getSchema().getName());
sb.append('.');
}
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/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
index b582930..ca6b643 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
@@ -135,7 +135,7 @@
Schema schema = table.getSchema();
if (schema != null) {
String schemaName = schema.getName();
- if (schemaName != null) {
+ if (schemaName != null && !schemaName.isEmpty()) {
result = result.replaceFirst(schemaName, '\"' + schema.getName() + '\"');
}
}
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..481e9e4 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,18 @@
*/
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.MutableSchema;
+import org.apache.metamodel.schema.MutableTable;
import org.easymock.EasyMock;
import org.junit.Test;
@@ -46,4 +52,18 @@
EasyMock.verify(statementMock);
}
+
+ @Test
+ public void testApproximateCountQueryAndBlankSchemaName() {
+ final SelectItem selectItem = SelectItem.getCountAllItem();
+ selectItem.setFunctionApproximationAllowed(true);
+ final Query query = new Query();
+ query.select(selectItem);
+ query.from(new MutableTable("tbl").setSchema(new MutableSchema("")));
+ 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..4132b1c 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,21 @@
cb.insertInto(table).value("foo", "world").execute();
}
});
+
+ try {
+ final Optional<Integer> insertedRows = updateSummary.getInsertedRows();
+ assertTrue(insertedRows.isPresent());
+ assertEquals(2, insertedRows.get().intValue());
- 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());
-
+ 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 +743,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();