Java Code Examples for org.springframework.data.repository.query.parser.PartTree#isCountProjection()

The following examples show how to use org.springframework.data.repository.query.parser.PartTree#isCountProjection() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SpannerStatementQueryExecutor.java    From spring-cloud-gcp with Apache License 2.0 6 votes vote down vote up
private static SqlStringAndPlaceholders buildPartTreeSqlString(PartTree tree,
		SpannerMappingContext spannerMappingContext, Class type, ParameterAccessor params) {

	SpannerPersistentEntity<?> persistentEntity = spannerMappingContext
			.getPersistentEntity(type);
	List<String> tags = new ArrayList<>();
	StringBuilder stringBuilder = new StringBuilder();

	buildSelect(persistentEntity, tree, stringBuilder, spannerMappingContext);
	buildFrom(persistentEntity, stringBuilder);
	buildWhere(tree, persistentEntity, tags, stringBuilder);
	applySort(params.getSort().isSorted() ? params.getSort() : tree.getSort(), stringBuilder, persistentEntity);
	buildLimit(tree, stringBuilder, params.getPageable());

	String selectSql = stringBuilder.toString();

	String finalSql = selectSql;

	if (tree.isCountProjection()) {
		finalSql = "SELECT COUNT(1) FROM (" + selectSql + ")";
	}
	else if (tree.isExistsProjection()) {
		finalSql = "SELECT EXISTS(" + selectSql + ")";
	}
	return new SqlStringAndPlaceholders(finalSql, tags);
}
 
Example 2
Source File: IgniteQueryGenerator.java    From ignite with Apache License 2.0 4 votes vote down vote up
/**
 * @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 3
Source File: IgniteQueryGenerator.java    From ignite with Apache License 2.0 4 votes vote down vote up
/**
 * @param mtd      Method.
 * @param metadata Metadata.
 * @return Generated ignite query.
 */
public static IgniteQuery generateSql(Method mtd, RepositoryMetadata metadata) {
    PartTree parts = new PartTree(mtd.getName(), metadata.getDomainType());

    boolean isCountOrFieldQuery = parts.isCountProjection();

    StringBuilder sql = new StringBuilder();

    if (parts.isDelete()) {
        sql.append("DELETE ");

        // For the DML queries aside from SELECT *, they should run over SqlFieldQuery
        isCountOrFieldQuery = true;
    }
    else {
        sql.append("SELECT ");

        if (parts.isDistinct())
            throw new UnsupportedOperationException("DISTINCT clause in not supported.");

        if (isCountOrFieldQuery)
            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(), isCountOrFieldQuery, false, true, getOptions(mtd));
}
 
Example 4
Source File: IgniteQueryGenerator.java    From ignite with Apache License 2.0 4 votes vote down vote up
/**
 * @param mtd      Method.
 * @param metadata Metadata.
 * @return Generated ignite query.
 */
public static IgniteQuery generateSql(Method mtd, RepositoryMetadata metadata) {
    PartTree parts = new PartTree(mtd.getName(), metadata.getDomainType());

    boolean isCountOrFieldQuery = parts.isCountProjection();

    StringBuilder sql = new StringBuilder();

    if (parts.isDelete()) {
        sql.append("DELETE ");

        // For the DML queries aside from SELECT *, they should run over SqlFieldQuery
        isCountOrFieldQuery = true;
    }
    else {
        sql.append("SELECT ");

        if (parts.isDistinct())
            throw new UnsupportedOperationException("DISTINCT clause in not supported.");

        if (isCountOrFieldQuery)
            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(), isCountOrFieldQuery, false, true, getOptions(mtd));
}