Search in sources :

Example 71 with IType

use of org.eclipse.persistence.jpa.jpql.tools.spi.IType in project eclipselink by eclipse-ee4j.

the class JavaType method isAssignableTo.

@Override
public boolean isAssignableTo(IType otherType) {
    if (equals(otherType)) {
        return true;
    }
    if (!isResolvable() || !otherType.isResolvable()) {
        return false;
    }
    // Make sure both types are not primitives since isAssignableFrom() does not work.
    // For instance long and Long can't be compared but they are valid for JPQL query
    TypeHelper typeHelper = typeRepository.getTypeHelper();
    IType thisType = typeHelper.convertPrimitive(this);
    otherType = typeHelper.convertPrimitive(otherType);
    Class<?> thisClass = ((JavaType) thisType).type;
    Class<?> otherClass = ((JavaType) otherType).type;
    return otherClass.isAssignableFrom(thisClass);
}
Also used : TypeHelper(org.eclipse.persistence.jpa.jpql.tools.TypeHelper) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType)

Example 72 with IType

use of org.eclipse.persistence.jpa.jpql.tools.spi.IType in project eclipselink by eclipse-ee4j.

the class JavaTypeDeclaration method buildParameterTypes.

protected ITypeDeclaration[] buildParameterTypes() {
    List<ITypeDeclaration> parameterTypes = new ArrayList<>();
    // Example: Class<T>
    if (genericType instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) genericType;
        for (Type type : parameterizedType.getActualTypeArguments()) {
            ITypeDeclaration typeParameter = buildTypeDeclaration(type);
            parameterTypes.add(typeParameter);
        }
    } else // T[]
    if (genericType instanceof GenericArrayType) {
        GenericArrayType genericArrayType = (GenericArrayType) genericType;
        parameterTypes.add(buildTypeDeclaration(genericArrayType.getGenericComponentType()));
    } else // Example: Class
    if (genericType.getClass() == Class.class) {
        ITypeDeclaration typeParameter = buildTypeDeclaration((Class<?>) genericType);
        parameterTypes.add(typeParameter);
    } else // Example: <K, V>
    if (genericType.getClass() == Class[].class) {
        for (Class<?> javaType : ((Class<?>[]) genericType)) {
            ITypeDeclaration typeParameter = buildTypeDeclaration(javaType);
            parameterTypes.add(typeParameter);
        }
    } else // Example: <K, V>
    if (genericType.getClass() == IType[].class) {
        for (IType type : ((IType[]) genericType)) {
            ITypeDeclaration typeParameter = new JavaTypeDeclaration(typeRepository, type, null, false);
            parameterTypes.add(typeParameter);
        }
    }
    return parameterTypes.toArray(new ITypeDeclaration[parameterTypes.size()]);
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) ITypeDeclaration(org.eclipse.persistence.jpa.jpql.tools.spi.ITypeDeclaration) GenericArrayType(java.lang.reflect.GenericArrayType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType) WildcardType(java.lang.reflect.WildcardType) ArrayList(java.util.ArrayList) GenericArrayType(java.lang.reflect.GenericArrayType) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType)

Example 73 with IType

use of org.eclipse.persistence.jpa.jpql.tools.spi.IType in project eclipselink by eclipse-ee4j.

the class DefaultJPQLQueryHelperTest2_1 method test_ResultType_Treat_1.

@Test
public void test_ResultType_Treat_1() throws Exception {
    // SELECT TREAT(TREAT(p.project LargeProject).parent AS LargeProject).endDate
    // FROM Product p
    IQuery namedQuery = namedQuery("Product", "product.treat");
    AbstractJPQLQueryHelper helper = buildQueryHelper(namedQuery);
    IType type = helper.getResultType();
    assertNotNull("The type of TREAT(TREAT(p.project LargeProject).parent AS LargeProject).endDate should have been found", type);
    assertEquals("The wrong type for TREAT(TREAT(p.project LargeProject).parent AS LargeProject).endDate was retrieved", getType(namedQuery, Date.class), type);
}
Also used : IQuery(org.eclipse.persistence.jpa.jpql.tools.spi.IQuery) AbstractJPQLQueryHelper(org.eclipse.persistence.jpa.jpql.tools.AbstractJPQLQueryHelper) Date(java.util.Date) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType) Test(org.junit.Test)

