From ae69a1aeb4a96c46ead23daf27e2a8da8a58dfc7 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 7 Apr 2021 16:05:25 +0200 Subject: [PATCH] Fix MariaDB, DB2 and Derby column type for text type attributes --- .../src/main/java/org/hibernate/dialect/DB2Dialect.java | 2 ++ .../src/main/java/org/hibernate/dialect/DerbyDialect.java | 2 ++ .../src/main/java/org/hibernate/dialect/MariaDBDialect.java | 6 ++++++ .../src/main/java/org/hibernate/dialect/MySQLDialect.java | 6 +++++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java index 9ea2334d01..96b8e2a266 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java @@ -110,6 +110,8 @@ public DB2Dialect(int version) { registerColumnType( Types.TIMESTAMP_WITH_TIMEZONE, "timestamp($p)" ); registerColumnType( Types.TIME_WITH_TIMEZONE, "time" ); + registerColumnType( Types.LONGVARCHAR, "long varchar" ); + //not keywords, at least not in DB2 11, //but perhaps they were in older versions? registerKeyword( "current" ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/DerbyDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/DerbyDialect.java index f975ce8f1e..ef6697700b 100755 --- a/hibernate-core/src/main/java/org/hibernate/dialect/DerbyDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/DerbyDialect.java @@ -119,6 +119,8 @@ public DerbyDialect(int version) { registerColumnType( Types.TIMESTAMP, "timestamp" ); registerColumnType( Types.TIMESTAMP_WITH_TIMEZONE, "timestamp" ); + registerColumnType( Types.LONGVARCHAR, "long varchar" ); + registerDerbyKeywords(); limitHandler = getVersion() < 1050 diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java index 48b3358ee4..02594c0857 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java @@ -6,6 +6,8 @@ */ package org.hibernate.dialect; +import java.sql.Types; + import org.hibernate.dialect.sequence.MariaDBSequenceSupport; import org.hibernate.dialect.sequence.SequenceSupport; import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo; @@ -43,6 +45,10 @@ public MariaDBDialect(int version) { this.version = version; } + protected int getMaxVarcharLen() { + return getMySQLVersion() < 500 ? 255 : 65_534; + } + @Override public int getVersion() { return version; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java index a616ef4ca0..1b97fe85e9 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java @@ -117,7 +117,7 @@ else if( "myisam".equalsIgnoreCase( storageEngine ) ) { } // max length for VARCHAR changed in 5.0.3 - final int maxVarcharLen = getMySQLVersion() < 500 ? 255 : 65_535; + final int maxVarcharLen = getMaxVarcharLen(); registerColumnType( Types.VARCHAR, maxVarcharLen, "varchar($l)" ); registerColumnType( Types.VARBINARY, maxVarcharLen, "varbinary($l)" ); @@ -187,6 +187,10 @@ public Size resolveSize( }; } + protected int getMaxVarcharLen() { + return getMySQLVersion() < 500 ? 255 : 65_535; + } + @Override public int getVersion() { return version;