Skip to content

Commit 76f2243

Browse files
committed
HHH-18784 Add test for issue
1 parent d6e85b0 commit 76f2243

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.schemaupdate;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.Table;
10+
import org.hibernate.boot.MetadataSources;
11+
import org.hibernate.boot.registry.StandardServiceRegistry;
12+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
13+
import org.hibernate.boot.spi.MetadataImplementor;
14+
import org.hibernate.dialect.H2Dialect;
15+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
16+
import org.hibernate.testing.orm.junit.JiraKey;
17+
import org.hibernate.testing.orm.junit.RequiresDialect;
18+
import org.hibernate.testing.transaction.TransactionUtil;
19+
import org.hibernate.testing.util.ServiceRegistryUtil;
20+
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
21+
import org.hibernate.tool.schema.TargetType;
22+
import org.junit.After;
23+
import org.junit.Before;
24+
import org.junit.Test;
25+
26+
import java.io.File;
27+
import java.io.IOException;
28+
import java.math.BigDecimal;
29+
import java.nio.file.Files;
30+
import java.util.EnumSet;
31+
32+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
33+
34+
/**
35+
* @author Yanming Zhou
36+
*/
37+
@JiraKey("HHH-18784")
38+
@RequiresDialect(H2Dialect.class)
39+
public class ColumnLengthTest extends BaseCoreFunctionalTestCase {
40+
41+
private File output;
42+
43+
@Override
44+
protected Class<?>[] getAnnotatedClasses() {
45+
return new Class<?>[] { TestEntity.class };
46+
}
47+
48+
@Before
49+
public void setUp() throws IOException {
50+
output = File.createTempFile( "update_script", ".sql" );
51+
output.deleteOnExit();
52+
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
53+
session.createNativeQuery( "DROP TABLE IF EXISTS en CASCADE" ).executeUpdate();
54+
session.createNativeQuery(
55+
"CREATE TABLE en ( " +
56+
" `ID` integer NOT NULL, " +
57+
" `TEXT` varchar(1000), " +
58+
" `DECIMAL` numeric(38, 4), " +
59+
" PRIMARY KEY (`ID`)" +
60+
")" )
61+
.executeUpdate();
62+
} );
63+
}
64+
65+
@After
66+
public void tearDown() {
67+
TransactionUtil.doInHibernate( this::sessionFactory, session -> {
68+
session.createNativeQuery( "DROP TABLE en CASCADE" ).executeUpdate();
69+
} );
70+
output.delete();
71+
}
72+
73+
@Test
74+
public void testUpdateIsNotExecuted() throws Exception {
75+
StandardServiceRegistry ssr = ServiceRegistryUtil.serviceRegistryBuilder()
76+
.build();
77+
try {
78+
final MetadataSources metadataSources = new MetadataSources( ssr );
79+
metadataSources.addAnnotatedClass( TestEntity.class );
80+
MetadataImplementor metadata = (MetadataImplementor) metadataSources.buildMetadata();
81+
metadata.orderColumns( false );
82+
new SchemaUpdate()
83+
.setHaltOnError( true )
84+
.setOutputFile( output.getAbsolutePath() )
85+
.setFormat( false )
86+
.execute( EnumSet.of( TargetType.SCRIPT, TargetType.DATABASE ), metadata );
87+
88+
String fileContent = new String( Files.readAllBytes( output.toPath() ) );
89+
assertThat( fileContent ).isEmpty();
90+
}
91+
finally {
92+
StandardServiceRegistryBuilder.destroy( ssr );
93+
}
94+
}
95+
96+
97+
@Entity(name = "en")
98+
@Table(name = "en")
99+
public static class TestEntity {
100+
@Id
101+
private Integer id;
102+
103+
private String text;
104+
105+
private BigDecimal decimal;
106+
}
107+
}

0 commit comments

Comments
 (0)