package edu.brown.catalog.special; import java.util.HashMap; import java.util.Map; import java.util.Random; import org.voltdb.catalog.Catalog; import org.voltdb.catalog.CatalogType; import org.voltdb.catalog.Procedure; /** * Placeholder used to indicate that no partitioning parameter for the stored * procedure has been selected * * @author pavlo */ public class RandomProcParameter extends SpecialProcParameter { public static final int PARAM_IDX = -2; public static final String PARAM_NAME = "*RANDOM*"; private static final Map<Procedure, RandomProcParameter> SINGLETONS = new HashMap<Procedure, RandomProcParameter>(); // HACK public static final Random rand = new Random(); private final Procedure parent; private RandomProcParameter(Procedure parent) { this.parent = parent; } @Override public String getName() { return (this.getTypeName()); } @Override public String getTypeName() { return (PARAM_NAME); } @Override public int getIndex() { return (PARAM_IDX); } @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 RandomProcParameter)) return (false); RandomProcParameter other = (RandomProcParameter) obj; return (this.parent.equals(other.parent)); } public static synchronized RandomProcParameter singleton(Procedure catalog_proc) { assert (catalog_proc != null); RandomProcParameter obj = SINGLETONS.get(catalog_proc); if (obj == null) { obj = new RandomProcParameter(catalog_proc); SINGLETONS.put(catalog_proc, obj); } assert (obj != null) : "Invalid RandomProcParameter for " + catalog_proc; return (obj); } }