package edu.brown.catalog.special; import java.util.HashMap; import java.util.Map; import org.voltdb.catalog.Catalog; import org.voltdb.catalog.CatalogType; import org.voltdb.catalog.Column; import org.voltdb.catalog.Table; /** * Placeholder catalog object used to indicate that a table should be replicated * in our search traversal * * @author pavlo */ public class ReplicatedColumn extends Column { public static final String COLUMN_NAME = "*REPLICATED*"; private static final Map<Table, ReplicatedColumn> SINGLETONS = new HashMap<Table, ReplicatedColumn>(); private final Table parent; private ReplicatedColumn(Table parent) { this.parent = parent; } @Override public String getName() { return (this.getTypeName()); } @Override public String getTypeName() { return (COLUMN_NAME); } @SuppressWarnings("unchecked") @Override public <T extends CatalogType> T getParent() { return ((T) this.parent); } @Override public Catalog getCatalog() { return this.parent.getCatalog(); } @Override public boolean equals(Object obj) { if (!(obj instanceof ReplicatedColumn)) return (false); ReplicatedColumn other = (ReplicatedColumn) obj; return (this.parent.equals(other.parent)); } public static synchronized ReplicatedColumn get(Table catalog_tbl) { assert (catalog_tbl != null); ReplicatedColumn obj = SINGLETONS.get(catalog_tbl); if (obj == null) { obj = new ReplicatedColumn(catalog_tbl); SINGLETONS.put(catalog_tbl, obj); } assert (obj != null) : "Invalid ReplicateColumn for " + catalog_tbl; return (obj); } }