Java Examples for org.springframework.data.repository.query.parser.PartTree

The following java examples will help you to understand the usage of org.springframework.data.repository.query.parser.PartTree. These source code samples are taken from different open source projects.

Example 1
Project: spring-data-simpledb-master  File: PartTreeConverterTest.java View source code
@Test
public void should_create_corect_query_for_complex_operators() {
    final String methodName = "getByItemNameLikeOrAgeGreaterThanAndAgeLessThan";
    final PartTree tree = new PartTree(methodName, SimpleDbSampleEntity.class);
    final String query = PartTreeConverter.toIndexedQuery(tree);
    final String expected = " itemName LIKE ? OR age > ? AND age < ? ";
    assertEquals(expected, query);
}
Example 2
Project: spring-data-aerospike-master  File: AerospikeTemplateIntegrationTests.java View source code
@SuppressWarnings("unchecked")
private <T> Query<T> createQueryForMethodWithArgs(String methodName, Object... args) throws NoSuchMethodException, SecurityException {
    Class<?>[] argTypes = new Class<?>[args.length];
    if (!ObjectUtils.isEmpty(args)) {
        for (int i = 0; i < args.length; i++) {
            argTypes[i] = args[i].getClass();
        }
    }
    Method method = PersonRepository.class.getMethod(methodName, argTypes);
    PartTree partTree = new PartTree(method.getName(), Person.class);
    AerospikeQueryCreator creator = new AerospikeQueryCreator(partTree, new ParametersParameterAccessor(new QueryMethod(method, repositoryMetaData, new SpelAwareProxyProjectionFactory()).getParameters(), args));
    Query<T> q = (Query<T>) creator.createQuery();
    return q;
}
Example 3
Project: spring-data-jpa-master  File: JpaCountQueryCreatorIntegrationTests.java View source code
// DATAJPA-1044
@Test
public void distinctFlagOnCountQueryIssuesCountDistinct() throws Exception {
    Method method = SomeRepository.class.getMethod("findDistinctByRolesIn", List.class);
    PersistenceProvider provider = PersistenceProvider.fromEntityManager(entityManager);
    JpaQueryMethod queryMethod = new JpaQueryMethod(method, AbstractRepositoryMetadata.getMetadata(SomeRepository.class), new SpelAwareProxyProjectionFactory(), provider);
    PartTree tree = new PartTree("findDistinctByRolesIn", User.class);
    ParameterMetadataProvider metadataProvider = new ParameterMetadataProvider(entityManager.getCriteriaBuilder(), queryMethod.getParameters(), provider);
    JpaCountQueryCreator creator = new JpaCountQueryCreator(tree, queryMethod.getResultProcessor().getReturnedType(), entityManager.getCriteriaBuilder(), metadataProvider);
    TypedQuery<? extends Object> query = entityManager.createQuery(creator.createQuery());
    assertThat(HibernateUtils.getHibernateQuery(query), startsWith("select distinct count(distinct"));
}
Example 4
Project: spring-data-gemfire-master  File: QueryBuilderUnitTests.java View source code
@Test
public void createQueryBuilderWithDistinctQuery() {
    GemfirePersistentEntity<?> mockPersistentEntity = mock(GemfirePersistentEntity.class);
    PartTree mockPartTree = mock(PartTree.class);
    when(mockPersistentEntity.getRegionName()).thenReturn("Example");
    when(mockPartTree.isDistinct()).thenReturn(true);
    QueryBuilder queryBuilder = new QueryBuilder(mockPersistentEntity, mockPartTree);
    assertThat(queryBuilder.toString()).isEqualTo("SELECT DISTINCT * FROM /Example x");
    verify(mockPersistentEntity, times(1)).getRegionName();
    verify(mockPartTree, times(1)).isDistinct();
}
Example 5
Project: spring-data-keyvalue-master  File: KeyValuePartTreeQuery.java View source code
public KeyValueQuery<?> createQuery(ParameterAccessor accessor) {
    PartTree tree = new PartTree(getQueryMethod().getName(), getQueryMethod().getEntityInformation().getJavaType());
    Constructor<? extends AbstractQueryCreator<?, ?>> constructor = ClassUtils.getConstructorIfAvailable(queryCreator, PartTree.class, ParameterAccessor.class);
    KeyValueQuery<?> query = (KeyValueQuery<?>) BeanUtils.instantiateClass(constructor, tree, accessor).createQuery();
    if (tree.isLimiting()) {
        query.setRows(tree.getMaxResults());
    }
    return query;
}
Example 6
Project: spring-ide-master  File: InvalidDerivedQueryRule.java View source code
public void validate(CompilationUnit element, SpringDataValidationContext context, IProgressMonitor monitor) {
    try {
        ITypeRoot typeRoot = element.getTypeRoot();
        IType type = typeRoot.findPrimaryType();
        if (!supports(typeRoot))
            return;
        // resolve repository information and generate problem markers
        RepositoryInformation information = new RepositoryInformation(type);
        Class<?> domainClass = information.getManagedDomainClass();
        if (domainClass == null) {
            return;
        }
        for (IMethod method : information.getMethodsToValidate()) {
            String methodName = method.getElementName();
            try {
                new PartTree(methodName, domainClass);
            } catch (PropertyReferenceException e) {
                element.setElementSourceLocation(new JavaModelSourceLocation(method));
                ValidationProblemAttribute start = new ValidationProblemAttribute(IMarker.CHAR_START, method.getNameRange().getOffset());
                ValidationProblemAttribute end = new ValidationProblemAttribute(IMarker.CHAR_END, method.getSourceRange().getOffset() + method.getSourceRange().getLength());
                context.error(element, "INVALID_DERIVED_QUERY", "Invalid derived query! " + e.getMessage(), new ValidationProblemAttribute[] { start, end });
            }
        }
    } catch (JavaModelException e) {
        SpringCore.log(e);
    } catch (Exception e) {
        SpringCore.log(e);
    } catch (Error e) {
        SpringCore.log(e);
    }
}
Example 7
Project: spring-data-mongodb-master  File: MongoQueryCreatorUnitTests.java View source code
// DATAMONGO-469
@Test
public void createsAndQueryCorrectly() {
    Person person = new Person();
    MongoQueryCreator creator = new MongoQueryCreator(new PartTree("findByFirstNameAndFriend", Person.class), getAccessor(converter, "Oliver", person), context);
    Query query = creator.createQuery();
    assertThat(query, is(query(where("firstName").is("Oliver").and("friend").is(person))));
}
Example 8
Project: spring-data-commons-master  File: PartTreeUnitTests.java View source code
@Test
public void detectsDistinctCorrectly() throws Exception {
    for (String prefix : PREFIXES) {
        detectsDistinctCorrectly(prefix + "DistinctByLastname", true);
        detectsDistinctCorrectly(prefix + "UsersDistinctByLastname", true);
        detectsDistinctCorrectly(prefix + "DistinctUsersByLastname", true);
        detectsDistinctCorrectly(prefix + "UsersByLastname", false);
        detectsDistinctCorrectly(prefix + "ByLastname", false);
        // Check it's non-greedy (would strip everything until Order*By*
        // otherwise)
        PartTree tree = detectsDistinctCorrectly(prefix + "ByLastnameOrderByFirstnameDesc", false);
        assertThat(tree.getSort()).isEqualTo(Sort.by("firstname").descending());
    }
}
Example 9
Project: ignite-master  File: IgniteQueryGenerator.java View source code
/**
     * @param mtd Method.
     * @param metadata Metadata.
     */
