From 32e4a16623cbef687ea3fd6876b370d0aedf34a0 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Fri, 17 Apr 2020 15:03:19 +0100 Subject: [PATCH] Fix merge issues --- .../java/org/hibernate/dialect/Database.java | 2 +- .../dialect/HANACloudColumnStoreDialect.java | 3 + .../dialect/HANAColumnStoreDialect.java | 75 +++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/Database.java b/hibernate-core/src/main/java/org/hibernate/dialect/Database.java index 7f275d5a57ea..88e20f6e06be 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/Database.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/Database.java @@ -158,7 +158,7 @@ public String getDriverClassName(String jdbcUrl) { HANA { @Override public Dialect createDialect(DialectResolutionInfo info) { - return new HANAColumnStoreDialect(); + return new HANAColumnStoreDialect(info); } @Override public boolean productNameMatches(String databaseName) { diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/HANACloudColumnStoreDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/HANACloudColumnStoreDialect.java index 6e7197c24f8d..08e84b87ff51 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/HANACloudColumnStoreDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/HANACloudColumnStoreDialect.java @@ -23,7 +23,10 @@ * Column tables are created by this dialect when using the auto-ddl feature. * * @author Jonathan Bregler + * + * @deprecated use HANAColumnStoreDialect(400) */ +@Deprecated public class HANACloudColumnStoreDialect extends AbstractHANADialect { public HANACloudColumnStoreDialect() { diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/HANAColumnStoreDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/HANAColumnStoreDialect.java index 41c424ce0048..14bd5a0781d9 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/HANAColumnStoreDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/HANAColumnStoreDialect.java @@ -6,6 +6,9 @@ */ package org.hibernate.dialect; +import java.sql.Types; + +import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; import org.hibernate.query.spi.QueryEngine; @@ -31,11 +34,69 @@ * @author Jonathan Bregler */ public class HANAColumnStoreDialect extends AbstractHANADialect { + private int version; + + public int getVersion(){ + return version; + } + + public HANAColumnStoreDialect(DialectResolutionInfo info) { + this( info.getDatabaseMajorVersion() * 100 + info.getDatabaseMinorVersion() * 10 ); + } public HANAColumnStoreDialect() { + this(300); + } + + public HANAColumnStoreDialect(int version) { super(); + this.version = version; + if ( this.version >= 400 ) { + registerColumnType( Types.CHAR, "nvarchar(1)" ); + registerColumnType( Types.VARCHAR, 5000, "nvarchar($l)" ); + registerColumnType( Types.LONGVARCHAR, 5000, "nvarchar($l)" ); + + // for longer values map to clob/nclob + registerColumnType( Types.LONGVARCHAR, "nclob" ); + registerColumnType( Types.VARCHAR, "nclob" ); + registerColumnType( Types.CLOB, "nclob" ); + + registerHibernateType( Types.CLOB, StandardBasicTypes.MATERIALIZED_NCLOB.getName() ); + registerHibernateType( Types.NCHAR, StandardBasicTypes.NSTRING.getName() ); + registerHibernateType( Types.CHAR, StandardBasicTypes.CHARACTER.getName() ); + registerHibernateType( Types.CHAR, 1, StandardBasicTypes.CHARACTER.getName() ); + registerHibernateType( Types.CHAR, 5000, StandardBasicTypes.NSTRING.getName() ); + registerHibernateType( Types.VARCHAR, StandardBasicTypes.NSTRING.getName() ); + registerHibernateType( Types.LONGVARCHAR, StandardBasicTypes.NTEXT.getName() ); + + // register additional keywords + registerHanaCloudKeywords(); + } + } + + private void registerHanaCloudKeywords() { + registerKeyword( "array" ); + registerKeyword( "at" ); + registerKeyword( "authorization" ); + registerKeyword( "between" ); + registerKeyword( "by" ); + registerKeyword( "collate" ); + registerKeyword( "empty" ); + registerKeyword( "filter" ); + registerKeyword( "grouping" ); + registerKeyword( "no" ); + registerKeyword( "not" ); + registerKeyword( "of" ); + registerKeyword( "over" ); + registerKeyword( "recursive" ); + registerKeyword( "row" ); + registerKeyword( "table" ); + registerKeyword( "to" ); + registerKeyword( "window" ); + registerKeyword( "within" ); } + @Override public void initializeFunctionRegistry(QueryEngine queryEngine) { super.initializeFunctionRegistry( queryEngine ); @@ -78,11 +139,25 @@ protected String getTruncateIdTableCommand() { @Override protected boolean supportsAsciiStringTypes() { + if ( version >= 400 ) { + return false; + } return true; } @Override protected Boolean useUnicodeStringTypesDefault() { + if ( version >= 400 ) { + return Boolean.TRUE; + } return Boolean.FALSE; } + + @Override + public boolean isUseUnicodeStringTypes() { + if ( version >= 400 ) { + return true; + } + return super.isUseUnicodeStringTypes(); + } }