Example 74 with IType

use of org.eclipse.persistence.jpa.jpql.tools.spi.IType in project eclipselink by eclipse-ee4j.

the class EclipseLinkJPQLQueryHelperTest method test_ResultType_Func_4.

@Test
public void test_ResultType_Func_4() throws Exception {
    // SELECT FUNC('age', e.empId, ?name) FROM Employee e
    IQuery namedQuery = namedQuery("Employee", "employee.func4");
    AbstractJPQLQueryHelper helper = buildQueryHelper(namedQuery);
    IType type = helper.getResultType();
    assertNotNull("The type of FUNC('age', e.empId, ?name) should have been found", type);
    assertEquals("The wrong type for FUNC('age', e.empId, ?name) was retrieved", getType(namedQuery, Object.class), type);
}
Also used : IQuery(org.eclipse.persistence.jpa.jpql.tools.spi.IQuery) AbstractJPQLQueryHelper(org.eclipse.persistence.jpa.jpql.tools.AbstractJPQLQueryHelper) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType) Test(org.junit.Test)

Example 75 with IType

use of org.eclipse.persistence.jpa.jpql.tools.spi.IType in project eclipselink by eclipse-ee4j.

the class EclipseLinkJPQLQueryHelperTest2_4 method test_ResultType_FromSubquery_2.

@Test
public void test_ResultType_FromSubquery_2() throws Exception {
    // Select e3.count from Employee e, (Select count(e2) as count, e2.department from Employee e2 group by e2.department) e3 where e.department = e3.department
    IQuery namedQuery = namedQuery("Employee", "employee.fromSubquery3");
    AbstractJPQLQueryHelper helper = buildQueryHelper(namedQuery);
    IType type = helper.getResultType();
    assertNotNull("The result type should have been found", type);
    assertEquals("The result type was not calculated correctly", getType(namedQuery, Long.class), type);
}
Also used : IQuery(org.eclipse.persistence.jpa.jpql.tools.spi.IQuery) AbstractJPQLQueryHelper(org.eclipse.persistence.jpa.jpql.tools.AbstractJPQLQueryHelper) IType(org.eclipse.persistence.jpa.jpql.tools.spi.IType) Test(org.junit.Test)

Aggregations

IType (org.eclipse.persistence.jpa.jpql.tools.spi.IType)137 Test (org.junit.Test)113 AbstractJPQLQueryHelper (org.eclipse.persistence.jpa.jpql.tools.AbstractJPQLQueryHelper)112 IQuery (org.eclipse.persistence.jpa.jpql.tools.spi.IQuery)112 JPQLCoreTest (org.eclipse.persistence.jpa.tests.jpql.JPQLCoreTest)103 BigInteger (java.math.BigInteger)16 TypeHelper (org.eclipse.persistence.jpa.jpql.tools.TypeHelper)8 ITypeDeclaration (org.eclipse.persistence.jpa.jpql.tools.spi.ITypeDeclaration)7 Date (java.util.Date)6 ArrayList (java.util.ArrayList)3 AbsExpression (org.eclipse.persistence.jpa.jpql.parser.AbsExpression)2 AbstractDoubleEncapsulatedExpression (org.eclipse.persistence.jpa.jpql.parser.AbstractDoubleEncapsulatedExpression)2 AbstractExpression (org.eclipse.persistence.jpa.jpql.parser.AbstractExpression)2 AbstractPathExpression (org.eclipse.persistence.jpa.jpql.parser.AbstractPathExpression)2 AbstractSingleEncapsulatedExpression (org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression)2 AbstractTripleEncapsulatedExpression (org.eclipse.persistence.jpa.jpql.parser.AbstractTripleEncapsulatedExpression)2 AdditionExpression (org.eclipse.persistence.jpa.jpql.parser.AdditionExpression)2 AllOrAnyExpression (org.eclipse.persistence.jpa.jpql.parser.AllOrAnyExpression)2 AndExpression (org.eclipse.persistence.jpa.jpql.parser.AndExpression)2 ArithmeticExpression (org.eclipse.persistence.jpa.jpql.parser.ArithmeticExpression)2