Skip to content

Commit ab8e679

Browse files
committed
HHH-9996 - Finish Derby database profile
1 parent 5c30c3c commit ab8e679

File tree

49 files changed

+750
-217
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+750
-217
lines changed

databases/derby/matrix.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
66
*/
77
//databaseProfile {
8-
jdbcDependency 'org.apache.derby:derby:10.10.2.0'
8+
jdbcDependency 'org.apache.derby:derby:10.11.1.1'
99

1010
// testing {
1111
// beforeSuite {

databases/derby/resources/hibernate.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,5 @@ hibernate.max_fetch_depth 5
2121
hibernate.cache.region_prefix hibernate.test
2222
hibernate.cache.region.factory_class org.hibernate.testing.cache.CachingRegionFactory
2323

24-
javax.persistence.validation.mode=NONE
2524
hibernate.service.allow_crawling=false
2625
hibernate.session.events.log=true

hibernate-core/src/test/java/org/hibernate/engine/spi/ExtraStateTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import javax.persistence.GeneratedValue;
1515
import javax.persistence.GenerationType;
1616
import javax.persistence.Id;
17+
import javax.persistence.Table;
1718

1819
import org.hibernate.Session;
1920
import org.hibernate.internal.SessionImpl;
@@ -68,6 +69,7 @@ protected Class<?>[] getAnnotatedClasses() {
6869
}
6970

