Skip to content

Commit d0a8223

Browse files
committed
Dedicate visitor
1 parent 8ef46d8 commit d0a8223

File tree

3 files changed

+57
-13
lines changed

3 files changed

+57
-13
lines changed

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Subselect.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public abstract class Subselect extends AbstractSegment {
2727
private final Select select;
2828

2929
protected Subselect(Select select) {
30+
31+
super(select);
32+
3033
this.select = select;
3134
}
3235

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FromTableVisitor.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class FromTableVisitor extends TypedSubtreeVisitor<TableLike> {
3535

3636
private final RenderContext context;
3737
private final RenderTarget parent;
38-
@Nullable private SelectStatementVisitor delegate;
3938
@Nullable private StringBuilder builder = null;
4039

4140
FromTableVisitor(RenderContext context, RenderTarget parent) {
@@ -50,10 +49,7 @@ Delegation enterMatched(TableLike segment) {
5049
builder = new StringBuilder();
5150

5251
if (segment instanceof InlineQuery) {
53-
54-
builder.append("(");
55-
delegate = new SelectStatementVisitor(context);
56-
return Delegation.delegateTo(delegate);
52+
return Delegation.delegateTo(new SubselectVisitor(context, builder::append));
5753
}
5854

5955
return super.enterMatched(segment);
@@ -64,14 +60,6 @@ Delegation leaveMatched(TableLike segment) {
6460

6561
Assert.state(builder != null, "Builder must not be null in leaveMatched");
6662

67-
if (delegate != null) {
68-
69-
builder.append(delegate.getRenderedPart());
70-
builder.append(") ");
71-
72-
delegate = null;
73-
}
74-
7563
builder.append(NameRenderer.render(context, segment));
7664
if (segment instanceof Aliased) {
7765
builder.append(" ").append(NameRenderer.render(context, (Aliased) segment));
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright 2022 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.relational.core.sql.render;
17+
18+
import org.springframework.data.relational.core.sql.Subselect;
19+
import org.springframework.lang.Nullable;
20+
21+
public class SubselectVisitor extends TypedSubtreeVisitor<Subselect> {
22+
23+
private final RenderContext context;
24+
private final RenderTarget parent;
25+
26+
private final SelectStatementVisitor delegate;
27+
private final StringBuilder builder = new StringBuilder("(");
28+
29+
public SubselectVisitor(RenderContext context, RenderTarget parent) {
30+
31+
this.context = context;
32+
this.parent = parent;
33+
34+
this.delegate = new SelectStatementVisitor(context);
35+
}
36+
37+
@Override
38+
Delegation enterMatched(Subselect segment) {
39+
return Delegation.delegateTo(delegate);
40+
}
41+
42+
@Override
43+
Delegation leaveMatched(Subselect segment) {
44+
45+
builder.append(delegate.getRenderedPart());
46+
builder.append(") ");
47+
48+
parent.onRendered(builder);
49+
50+
return super.leaveMatched(segment);
51+
}
52+
53+
}

0 commit comments

Comments
 (0)