/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.index; /** * Represents information about the properties of an index */ public class IndexType { private boolean primaryKey, persistent, unique, hash, scan; private boolean belongsToConstraint; /** * Create a primary key index. * * @param persistent if the index is persistent * @param hash if a hash index should be used * @return the index type */ public static IndexType createPrimaryKey(boolean persistent, boolean hash) { IndexType type = new IndexType(); type.primaryKey = true; type.persistent = persistent; type.hash = hash; type.unique = true; return type; } /** * Create a unique index. * * @param persistent if the index is persistent * @param hash if a hash index should be used * @return the index type */ public static IndexType createUnique(boolean persistent, boolean hash) { IndexType type = new IndexType(); type.unique = true; type.persistent = persistent; type.hash = hash; return type; } /** * Create a non-unique index. * * @param persistent if the index is persistent * @return the index type */ public static IndexType createNonUnique(boolean persistent) { return createNonUnique(persistent, false); } /** * Create a non-unique index. * * @param persistent if the index is persistent * @param hash if a hash index should be used * @return the index type */ public static IndexType createNonUnique(boolean persistent, boolean hash) { IndexType type = new IndexType(); type.persistent = persistent; type.hash = hash; return type; } /** * Create a scan pseudo-index. * * @param persistent if the index is persistent * @return the index type */ public static IndexType createScan(boolean persistent) { IndexType type = new IndexType(); type.persistent = persistent; type.scan = true; return type; } /** * Sets if this index belongs to a constraint. * * @param belongsToConstraint if the index belongs to a constraint */ public void setBelongsToConstraint(boolean belongsToConstraint) { this.belongsToConstraint = belongsToConstraint; } /** * If the index is created because of a constraint. Such indexes are to be * dropped once the constraint is dropped. * * @return if the index belongs to a constraint */ public boolean getBelongsToConstraint() { return belongsToConstraint; } /** * Is this a hash index? * * @return true if it is a hash index */ public boolean isHash() { return hash; } /** * Is this index persistent? * * @return true if it is persistent */ public boolean isPersistent() { return persistent; } /** * Does this index belong to a primary key constraint? * * @return true if it references a primary key constraint */ public boolean isPrimaryKey() { return primaryKey; } /** * Is this a unique index? * * @return true if it is */ public boolean isUnique() { return unique; } /** * Get the SQL snippet to create such an index. * * @return the SQL snippet */ public String getSQL() { StringBuilder buff = new StringBuilder(); if (primaryKey) { buff.append("PRIMARY KEY"); if (hash) { buff.append(" HASH"); } } else { if (unique) { buff.append("UNIQUE "); } if (hash) { buff.append("HASH "); } buff.append("INDEX"); } return buff.toString(); } /** * Is this a table scan pseudo-index? * * @return true if it is */ public boolean isScan() { return scan; } }