/*
 * Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
 * and the EPL 1.0 (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.index;

Represents information about the properties of an index
/** * Represents information about the properties of an index */
public class IndexType { private boolean primaryKey, persistent, unique, hash, scan, spatial, affinity; private boolean belongsToConstraint;
Create a primary key index.
Params:
  • persistent – if the index is persistent
  • hash – if a hash index should be used
Returns:the index type
/** * 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.
Params:
  • persistent – if the index is persistent
  • hash – if a hash index should be used
Returns:the index 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.
Params:
  • persistent – if the index is persistent
Returns:the index 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, false); }
Create a non-unique index.
Params:
  • persistent – if the index is persistent
  • hash – if a hash index should be used
  • spatial – if a spatial index should be used
Returns:the index type
/** * Create a non-unique index. * * @param persistent if the index is persistent * @param hash if a hash index should be used * @param spatial if a spatial index should be used * @return the index type */
public static IndexType createNonUnique(boolean persistent, boolean hash, boolean spatial) { IndexType type = new IndexType(); type.persistent = persistent; type.hash = hash; type.spatial = spatial; return type; }
Create an affinity index.
Returns:the index type
/** * Create an affinity index. * * @return the index type */
public static IndexType createAffinity() { IndexType type = new IndexType(); type.affinity = true; return type; }
Create a scan pseudo-index.
Params:
  • persistent – if the index is persistent
Returns:the index 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.
Params:
  • belongsToConstraint – if the index belongs to a constraint
/** * 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.
Returns:if the index belongs to a constraint
/** * 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?
Returns:true if it is a hash index
/** * Is this a hash index? * * @return true if it is a hash index */
public boolean isHash() { return hash; }
Is this a spatial index?
Returns:true if it is a spatial index
/** * Is this a spatial index? * * @return true if it is a spatial index */
public boolean isSpatial() { return spatial; }
Is this index persistent?
Returns:true if it is persistent
/** * Is this index persistent? * * @return true if it is persistent */
public boolean isPersistent() { return persistent; }
Does this index belong to a primary key constraint?
Returns:true if it references a primary key constraint
/** * 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?
Returns:true if it is
/** * Is this a unique index? * * @return true if it is */
public boolean isUnique() { return unique; }
Does this index represent an affinity key?
Returns:true if it does
/** * Does this index represent an affinity key? * * @return true if it does */
public boolean isAffinity() { return affinity; }
Get the SQL snippet to create such an index.
Returns:the SQL snippet
/** * 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 "); } if (spatial) { buff.append("SPATIAL "); } buff.append("INDEX"); } return buff.toString(); }
Is this a table scan pseudo-index?
Returns:true if it is
/** * Is this a table scan pseudo-index? * * @return true if it is */
public boolean isScan() { return scan; } }