/*
 * 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
 *
 *  http://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.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
 * database integrations.
 *
 * For more information, please visit: http://www.jooq.org/licenses
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package org.jooq;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

A context object for QueryPart traversal passed to registered VisitListener's.
Author:Lukas Eder
See Also:
/** * A context object for {@link QueryPart} traversal passed to registered * {@link VisitListener}'s. * * @author Lukas Eder * @see VisitListener */
public interface VisitContext extends Scope {
The most recent clause that was encountered through Context.start(Clause).
/** * The most recent clause that was encountered through * {@link Context#start(Clause)}. */
@NotNull @SuppressWarnings("javadoc") Clause clause();
A path of clauses going through the visiting tree.

This returns all previous clauses that were encountered through Context.start(Clause) and that haven't been removed yet through Context.end(Clause). In other words, VisitContext contains a stack of clauses.

/** * A path of clauses going through the visiting tree. * <p> * This returns all previous clauses that were encountered through * {@link Context#start(Clause)} and that haven't been removed yet through * {@link Context#end(Clause)}. In other words, <code>VisitContext</code> * contains a stack of clauses. */
@NotNull @SuppressWarnings("javadoc") Clause[] clauses();
This is the same as calling clauses().length.
/** * This is the same as calling {@link #clauses()}<code>.length</code>. */
int clausesLength();
The most recent QueryPart that was encountered through Context.visit(QueryPart).
/** * The most recent {@link QueryPart} that was encountered through * {@link Context#visit(QueryPart)}. */
@NotNull QueryPart queryPart();
Replace the most recent QueryPart that was encountered through Context.visit(QueryPart).

This method can be called by VisitListener implementation methods, in particular by VisitListener.visitStart(VisitContext).

Params:
  • part – The new QueryPart.
/** * Replace the most recent {@link QueryPart} that was encountered through * {@link Context#visit(QueryPart)}. * <p> * This method can be called by {@link VisitListener} implementation * methods, in particular by {@link VisitListener#visitStart(VisitContext)}. * * @param part The new <code>QueryPart</code>. */
void queryPart(QueryPart part);
A path of QueryParts going through the visiting tree.

This returns all previous QueryParts that were encountered through Context.visit(QueryPart). In other words, VisitContext contains a stack of QueryParts.

/** * A path of {@link QueryPart}s going through the visiting tree. * <p> * This returns all previous <code>QueryParts</code> that were encountered * through {@link Context#visit(QueryPart)}. In other words, * <code>VisitContext</code> contains a stack of <code>QueryParts</code>. */
@NotNull QueryPart[] queryParts();
This is the same as calling queryParts().length.
/** * This is the same as calling {@link #queryParts()}<code>.length</code>. */
int queryPartsLength();
The underlying RenderContext or BindContext object.
/** * The underlying {@link RenderContext} or {@link BindContext} object. */
@NotNull Context<?> context();
The underlying RenderContext or null, if the underlying context is a BindContext.

[#2694] [#2695] As of jOOQ 3.2, the QueryPart traversal SPI through VisitListener is only implemented for RenderContext. Hence, you may need to inline bind values if applicable.

/** * The underlying {@link RenderContext} or <code>null</code>, if the * underlying context is a {@link BindContext}. * <p> * [#2694] [#2695] As of jOOQ 3.2, the {@link QueryPart} traversal SPI * through {@link VisitListener} is only implemented for * {@link RenderContext}. Hence, you may need to inline bind values if * applicable. */
@Nullable RenderContext renderContext();
The underlying BindContext or null, if the underlying context is a RenderContext.
Throws:
/** * The underlying {@link BindContext} or <code>null</code>, if the * underlying context is a {@link RenderContext}. * * @throws UnsupportedOperationException [#2694] [#2695] As of jOOQ 3.2, * this method is not yet implemented as {@link QueryPart} * traversal SPI through {@link VisitListener} is only * implemented for {@link RenderContext} */
@Nullable BindContext bindContext() throws UnsupportedOperationException; }