diff --git a/pom.xml b/pom.xml
index a977b39d3..03f3665de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,8 @@
0.1.4
2.4.1
42.2.5
+ 5.1.47
+ 0.9.38
7.1.2.jre8-preview
Arabba-M7
1.0.1
@@ -173,6 +175,13 @@
test
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+ test
+
+
com.microsoft.sqlserver
mssql-jdbc
@@ -198,6 +207,13 @@
test
+
+ com.github.jasync-sql
+ jasync-r2dbc-mysql
+ ${jasync.version}
+ test
+
+
de.schauderhaft.degraph
degraph-check
@@ -295,7 +311,8 @@
${querydsl}
${spring}
${r2dbc-spi.version}
- ${reactive-streams.version}
+ ${reactive-streams.version}
+
${releasetrain}
true
3
@@ -416,6 +433,10 @@
spring-libs-snapshot
https://repo.spring.io/libs-snapshot
+
+ jcenter
+ https://jcenter.bintray.com/
+
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkers.java b/src/main/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkers.java
index d2ef0b13c..32b4cc103 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkers.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkers.java
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * 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,
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/Database.java b/src/main/java/org/springframework/data/r2dbc/dialect/Database.java
index b59b9259e..0eb27bf82 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/Database.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/Database.java
@@ -53,6 +53,18 @@ public enum Database {
public Dialect defaultDialect() {
return H2Dialect.INSTANCE;
}
+ },
+
+ MYSQL {
+ @Override
+ public String driverName() {
+ return "MySQL";
+ }
+
+ @Override
+ public Dialect defaultDialect() {
+ return MySqlDialect.INSTANCE;
+ }
};
/**
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/IndexedBindMarker.java b/src/main/java/org/springframework/data/r2dbc/dialect/IndexedBindMarker.java
index 109d9295a..b7d84d658 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/IndexedBindMarker.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/IndexedBindMarker.java
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * 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,
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java b/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java
new file mode 100644
index 000000000..d3cd260e0
--- /dev/null
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2019 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 java.net.InetAddress;
+import java.net.URI;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+/**
+ * An SQL dialect for MySQL.
+ *
+ * @author Mark Paluch
+ */
+public class MySqlDialect implements Dialect {
+
+ private static final Set> SIMPLE_TYPES = new HashSet<>(
+ Arrays.asList(UUID.class, URL.class, URI.class, InetAddress.class));
+
+ /**
+ * Singleton instance.
+ */
+ public static final MySqlDialect INSTANCE = new MySqlDialect();
+
+ private static final BindMarkersFactory ANONYMOUS = BindMarkersFactory.anonymous("?");
+
+ private static final LimitClause LIMIT_CLAUSE = new LimitClause() {
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.LimitClause#getClause(long, long)
+ */
+ @Override
+ public String getClause(long limit, long offset) {
+ return String.format("LIMIT %d,%d", limit, offset);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.LimitClause#getClause(long)
+ */
+ @Override
+ public String getClause(long limit) {
+ return "LIMIT " + limit;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.LimitClause#getClausePosition()
+ */
+ @Override
+ public Position getClausePosition() {
+ return Position.END;
+ }
+ };
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.Dialect#getBindMarkersFactory()
+ */
+ @Override
+ public BindMarkersFactory getBindMarkersFactory() {
+ return ANONYMOUS;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.Dialect#getSimpleTypesKeys()
+ */
+ @Override
+ public Collection extends Class>> getSimpleTypes() {
+ return SIMPLE_TYPES;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.Dialect#limit()
+ */
+ @Override
+ public LimitClause limit() {
+ return LIMIT_CLAUSE;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.r2dbc.dialect.Dialect#getArraySupport()
+ */
+ @Override
+ public ArrayColumns getArraySupport() {
+ return ArrayColumns.Unsupported.INSTANCE;
+ }
+}
diff --git a/src/test/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkersUnitTests.java b/src/test/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkersUnitTests.java
index 112f5b500..663af7525 100644
--- a/src/test/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkersUnitTests.java
+++ b/src/test/java/org/springframework/data/r2dbc/dialect/AnonymousBindMarkersUnitTests.java
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * 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,
diff --git a/src/test/java/org/springframework/data/r2dbc/function/AbstractTransactionalDatabaseClientIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/function/AbstractTransactionalDatabaseClientIntegrationTests.java
index 102645123..628020f0d 100644
--- a/src/test/java/org/springframework/data/r2dbc/function/AbstractTransactionalDatabaseClientIntegrationTests.java
+++ b/src/test/java/org/springframework/data/r2dbc/function/AbstractTransactionalDatabaseClientIntegrationTests.java
@@ -32,6 +32,7 @@ import javax.sql.DataSource;
import org.junit.Before;
import org.junit.Test;
+
import org.springframework.dao.DataAccessException;
import org.springframework.data.r2dbc.testing.R2dbcIntegrationTestSupport;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -201,15 +202,21 @@ public abstract class AbstractTransactionalDatabaseClientIntegrationTests extend
assertThat(count).isEqualTo(0);
}
- @Test // gh-2
+ @Test // gh-2, gh-75
public void emitTransactionIds() {
TransactionalDatabaseClient databaseClient = TransactionalDatabaseClient.create(connectionFactory);
Flux