Skip to content

Commit 1c81622

Browse files
committed
Fix MariaDB 10.6 UUID in aggregate support and skip some tests that run into a MariaDB bug
1 parent 3a129d9 commit 1c81622

17 files changed

+53
-2
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/aggregate/MySQLAggregateSupport.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,11 @@ private String jsonCustomWriteExpression(String customWriteExpression, JdbcMappi
192192
if ( uuidFunctions ) {
193193
return "bin_to_uuid(" + customWriteExpression + ")";
194194
}
195+
else if ( jsonType ) {
196+
return "insert(insert(insert(insert(lower(hex(" + customWriteExpression + ")),21,0,'-'),17,0,'-'),13,0,'-'),9,0,'-')";
197+
}
195198
else {
196-
return "regexp_replace(lower(hex(" + customWriteExpression + ")),'^(.{8})(.{4})(.{4})(.{4})(.{12})$','$1-$2-$3-$4-$5')";
199+
return "regexp_replace(lower(hex(" + customWriteExpression + ")),'^(.{8})(.{4})(.{4})(.{4})(.{12})$','\\\\1-\\\\2-\\\\3-\\\\4-\\\\5')";
197200
}
198201
}
199202
// Fall-through intended

hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ public void visitOffsetFetchClause(QueryPart queryPart) {
281281
protected void renderComparison(Expression lhs, ComparisonOperator operator, Expression rhs) {
282282
final JdbcMappingContainer lhsExpressionType = lhs.getExpressionType();
283283
if ( lhsExpressionType != null && lhsExpressionType.getJdbcTypeCount() == 1
284-
&& lhsExpressionType.getSingleJdbcMapping().getJdbcType().isJson() ) {
284+
&& lhsExpressionType.getSingleJdbcMapping().getJdbcType().isJson()
285+
&& getDialect().getVersion().isSameOrAfter( 10, 7 ) ) {
285286
switch ( operator ) {
286287
case DISTINCT_FROM:
287288
appendSql( "case when json_equals(" );

hibernate-core/src/test/java/org/hibernate/orm/test/type/BasicListTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.dialect.Dialect;
1414
import org.hibernate.dialect.HANADialect;
1515
import org.hibernate.dialect.HSQLDialect;
16+
import org.hibernate.dialect.MariaDBDialect;
1617
import org.hibernate.dialect.MySQLDialect;
1718
import org.hibernate.dialect.OracleDialect;
1819
import org.hibernate.dialect.SQLServerDialect;
@@ -110,6 +111,8 @@ public void testQueryById(SessionFactoryScope scope) {
110111
@Test
111112
@SkipForDialect(dialectClass = InformixDialect.class,
112113
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
114+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
115+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
113116
public void testQuery(SessionFactoryScope scope) {
114117
scope.inSession( em -> {
115118
TypedQuery<TableWithIntegerList> tq = em.createNamedQuery( "TableWithIntegerList.JPQL.getByData", TableWithIntegerList.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/BasicSortedSetTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.dialect.Dialect;
1515
import org.hibernate.dialect.HANADialect;
1616
import org.hibernate.dialect.HSQLDialect;
17+
import org.hibernate.dialect.MariaDBDialect;
1718
import org.hibernate.dialect.MySQLDialect;
1819
import org.hibernate.dialect.OracleDialect;
1920
import org.hibernate.dialect.SQLServerDialect;
@@ -111,6 +112,8 @@ public void testQueryById(SessionFactoryScope scope) {
111112
@Test
112113
@SkipForDialect(dialectClass = InformixDialect.class,
113114
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
115+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
116+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
114117
public void testQuery(SessionFactoryScope scope) {
115118
scope.inSession( em -> {
116119
TypedQuery<TableWithIntegerSortedSet> tq = em.createNamedQuery( "TableWithIntegerSortedSet.JPQL.getByData", TableWithIntegerSortedSet.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/BooleanArrayTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.hibernate.dialect.Dialect;
1010
import org.hibernate.dialect.HANADialect;
1111
import org.hibernate.dialect.HSQLDialect;
12+
import org.hibernate.dialect.MariaDBDialect;
1213
import org.hibernate.dialect.MySQLDialect;
1314
import org.hibernate.dialect.OracleDialect;
1415
import org.hibernate.dialect.SQLServerDialect;
@@ -116,6 +117,8 @@ public void testQueryById(SessionFactoryScope scope) {
116117
@SkipForDialect( dialectClass = OracleDialect.class, reason = "External driver fix required")
117118
@SkipForDialect(dialectClass = InformixDialect.class,
118119
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
120+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
121+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
119122
public void testQuery(SessionFactoryScope scope) {
120123
scope.inSession( em -> {
121124
TypedQuery<TableWithBooleanArrays> tq = em.createNamedQuery( "TableWithBooleanArrays.JPQL.getByData", TableWithBooleanArrays.class );
@@ -174,6 +177,8 @@ public void testNativeQueryUntyped(SessionFactoryScope scope) {
174177

175178
@Test
176179
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsStructuralArrays.class)
180+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
181+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
177182
public void testLiteral(SessionFactoryScope scope) {
178183
scope.inSession( em -> {
179184
final HibernateCriteriaBuilder cb = em.getCriteriaBuilder();

hibernate-core/src/test/java/org/hibernate/orm/test/type/DateArrayTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.community.dialect.GaussDBDialect;
1313
import org.hibernate.dialect.HANADialect;
1414
import org.hibernate.dialect.HSQLDialect;
15+
import org.hibernate.dialect.MariaDBDialect;
1516
import org.hibernate.dialect.MySQLDialect;
1617
import org.hibernate.dialect.OracleDialect;
1718
import org.hibernate.dialect.PostgresPlusDialect;
@@ -128,6 +129,8 @@ public void testQueryById(SessionFactoryScope scope) {
128129
@SkipForDialect(dialectClass = InformixDialect.class,
129130
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
130131
@SkipForDialect(dialectClass = GaussDBDialect.class, reason = "Seems that comparing date[] through JDBC is buggy. ERROR: operator does not exist: timestamp without time zone[] = date[]")
132+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
133+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
131134
public void testQuery(SessionFactoryScope scope) {
132135
scope.inSession( em -> {
133136
TypedQuery<TableWithDateArrays> tq = em.createNamedQuery( "TableWithDateArrays.JPQL.getByData", TableWithDateArrays.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/DoubleArrayTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.hibernate.dialect.Dialect;
1111
import org.hibernate.dialect.HANADialect;
1212
import org.hibernate.dialect.HSQLDialect;
13+
import org.hibernate.dialect.MariaDBDialect;
1314
import org.hibernate.dialect.MySQLDialect;
1415
import org.hibernate.dialect.OracleDialect;
1516
import org.hibernate.dialect.SQLServerDialect;
@@ -121,6 +122,8 @@ public void testQueryById(SessionFactoryScope scope) {
121122
@Test
122123
@SkipForDialect(dialectClass = InformixDialect.class,
123124
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
125+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
126+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
124127
public void testQuery(SessionFactoryScope scope) {
125128
scope.inSession( em -> {
126129
TypedQuery<TableWithDoubleArrays> tq = em.createNamedQuery( "TableWithDoubleArrays.JPQL.getByData", TableWithDoubleArrays.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/EnumArrayTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.dialect.Dialect;
1212
import org.hibernate.dialect.HANADialect;
1313
import org.hibernate.dialect.HSQLDialect;
14+
import org.hibernate.dialect.MariaDBDialect;
1415
import org.hibernate.dialect.MySQLDialect;
1516
import org.hibernate.dialect.OracleDialect;
1617
import org.hibernate.dialect.SQLServerDialect;
@@ -112,6 +113,8 @@ public void testQueryById(SessionFactoryScope scope) {
112113
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "When length 0 byte array is inserted, Altibase returns with null")
113114
@SkipForDialect(dialectClass = InformixDialect.class,
114115
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
116+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
117+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
115118
public void testQuery(SessionFactoryScope scope) {
116119
scope.inSession( em -> {
117120
TypedQuery<TableWithEnumArrays> tq = em.createNamedQuery( "TableWithEnumArrays.JPQL.getByData", TableWithEnumArrays.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/EnumSetConverterTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.dialect.Dialect;
1414
import org.hibernate.dialect.HANADialect;
1515
import org.hibernate.dialect.HSQLDialect;
16+
import org.hibernate.dialect.MariaDBDialect;
1617
import org.hibernate.dialect.MySQLDialect;
1718
import org.hibernate.dialect.OracleDialect;
1819
import org.hibernate.dialect.SQLServerDialect;
@@ -119,6 +120,8 @@ public void testQueryById(SessionFactoryScope scope) {
119120
@Test
120121
@SkipForDialect(dialectClass = InformixDialect.class,
121122
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
123+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
124+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
122125
public void testQuery(SessionFactoryScope scope) {
123126
scope.inSession( em -> {
124127
TypedQuery<TableWithEnumSetConverter> tq = em.createNamedQuery( "TableWithEnumSetConverter.JPQL.getByData", TableWithEnumSetConverter.class );

hibernate-core/src/test/java/org/hibernate/orm/test/type/EnumSetTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.dialect.Dialect;
1414
import org.hibernate.dialect.HANADialect;
1515
import org.hibernate.dialect.HSQLDialect;
16+
import org.hibernate.dialect.MariaDBDialect;
1617
import org.hibernate.dialect.MySQLDialect;
1718
import org.hibernate.dialect.OracleDialect;
1819
import org.hibernate.dialect.SQLServerDialect;
@@ -112,6 +113,8 @@ public void testQueryById(SessionFactoryScope scope) {
112113
@Test
113114
@SkipForDialect(dialectClass = InformixDialect.class,
114115
reason = "The statement failed because binary large objects are not allowed in the Union, Intersect, or Minus ")
116+
@SkipForDialect(dialectClass = MariaDBDialect.class, majorVersion = 10, minorVersion = 6,
117+
reason = "Bug in MariaDB https://jira.mariadb.org/browse/MDEV-21530")
115118
public void testQuery(SessionFactoryScope scope) {
116119
scope.inSession( em -> {
117120
TypedQuery<TableWithEnumSet> tq = em.createNamedQuery( "TableWithEnumSet.JPQL.getByData", TableWithEnumSet.class );

0 commit comments

Comments
 (0)