org.eclipse.persistence.queries.ANTLRQueryBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle
//
package org.eclipse.persistence.queries;
import org.eclipse.persistence.expressions.Expression;
import org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree;
import org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser;
import org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParserFactory;
import org.eclipse.persistence.internal.queries.JPQLCallQueryMechanism;
import org.eclipse.persistence.internal.sessions.AbstractSession;
/**
* This class defines the default {@link JPAQueryBuilder} implementation that
* uses an Antlr-based parser and {@link DatabaseQuery} conversion mechanism.
*
* @see JPQLParser
* @see JPQLParser
* @see JPQLParserFactory
* @see JPAQueryBuilder
*
* @version 2.4
* @since 2.2
* @author John Bracken
* @deprecated replaced with Hermes parser, which is the default.
*/
@Deprecated
public final class ANTLRQueryBuilder implements JPAQueryBuilder {
/**
* Creates a new ANTLRQueryBuilder
.
*/
public ANTLRQueryBuilder() {
super();
}
/**
* Allow the parser validation level to be set.
*
* @param level
* The validation levels are defined in ParserValidationType
*/
public void setValidationLevel(String level) {
// Not supported.
}
/**
* Builds a {@link JPQLParseTree} based on the given query and associated
* {@link AbstractSession}.
*
* @param jpqlQuery
* The JPQL query
* @param session
* The associated session
* @return The {@link JPQLParseTree}
*/
private JPQLParseTree buildParseTree(CharSequence jpqlQuery, AbstractSession session) {
JPQLParseTree parseTree = JPQLParser.buildParseTree(jpqlQuery.toString());
parseTree.setClassLoader(session.getDatasourcePlatform().getConversionManager().getLoader());
return parseTree;
}
/**
* {@inheritDoc}
*/
public DatabaseQuery buildQuery(CharSequence jpqlQuery, AbstractSession session) {
// TODO - must set class loader
JPQLParseTree parseTree = buildParseTree(jpqlQuery, session);
DatabaseQuery databaseQuery = parseTree.createDatabaseQuery();
databaseQuery.setJPQLString(jpqlQuery.toString());
((JPQLCallQueryMechanism)databaseQuery.getQueryMechanism()).getJPQLCall().setIsParsed(true);
populateQueryInternal(session, parseTree, databaseQuery);
return databaseQuery;
}
/**
* {@inheritDoc}
*/
public Expression buildSelectionCriteria(String entityName, String additionalCriteria, AbstractSession session) {
StringBuilder jpqlQuery = new StringBuilder();
jpqlQuery.append("select this from ");
jpqlQuery.append(entityName);
jpqlQuery.append(" this where ");
jpqlQuery.append(additionalCriteria.trim());
return buildQuery(jpqlQuery, session).getSelectionCriteria();
}
/**
* {@inheritDoc}
*/
public void populateQuery(CharSequence jpqlQuery, DatabaseQuery query, AbstractSession session) {
new JPQLParserFactory().populateQuery(jpqlQuery.toString(), (ObjectLevelReadQuery) query, session);
}
/**
* Populates the given query based on the provided parse tree and session.
*
* @param session
* The associated {@link AbstractSession}
* @param parseTree
* The parse tree for the given query
* @param databaseQuery
* The database query to be updated
*/
private void populateQueryInternal(AbstractSession session, JPQLParseTree parseTree, DatabaseQuery databaseQuery) {
// TODO - must set class loader.
parseTree.populateQuery(databaseQuery, session);
// Bug#4646580 Add arguments to query.
parseTree.addParametersToQuery(databaseQuery);
}
}