blob: 814eda2add5be4df91fb29dbcebc0f9983462750 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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 - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.exceptions;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator;
/**
* <P><B>Purpose</B>: EJBQL parsing and resolution problems will raise this exception
*/
public class JPQLException extends EclipseLinkException {
public static final int recognitionException = 8001;
public static final int generalParsingException = 8002;
public static final int classNotFoundException = 8003;
public static final int aliasResolutionException = 8004;
public static final int resolutionClassNotFoundException = 8005;
public static final int missingDescriptorException = 8006;
public static final int missingMappingException = 8007;
public static final int invalidContextKeyException = 8008;
public static final int expressionNotSupported = 8009;
public static final int generalParsingException2 = 8010;
public static final int invalidCollectionMemberDecl = 8011;
public static final int notYetImplemented = 8012;
public static final int constructorClassNotFound = 8013;
public static final int invalidSizeArgument = 8014;
public static final int invalidEnumLiteral = 8015;
public static final int invalidSelectForGroupByQuery = 8016;
public static final int invalidHavingExpression = 8017;
public static final int invalidMultipleUseOfSameParameter = 8018;
public static final int multipleVariableDeclaration = 8019;
public static final int invalidFunctionArgument = 8020;
public static final int expectedOrderableOrderByItem = 8021;
public static final int invalidExpressionArgument = 8022;
public static final int syntaxError = 8023;
public static final int syntaxErrorAt = 8024;
public static final int unexpectedToken = 8025;
public static final int unexpectedChar = 8026;
public static final int expectedCharFound = 8027;
public static final int unexpectedEOF = 8028;
public static final int invalidNavigation = 8029;
public static final int unknownAttribute = 8030;
public static final int unsupportJoinArgument = 8031;
public static final int invalidSetClauseTarget = 8032;
public static final int invalidSetClauseNavigation = 8033;
/**
* @see JPQLException#entityTypeNotFound(String, String)
*/
public static final int entityTypeNotFound = 8034;
public static final int invalidEnumEqualExpression = 8035;
public static final int invalidCollectionNavigation = 8036;
public static final int entityTypeNotFound2 = 8037;
public static final int resolutionClassNotFoundException2 = 8038;
public static final int variableCannotHaveMapKey = 8039;
public static final int nonExistantOrderByAlias = 8040;
public static final int indexOnlyAllowedOnVariable = 8041;
public Collection internalExceptions = null;
/**
* INTERNAL
* Only TopLink can throw and create these excpetions
*/
protected JPQLException() {
super();
}
/**
* INTERNAL
* Only TopLink can throw and create these excpetions
*/
public JPQLException(String theMessage) {
super(theMessage);
}
/**
* INTERNAL
* Only TopLink can throw and create these excpetions
*/
public JPQLException(String message, Exception internalException) {
super(message, internalException);
}
/**
* INTERNAL
* Only TopLink can throw and create these excpetions
*/
protected JPQLException(String message, Exception internalException, int theErrorCode) {
this(message, internalException);
this.setErrorCode(theErrorCode);
}
/**
* INTERNAL
* Create an exception to wrap the recognition exception thrown
*/
public static JPQLException recognitionException(String theEjbql, String theMessage) {
Object[] args = { theEjbql, theMessage };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, recognitionException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(recognitionException);
return exception;
}
/**
* INTERNAL
* Create an exception to wrap a general parsing exception
*/
public static JPQLException generalParsingException(String theEjbql, Exception theException) {
Object[] args = { theEjbql, theException.getMessage() };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, generalParsingException, args);
JPQLException exception = new JPQLException(message, theException, generalParsingException);
exception.setErrorCode(generalParsingException);
return exception;
}
/**
* INTERNAL
* Create an exception to wrap a general parsing exception
*/
public static JPQLException generalParsingException(String theEjbql) {
Object[] args = { theEjbql };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, generalParsingException2, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(generalParsingException);
return exception;
}
public static JPQLException classNotFoundException(String theClassName, String theMessage, Exception theException) {
Object[] args = { theClassName, theMessage };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, classNotFoundException, args);
JPQLException exception = new JPQLException(message, theException, classNotFoundException);
exception.setErrorCode(classNotFoundException);
return exception;
}
public static JPQLException resolutionClassNotFoundException(String query, String theClassName) {
Object[] args = { query, theClassName };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, resolutionClassNotFoundException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(resolutionClassNotFoundException);
return exception;
}
public static JPQLException resolutionClassNotFoundException2(String query, int line, int column, String theClassName) {
Object[] args = { query, line, column, theClassName };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, resolutionClassNotFoundException2, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(resolutionClassNotFoundException2);
return exception;
}
public static JPQLException missingDescriptorException(String query, String theClassName) {
Object[] args = { query, theClassName };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, missingDescriptorException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(missingDescriptorException);
return exception;
}
public static JPQLException missingMappingException(String query, String theAttributeName) {
Object[] args = { query, theAttributeName };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, missingMappingException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(missingMappingException);
return exception;
}
public static JPQLException aliasResolutionException(String query, int line, int column, String theAlias) {
Object[] args = { query, line, column, theAlias };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, aliasResolutionException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(aliasResolutionException);
return exception;
}
public static JPQLException invalidContextKeyException(String query, String theKey) {
Object[] args = { query, theKey };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, invalidContextKeyException, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidContextKeyException);
return exception;
}
public static JPQLException expressionNotSupported(String query, String unsupportedExpression) {
Object[] args = { query, unsupportedExpression };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, expressionNotSupported, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(expressionNotSupported);
return exception;
}
public static JPQLException invalidCollectionMemberDecl(String query, int line, int column, String attributeName) {
Object[] args = { query, line, column, attributeName };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidCollectionMemberDecl, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidCollectionMemberDecl);
return exception;
}
public static JPQLException notYetImplemented(String query, String detail) {
Object[] args = { query, detail };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, notYetImplemented, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(notYetImplemented);
return exception;
}
public static JPQLException constructorClassNotFound(String query, int line, int column, String className) {
Object[] args = { query, line, column, className };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, constructorClassNotFound, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(constructorClassNotFound);
return exception;
}
public static JPQLException invalidSizeArgument(String query, int line, int column, String attributeName) {
Object[] args = { query, line, column, attributeName };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidSizeArgument, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidSizeArgument);
return exception;
}
public static JPQLException invalidEnumLiteral(String query, int line, int column, String enumType, String literal) {
Object[] args = { query, line, column, enumType, literal };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidEnumLiteral, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidEnumLiteral);
return exception;
}
public static JPQLException invalidSelectForGroupByQuery(String query, int line, int column, String select, String groupBy) {
Object[] args = { query, line, column, select, groupBy };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidSelectForGroupByQuery, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidSelectForGroupByQuery);
return exception;
}
public static JPQLException invalidHavingExpression(String query, int line, int column, String having, String groupBy) {
Object[] args = { query, line, column, having, groupBy };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidHavingExpression, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidHavingExpression);
return exception;
}
public static JPQLException invalidMultipleUseOfSameParameter(
String query, int line, int column, String parameter, String oldType, String newType) {
Object[] args = { query, line, column , parameter, oldType, newType };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidMultipleUseOfSameParameter, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidMultipleUseOfSameParameter);
return exception;
}
public static JPQLException multipleVariableDeclaration(
String query, int line, int column, String variable, String oldDecl) {
Object[] args = { query, line, column, variable, oldDecl };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, multipleVariableDeclaration, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(multipleVariableDeclaration);
return exception;
}
public static JPQLException invalidFunctionArgument(String query, int line, int column, String functionName, String attributeName, String type) {
Object[] args = { query, line, column, functionName, attributeName, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidFunctionArgument, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidFunctionArgument);
return exception;
}
public static JPQLException invalidExpressionArgument(String query, int line, int column, String expression, String attributeName, String type) {
Object[] args = { query, line, column, expression, attributeName, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidExpressionArgument, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidExpressionArgument);
return exception;
}
public static JPQLException unsupportJoinArgument(String query, int line, int column, String join, String type) {
Object[] args = { query, line, column, join, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, unsupportJoinArgument, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(unsupportJoinArgument);
return exception;
}
public static JPQLException expectedOrderableOrderByItem(String query, int line, int column, String item, String type) {
Object[] args = { query, line, column, item, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, expectedOrderableOrderByItem, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(expectedOrderableOrderByItem);
return exception;
}
public static JPQLException syntaxError(String query, Exception ex) {
Object[] args = { query };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, syntaxError, args);
JPQLException exception = new JPQLException(message, ex);
exception.setErrorCode(syntaxError);
return exception;
}
public static JPQLException syntaxErrorAt(String query, int line, int column, String token, Exception ex) {
Object[] args = { query, line, column, token };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, syntaxErrorAt, args);
JPQLException exception = new JPQLException(message, ex);
exception.setErrorCode(syntaxErrorAt);
return exception;
}
public static JPQLException unexpectedToken(String query, int line, int column, String token, Exception ex) {
Object[] args = { query, line, column, token };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, unexpectedToken, args);
JPQLException exception = new JPQLException(message, ex);
exception.setErrorCode(unexpectedToken);
return exception;
}
public static JPQLException unexpectedChar(String query, int line, int column, String unexpected, Exception ex) {
Object[] args = { query, line, column, unexpected };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, unexpectedChar, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(unexpectedChar);
return exception;
}
public static JPQLException expectedCharFound(String query, int line, int column, String expected, String found, Exception ex) {
Object[] args = { query, line, column, expected, found };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, expectedCharFound, args);
JPQLException exception = new JPQLException(message, ex);
exception.setErrorCode(expectedCharFound);
return exception;
}
public static JPQLException unexpectedEOF(String query, int line, int column, Exception ex) {
Object[] args = { query, line, column};
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, unexpectedEOF, args);
JPQLException exception = new JPQLException(message, ex);
exception.setErrorCode(unexpectedEOF);
return exception;
}
public static JPQLException invalidNavigation(
String query, int line, int column, String expr, String lhs, String type) {
Object[] args = { query, line, column, expr, lhs, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidNavigation, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidNavigation);
return exception;
}
public static JPQLException invalidCollectionNavigation(
String query, int line, int column, String expr, String attribute) {
Object[] args = { query, line, column, expr, attribute };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidCollectionNavigation, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidCollectionNavigation);
return exception;
}
public static JPQLException invalidSetClauseTarget(
String query, int line, int column, String expr, String attribute) {
Object[] args = { query, line, column, attribute, expr };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidSetClauseTarget, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidSetClauseTarget);
return exception;
}
public static JPQLException invalidSetClauseNavigation(
String query, int line, int column, String expr, String relationship) {
Object[] args = { query, line, column, expr, relationship };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidSetClauseNavigation, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidSetClauseNavigation);
return exception;
}
public static JPQLException unknownAttribute(
String query, int line, int column, String attribute, String type) {
Object[] args = { query, line, column, attribute, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, unknownAttribute, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(unknownAttribute);
return exception;
}
public static JPQLException invalidEnumEqualExpression(String query, int line, int column, String enumType, String type) {
Object[] args = { query, line, column, enumType, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, invalidEnumEqualExpression, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(invalidEnumEqualExpression);
return exception;
}
/**
* <b>{@link JPQLException} Entity Type Not Found</b>
* <p>
* Indicates that a type specified in a JPQL query string cannot be found in
* the current persistence unit. Ensure that the entity name is properly
* spelled and matches the name of an entity in the persistence unit being
* used.
*/
public static JPQLException entityTypeNotFound(String query, String type) {
Object[] args = { query, type };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, entityTypeNotFound, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(entityTypeNotFound);
return exception;
}
public static JPQLException entityTypeNotFound2(String query, int line, int column, String type) {
Object[] args = { query, line, column, type };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, entityTypeNotFound2, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(entityTypeNotFound2);
return exception;
}
public static JPQLException variableCannotHaveMapKey(String query, int line, int column, String name) {
Object[] args = { query, line, column, name };
String message = ExceptionMessageGenerator.buildMessage(JPQLException.class, variableCannotHaveMapKey, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(variableCannotHaveMapKey);
return exception;
}
public static JPQLException nonExistantOrderByAlias(String query, int line, int column, String alias) {
Object[] args = { query, line, column, alias };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, nonExistantOrderByAlias, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(nonExistantOrderByAlias);
return exception;
}
public static JPQLException indexOnlyAllowedOnVariable(String query, int line, int column, String node) {
Object[] args = { query, line, column, node };
String message = ExceptionMessageGenerator.buildMessage(
JPQLException.class, indexOnlyAllowedOnVariable, args);
JPQLException exception = new JPQLException(message);
exception.setErrorCode(indexOnlyAllowedOnVariable);
return exception;
}
/**
* INTERNAL
* Add an internal Exception to the collection of
* internal Exceptions
*/
public Object addInternalException(Object theException) {
getInternalExceptions().add(theException);
return theException;
}
/**
* INTERNAL
* Does this exception have any internal errors?
*/
public boolean hasInternalExceptions() {
return !getInternalExceptions().isEmpty();
}
/**
* INTERNAL
* Return the collection of internal Exceptions.
* Intialize if there are no exceptions
*/
public Collection getInternalExceptions() {
if (internalExceptions == null) {
setInternalExceptions(new Vector());
}
return internalExceptions;
}
/**
* INTERNAL
* Store the exceptions related to this exception
*/
public void setInternalExceptions(Collection theExceptions) {
internalExceptions = theExceptions;
}
/**
* PUBLIC
* Print the stack trace for each error generated by the
* parser. This method is intended to assist in debugging
* problems in EJBQL
*/
public void printFullStackTrace() {
if (hasInternalExceptions()) {
Iterator exceptions = getInternalExceptions().iterator();
while (exceptions.hasNext()) {
Throwable error = (Throwable)exceptions.next();
error.printStackTrace();
}
}
}
}