Author: fdesbois Date: 2010-06-02 23:36:15 +0200 (Wed, 02 Jun 2010) New Revision: 1990 Url: http://nuiton.org/repositories/revision/topia/1990 Log: Add fetch managment using addFetch method Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java 2010-06-02 15:07:56 UTC (rev 1989) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java 2010-06-02 21:36:15 UTC (rev 1990) @@ -484,9 +484,9 @@ String alias, boolean fetch) { String sep = separator; if (fetch) { - sep = new StringBuilder(separator).append("FETCH ").toString(); + sep = new StringBuilder(separator).append(" FETCH").toString(); } - return addFrom(separator, property, alias); + return addFrom(sep, property, alias); } /** @@ -612,17 +612,49 @@ return this; } + /** + * TODO-fdesbois-2010-06-02 : javadoc + * + * @param properties + * @return + */ public TopiaQuery addFetch(String... properties) { + + boolean needAlias = false; if (StringUtils.isEmpty(mainAlias)) { mainAlias = RandomStringUtils.randomAlphabetic(4); from.append(' ').append(mainAlias); if (select == null) { setSelect(mainAlias); } + needAlias = true; } - for (String property : properties) { - String propertyWithAlias = getProperty(mainAlias, property); - addLeftJoin(propertyWithAlias, null, true); + for (String current : properties) { + // Add missing alias if needed + String property = needAlias ? + getProperty(mainAlias, current) : current; + + // Split property on . + String[] parts = property.split("\\."); + + // First alias need to be a property in query + String alias = parts[0]; + + for (int i = 1; i < parts.length; i++) { + // Construct property with current alias + String propertyToJoin = getProperty(alias, parts[i]); + + // If next occurence exists create a new alias + if ((i + 1) < parts.length) { + alias = RandomStringUtils.randomAlphabetic(4); + } else { + // loop will stop, last alias is null + alias = null; + } + + // Add the property in left join with fetch to true + addLeftJoin(propertyToJoin, alias, true); + } } return this; }
participants (1)
-
fdesbois@users.nuiton.org