From 91d1f38d95fd6967ba09c2657da977eb9c53842d Mon Sep 17 00:00:00 2001 From: Vlad Mihalcea Date: Tue, 21 Feb 2017 07:57:56 +0200 Subject: [PATCH] HHH-11473 - Refactor MySQL Dialects - Simplify InnoDB deprecated Dialects by just overriding the default storage engine method --- .../dialect/MySQL5InnoDBDialect.java | 13 +-- .../hibernate/dialect/MySQLInnoDBDialect.java | 15 +-- .../mysql/MySQL56InnoDBSpatialDialect.java | 17 +-- .../mysql/MySQL5InnoDBSpatialDialect.java | 84 +------------- .../dialect/mysql/MySQL5SpatialDialect.java | 104 ++++++++++++++++++ 5 files changed, 119 insertions(+), 114 deletions(-) create mode 100644 hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5SpatialDialect.java diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MySQL5InnoDBDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MySQL5InnoDBDialect.java index 1ac7d6b5df..fc59ce369a 100755 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MySQL5InnoDBDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MySQL5InnoDBDialect.java @@ -14,18 +14,9 @@ */ @SuppressWarnings("deprecation") public class MySQL5InnoDBDialect extends MySQL5Dialect { - @Override - public boolean supportsCascadeDelete() { - return true; - } @Override - public String getTableTypeString() { - return " ENGINE=InnoDB"; - } - - @Override - public boolean hasSelfReferentialForeignKeyBug() { - return true; + protected MySQLStorageEngine getDefaultMySQLStorageEngine() { + return InnoDBStorageEngine.INSTANCE; } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MySQLInnoDBDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MySQLInnoDBDialect.java index 31c7b6cd49..c3790adbac 100755 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MySQLInnoDBDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MySQLInnoDBDialect.java @@ -14,18 +14,9 @@ */ @SuppressWarnings("deprecation") public class MySQLInnoDBDialect extends MySQLDialect { + @Override - public boolean supportsCascadeDelete() { - return true; - } - - @Override - public String getTableTypeString() { - return " type=InnoDB"; - } - - @Override - public boolean hasSelfReferentialForeignKeyBug() { - return true; + protected MySQLStorageEngine getDefaultMySQLStorageEngine() { + return InnoDBStorageEngine.INSTANCE; } } diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL56InnoDBSpatialDialect.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL56InnoDBSpatialDialect.java index d2257aa575..4cc821709e 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL56InnoDBSpatialDialect.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL56InnoDBSpatialDialect.java @@ -7,6 +7,9 @@ package org.hibernate.spatial.dialect.mysql; +import org.hibernate.dialect.InnoDBStorageEngine; +import org.hibernate.dialect.MySQLStorageEngine; + /** * Spatial Dialect for MySQL 5.6 with InnoDB engine. * @@ -18,18 +21,8 @@ public class MySQL56InnoDBSpatialDialect extends MySQL56SpatialDialect { @Override - public boolean supportsCascadeDelete() { - return true; - } - - @Override - public String getTableTypeString() { - return " ENGINE=InnoDB"; - } - - @Override - public boolean hasSelfReferentialForeignKeyBug() { - return true; + protected MySQLStorageEngine getDefaultMySQLStorageEngine() { + return InnoDBStorageEngine.INSTANCE; } } diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5InnoDBSpatialDialect.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5InnoDBSpatialDialect.java index 5f77d4bec3..26ed5f464d 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5InnoDBSpatialDialect.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5InnoDBSpatialDialect.java @@ -6,16 +6,8 @@ */ package org.hibernate.spatial.dialect.mysql; -import java.util.Map; - -import org.hibernate.HibernateException; -import org.hibernate.boot.model.TypeContributions; -import org.hibernate.dialect.MySQL5InnoDBDialect; -import org.hibernate.dialect.function.SQLFunction; -import org.hibernate.service.ServiceRegistry; -import org.hibernate.spatial.SpatialDialect; -import org.hibernate.spatial.SpatialFunction; -import org.hibernate.type.descriptor.sql.SqlTypeDescriptor; +import org.hibernate.dialect.InnoDBStorageEngine; +import org.hibernate.dialect.MySQLStorageEngine; /** * A Dialect for MySQL 5 using InnoDB engine, with support for its spatial features @@ -24,76 +16,10 @@ * @deprecated Use "hibernate.dialect.storage_engine=innodb" environment variable or JVM system property instead. */ @SuppressWarnings("deprecation") -public class MySQL5InnoDBSpatialDialect extends MySQL5InnoDBDialect implements SpatialDialect { - - private MySQLSpatialDialect dialectDelegate = new MySQLSpatialDialect(); - - /** - * Constructs an instance - */ - public MySQL5InnoDBSpatialDialect() { - super(); - registerColumnType( - MySQLGeometryTypeDescriptor.INSTANCE.getSqlType(), - "GEOMETRY" - ); - for ( Map.Entry entry : new MySQLSpatialFunctions() ) { - registerFunction( entry.getKey(), entry.getValue() ); - } - } +public class MySQL5InnoDBSpatialDialect extends MySQL5SpatialDialect { @Override - public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { - dialectDelegate.contributeTypes( typeContributions, serviceRegistry ); - } - - @Override - public String getTypeName(int code, long length, int precision, int scale) throws HibernateException { - return dialectDelegate.getTypeName( code, length, precision, scale ); - } - - @Override - public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) { - return dialectDelegate.remapSqlTypeDescriptor( sqlTypeDescriptor ); - } - - @Override - public String getSpatialRelateSQL(String columnName, int spatialRelation) { - return dialectDelegate.getSpatialRelateSQL( columnName, spatialRelation ); - } - - @Override - public String getSpatialFilterExpression(String columnName) { - return dialectDelegate.getSpatialFilterExpression( columnName ); - } - - @Override - public String getSpatialAggregateSQL(String columnName, int aggregation) { - return dialectDelegate.getSpatialAggregateSQL( columnName, aggregation ); - } - - @Override - public String getDWithinSQL(String columnName) { - return dialectDelegate.getDWithinSQL( columnName ); - } - - @Override - public String getHavingSridSQL(String columnName) { - return dialectDelegate.getHavingSridSQL( columnName ); - } - - @Override - public String getIsEmptySQL(String columnName, boolean isEmpty) { - return dialectDelegate.getIsEmptySQL( columnName, isEmpty ); - } - - @Override - public boolean supportsFiltering() { - return dialectDelegate.supportsFiltering(); - } - - @Override - public boolean supports(SpatialFunction function) { - return dialectDelegate.supports( function ); + protected MySQLStorageEngine getDefaultMySQLStorageEngine() { + return InnoDBStorageEngine.INSTANCE; } } diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5SpatialDialect.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5SpatialDialect.java new file mode 100644 index 0000000000..fad261e50b --- /dev/null +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/mysql/MySQL5SpatialDialect.java @@ -0,0 +1,104 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.spatial.dialect.mysql; + +import java.util.Map; + +import org.hibernate.HibernateException; +import org.hibernate.boot.model.TypeContributions; +import org.hibernate.dialect.InnoDBStorageEngine; +import org.hibernate.dialect.MySQL5Dialect; +import org.hibernate.dialect.MySQLStorageEngine; +import org.hibernate.dialect.function.SQLFunction; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.spatial.SpatialDialect; +import org.hibernate.spatial.SpatialFunction; +import org.hibernate.type.descriptor.sql.SqlTypeDescriptor; + +/** + * A Dialect for MySQL 5 using InnoDB engine, with support for its spatial features + * + * @author Karel Maesen, Geovise BVBA + */ +public class MySQL5SpatialDialect extends MySQL5Dialect implements SpatialDialect { + + private MySQLSpatialDialect dialectDelegate = new MySQLSpatialDialect(); + + /** + * Constructs an instance + */ + public MySQL5SpatialDialect() { + super(); + registerColumnType( + MySQLGeometryTypeDescriptor.INSTANCE.getSqlType(), + "GEOMETRY" + ); + for ( Map.Entry entry : new MySQLSpatialFunctions() ) { + registerFunction( entry.getKey(), entry.getValue() ); + } + } + + @Override + public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { + dialectDelegate.contributeTypes( typeContributions, serviceRegistry ); + } + + @Override + public String getTypeName(int code, long length, int precision, int scale) throws HibernateException { + return dialectDelegate.getTypeName( code, length, precision, scale ); + } + + @Override + public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) { + return dialectDelegate.remapSqlTypeDescriptor( sqlTypeDescriptor ); + } + + @Override + public String getSpatialRelateSQL(String columnName, int spatialRelation) { + return dialectDelegate.getSpatialRelateSQL( columnName, spatialRelation ); + } + + @Override + public String getSpatialFilterExpression(String columnName) { + return dialectDelegate.getSpatialFilterExpression( columnName ); + } + + @Override + public String getSpatialAggregateSQL(String columnName, int aggregation) { + return dialectDelegate.getSpatialAggregateSQL( columnName, aggregation ); + } + + @Override + public String getDWithinSQL(String columnName) { + return dialectDelegate.getDWithinSQL( columnName ); + } + + @Override + public String getHavingSridSQL(String columnName) { + return dialectDelegate.getHavingSridSQL( columnName ); + } + + @Override + public String getIsEmptySQL(String columnName, boolean isEmpty) { + return dialectDelegate.getIsEmptySQL( columnName, isEmpty ); + } + + @Override + public boolean supportsFiltering() { + return dialectDelegate.supportsFiltering(); + } + + @Override + public boolean supports(SpatialFunction function) { + return dialectDelegate.supports( function ); + } + + @Override + protected MySQLStorageEngine getDefaultMySQLStorageEngine() { + return InnoDBStorageEngine.INSTANCE; + } +}