Skip to content

Commit c4c129f

Browse files
committed
Update H2 to 1.4.200. Replace LockMode in Fetch and DomainResult with the source alias to resolve lock mode during initializer creation. Introduce notion of aggregate function with an optional filter clause. Implement support for rendering locks into SQL. Move locking tests to orm package
1 parent d11abcc commit c4c129f

File tree

255 files changed

+3139
-1008
lines changed

Some content is hidden

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

255 files changed

+3139
-1008
lines changed

gradle/libraries.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ext {
1313
junitVintageVersion = '5.7.1'
1414
junit5Version = '5.7.1'
1515

16-
h2Version = '1.4.199'
16+
h2Version = '1.4.200'
1717
bytemanVersion = '4.0.13' //Compatible with JDK16
1818
jnpVersion = '5.0.6.CR1'
1919

hibernate-core/src/main/java/org/hibernate/LockOptions.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,12 @@ public LockOptions setAliasSpecificLockMode(String alias, LockMode lockMode) {
124124
if ( aliasSpecificLockModes == null ) {
125125
aliasSpecificLockModes = new LinkedHashMap<>();
126126
}
127-
aliasSpecificLockModes.put( alias, lockMode );
127+
if ( lockMode == null ) {
128+
aliasSpecificLockModes.remove( alias );
129+
}
130+
else {
131+
aliasSpecificLockModes.put( alias, lockMode );
132+
}
128133
return this;
129134
}
130135

hibernate-core/src/main/java/org/hibernate/collection/internal/AbstractBagSemantics.java

-7
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.Iterator;
1212
import java.util.function.Consumer;
1313

14-
import org.hibernate.LockMode;
1514
import org.hibernate.collection.spi.BagSemantics;
1615
import org.hibernate.collection.spi.CollectionInitializerProducer;
1716
import org.hibernate.engine.FetchTiming;
@@ -68,7 +67,6 @@ public CollectionInitializerProducer createInitializerProducer(
6867
FetchParent fetchParent,
6968
boolean selected,
7069
String resultVariable,
71-
LockMode lockMode,
7270
DomainResultCreationState creationState) {
7371
return new BagInitializerProducer(
7472
attributeMapping,
@@ -77,7 +75,6 @@ public CollectionInitializerProducer createInitializerProducer(
7775
navigablePath.append( CollectionPart.Nature.ID.getName() ),
7876
FetchTiming.IMMEDIATE,
7977
selected,
80-
lockMode,
8178
null,
8279
creationState
8380
),
@@ -86,7 +83,6 @@ public CollectionInitializerProducer createInitializerProducer(
8683
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
8784
FetchTiming.IMMEDIATE,
8885
selected,
89-
lockMode,
9086
null,
9187
creationState
9288
)
@@ -100,7 +96,6 @@ public CollectionInitializerProducer createInitializerProducer(
10096
FetchParent fetchParent,
10197
boolean selected,
10298
String resultVariable,
103-
LockMode lockMode,
10499
Fetch indexFetch,
105100
Fetch elementFetch,
106101
DomainResultCreationState creationState){
@@ -110,7 +105,6 @@ public CollectionInitializerProducer createInitializerProducer(
110105
navigablePath.append( CollectionPart.Nature.ID.getName() ),
111106
FetchTiming.IMMEDIATE,
112107
selected,
113-
lockMode,
114108
null,
115109
creationState
116110
);
@@ -121,7 +115,6 @@ public CollectionInitializerProducer createInitializerProducer(
121115
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
122116
FetchTiming.IMMEDIATE,
123117
selected,
124-
lockMode,
125118
null,
126119
creationState
127120
);

hibernate-core/src/main/java/org/hibernate/collection/internal/AbstractMapSemantics.java

-7
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.function.BiConsumer;
1313
import java.util.function.Consumer;
1414

15-
import org.hibernate.LockMode;
1615
import org.hibernate.collection.spi.CollectionInitializerProducer;
1716
import org.hibernate.collection.spi.MapSemantics;
1817
import org.hibernate.engine.FetchTiming;
@@ -80,7 +79,6 @@ public CollectionInitializerProducer createInitializerProducer(
8079
FetchParent fetchParent,
8180
boolean selected,
8281
String resultVariable,
83-
LockMode lockMode,
8482
DomainResultCreationState creationState) {
8583
return new MapInitializerProducer(
8684
attributeMapping,
@@ -89,7 +87,6 @@ public CollectionInitializerProducer createInitializerProducer(
8987
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
9088
FetchTiming.IMMEDIATE,
9189
selected,
92-
lockMode,
9390
null,
9491
creationState
9592
),
@@ -98,7 +95,6 @@ public CollectionInitializerProducer createInitializerProducer(
9895
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
9996
FetchTiming.IMMEDIATE,
10097
selected,
101-
lockMode,
10298
null,
10399
creationState
104100
)
@@ -112,7 +108,6 @@ public CollectionInitializerProducer createInitializerProducer(
112108
FetchParent fetchParent,
113109
boolean selected,
114110
String resultVariable,
115-
LockMode lockMode,
116111
Fetch indexFetch,
117112
Fetch elementFetch,
118113
DomainResultCreationState creationState){
@@ -122,7 +117,6 @@ public CollectionInitializerProducer createInitializerProducer(
122117
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
123118
FetchTiming.IMMEDIATE,
124119
selected,
125-
lockMode,
126120
null,
127121
creationState
128122
);
@@ -133,7 +127,6 @@ public CollectionInitializerProducer createInitializerProducer(
133127
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
134128
FetchTiming.IMMEDIATE,
135129
selected,
136-
lockMode,
137130
null,
138131
creationState
139132
);

hibernate-core/src/main/java/org/hibernate/collection/internal/AbstractSetSemantics.java

-5
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.Set;
1111
import java.util.function.Consumer;
1212

13-
import org.hibernate.LockMode;
1413
import org.hibernate.collection.spi.CollectionInitializerProducer;
1514
import org.hibernate.collection.spi.CollectionSemantics;
1615
import org.hibernate.engine.FetchTiming;
@@ -53,7 +52,6 @@ public CollectionInitializerProducer createInitializerProducer(
5352
FetchParent fetchParent,
5453
boolean selected,
5554
String resultVariable,
56-
LockMode lockMode,
5755
DomainResultCreationState creationState) {
5856
return new SetInitializerProducer(
5957
attributeMapping,
@@ -62,7 +60,6 @@ public CollectionInitializerProducer createInitializerProducer(
6260
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
6361
FetchTiming.IMMEDIATE,
6462
selected,
65-
lockMode,
6663
null,
6764
creationState
6865
)
@@ -76,7 +73,6 @@ public CollectionInitializerProducer createInitializerProducer(
7673
FetchParent fetchParent,
7774
boolean selected,
7875
String resultVariable,
79-
LockMode lockMode,
8076
Fetch indexFetch,
8177
Fetch elementFetch,
8278
DomainResultCreationState creationState){
@@ -87,7 +83,6 @@ public CollectionInitializerProducer createInitializerProducer(
8783
fetchParent,
8884
selected,
8985
resultVariable,
90-
lockMode,
9186
creationState
9287
);
9388
}

hibernate-core/src/main/java/org/hibernate/collection/internal/StandardArraySemantics.java

-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.Iterator;
1111
import java.util.function.Consumer;
1212

13-
import org.hibernate.LockMode;
1413
import org.hibernate.collection.spi.CollectionInitializerProducer;
1514
import org.hibernate.collection.spi.CollectionSemantics;
1615
import org.hibernate.collection.spi.PersistentCollection;
@@ -101,7 +100,6 @@ public CollectionInitializerProducer createInitializerProducer(
101100
FetchParent fetchParent,
102101
boolean selected,
103102
String resultVariable,
104-
LockMode lockMode,
105103
DomainResultCreationState creationState) {
106104
return new ArrayInitializerProducer(
107105
attributeMapping,
@@ -110,7 +108,6 @@ public CollectionInitializerProducer createInitializerProducer(
110108
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
111109
FetchTiming.IMMEDIATE,
112110
selected,
113-
lockMode,
114111
null,
115112
creationState
116113
),
@@ -119,7 +116,6 @@ public CollectionInitializerProducer createInitializerProducer(
119116
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
120117
FetchTiming.IMMEDIATE,
121118
selected,
122-
lockMode,
123119
null,
124120
creationState
125121
)
@@ -133,7 +129,6 @@ public CollectionInitializerProducer createInitializerProducer(
133129
FetchParent fetchParent,
134130
boolean selected,
135131
String resultVariable,
136-
LockMode lockMode,
137132
Fetch indexFetch,
138133
Fetch elementFetch,
139134
DomainResultCreationState creationState){
@@ -143,7 +138,6 @@ public CollectionInitializerProducer createInitializerProducer(
143138
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
144139
FetchTiming.IMMEDIATE,
145140
selected,
146-
lockMode,
147141
null,
148142
creationState
149143
);
@@ -154,7 +148,6 @@ public CollectionInitializerProducer createInitializerProducer(
154148
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
155149
FetchTiming.IMMEDIATE,
156150
selected,
157-
lockMode,
158151
null,
159152
creationState
160153
);

hibernate-core/src/main/java/org/hibernate/collection/internal/StandardListSemantics.java

-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.List;
1111
import java.util.function.Consumer;
1212

13-
import org.hibernate.LockMode;
1413
import org.hibernate.collection.spi.CollectionInitializerProducer;
1514
import org.hibernate.collection.spi.CollectionSemantics;
1615
import org.hibernate.collection.spi.PersistentCollection;
@@ -75,7 +74,6 @@ public CollectionInitializerProducer createInitializerProducer(
7574
FetchParent fetchParent,
7675
boolean selected,
7776
String resultVariable,
78-
LockMode lockMode,
7977
DomainResultCreationState creationState) {
8078
return new ListInitializerProducer(
8179
attributeMapping,
@@ -84,7 +82,6 @@ public CollectionInitializerProducer createInitializerProducer(
8482
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
8583
FetchTiming.IMMEDIATE,
8684
selected,
87-
lockMode,
8885
null,
8986
creationState
9087
),
@@ -93,7 +90,6 @@ public CollectionInitializerProducer createInitializerProducer(
9390
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
9491
FetchTiming.IMMEDIATE,
9592
selected,
96-
lockMode,
9793
null,
9894
creationState
9995
)
@@ -107,7 +103,6 @@ public CollectionInitializerProducer createInitializerProducer(
107103
FetchParent fetchParent,
108104
boolean selected,
109105
String resultVariable,
110-
LockMode lockMode,
111106
Fetch indexFetch,
112107
Fetch elementFetch,
113108
DomainResultCreationState creationState) {
@@ -117,7 +112,6 @@ public CollectionInitializerProducer createInitializerProducer(
117112
navigablePath.append( CollectionPart.Nature.INDEX.getName() ),
118113
FetchTiming.IMMEDIATE,
119114
selected,
120-
lockMode,
121115
null,
122116
creationState
123117
);
@@ -128,7 +122,6 @@ public CollectionInitializerProducer createInitializerProducer(
128122
navigablePath.append( CollectionPart.Nature.ELEMENT.getName() ),
129123
FetchTiming.IMMEDIATE,
130124
selected,
131-
lockMode,
132125
null,
133126
creationState
134127
);

hibernate-core/src/main/java/org/hibernate/collection/spi/CollectionSemantics.java

-2
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ CollectionInitializerProducer createInitializerProducer(
6565
FetchParent fetchParent,
6666
boolean selected,
6767
String resultVariable,
68-
LockMode lockMode,
6968
DomainResultCreationState creationState);
7069

7170
CollectionInitializerProducer createInitializerProducer(
@@ -74,7 +73,6 @@ CollectionInitializerProducer createInitializerProducer(
7473
FetchParent fetchParent,
7574
boolean selected,
7675
String resultVariable,
77-
LockMode lockMode,
7876
Fetch indexFetch,
7977
Fetch elementFetch,
8078
DomainResultCreationState creationState);

hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java

+5
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,11 @@ public boolean forUpdateOfColumns() {
923923
return true;
924924
}
925925

926+
@Override
927+
public LockClauseRowIdentifier getWriteLockRowIdentifier() {
928+
return LockClauseRowIdentifier.COLUMN;
929+
}
930+
926931
@Override
927932
public String getAddColumnString() {
928933
return "add (";

hibernate-core/src/main/java/org/hibernate/dialect/AbstractTransactSQLDialect.java

+5
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ public String getForUpdateString() {
158158
return "";
159159
}
160160

161+
@Override
162+
public LockClauseRowIdentifier getWriteLockRowIdentifier() {
163+
return LockClauseRowIdentifier.TABLE;
164+
}
165+
161166
@Override
162167
public String appendLockHint(LockOptions lockOptions, String tableName) {
163168
return lockOptions.getLockMode().greaterThan( LockMode.READ ) ? tableName + " holdlock" : tableName;

hibernate-core/src/main/java/org/hibernate/dialect/CacheSqlAstTranslator.java

+11
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@ public CacheSqlAstTranslator(SessionFactoryImplementor sessionFactory, Statement
3434
super( sessionFactory, statement );
3535
}
3636

37+
@Override
38+
protected LockStrategy determineLockingStrategy(QuerySpec querySpec, ForUpdateClause forUpdateClause) {
39+
// No-op
40+
return LockStrategy.NONE;
41+
}
42+
43+
@Override
44+
protected void renderForUpdateClause(QuerySpec querySpec, ForUpdateClause forUpdateClause) {
45+
// Cache does not support the FOR UPDATE clause
46+
}
47+
3748
@Override
3849
protected boolean needsRowsToSkip() {
3950
return true;

0 commit comments

Comments
 (0)