7071
@Entity
72+
@Table(name = "ChineseTakeawayRestaurant")
7173
public class ChineseTakeawayRestaurant {
7274

7375
private long id;

hibernate-core/src/test/java/org/hibernate/id/SequenceHiLoGeneratorNoIncrementTest.java

Lines changed: 39 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,32 @@
66
*/
77
package org.hibernate.id;
88

9-
import java.sql.Connection;
10-
import java.sql.PreparedStatement;
11-
import java.sql.ResultSet;
12-
import java.sql.SQLException;
13-
import java.util.Collections;
149
import java.util.Properties;
1510

1611
import org.hibernate.Session;
12+
import org.hibernate.Transaction;
1713
import org.hibernate.boot.Metadata;
1814
import org.hibernate.boot.MetadataSources;
19-
import org.hibernate.boot.model.naming.Identifier;
2015
import org.hibernate.boot.model.naming.ObjectNameNormalizer;
21-
import org.hibernate.boot.model.relational.SimpleAuxiliaryDatabaseObject;
2216
import org.hibernate.boot.registry.StandardServiceRegistry;
2317
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
2418
import org.hibernate.boot.spi.MetadataBuildingContext;
2519
import org.hibernate.cfg.AvailableSettings;
26-
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
27-
import org.hibernate.engine.jdbc.spi.JdbcServices;
2820
import org.hibernate.engine.spi.SessionFactoryImplementor;
2921
import org.hibernate.engine.spi.SessionImplementor;
3022
import org.hibernate.id.enhanced.SequenceStyleGenerator;
3123
import org.hibernate.internal.SessionImpl;
32-
import org.hibernate.jdbc.Work;
3324
import org.hibernate.type.StandardBasicTypes;
3425

35-
import org.hibernate.testing.DialectChecks;
36-
import org.hibernate.testing.RequiresDialectFeature;
37-
import org.hibernate.testing.env.TestingDatabaseInfo;
38-
import org.hibernate.testing.junit4.BaseUnitTestCase;
39-
import org.hibernate.testing.boot.BasicTestingJdbcServiceImpl;
40-
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl;
4126
import org.junit.After;
4227
import org.junit.Before;
4328
import org.junit.Test;
4429

30+
import org.hibernate.testing.DialectChecks;
31+
import org.hibernate.testing.RequiresDialectFeature;
32+
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl;
33+
import org.hibernate.testing.junit4.BaseUnitTestCase;
34+
4535
import static org.junit.Assert.assertEquals;
4636

4737
/**
@@ -50,25 +40,21 @@
5040
*
5141
* @author Steve Ebersole
5242
*/
53-
@SuppressWarnings({ "deprecation" })
54-
@RequiresDialectFeature( DialectChecks.SupportsSequences.class )
43+
@SuppressWarnings({"deprecation"})
44+
@RequiresDialectFeature(DialectChecks.SupportsSequences.class)
5545
public class SequenceHiLoGeneratorNoIncrementTest extends BaseUnitTestCase {
5646
private static final String TEST_SEQUENCE = "test_sequence";
5747

5848
private StandardServiceRegistry serviceRegistry;
5949
private SessionFactoryImplementor sessionFactory;
6050
private SequenceStyleGenerator generator;
61-
private SessionImplementor session;
51+
private SessionImplementor sessionImpl;
52+
private SequenceValueExtractor sequenceValueExtractor;
6253

6354
@Before
6455
public void setUp() throws Exception {
65-
BasicTestingJdbcServiceImpl jdbcServices = new BasicTestingJdbcServiceImpl();
66-
jdbcServices.prepare( false );
67-
6856
serviceRegistry = new StandardServiceRegistryBuilder()
6957
.enableAutoClose()
70-
.addService( JdbcEnvironment.class, jdbcServices.getJdbcEnvironment() )
71-
.addService( JdbcServices.class, jdbcServices )
7258
.applySetting( AvailableSettings.HBM2DDL_AUTO, "create-drop" )
7359
.build();
7460

@@ -94,13 +80,14 @@ protected MetadataBuildingContext getBuildingContext() {
9480
generator.registerExportables( metadata.getDatabase() );
9581

9682
sessionFactory = (SessionFactoryImplementor) metadata.buildSessionFactory();
83+
sequenceValueExtractor = new SequenceValueExtractor( sessionFactory.getDialect(), TEST_SEQUENCE );
9784
}
9885

9986
@After
10087
public void tearDown() throws Exception {
101-
if(session != null && !session.isClosed()) {
102-
((Session)session).close();
103-
}
88+
if ( sessionImpl != null && !sessionImpl.isClosed() ) {
89+
((Session) sessionImpl).close();
90+
}
10491
if ( sessionFactory != null ) {
10592
sessionFactory.close();
10693
}
@@ -111,58 +98,49 @@ public void tearDown() throws Exception {
11198

11299
@Test
113100
public void testHiLoAlgorithm() {
114-
session = (SessionImpl) sessionFactory.openSession();
115-
((Session)session).beginTransaction();
101+
sessionImpl = (SessionImpl) sessionFactory.openSession();
116102

117103
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118104
// initially sequence should be uninitialized
119-
assertEquals( 0L, extractSequenceValue( (session) ) );
105+
assertEquals( 0L, extractSequenceValue( (sessionImpl) ) );
106+
120107

121108
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122109
// historically the hilo generators skipped the initial block of values;
123110
// so the first generated id value is maxlo + 1, here be 4
124-
Long generatedValue = (Long) generator.generate( session, null );
125-
assertEquals( 1L, generatedValue.longValue() );
111+
assertEquals( 1L, generateValue() );
112+
126113
// which should also perform the first read on the sequence which should set it to its "start with" value (1)
127-
assertEquals( 1L, extractSequenceValue( (session) ) );
114+
assertEquals( 1L, extractSequenceValue( (sessionImpl) ) );
128115

129116
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
130-
generatedValue = (Long) generator.generate( session, null );
131-
assertEquals( 2L, generatedValue.longValue() );
132-
assertEquals( 2L, extractSequenceValue( (session) ) );
117+
assertEquals( 2L, generateValue() );
118+
assertEquals( 2L, extractSequenceValue( (sessionImpl) ) );
133119

134120
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
135-
generatedValue = (Long) generator.generate( session, null );
136-
assertEquals( 3L, generatedValue.longValue() );
137-
assertEquals( 3L, extractSequenceValue( (session) ) );
121+
assertEquals( 3L, generateValue() );
122+
assertEquals( 3L, extractSequenceValue( (sessionImpl) ) );
138123

139124
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140-
generatedValue = (Long) generator.generate( session, null );
141-
assertEquals( 4L, generatedValue.longValue() );
142-
assertEquals( 4L, extractSequenceValue( (session) ) );
125+
assertEquals( 4L, generateValue() );
126+
assertEquals( 4L, extractSequenceValue( (sessionImpl) ) );
143127

144128
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145-
generatedValue = (Long) generator.generate( session, null );
146-
assertEquals( 5L, generatedValue.longValue() );
147-
assertEquals( 5L, extractSequenceValue( (session) ) );
129+
assertEquals( 5L, generateValue() );
130+
assertEquals( 5L, extractSequenceValue( (sessionImpl) ) );
148131

149-
((Session)session).getTransaction().commit();
150-
((Session)session).close();
132+
((Session) sessionImpl).close();
151133
}
152134

153-
private long extractSequenceValue(final SessionImplementor session) {
154-
class WorkImpl implements Work {
155-
private long value;
156-
public void execute(Connection connection) throws SQLException {
157-
158-
PreparedStatement query = session.getJdbcCoordinator().getStatementPreparer().prepareStatement( "select currval('" + TEST_SEQUENCE + "');" );
159-
ResultSet resultSet = session.getJdbcCoordinator().getResultSetReturn().extract( query );
160-
resultSet.next();
161-
value = resultSet.getLong( 1 );
162-
}
163-
}
164-
WorkImpl work = new WorkImpl();
165-
( (Session) session ).doWork( work );
166-
return work.value;
135+
private long extractSequenceValue(SessionImplementor sessionImpl) {
136+
return sequenceValueExtractor.extractSequenceValue( sessionImpl );
137+
}
138+
139+
private long generateValue() {
140+
Long generatedValue;
141+
Transaction transaction = ((Session) sessionImpl).beginTransaction();
142+
generatedValue = (Long) generator.generate( sessionImpl, null );
143+
transaction.commit();
144+
return generatedValue.longValue();
167145
}
168146
}

hibernate-core/src/test/java/org/hibernate/id/SequenceHiLoGeneratorTest.java

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@
66
*/
77
package org.hibernate.id;
88

9-
import java.sql.Connection;
10-
import java.sql.PreparedStatement;
11-
import java.sql.ResultSet;
12-
import java.sql.SQLException;
139
import java.util.Properties;
1410

1511
import org.hibernate.Session;
12+
import org.hibernate.Transaction;
1613
import org.hibernate.boot.Metadata;
1714
import org.hibernate.boot.MetadataSources;
1815
import org.hibernate.boot.registry.StandardServiceRegistry;
@@ -22,33 +19,35 @@
2219
import org.hibernate.engine.spi.SessionFactoryImplementor;
2320
import org.hibernate.engine.spi.SessionImplementor;
2421
import org.hibernate.internal.SessionImpl;
25-
import org.hibernate.jdbc.Work;
2622
import org.hibernate.type.StandardBasicTypes;
2723

28-
import org.hibernate.testing.DialectChecks;
29-
import org.hibernate.testing.RequiresDialectFeature;
30-
import org.hibernate.testing.junit4.BaseUnitTestCase;
31-
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl;
3224
import org.junit.After;
3325
import org.junit.Before;
3426
import org.junit.Test;
3527

28+
import org.hibernate.testing.DialectChecks;
29+
import org.hibernate.testing.RequiresDialectFeature;
30+
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl;
31+
import org.hibernate.testing.junit4.BaseUnitTestCase;
32+
3633
import static org.junit.Assert.assertEquals;
3734

3835
/**
3936
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
4037
* unit test so that we can make sure the value keep being generated in the expected manner
41-
*
38+
*
4239
* @author Steve Ebersole
4340
*/
44-
@SuppressWarnings({ "deprecation" })
45-
@RequiresDialectFeature( DialectChecks.SupportsSequences.class )
41+
@SuppressWarnings({"deprecation"})
42+
@RequiresDialectFeature(DialectChecks.SupportsSequences.class)
4643
public class SequenceHiLoGeneratorTest extends BaseUnitTestCase {
4744
private static final String TEST_SEQUENCE = "test_sequence";
4845

4946
private StandardServiceRegistry serviceRegistry;
5047
private SessionFactoryImplementor sessionFactory;
5148
private SequenceHiLoGenerator generator;
49+
private SessionImplementor sessionImpl;
50+
private SequenceValueExtractor sequenceValueExtractor;
5251

5352
@Before
5453
public void setUp() throws Exception {
@@ -62,7 +61,10 @@ public void setUp() throws Exception {
6261
Properties properties = new Properties();
6362
properties.setProperty( SequenceGenerator.SEQUENCE, TEST_SEQUENCE );
6463
properties.setProperty( SequenceHiLoGenerator.MAX_LO, "3" );
65-
properties.put( PersistentIdentifierGenerator.IDENTIFIER_NORMALIZER, buildingContext.getObjectNameNormalizer() );
64+
properties.put(
65+
PersistentIdentifierGenerator.IDENTIFIER_NORMALIZER,
66+
buildingContext.getObjectNameNormalizer()
67+
);
6668

6769
generator = new SequenceHiLoGenerator();
6870
generator.configure( StandardBasicTypes.LONG, properties, serviceRegistry );
@@ -71,6 +73,7 @@ public void setUp() throws Exception {
7173
generator.registerExportables( metadata.getDatabase() );
7274

7375
sessionFactory = (SessionFactoryImplementor) metadata.buildSessionFactory();
76+
sequenceValueExtractor = new SequenceValueExtractor( sessionFactory.getDialect(), TEST_SEQUENCE );
7477
}
7578

7679
@After
@@ -85,61 +88,50 @@ public void tearDown() throws Exception {
8588

8689
@Test
8790
public void testHiLoAlgorithm() {
88-
SessionImpl session = (SessionImpl) sessionFactory.openSession();
89-
session.beginTransaction();
91+
sessionImpl = (SessionImpl) sessionFactory.openSession();
9092

9193
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9294
// initially sequence should be uninitialized
93-
assertEquals( 0L, extractSequenceValue( session ) );
95+
assertEquals( 0L, extractSequenceValue( sessionImpl ) );
9496

9597
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9698
// historically the hilo generators skipped the initial block of values;
9799
// so the first generated id value is maxlo + 1, here be 4
98-
Long generatedValue = (Long) generator.generate( session, null );
99-
assertEquals( 4L, generatedValue.longValue() );
100+
assertEquals( 4L, generateValue() );
100101
// which should also perform the first read on the sequence which should set it to its "start with" value (1)
101-
assertEquals( 1L, extractSequenceValue( session ) );
102+
assertEquals( 1L, extractSequenceValue( sessionImpl ) );
102103

103104
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104-
generatedValue = (Long) generator.generate( session, null );
105-
assertEquals( 5L, generatedValue.longValue() );
106-
assertEquals( 1L, extractSequenceValue( session ) );
105+
assertEquals( 5L, generateValue() );
106+
assertEquals( 1L, extractSequenceValue( sessionImpl ) );
107107

108108
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
109-
generatedValue = (Long) generator.generate( session, null );
110-
assertEquals( 6L, generatedValue.longValue() );
111-
assertEquals( 1L, extractSequenceValue( session ) );
109+
assertEquals( 6L, generateValue() );
110+
assertEquals( 1L, extractSequenceValue( sessionImpl ) );
112111

113112
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114-
generatedValue = (Long) generator.generate( session, null );
115-
assertEquals( 7L, generatedValue.longValue() );
113+
assertEquals( 7L, generateValue() );
116114
// unlike the newer strategies, the db value will not get update here. It gets updated on the next invocation
117115
// after a clock over
118-
assertEquals( 1L, extractSequenceValue( session ) );
116+
assertEquals( 1L, extractSequenceValue( sessionImpl ) );
119117

120118
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
121-
generatedValue = (Long) generator.generate( session, null );
122-
assertEquals( 8L, generatedValue.longValue() );
119+
assertEquals( 8L, generateValue() );
123120
// this should force an increment in the sequence value
124-
assertEquals( 2L, extractSequenceValue( session ) );
121+
assertEquals( 2L, extractSequenceValue( sessionImpl ) );
125122

126-
session.getTransaction().commit();
127-
session.close();
123+
((Session) sessionImpl).close();
128124
}
129125

130-
private long extractSequenceValue(final SessionImplementor session) {
131-
class WorkImpl implements Work {
132-
private long value;
126+
private long extractSequenceValue(SessionImplementor sessionImpl) {
127+
return sequenceValueExtractor.extractSequenceValue( sessionImpl );
128+
}
133129

134-
public void execute(Connection connection) throws SQLException {
135-
PreparedStatement query = session.getJdbcCoordinator().getStatementPreparer().prepareStatement( "select currval('" + TEST_SEQUENCE + "');" );
136-
ResultSet resultSet = session.getJdbcCoordinator().getResultSetReturn().extract( query );
137-
resultSet.next();
138-
value = resultSet.getLong( 1 );
139-
}
140-
}
141-
WorkImpl work = new WorkImpl();
142-
( (Session) session ).doWork( work );
143-
return work.value;
130+
private long generateValue() {
131+
Long generatedValue;
132+
Transaction transaction = ((Session) sessionImpl).beginTransaction();
133+
generatedValue = (Long) generator.generate( sessionImpl, null );
134+
transaction.commit();
135+
return generatedValue.longValue();
144136
}
145137
}

0 commit comments

Comments
 (0)