Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,94 +7,96 @@
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.DomainModelScope;
import org.hibernate.testing.orm.junit.ServiceRegistryFunctionalTesting;
import org.hibernate.testing.orm.junit.ServiceRegistryProducer;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
import org.hibernate.tool.schema.JdbcMetadataAccessStrategy;
import org.hibernate.tool.schema.TargetType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedClass;
import org.junit.jupiter.params.provider.MethodSource;

import org.hibernate.testing.util.ServiceRegistryUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hibernate.cfg.MappingSettings.KEYWORD_AUTO_QUOTING_ENABLED;
import static org.hibernate.cfg.SchemaToolingSettings.HBM2DDL_JDBC_METADATA_EXTRACTOR_STRATEGY;

/**
* @author Andrea Boriero
*/
@RunWith(Parameterized.class)
public class ColumnNamesTest {
@Parameterized.Parameters
public static Collection<String> parameters() {
return Arrays.asList(
new String[] {JdbcMetadataAccessStrategy.GROUPED.toString(), JdbcMetadataAccessStrategy.INDIVIDUALLY.toString()}
@ParameterizedClass
@MethodSource("parameters")
@TestInstance( TestInstance.Lifecycle.PER_METHOD )
@ServiceRegistryFunctionalTesting
@DomainModel(annotatedClasses = ColumnNamesTest.Employee.class)
public class ColumnNamesTest implements ServiceRegistryProducer {
public static Collection<JdbcMetadataAccessStrategy> parameters() {
return List.of(
JdbcMetadataAccessStrategy.GROUPED,
JdbcMetadataAccessStrategy.INDIVIDUALLY
);
}

@Parameterized.Parameter
public String jdbcMetadataExtractorStrategy;
private final File output;
private final JdbcMetadataAccessStrategy jdbcMetadataExtractorStrategy;

private StandardServiceRegistry ssr;
private Metadata metadata;
private File output;
public ColumnNamesTest(
JdbcMetadataAccessStrategy jdbcMetadataExtractorStrategy,
@TempDir File outputDir) {
this.jdbcMetadataExtractorStrategy = jdbcMetadataExtractorStrategy;
this.output = new File( outputDir, "update_script.sql" );
}

@Before
public void setUp() throws IOException {
ssr = ServiceRegistryUtil.serviceRegistryBuilder()
.applySetting( AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED, "true" )
.applySetting( AvailableSettings.HBM2DDL_JDBC_METADATA_EXTRACTOR_STRATEGY, jdbcMetadataExtractorStrategy )
@Override
public StandardServiceRegistry produceServiceRegistry(StandardServiceRegistryBuilder builder) {
return ServiceRegistryUtil.serviceRegistryBuilder()
.applySetting( KEYWORD_AUTO_QUOTING_ENABLED, "true" )
.applySetting( HBM2DDL_JDBC_METADATA_EXTRACTOR_STRATEGY, jdbcMetadataExtractorStrategy )
.build();
output = File.createTempFile( "update_script", ".sql" );
output.deleteOnExit();
}

metadata = new MetadataSources( ssr )
.addAnnotatedClass( Employee.class )
.buildMetadata();
new SchemaExport().create( EnumSet.of( TargetType.DATABASE ), metadata );
@BeforeEach
public void setUp(DomainModelScope modelScope) {
new SchemaExport().create( EnumSet.of( TargetType.DATABASE ), modelScope.getDomainModel() );
}

@After
public void tearDown() {
try {
new SchemaExport().drop( EnumSet.of( TargetType.DATABASE ), metadata );
}
finally {
StandardServiceRegistryBuilder.destroy( ssr );
}
@AfterEach
public void tearDown(DomainModelScope modelScope) {
new SchemaExport().drop( EnumSet.of( TargetType.DATABASE ), modelScope.getDomainModel() );
}

@Test
public void testSchemaUpdateWithQuotedColumnNames() throws Exception {
public void testSchemaUpdateWithQuotedColumnNames(DomainModelScope modelScope) throws IOException {
new SchemaUpdate()
.setOutputFile( output.getAbsolutePath() )
.execute(
EnumSet.of( TargetType.SCRIPT ),
metadata
);
.execute( EnumSet.of( TargetType.SCRIPT ), modelScope.getDomainModel() );

final String fileContent = new String( Files.readAllBytes( output.toPath() ) );
assertThat( "The update output file should be empty", fileContent, is( "" ) );
assertThat( fileContent ).as( "The update output file should be empty" ).isEmpty();
}

@Entity
@Table(name = "Employee")
public class Employee {
public static class Employee {
@Id
private long id;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,35 @@
*/
package org.hibernate.orm.test.schemaupdate;

import java.util.Map;

import org.hibernate.mapping.PersistentClass;

import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
import org.hibernate.testing.orm.junit.JiraKey;

import jakarta.persistence.Column;
import jakarta.persistence.DiscriminatorColumn;
import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
import jakarta.persistence.Table;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.DomainModelScope;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.orm.junit.ServiceRegistry;
import org.hibernate.testing.orm.junit.Setting;
import org.junit.jupiter.api.Test;

import static jakarta.persistence.DiscriminatorType.CHAR;
import static jakarta.persistence.InheritanceType.SINGLE_TABLE;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SuppressWarnings("JUnitMalformedDeclaration")
@JiraKey("HHH-16551")
public class CreateCharDiscriminatorTest extends BaseNonConfigCoreFunctionalTestCase {
@ServiceRegistry(settings = @Setting(name="jakarta.persistence.validation.mode", value = "ddl"))
@DomainModel(annotatedClasses = CreateCharDiscriminatorTest.Parent.class)
public class CreateCharDiscriminatorTest {

@org.junit.Test
@JiraKey("HHH-16551")
public void testCreateDiscriminatorCharColumnSize() {
PersistentClass classMapping = metadata().getEntityBinding( Parent.class.getName() );
@Test
public void testCreateDiscriminatorCharColumnSize(DomainModelScope modelScope) {
final var classMapping = modelScope.getEntityBinding( Parent.class );
final var discriminatorColumn = classMapping.getDiscriminator().getColumns().get( 0 );
assertEquals( discriminatorColumn.getLength(), 1L );
}

@Override
protected void addSettings(Map<String, Object> settings) {
settings.put( "jakarta.persistence.validation.mode", "ddl" );
}

@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Parent.class
};
assertEquals( 1L, discriminatorColumn.getLength() );
}

@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@
*/
package org.hibernate.orm.test.schemaupdate;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.boot.internal.BootstrapContextImpl;
import org.hibernate.boot.internal.MetadataBuilderImpl;
import org.hibernate.boot.model.naming.Identifier;
Expand All @@ -19,32 +13,39 @@
import org.hibernate.boot.model.relational.Namespace;
import org.hibernate.boot.model.relational.Sequence;
import org.hibernate.boot.model.relational.SimpleAuxiliaryDatabaseObject;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.ForeignKey;
import org.hibernate.mapping.Index;
import org.hibernate.mapping.PrimaryKey;
import org.hibernate.mapping.Table;
import org.hibernate.mapping.UniqueKey;
import org.hibernate.testing.DialectChecks;
import org.hibernate.testing.RequiresDialectFeature;
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.junit.Test;
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
import org.hibernate.testing.orm.junit.ServiceRegistry;
import org.hibernate.testing.orm.junit.ServiceRegistryScope;
import org.junit.jupiter.api.Test;

import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertEquals;

@RequiresDialectFeature(DialectChecks.SupportsSequences.class)
public class ExportIdentifierTest extends BaseUnitTestCase {
@SuppressWarnings("JUnitMalformedDeclaration")
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsSequences.class)
@ServiceRegistry
public class ExportIdentifierTest {

@Test
@JiraKey( value = "HHH-12935" )
public void testUniqueExportableIdentifier() {
final StandardServiceRegistry ssr = ServiceRegistryUtil.serviceRegistry();
final MetadataBuilderImpl.MetadataBuildingOptionsImpl options = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( ssr );
options.setBootstrapContext( new BootstrapContextImpl( ssr, options ) );
final Database database = new Database( options );
public void testUniqueExportableIdentifier(ServiceRegistryScope scope) {
final var registry = scope.getRegistry();
final var options = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( registry );
options.setBootstrapContext( new BootstrapContextImpl( registry, options ) );

final var database = new Database( options );

database.locateNamespace( null, null );
database.locateNamespace( Identifier.toIdentifier( "catalog1" ), null );
Expand All @@ -63,19 +64,14 @@ public void testUniqueExportableIdentifier() {
final List<String> exportIdentifierList = new ArrayList<>();
final Set<String> exportIdentifierSet = new HashSet<>();

try {
addTables( "aTable" , database.getNamespaces(), exportIdentifierList, exportIdentifierSet );
addSimpleAuxiliaryDatabaseObject( database.getNamespaces(), exportIdentifierList, exportIdentifierSet );
addNamedAuxiliaryDatabaseObjects(
"aNamedAuxiliaryDatabaseObject", database.getNamespaces(), exportIdentifierList, exportIdentifierSet
);
addSequences( "aSequence", database.getNamespaces(), exportIdentifierList, exportIdentifierSet );
addTables( "aTable" , database.getNamespaces(), exportIdentifierList, exportIdentifierSet );
addSimpleAuxiliaryDatabaseObject( database.getNamespaces(), exportIdentifierList, exportIdentifierSet );
addNamedAuxiliaryDatabaseObjects(
"aNamedAuxiliaryDatabaseObject", database.getNamespaces(), exportIdentifierList, exportIdentifierSet
);
addSequences( "aSequence", database.getNamespaces(), exportIdentifierList, exportIdentifierSet );

assertEquals( exportIdentifierList.size(), exportIdentifierSet.size() );
}
finally {
StandardServiceRegistryBuilder.destroy( ssr );
}
assertEquals( exportIdentifierList.size(), exportIdentifierSet.size() );
}

private void addTables(
Expand All @@ -84,7 +80,6 @@ private void addTables(
List<String> exportIdentifierList,
Set<String> exportIdentifierSet) {
for ( Namespace namespace : namespaces ) {

final Table table = new Table( "orm", namespace, Identifier.toIdentifier( name ), false );
addExportIdentifier( table, exportIdentifierList, exportIdentifierSet );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,39 @@
*/
package org.hibernate.orm.test.schemaupdate;

import java.util.EnumSet;

import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.orm.junit.RequiresDialect;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
import org.hibernate.tool.schema.TargetType;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import org.hibernate.testing.RequiresDialect;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.junit.After;
import org.junit.Test;
import java.util.EnumSet;

@RequiresDialect(H2Dialect.class)
@JiraKey(value = "HHH-13597")
public class H2DialectDataBaseToUpperTest extends BaseUnitTestCase {

private StandardServiceRegistry ssr;
private MetadataImplementor metadata;

@Test
public void hibernateShouldStartUpWithH2AutoUpdateAndDatabaseToUpperFalse() {
setUp( "false" );
new SchemaUpdate().setHaltOnError( true )
.execute( EnumSet.of( TargetType.DATABASE ), metadata );
}

@Test
public void hibernateShouldStartUpWithH2AutoUpdateAndDatabaseToUpperTrue() {
setUp( "true" );
new SchemaUpdate().setHaltOnError( true )
.execute( EnumSet.of( TargetType.DATABASE ), metadata );
public class H2DialectDataBaseToUpperTest {
@ParameterizedTest
@ValueSource(booleans = {true, false})
public void testToUpper(boolean toUpper) {
try (var registry = createServiceRegistry(toUpper)) {
final Metadata metadata = new MetadataSources( registry ).buildMetadata();
new SchemaUpdate().setHaltOnError( true ).execute( EnumSet.of( TargetType.DATABASE ), metadata );
}
}

private void setUp(String databaseToUpper) {
ssr = ServiceRegistryUtil.serviceRegistryBuilder()
private StandardServiceRegistry createServiceRegistry(boolean toUpper) {
return ServiceRegistryUtil.serviceRegistryBuilder()
.applySetting(
AvailableSettings.URL,
"jdbc:h2:mem:databaseToUpper;DATABASE_TO_UPPER=" + databaseToUpper + ";DB_CLOSE_DELAY=-1;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
"jdbc:h2:mem:databaseToUpper;DATABASE_TO_UPPER=" + toUpper + ";DB_CLOSE_DELAY=-1;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
)
.build();
final MetadataSources metadataSources = new MetadataSources( ssr );
metadata = (MetadataImplementor) metadataSources.buildMetadata();
}

@After
public void tearDown() {
if ( ssr != null ) {
StandardServiceRegistryBuilder.destroy( ssr );
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.hibernate.testing.orm.jpa.PersistenceUnitDescriptorAdapter;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.util.ServiceRegistryUtil;
import org.junit.Test;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.List;
Expand Down
Loading
Loading