Package edu.brown.designer

Source Code of edu.brown.designer.AccessGraph

package edu.brown.designer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.voltdb.catalog.Column;
import org.voltdb.catalog.Database;

import edu.brown.graphs.AbstractUndirectedGraph;
import edu.brown.utils.PredicatePairs;

/**
* @author Andy Pavlo <pavlo@cs.brown.edu>
*/
@SuppressWarnings("serial")
public class AccessGraph extends AbstractUndirectedGraph<DesignerVertex, DesignerEdge> {

    public enum EdgeAttributes {
        ACCESSTYPE, COLUMNSET, FOREIGNKEY,
    };

    public enum AccessType {
        SCAN, SQL_JOIN, PARAM_JOIN, IMPLICIT_JOIN, INSERT;

        public static List<AccessType> JOINS = new ArrayList<AccessType>();
        static {
            JOINS.add(SQL_JOIN);
            JOINS.add(PARAM_JOIN);
            JOINS.add(IMPLICIT_JOIN);
        }
    };

    //
    // Edge Weight Modifiers
    //
    public static final Double WEIGHT_FOREIGN_KEY = 5.0;
    public static final Double WEIGHT_JOIN = 2.5;
    public static final Double WEIGHT_IMPLICIT = 4.0;

    /**
     * @param catalog_db
     */
    public AccessGraph(Database catalog_db) {
        super(catalog_db);
    }

    /**
     * Return all the edges for the given vertex whose ColumnSets contain the
     * given Column
     *
     * @param v
     * @param catalog_col
     * @return
     */
    public Collection<DesignerEdge> findEdgeSet(DesignerVertex v, Column catalog_col) {
        assert (v != null);
        Set<DesignerEdge> edges = new HashSet<DesignerEdge>();
        for (DesignerEdge e : this.getIncidentEdges(v)) {
            PredicatePairs cset = e.getAttribute(EdgeAttributes.COLUMNSET);
            assert (cset != null);
            if (cset.findAll(catalog_col).isEmpty() == false) {
                edges.add(e);
            }
        } // FOR
        return (edges);
    }

    public <T> Collection<DesignerEdge> getIncidentEdges(DesignerVertex vertex, String name, T value) {
        Set<DesignerEdge> edges = new HashSet<DesignerEdge>();
        for (DesignerEdge edge : super.getIncidentEdges(vertex)) {
            if (edge.getAttribute(name).equals(value))
                edges.add(edge);
        } // WHILE
        return (edges);
    }

    @Override
    public String toString(DesignerEdge e, boolean verbose) {
        StringBuilder sb = new StringBuilder();
        sb.append(super.toString(e, verbose));

        if (verbose) {
            // for (Entry<String, Object> entry :
            // e.getAttributeValues(this).entrySet()) {
            // sb.append(String.format("\n => %-15s%s", entry.getKey()+":",
            // entry.getValue().toString()));
            // }
            PredicatePairs cset = e.getAttribute(EdgeAttributes.COLUMNSET.name());
            assert (cset != null);
            sb.append("\n").append(cset.debug());
        }
        return (sb.toString());
    }
}
TOP

Related Classes of edu.brown.designer.AccessGraph

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.