Java tutorial
/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.mapping; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import org.hibernate.HibernateException; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Exportable; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.Mapping; import org.hibernate.internal.util.StringHelper; /** * A relational table index * * @author Gavin King */ public class Index implements RelationalModel, Exportable, Serializable { private Table table; private java.util.List<Column> columns = new ArrayList<Column>(); private java.util.Map<Column, String> columnOrderMap = new HashMap<Column, String>(); private Identifier name; public String sqlCreateString(Dialect dialect, Mapping mapping, String defaultCatalog, String defaultSchema) throws HibernateException { return buildSqlCreateIndexString(dialect, getQuotedName(dialect), getTable(), getColumnIterator(), columnOrderMap, false, defaultCatalog, defaultSchema); } public static String buildSqlDropIndexString(Dialect dialect, Table table, String name, String defaultCatalog, String defaultSchema) { return buildSqlDropIndexString(name, table.getQualifiedName(dialect, defaultCatalog, defaultSchema)); } public static String buildSqlDropIndexString(String name, String tableName) { return "drop index " + StringHelper.qualify(tableName, name); } public static String buildSqlCreateIndexString(Dialect dialect, String name, Table table, Iterator<Column> columns, java.util.Map<Column, String> columnOrderMap, boolean unique, String defaultCatalog, String defaultSchema) { return buildSqlCreateIndexString(dialect, name, table.getQualifiedName(dialect, defaultCatalog, defaultSchema), columns, columnOrderMap, unique); } public static String buildSqlCreateIndexString(Dialect dialect, String name, String tableName, Iterator<Column> columns, java.util.Map<Column, String> columnOrderMap, boolean unique) { StringBuilder buf = new StringBuilder("create").append(unique ? " unique" : "").append(" index ") .append(dialect.qualifyIndexName() ? name : StringHelper.unqualify(name)).append(" on ") .append(tableName).append(" ("); while (columns.hasNext()) { Column column = columns.next(); buf.append(column.getQuotedName(dialect)); if (columnOrderMap.containsKey(column)) { buf.append(" ").append(columnOrderMap.get(column)); } if (columns.hasNext()) { buf.append(", "); } } buf.append(")"); return buf.toString(); } public static String buildSqlCreateIndexString(Dialect dialect, String name, Table table, Iterator<Column> columns, boolean unique, String defaultCatalog, String defaultSchema) { return buildSqlCreateIndexString(dialect, name, table, columns, Collections.EMPTY_MAP, unique, defaultCatalog, defaultSchema); } public static String buildSqlCreateIndexString(Dialect dialect, String name, Table table, Iterator<Column> columns, java.util.Map<Column, String> columnOrderMap, boolean unique, Metadata metadata) { final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter() .format(table.getQualifiedTableName(), dialect); return buildSqlCreateIndexString(dialect, name, tableName, columns, columnOrderMap, unique); } // Used only in Table for sqlCreateString (but commented out at the moment) public String sqlConstraintString(Dialect dialect) { StringBuilder buf = new StringBuilder(" index ("); Iterator iter = getColumnIterator(); while (iter.hasNext()) { buf.append(((Column) iter.next()).getQuotedName(dialect)); if (iter.hasNext()) { buf.append(", "); } } return buf.append(')').toString(); } @Override public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) { return "drop index " + StringHelper.qualify(table.getQualifiedName(dialect, defaultCatalog, defaultSchema), getQuotedName(dialect)); } public Table getTable() { return table; } public void setTable(Table table) { this.table = table; } public int getColumnSpan() { return columns.size(); } public Iterator<Column> getColumnIterator() { return columns.iterator(); } public java.util.Map<Column, String> getColumnOrderMap() { return Collections.unmodifiableMap(columnOrderMap); } public void addColumn(Column column) { if (!columns.contains(column)) { columns.add(column); } } public void addColumn(Column column, String order) { addColumn(column); if (StringHelper.isNotEmpty(order)) { columnOrderMap.put(column, order); } } public void addColumns(Iterator extraColumns) { while (extraColumns.hasNext()) { addColumn((Column) extraColumns.next()); } } public boolean containsColumn(Column column) { return columns.contains(column); } public String getName() { return name == null ? null : name.getText(); } public void setName(String name) { this.name = Identifier.toIdentifier(name); } public String getQuotedName(Dialect dialect) { return name == null ? null : name.render(dialect); } @Override public String toString() { return getClass().getName() + "(" + getName() + ")"; } @Override public String getExportIdentifier() { return StringHelper.qualify(getTable().getExportIdentifier(), "IDX-" + getName()); } }