Dedicate visitor
This commit is contained in:
@@ -27,6 +27,9 @@ public abstract class Subselect extends AbstractSegment {
|
||||
private final Select select;
|
||||
|
||||
protected Subselect(Select select) {
|
||||
|
||||
super(select);
|
||||
|
||||
this.select = select;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ class FromTableVisitor extends TypedSubtreeVisitor<TableLike> {
|
||||
|
||||
private final RenderContext context;
|
||||
private final RenderTarget parent;
|
||||
@Nullable private SelectStatementVisitor delegate;
|
||||
@Nullable private StringBuilder builder = null;
|
||||
|
||||
FromTableVisitor(RenderContext context, RenderTarget parent) {
|
||||
@@ -50,10 +49,7 @@ class FromTableVisitor extends TypedSubtreeVisitor<TableLike> {
|
||||
builder = new StringBuilder();
|
||||
|
||||
if (segment instanceof InlineQuery) {
|
||||
|
||||
builder.append("(");
|
||||
delegate = new SelectStatementVisitor(context);
|
||||
return Delegation.delegateTo(delegate);
|
||||
return Delegation.delegateTo(new SubselectVisitor(context, builder::append));
|
||||
}
|
||||
|
||||
return super.enterMatched(segment);
|
||||
@@ -64,14 +60,6 @@ class FromTableVisitor extends TypedSubtreeVisitor<TableLike> {
|
||||
|
||||
Assert.state(builder != null, "Builder must not be null in leaveMatched");
|
||||
|
||||
if (delegate != null) {
|
||||
|
||||
builder.append(delegate.getRenderedPart());
|
||||
builder.append(") ");
|
||||
|
||||
delegate = null;
|
||||
}
|
||||
|
||||
builder.append(NameRenderer.render(context, segment));
|
||||
if (segment instanceof Aliased) {
|
||||
builder.append(" ").append(NameRenderer.render(context, (Aliased) segment));
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.relational.core.sql.render;
|
||||
|
||||
import org.springframework.data.relational.core.sql.Subselect;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
public class SubselectVisitor extends TypedSubtreeVisitor<Subselect> {
|
||||
|
||||
private final RenderContext context;
|
||||
private final RenderTarget parent;
|
||||
|
||||
private final SelectStatementVisitor delegate;
|
||||
private final StringBuilder builder = new StringBuilder("(");
|
||||
|
||||
public SubselectVisitor(RenderContext context, RenderTarget parent) {
|
||||
|
||||
this.context = context;
|
||||
this.parent = parent;
|
||||
|
||||
this.delegate = new SelectStatementVisitor(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
Delegation enterMatched(Subselect segment) {
|
||||
return Delegation.delegateTo(delegate);
|
||||
}
|
||||
|
||||
@Override
|
||||
Delegation leaveMatched(Subselect segment) {
|
||||
|
||||
builder.append(delegate.getRenderedPart());
|
||||
builder.append(") ");
|
||||
|
||||
parent.onRendered(builder);
|
||||
|
||||
return super.leaveMatched(segment);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user