private String allTableQuery() { boolean first = true; StringBuilder allTable = new StringBuilder(); allTable.append("( "); for (PredicateNode predicate : adaptor.getPredicates()) { if (first) { first = false; } else { allTable.append(" UNION ALL "); } allTable.append(" SELECT * from " + adaptor.getTableFor(predicate)); } allTable.append(")"); return allTable.toString(); }
public MPTable mapPredicateTable(final MappableNodePattern<PredicateNode> predicate) { if (predicate.isVariable()) { throw new IllegalArgumentException("predicate must not " + "be a variable"); } String tableName; String alias; if (predicate.isVariable()) { tableName = allTableQuery(); alias = "ap_" + ++allMap; } else { tableName = adaptor.getTableFor(predicate.getNode()); } if (tableName == null) { /* No predicate found.. create table that returns no results */ alias = "np_" + nonexistantMappings.size(); tableName = "(SELECT p AS s, p AS o from tMap where 1=0)"; if (!nonexistantMappings.containsKey(predicate.getNode())) { alias = "np_" + nonexistantMappings.size(); LOG.debug("No table for '" + predicate.getNode() + "'. Using empty table as " + alias); tableName = "(SELECT p AS s, p AS o from tMap where 1=0)"; nonexistantMappings.put(predicate.getNode(), new MPTable(tableName, alias)); predicateMap.put(predicate.getNode().toString(), new ArrayList<String>()); return nonexistantMappings.get(predicate.getNode()); } else { List<String> aliases = predicateMap.get(predicate.getNode().toString()); String primaryAlias = nonexistantMappings.get(predicate.getNode()).alias(); alias = primaryAlias + "_" + aliases.size(); LOG.debug("Nonexistant predicate already encountered. " + " Using alias " + alias); return new MPTable(tableName, alias); } } else if (predicateMap.containsKey(predicate.getNode().toString())) { LOG.debug("Predicate already encountered. " + "Making new table alias"); List<String> aliases = predicateMap.get(predicate.getNode().toString()); alias = tableName + "_" + aliases.size(); aliases.add(alias); } else { LOG.debug("Predicate never encountered. " + "Will refer to it by its own name"); ArrayList<String> aliases = new ArrayList<String>(); aliases.add(tableName); predicateMap.put(predicate.getNode().toString(), aliases); alias = tableName; } LOG.debug( "Mapping predicate " + predicate.getNode().getValue() + " to " + tableName + " as " + alias); MPTable table = new MPTable(tableName, alias); return table; }