@NotNull
public static IgniteQuery generateSql(Method mtd, RepositoryMetadata metadata) {
    PartTree parts = new PartTree(mtd.getName(), metadata.getDomainType());
    StringBuilder sql = new StringBuilder();
    if (parts.isDelete())
        throw new UnsupportedOperationException("DELETE clause is not supported now.");
    else {
        sql.append("SELECT ");
        if (parts.isDistinct())
            throw new UnsupportedOperationException("DISTINCT clause in not supported.");
        if (parts.isCountProjection())
            sql.append("COUNT(1) ");
        else
            sql.append(" * ");
    }
    sql.append("FROM ").append(metadata.getDomainType().getSimpleName());
    if (parts.iterator().hasNext()) {
        sql.append(" WHERE ");
        for (PartTree.OrPart orPart : parts) {
            sql.append("(");
            for (Part part : orPart) {
                handleQueryPart(sql, part);
                sql.append(" AND ");
            }
            sql.delete(sql.length() - 5, sql.length());
            sql.append(") OR ");
        }
        sql.delete(sql.length() - 4, sql.length());
    }
    addSorting(sql, parts.getSort());
    if (parts.isLimiting()) {
        sql.append(" LIMIT ");
        sql.append(parts.getMaxResults().intValue());
    }
    return new IgniteQuery(sql.toString(), parts.isCountProjection(), getOptions(mtd));
}
Example 10
Project: spring-roo-master  File: Predicate.java View source code
/**
   * Splits source by Or{@literal Or} expressions and builds {@link OrPart}s which are simple conditions or expressions joined by And.
   * E.g. from the source "LastNameAndFirstNameOrAge" it will build the "LastNameAndFirstName" and "Age" OrderParts.
   *
   * @param source the source to split up into {@literal Or} parts in turn.
   */
