Skip to content

Commit

Permalink
HSEARCH-3277 Get decimal scale from size instead of the column
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever authored and yrodiere committed Oct 6, 2022
1 parent feeefaf commit 1f16a2c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
Expand Up @@ -10,6 +10,9 @@
import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.boot.Metadata;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.Size;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.OneToMany;
Expand Down Expand Up @@ -95,13 +98,17 @@ else if ( value instanceof SimpleValue ) {

private void collectScale(PojoAdditionalMetadataCollectorPropertyNode collector, Value value) {
Iterator<Selectable> columnIterator = value.getColumnIterator();
Dialect dialect = basicTypeMetadataProvider.getDialect();
Metadata metadata = basicTypeMetadataProvider.getMetadata();

while ( columnIterator.hasNext() ) {
Selectable mappedColumn = columnIterator.next();
if ( !(mappedColumn instanceof Column) ) {
continue;
}
Column column = (Column) mappedColumn;
Integer scale = column.getScale();
Size size = column.getColumnSize( dialect, metadata );
Integer scale = size.getScale();
if ( scale == null ) {
continue;
}
Expand Down
Expand Up @@ -16,6 +16,7 @@

import org.hibernate.MappingException;
import org.hibernate.boot.Metadata;
import org.hibernate.dialect.Dialect;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
Expand All @@ -34,7 +35,7 @@ public static HibernateOrmBasicTypeMetadataProvider create(Metadata metadata) {
new TreeSet<>( Comparator.comparing( PersistentClass::getEntityName ) );
persistentClasses.addAll( metadata.getEntityBindings() );

Builder builder = new Builder();
Builder builder = new Builder( metadata );

for ( PersistentClass persistentClass : persistentClasses ) {
collectPersistentClass( builder, persistentClass );
Expand Down Expand Up @@ -221,6 +222,8 @@ private static HibernateOrmTypeModelFactory<?> collectEmbedded(Builder metadataP
}
}

private final Metadata metadata;

private final Map<String, PersistentClass> persistentClasses;
private final Map<Class<?>, HibernateOrmBasicClassTypeMetadata> classTypeMetadata;
private final Map<String, HibernateOrmBasicDynamicMapTypeMetadata> dynamicMapTypeMetadata;
Expand All @@ -229,13 +232,22 @@ private static HibernateOrmTypeModelFactory<?> collectEmbedded(Builder metadataP
private final HibernateOrmRawTypeIdentifierResolver typeIdentifierResolver;

private HibernateOrmBasicTypeMetadataProvider(Builder builder) {
this.metadata = builder.metadata;
this.persistentClasses = builder.persistentClasses;
this.classTypeMetadata = builder.classTypeMetadata;
this.dynamicMapTypeMetadata = builder.dynamicMapTypeMetadata;
this.jpaEntityNameToHibernateOrmEntityName = builder.jpaEntityNameToHibernateOrmEntityName;
this.typeIdentifierResolver = builder.typeIdentifierResolverBuilder.build();
}

public Metadata getMetadata() {
return metadata;
}

public Dialect getDialect() {
return metadata.getDatabase().getDialect();
}

public Collection<PersistentClass> getPersistentClasses() {
return persistentClasses.values();
}
Expand Down Expand Up @@ -267,6 +279,8 @@ Set<String> getKnownDynamicMapTypeNames() {
}

private static class Builder {
private final Metadata metadata;

private final Map<String, PersistentClass> persistentClasses = new LinkedHashMap<>();
private final Map<Class<?>, HibernateOrmBasicClassTypeMetadata> classTypeMetadata = new LinkedHashMap<>();
private final Map<String, HibernateOrmBasicDynamicMapTypeMetadata> dynamicMapTypeMetadata = new LinkedHashMap<>();
Expand All @@ -275,6 +289,10 @@ private static class Builder {
private final HibernateOrmRawTypeIdentifierResolver.Builder typeIdentifierResolverBuilder =
new HibernateOrmRawTypeIdentifierResolver.Builder();

public Builder(Metadata metadata) {
this.metadata = metadata;
}

HibernateOrmBasicTypeMetadataProvider build() {
return new HibernateOrmBasicTypeMetadataProvider( this );
}
Expand Down

0 comments on commit 1f16a2c

Please sign in to comment.