Skip to content

Commit c5e483e

Browse files
committed
HHH-19713 Store JD repository query in local variable for reuse
1 parent 6bc4324 commit c5e483e

File tree

5 files changed

+61
-31
lines changed

5 files changed

+61
-31
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,24 @@ String specificationType() {
8080
}
8181

8282
@Override
83-
void createQuery(StringBuilder declaration) {
83+
void createQuery(StringBuilder declaration, boolean declareVariable) {
84+
if ( declareVariable ) {
85+
if ( dataRepository && !isReactive() ) {
86+
declaration
87+
.append('\t');
88+
}
89+
declaration
90+
.append('\t');
91+
declaration
92+
.append("var _select = ");
93+
}
8494
final boolean specification = isUsingSpecification();
8595
if ( specification && !isReactive() ) {
8696
declaration
8797
.append("_spec.createQuery(")
8898
.append(localSessionName())
8999
.append(getObjectCall())
90-
.append(")\n");
100+
.append(")");
91101
}
92102
else {
93103
declaration
@@ -103,7 +113,7 @@ void createQuery(StringBuilder declaration) {
103113
else {
104114
declaration.append("_query");
105115
}
106-
declaration.append(")\n");
116+
declaration.append( ")" );
107117
}
108118
}
109119

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -453,10 +453,10 @@ void makeKeyedPage(StringBuilder declaration, List<String> paramTypes) {
453453
"\t\t\t\t_results.isFirstPage() ? null : beforeCursor(_cursors.get(0), pageRequest.page()-1, pageRequest.size(), pageRequest.requestTotal()))";
454454

455455
static final String MAKE_KEYED_PAGE
456-
= "\tvar _unkeyedPage =\n" +
456+
= "\t\tvar _unkeyedPage =\n" +
457457
"\t\t\tpage(pageRequest.size(), (int) pageRequest.page()-1)\n" +
458458
"\t\t\t\t\t.keyedBy(_orders);\n" +
459-
"\tvar _keyedPage =\n" +
459+
"\t\tvar _keyedPage =\n" +
460460
"\t\t\tpageRequest.cursor()\n" +
461461
"\t\t\t\t\t.map(_cursor -> {\n" +
462462
"\t\t\t\t\t\t@SuppressWarnings(\"unchecked\")\n" +
@@ -468,22 +468,25 @@ void makeKeyedPage(StringBuilder declaration, List<String> paramTypes) {
468468
"\t\t\t\t\t\t};\n" +
469469
"\t\t\t\t\t}).orElse(_unkeyedPage);";
470470

471-
void createQuery(StringBuilder declaration) {}
471+
void createQuery(StringBuilder declaration, boolean declareVariable) {}
472472

473473
void createSpecification(StringBuilder declaration) {}
474474

475-
void setParameters(StringBuilder declaration, List<String> paramTypes, String indent) {}
475+
void setParameters(StringBuilder declaration, List<String> paramTypes) {}
476476

477-
void tryReturn(StringBuilder declaration, List<String> paramTypes, @Nullable String containerType) {
478-
if ( isJakartaCursoredPage(containerType) ) {
479-
makeKeyedPage( declaration, paramTypes );
480-
}
477+
void inTry(StringBuilder declaration) {
481478
if ( dataRepository && !isReactive() ) {
482479
declaration
483480
.append("\ttry {\n");
484481
}
485-
if ( JD_CURSORED_PAGE.equals(containerType)
486-
|| JD_PAGE.equals(containerType) ) {
482+
}
483+
484+
void results(StringBuilder declaration, List<String> paramTypes, @Nullable String containerType) {
485+
if ( isJakartaCursoredPage(containerType) ) {
486+
makeKeyedPage( declaration, paramTypes );
487+
}
488+
if ( isJakartaCursoredPage(containerType)
489+
|| isJakartaPage(containerType) ) {
487490
if ( dataRepository ) {
488491
declaration
489492
.append('\t');
@@ -522,6 +525,11 @@ void tryReturn(StringBuilder declaration, List<String> paramTypes, @Nullable Str
522525
}
523526
}
524527

528+
void select(StringBuilder declaration) {
529+
declaration
530+
.append("_select\n");
531+
}
532+
525533
private void totalResults(StringBuilder declaration, List<String> paramTypes) {
526534
declaration
527535
.append("\tlong _totalResults = \n\t\t\t\t");
@@ -532,8 +540,7 @@ private void totalResults(StringBuilder declaration, List<String> paramTypes) {
532540
declaration
533541
.append(parameterName(JD_PAGE_REQUEST, paramTypes, paramNames))
534542
.append(".requestTotal()\n\t\t\t\t\t\t? ");
535-
createQuery( declaration );
536-
setParameters( declaration, paramTypes, "\t\t\t\t\t");
543+
select( declaration );
537544
if ( isUsingEntityManager() ) {
538545
declaration
539546
.append("\t\t\t\t\t");

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ void executeQuery(StringBuilder declaration, List<String> paramTypes) {
5757
createSpecification( declaration );
5858
handleRestrictionParameters( declaration, paramTypes );
5959
tryReturn(declaration);
60-
createQuery( declaration );
60+
createQuery( declaration, false );
6161
execute( declaration );
6262
}
6363

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,12 @@ void executeQuery(StringBuilder declaration, List<String> paramTypes) {
5757
createSpecification( declaration );
5858
handleRestrictionParameters( declaration, paramTypes );
5959
collectOrdering( declaration, paramTypes, containerType );
60-
tryReturn( declaration, paramTypes, containerType );
60+
inTry( declaration );
61+
createQuery( declaration, true );
62+
declaration.append( ";\n" );
63+
results( declaration, paramTypes, containerType );
6164
castResult( declaration );
62-
createQuery( declaration );
65+
select( declaration );
6366
handlePageParameters( declaration, paramTypes, containerType );
6467
boolean unwrapped = initiallyUnwrapped();
6568
unwrapped = enableFetchProfile( declaration, unwrapped );

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,13 @@ public String getAttributeDeclarationString() {
9797
handleRestrictionParameters( declaration, paramTypes );
9898
collectOrdering( declaration, paramTypes, containerType );
9999
chainSession( declaration );
100-
tryReturn( declaration, paramTypes, containerType );
100+
inTry( declaration );
101+
createQuery( declaration, true );
102+
setParameters( declaration, paramTypes );
103+
declaration.append( ";\n" );
104+
results( declaration, paramTypes, containerType );
101105
castResult( declaration );
102-
createQuery( declaration );
103-
setParameters( declaration, paramTypes, "");
106+
select( declaration );
104107
handlePageParameters( declaration, paramTypes, containerType );
105108
execute( declaration, initiallyUnwrapped() );
106109
convertExceptions( declaration );
@@ -116,7 +119,16 @@ String specificationType() {
116119
}
117120

118121
@Override
119-
void createQuery(StringBuilder declaration) {
122+
void createQuery(StringBuilder declaration, boolean declareVariable) {
123+
if ( declareVariable ) {
124+
if ( dataRepository && !isReactive() ) {
125+
declaration
126+
.append('\t');
127+
}
128+
declaration
129+
.append('\t');
130+
declaration.append("var _select = ");
131+
}
120132
if ( isUsingSpecification() ) {
121133
if ( isReactive() ) {
122134
declaration
@@ -130,7 +142,7 @@ void createQuery(StringBuilder declaration) {
130142
.append("_spec.createQuery(")
131143
.append(localSessionName())
132144
.append(getObjectCall())
133-
.append(")\n");
145+
.append(")");
134146
}
135147
}
136148
else {
@@ -147,7 +159,7 @@ void createQuery(StringBuilder declaration) {
147159
.append(annotationMetaEntity.importType(returnTypeClass))
148160
.append(".class");
149161
}
150-
declaration.append(")\n");
162+
declaration.append(")");
151163
}
152164
}
153165

@@ -225,17 +237,15 @@ else if ( BOOLEAN.equals(returnTypeName) ) {
225237
}
226238

227239
@Override
228-
void setParameters(StringBuilder declaration, List<String> paramTypes, String indent) {
240+
void setParameters(StringBuilder declaration, List<String> paramTypes) {
229241
for ( int i = 0; i < paramNames.size(); i++ ) {
230242
if ( !isSpecialParam( paramTypes.get(i) ) ) {
231243
final String paramName = paramNames.get(i);
232244
final int ordinal = i+1;
233245
if ( queryString.contains(":" + paramName) ) {
234-
declaration.append(indent);
235246
setNamedParameter( declaration, paramName );
236247
}
237248
else if ( queryString.contains("?" + ordinal) ) {
238-
declaration.append(indent);
239249
setOrdinalParameter( declaration, ordinal, paramName );
240250
}
241251
}
@@ -244,20 +254,20 @@ else if ( queryString.contains("?" + ordinal) ) {
244254

245255
private static void setOrdinalParameter(StringBuilder declaration, int i, String paramName) {
246256
declaration
247-
.append("\t\t\t.setParameter(")
257+
.append("\n\t\t\t.setParameter(")
248258
.append(i)
249259
.append(", ")
250260
.append(paramName)
251-
.append(")\n");
261+
.append(")");
252262
}
253263

254264
private static void setNamedParameter(StringBuilder declaration, String paramName) {
255265
declaration
256-
.append("\t\t\t.setParameter(\"")
266+
.append("\n\t\t\t.setParameter(\"")
257267
.append(paramName)
258268
.append("\", ")
259269
.append(paramName)
260-
.append(")\n");
270+
.append(")");
261271
}
262272

263273
// private String returnType() {

0 commit comments

Comments
 (0)