in modules/spring-data-ext/spring-data/src/main/java/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.java [46:114]
public static IgniteQuery generateSql(Method mtd, RepositoryMetadata metadata) {
PartTree parts;
try {
parts = new PartTree(mtd.getName(), metadata.getDomainType());
}
catch (PropertyReferenceException e) {
parts = new PartTree(mtd.getName(), metadata.getIdType());
}
boolean isCntOrFieldQry = parts.isCountProjection();
StringBuilder sql = new StringBuilder();
if (parts.isDelete()) {
sql.append("DELETE ");
// For the DML queries aside from SELECT *, they should run over SqlFieldQuery
isCntOrFieldQry = true;
}
else {
sql.append("SELECT ");
if (parts.isDistinct())
throw new UnsupportedOperationException("DISTINCT clause in not supported.");
if (isCntOrFieldQry)
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, metadata.getDomainType());
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(),
isCntOrFieldQry,
false,
true,
isParametersDependent(parts),
getOptions(mtd)
);
}