private void buildTree(String source) {
    String[] split = PartTree.split(source, "Or", -1);
    for (int i = 0; i < split.length; i++) {
        // Validate previous expressions are correct
        if (i > 0 && StringUtils.isBlank(split[i - 1])) {
            throw new RuntimeException("ERROR: Missing expression before Or");
        }
        nodes.add(new OrPart(currentPartTreeInstance, split[i], fields));
    }
    // Validate expression before order clause is correct
    if (hasOrderClause()) {
        if (StringUtils.isBlank(split[split.length - 1])) {
            throw new RuntimeException("ERROR: Missing expression before OrderBy");
        }
        List<Part> parts = nodes.get(nodes.size() - 1).getChildren();
        if (!parts.get(parts.size() - 1).hasProperty()) {
            throw new RuntimeException("ERROR: Missing expression before OrderBy");
        }
    }
}
Example 11
Project: spring-data-cassandra-master  File: CassandraQueryCreatorUnitTests.java View source code
private String createQuery(String source, Class<?> entityClass, Object... values) {
    PartTree tree = new PartTree(source, entityClass);
    CassandraQueryCreator creator = new CassandraQueryCreator(tree, getAccessor(converter, values), context);
    StatementFactory factory = new StatementFactory(new UpdateMapper(converter));
    Query query = creator.createQuery();
    RegularStatement select = factory.select(query, context.getRequiredPersistentEntity(entityClass));
    return select.toString();
}
Example 12
Project: spring-data-solr-master  File: SolrQueryCreatorTests.java View source code
private Query createQueryForMethodWithArgs(Method method, Object[] args) {
    PartTree partTree = new PartTree(method.getName(), method.getReturnType());
    SolrQueryMethod queryMethod = new SolrQueryMethod(method, metadata, new SpelAwareProxyProjectionFactory(), entityInformationCreatorMock);
    SolrQueryCreator creator = new SolrQueryCreator(partTree, new SolrParametersParameterAccessor(queryMethod, args), mappingContext);
    return creator.createQuery();
}
Example 13
Project: spring-data-dynamodb-master  File: PartTreeDynamoDBQuery.java View source code
public PartTree getTree() {
    return tree;
}
Example 14
Project: spring-data-redis-master  File: RedisQueryCreatorUnitTests.java View source code
private RedisQueryCreator createQueryCreatorForMethodWithArgs(Method method, Object[] args) {
    PartTree partTree = new PartTree(method.getName(), method.getReturnType());
    RedisQueryCreator creator = new RedisQueryCreator(partTree, new ParametersParameterAccessor(new DefaultParameters(method), args));
    return creator;
}