diff --git a/pom.xml b/pom.xml
index 8859e9d37e..1753af237c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index db3b7ddd1a..97f9e0a142 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index 547ff62b8b..cab3dc0afe 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-jdbc
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java
index ece2384fae..a9b3ea19b0 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java
@@ -23,19 +23,14 @@
* {@link org.springframework.data.relational.core.dialect.ArrayColumns} that offer JDBC-specific functionality.
*
* @author Jens Schauder
+ * @author Mark Paluch
* @since 2.3
*/
public interface JdbcArrayColumns extends ArrayColumns {
@Override
default Class> getArrayType(Class> userType) {
-
- Class> componentType = userType;
- while (componentType.isArray()) {
- componentType = componentType.getComponentType();
- }
-
- return componentType;
+ return ArrayColumns.unwrapComponentType(userType);
}
/**
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java
index c5e97cf9ef..43b4c72f9c 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java
@@ -38,11 +38,11 @@ public JdbcArrayColumns getArraySupport() {
return ARRAY_COLUMNS;
}
- static class JdbcPostgresArrayColumns extends PostgresArrayColumns implements JdbcArrayColumns {
+ static class JdbcPostgresArrayColumns implements JdbcArrayColumns {
@Override
- public Class> getArrayType(Class> userType) {
- return JdbcArrayColumns.super.getArrayType(userType);
+ public boolean isSupported() {
+ return true;
}
@Override
diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml
index 48d57abbde..b6afafe8a0 100644
--- a/spring-data-r2dbc/pom.xml
+++ b/spring-data-r2dbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-r2dbc
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
Spring Data R2DBC
Spring Data module for R2DBC
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-GH-1287-SNAPSHOT
diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
index 1409d4720e..49c2adea45 100644
--- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
+++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
@@ -1,34 +1,57 @@
+/*
+ * Copyright 2019-2022 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.springframework.data.r2dbc.dialect;
-import org.springframework.data.relational.core.dialect.AnsiDialect;
-import org.springframework.data.relational.core.dialect.LockClause;
+import org.springframework.data.relational.core.dialect.ArrayColumns;
+import org.springframework.data.relational.core.dialect.ObjectArrayColumns;
import org.springframework.data.relational.core.sql.SqlIdentifier;
+import org.springframework.data.util.Lazy;
+import org.springframework.r2dbc.core.binding.BindMarkersFactory;
/**
- * An SQL dialect for H2 in Postgres Compatibility mode.
+ * R2DBC dialect for H2.
*
* @author Mark Paluch
* @author Jens Schauder
* @author Diego Krupitza
*/
-public class H2Dialect extends PostgresDialect {
+public class H2Dialect extends org.springframework.data.relational.core.dialect.H2Dialect implements R2dbcDialect {
/**
* Singleton instance.
*/
public static final H2Dialect INSTANCE = new H2Dialect();
+ private static final BindMarkersFactory INDEXED = BindMarkersFactory.indexed("$", 1);
+
+ private final Lazy arrayColumns = Lazy
+ .of(() -> new SimpleTypeArrayColumns(ObjectArrayColumns.INSTANCE, getSimpleTypeHolder()));
+
+ @Override
+ public BindMarkersFactory getBindMarkersFactory() {
+ return INDEXED;
+ }
+
@Override
public String renderForGeneratedValues(SqlIdentifier identifier) {
return identifier.getReference(getIdentifierProcessing());
}
@Override
- public LockClause lock() {
- // H2 Dialect does not support the same lock keywords as PostgreSQL, but it supports the ANSI SQL standard.
- // see https://www.h2database.com/html/commands.html
- // and https://www.h2database.com/html/features.html#compatibility
- return AnsiDialect.INSTANCE.lock();
+ public ArrayColumns getArraySupport() {
+ return this.arrayColumns.get();
}
-
}
diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
index 9bb861585e..8cc1022934 100644
--- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
+++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/PostgresDialect.java
@@ -24,8 +24,8 @@
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.relational.core.dialect.ObjectArrayColumns;
import org.springframework.data.util.Lazy;
import org.springframework.lang.NonNull;
import org.springframework.r2dbc.core.binding.BindMarkersFactory;
@@ -79,9 +79,8 @@ public class PostgresDialect extends org.springframework.data.relational.core.di
private static final BindMarkersFactory INDEXED = BindMarkersFactory.indexed("$", 1);
- private final Lazy arrayColumns = Lazy.of(() -> new R2dbcArrayColumns(
- org.springframework.data.relational.core.dialect.PostgresDialect.INSTANCE.getArraySupport(),
- getSimpleTypeHolder()));
+ private final Lazy arrayColumns = Lazy
+ .of(() -> new SimpleTypeArrayColumns(ObjectArrayColumns.INSTANCE, getSimpleTypeHolder()));
/*
* (non-Javadoc)
@@ -137,37 +136,6 @@ public Collection