for (DesignerEdge edge : agraph.getEdges()) {
ArrayList<DesignerVertex> vertices = new ArrayList<DesignerVertex>();
vertices.addAll(agraph.getIncidentVertices(edge));
// FIXME
if (true || !(ptree.getPath(vertices.get(0), vertices.get(1)).isEmpty() && ptree.getPath(vertices.get(1), vertices.get(0)).isEmpty())) {
PredicatePairs cset = (PredicatePairs) (edge.getAttribute(AccessGraph.EdgeAttributes.COLUMNSET.name()));
for (DesignerVertex vertex : vertices) {
Table catalog_tbl = vertex.getCatalogItem();
Collection<Column> edge_columns = cset.findAllForParent(Column.class, catalog_tbl);
//
// Exclusion: Check whether this table is already
// partitioned on these columns
//
PartitionEntry pentry = plan.getTableEntries().get(catalog_tbl);
if (pentry == null) {
LOG.warn("PartitionEntry is null for " + catalog_tbl);
continue;
// } else if (pentry.getMethod() !=
// PartitionMethodType.REPLICATION &&
// pentry.getAttributes().equals(edge_columns)) {
// LOG.info(catalog_tbl +
// " is already partitioned on " + edge_columns +
// ". Skipping...");
// continue;
}
//
// Exclusion: Check whether this is the table's primary
// key
//
Collection<Column> pkeys = CatalogUtil.getPrimaryKeyColumns(catalog_tbl);
if (pkeys.containsAll(edge_columns) && edge_columns.containsAll(pkeys)) {
LOG.info(catalog_tbl + "'s primary key already contains " + edge_columns + ". Skipping...");
continue;
}
//
// Exclusion: These columns are only used in INSERTS
//
Map<QueryType, Integer> query_counts = cset.getQueryCounts();
if (query_counts.get(QueryType.SELECT) == 0 && query_counts.get(QueryType.UPDATE) == 0 && query_counts.get(QueryType.DELETE) == 0) {
LOG.info("The columns " + edge_columns + " are only used in INSERT operations on " + catalog_tbl + ". Skipping...");
continue;
}