TypeResolver typeResolver() { if (parent != null) { return parent.typeResolver(); } if (typeResolver == null) { typeResolver = new TypeResolver(this); } return typeResolver; } }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * returns the corresponding descriptor. Usually this method is used when retrieving the * descriptor for an identification variable or a path expression. In the case of a range * variable declaration, the descriptor of the entity is returned. In the case of a path * expression, the mapping reference descriptor will be returned. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} */ ClassDescriptor resolveDescriptor(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveDescriptor(expression); }
/** * Returns the type of the given {@link DatabaseMapping}, which is the persistent field type. * * @param mapping The {@link DatabaseMapping} to retrieve its persistent field type * @return The persistent field type */ Class<?> calculateMappingType(DatabaseMapping mapping) { return typeResolver().calculateMappingType(mapping); }
/** * Returns the Java class of the given {@link Expression}. * * @param expression The {@link Expression} for which its type will be calculated * @return Either the Java class that was resolved or the <code>null</code> if it could not be resolved */ Class<?> getType(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolve(expression); }
TypeResolver typeResolver() { if (parent != null) { return parent.typeResolver(); } if (typeResolver == null) { typeResolver = new TypeResolver(this); } return typeResolver; } }
/** * Returns the type of the given {@link DatabaseMapping}, which is the persistent field type. * * @param mapping The {@link DatabaseMapping} to retrieve its persistent field type * @return The persistent field type */ Class<?> calculateMappingType(DatabaseMapping mapping) { return typeResolver().calculateMappingType(mapping); }
/** * Returns the type of the given {@link QueryKey}, which is the persistent field type. * * @param queryKey The {@link QueryKey} to retrieve its persistent field type * @return The persistent field type */ Class<?> calculateQueryKeyType(QueryKey queryKey) { return typeResolver().calculateQueryKeyType(queryKey); }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * returns the {@link DatabaseMapping}. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} to * resolve by traversing its path expression * @return The {@link DatabaseMapping} that is representing the last path or <code>null</code> if * the path expression could not be resolved */ DatabaseMapping resolveMapping(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveMapping(expression); }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * either returns the {@link DatabaseMapping} or the {@link QueryKey} object. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} to * resolve by traversing its path expression * @return Either the {@link DatabaseMapping} or the {@link QueryKey} that is representing the * last path or <code>null</code> if the path expression could not be resolved */ Object resolveMappingObject(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveMappingObject(expression); }
/** * Returns the type of the given {@link QueryKey}, which is the persistent field type. * * @param queryKey The {@link QueryKey} to retrieve its persistent field type * @return The persistent field type */ Class<?> calculateQueryKeyType(QueryKey queryKey) { return typeResolver().calculateQueryKeyType(queryKey); }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * returns the {@link DatabaseMapping}. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} to * resolve by traversing its path expression * @return The {@link DatabaseMapping} that is representing the last path or <code>null</code> if * the path expression could not be resolved */ DatabaseMapping resolveMapping(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveMapping(expression); }
/** * Returns the Java class of the given {@link Expression}. * * @param expression The {@link Expression} for which its type will be calculated * @return Either the Java class that was resolved or the <code>null</code> if it could not be resolved */ Class<?> getType(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolve(expression); }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * returns the corresponding descriptor. Usually this method is used when retrieving the * descriptor for an identification variable or a path expression. In the case of a range * variable declaration, the descriptor of the entity is returned. In the case of a path * expression, the mapping reference descriptor will be returned. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} */ ClassDescriptor resolveDescriptor(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveDescriptor(expression); }
/** * Resolves the given {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} and * either returns the {@link DatabaseMapping} or the {@link QueryKey} object. * * @param expression The {@link org.eclipse.persistence.jpa.jpql.parser.Expression Expression} to * resolve by traversing its path expression * @return Either the {@link DatabaseMapping} or the {@link QueryKey} that is representing the * last path or <code>null</code> if the path expression could not be resolved */ Object resolveMappingObject(org.eclipse.persistence.jpa.jpql.parser.Expression expression) { return typeResolver().resolveMappingObject(expression); }
/** * {@inheritDoc} */ @Override public void visit(CoalesceExpression expression) { List<Expression> expressions = new ArrayList<Expression>(); List<Class<?>> types = new LinkedList<Class<?>>(); // Create the Expression for each scalar expression for (org.eclipse.persistence.jpa.jpql.parser.Expression child : expression.getExpression().children()) { child.accept(this); expressions.add(queryExpression); types.add(type[0]); // Set the type on an untyped ParameterExpression, so that // valid types can be passed for null parameter values in JDBC if (queryExpression.isParameterExpression()) { ParameterExpression paramExpression = (ParameterExpression) queryExpression; if (paramExpression.getType() == null || paramExpression.getType().equals(Object.class)) { paramExpression.setType(type[0]); } } } // Create the COALESCE expression queryExpression = queryContext.getBaseExpression(); queryExpression = queryExpression.coalesce(expressions); // Set the expression type type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(types); }
/** * {@inheritDoc} */ @Override public void visit(CoalesceExpression expression) { List<Expression> expressions = new ArrayList<Expression>(); List<Class<?>> types = new LinkedList<Class<?>>(); // Create the Expression for each scalar expression for (org.eclipse.persistence.jpa.jpql.parser.Expression child : expression.getExpression().children()) { child.accept(this); expressions.add(queryExpression); types.add(type[0]); // Set the type on an untyped ParameterExpression, so that // valid types can be passed for null parameter values in JDBC if (queryExpression.isParameterExpression()) { ParameterExpression paramExpression = (ParameterExpression) queryExpression; if (paramExpression.getType() == null || paramExpression.getType().equals(Object.class)) { paramExpression.setType(type[0]); } } } // Create the COALESCE expression queryExpression = queryContext.getBaseExpression(); queryExpression = queryExpression.coalesce(expressions); // Set the expression type type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(types); }
/** * {@inheritDoc} */ @Override public void visit(SumFunction expression) { // First create the expression from the encapsulated expression expression.getExpression().accept(this); // Mark the SUM expression distinct if (expression.hasDistinct()) { queryExpression = queryExpression.distinct(); } // Now create the SUM expression queryExpression = queryExpression.sum(); // Set the expression type type[0] = queryContext.typeResolver().convertSumFunctionType(type[0]); }
/** * {@inheritDoc} */ @Override public void visit(SumFunction expression) { // First create the expression from the encapsulated expression expression.getExpression().accept(this); // Mark the SUM expression distinct if (expression.hasDistinct()) { queryExpression = queryExpression.distinct(); } // Now create the SUM expression queryExpression = queryExpression.sum(); // Set the expression type type[0] = queryContext.typeResolver().convertSumFunctionType(type[0]); }
type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(visitor.types);
type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(visitor.types);