diff --git a/pom.xml b/pom.xml
index 5d98456af..5e26beb59 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,7 @@
0.8.0.RELEASE
7.1.2.jre8-preview
2.5.4
- Arabba-SR6
+ Arabba-BUILD-SNAPSHOT
1.0.3
4.1.47.Final
@@ -221,7 +221,7 @@
io.r2dbc
r2dbc-postgresql
- test
+ true
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java b/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
index 77f838ee2..c6e0d0c99 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
@@ -3,15 +3,28 @@ package org.springframework.data.r2dbc.dialect;
import java.net.InetAddress;
import java.net.URI;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.UUID;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.data.convert.ReadingConverter;
+import org.springframework.data.convert.WritingConverter;
+import org.springframework.data.geo.Box;
+import org.springframework.data.geo.Circle;
+import org.springframework.data.geo.Point;
+import org.springframework.data.geo.Polygon;
import org.springframework.data.mapping.model.SimpleTypeHolder;
import org.springframework.data.relational.core.dialect.ArrayColumns;
import org.springframework.data.util.Lazy;
+import org.springframework.lang.NonNull;
import org.springframework.r2dbc.core.binding.BindMarkersFactory;
import org.springframework.util.ClassUtils;
@@ -25,15 +38,25 @@ public class PostgresDialect extends org.springframework.data.relational.core.di
private static final Set> SIMPLE_TYPES;
+ private static final boolean GEO_TYPES_PRESENT = ClassUtils.isPresent("io.r2dbc.postgresql.codec.Polygon",
+ PostgresDialect.class.getClassLoader());
+
static {
Set> simpleTypes = new HashSet<>(Arrays.asList(UUID.class, URL.class, URI.class, InetAddress.class));
- if (ClassUtils.isPresent("io.r2dbc.postgresql.codec.Json", PostgresDialect.class.getClassLoader())) {
+ // conditional Postgres JSON support.
+ ifClassPresent("io.r2dbc.postgresql.codec.Json", simpleTypes::add);
- simpleTypes
- .add(ClassUtils.resolveClassName("io.r2dbc.postgresql.codec.Json", PostgresDialect.class.getClassLoader()));
- }
+ // conditional Postgres Geo support.
+ Stream.of("io.r2dbc.postgresql.codec.Box", //
+ "io.r2dbc.postgresql.codec.Circle", //
+ "io.r2dbc.postgresql.codec.Line", //
+ "io.r2dbc.postgresql.codec.Lseg", //
+ "io.r2dbc.postgresql.codec.Point", //
+ "io.r2dbc.postgresql.codec.Path", //
+ "io.r2dbc.postgresql.codec.Polygon") //
+ .forEach(s -> ifClassPresent(s, simpleTypes::add));
SIMPLE_TYPES = simpleTypes;
}
@@ -76,6 +99,23 @@ public class PostgresDialect extends org.springframework.data.relational.core.di
return this.arrayColumns.get();
}
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.Dialect#getConverters()
+ */
+ @Override
+ public Collection