final UniqueKey uk = new UniqueKey(); uk.setTable( entityBinding.getTable() ); for ( Property attributeBinding : attributeBindings ) { final Iterator itr = attributeBinding.getColumnIterator(); if ( Column.class.isInstance( selectable ) ) { final Column column = (Column) selectable; uk.addColumn( column ); columnNames.add( mappingDocument.getMetadataCollector().getDatabase().toIdentifier( column.getQuotedName() ) ); uk.addColumns( attributeBinding.getColumnIterator() ); uk.setName( ukName.render( mappingDocument.getMetadataCollector().getDatabase().getDialect() ) ); entityBinding.getTable().addUniqueKey( uk );
@Test public void testTableIndex() { PersistentClass entity = metadata().getEntityBinding( Car.class.getName() ); Iterator itr = entity.getTable().getUniqueKeyIterator(); assertTrue( itr.hasNext() ); UniqueKey uk = (UniqueKey) itr.next(); assertFalse( itr.hasNext() ); assertTrue( StringHelper.isNotEmpty( uk.getName() ) ); assertEquals( 2, uk.getColumnSpan() ); Column column = (Column) uk.getColumns().get( 0 ); assertEquals( "brand", column.getName() ); column = (Column) uk.getColumns().get( 1 ); assertEquals( "producer", column.getName() ); assertSame( entity.getTable(), uk.getTable() ); itr = entity.getTable().getIndexIterator(); assertTrue( itr.hasNext() ); Index index = (Index)itr.next(); assertFalse( itr.hasNext() ); assertEquals( "Car_idx", index.getName() ); assertEquals( 1, index.getColumnSpan() ); column = index.getColumnIterator().next(); assertEquals( "since", column.getName() ); assertSame( entity.getTable(), index.getTable() ); }
@Override public String getExportIdentifier() { return StringHelper.qualify( getTable().getExportIdentifier(), "UK-" + getName() ); } }
@Override public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { if ( hasNullable( uniqueKey ) ) { return org.hibernate.mapping.Index.buildSqlCreateIndexString( dialect, uniqueKey.getName(), uniqueKey.getTable(), uniqueKey.columnIterator(), uniqueKey.getColumnOrderMap(), true, metadata ); } else { return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata ); } }
public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) { StringBuilder buf = new StringBuilder( hasPrimaryKey() ? dialect.getCreateTableString() : dialect.getCreateMultisetTableString() ) .append( ' ' ) .append( getQualifiedName( dialect, defaultCatalog, defaultSchema ) ) .append( " (" ); if ( hasPrimaryKey() && identityColumn ) { pkname = ( (Column) getPrimaryKey().getColumnIterator().next() ).getQuotedName( dialect ); Column col = (Column) iter.next(); buf.append( col.getQuotedName( dialect ) ) .append( ' ' ); if ( identityColumn && col.getQuotedName( dialect ).equals( pkname ) ) { String keyName = Constraint.generateName( "UK_", this, col ); UniqueKey uk = getOrCreateUniqueKey( keyName ); uk.addColumn( col ); buf.append( dialect.getUniqueDelegate() .getColumnDefinitionUniquenessFragment( col ) );
@Override public String[] getSqlCreateStrings(Table table, Metadata metadata) { final QualifiedName tableName = new QualifiedNameParser.NameParts( Identifier.toIdentifier( table.getCatalog(), table.isCatalogQuoted() ), Identifier.toIdentifier( table.getSchema(), table.isSchemaQuoted() ), table.getNameIdentifier() ); if ( table.hasPrimaryKey() ) { Column pkColumn = (Column) table.getPrimaryKey().getColumns().iterator().next(); pkColName = pkColumn.getQuotedName( dialect ); buf.append( ", " ); String colName = col.getQuotedName( dialect ); buf.append( col.getSqlType( dialect, metadata ) ); String keyName = Constraint.generateName( "UK_", table, col ); UniqueKey uk = table.getOrCreateUniqueKey( keyName ); uk.addColumn( col ); buf.append( dialect.getUniqueDelegate()
try { final String columnName = mappings.getPhysicalColumnName( logicalColumnName, table ); columns[index] = new Column( columnName ); unbound.add( columns[index] ); unboundNoLogical.add( new Column( logicalColumnName ) ); if ( table.containsColumn( column ) ) { uc = table.getOrCreateUniqueKey( keyName ); uc.addColumn( table.getColumn( column ) ); unbound.remove( column ); sb.append( ") on table " ).append( table.getName() ).append( ": " ); for ( Column column : unbound ) { sb.append( column.getName() ).append( ", " );
.append( dialect.getAddColumnString() ); Iterator iter = getColumnIterator(); List results = new ArrayList(); final ColumnInformation columnInfo = tableInfo.getColumn( Identifier.toIdentifier( column.getName(), column.isQuoted() ) ); .append( column.getQuotedName( dialect ) ) .append( ' ' ) .append( column.getSqlType( dialect, metadata ) ); if ( column.isUnique() ) { String keyName = Constraint.generateName( "UK_", this, column ); UniqueKey uk = getOrCreateUniqueKey( keyName ); uk.addColumn( column ); alter.append( dialect.getUniqueDelegate() .getColumnDefinitionUniquenessFragment( column ) ); log.debugf( "No alter strings for table : %s", getQuotedName() );
try { Map<String,Object> indexRs = null; indexIterator = metaDataDialect.getIndexInfo(getCatalogForDBLookup(table.getCatalog(), defaultCatalog), getSchemaForDBLookup(table.getSchema(), defaultSchema), table.getName()); UniqueKey key = uniquekeys.get(indexName); if (key==null) { key = new UniqueKey(); key.setName(indexName); key.setTable(table); table.addUniqueKey(key); uniquekeys.put(indexName, key); key.addColumn(column); if (unique && key.getColumnSpan()==1) { UniqueKey key = keys.next(); if(key.getColumnSpan()==1) { col.setUnique(true);
Table table = simpleValue.getTable(); final Column column = new Column(); column.setValue( simpleValue ); database.getJdbcEnvironment() ); column.setName( physicalName.render( database.getDialect() ) ); table.addColumn( column ); sourceDocument.getMetadataCollector().addColumnNameBinding( table, table.getOrCreateIndex( name ).addColumn( column ); table.getOrCreateUniqueKey( name ).addColumn( column );
if ("table".equals(name)) { for (final Column column : this.currentColumns.values()) { this.currentTable.addColumn(column); this.currentTable.setPrimaryKey(this.primaryKey); this.tables.put(this.currentTable.getName(), this.currentTable); this.tableColumnTypes.put(this.currentTable.getName(), this.currentColumnTypes); this.primaryKey = null; this.currentIndex.setName(itemName); } else if (this.currentUnique != null) { this.currentUnique.setName(itemName); } else if (this.currentTable == null) { this.currentTable = new Table(itemName); } else if (this.currentColumn == null) { this.currentColumn = new Column(itemName); this.currentColumnTypes.put(this.currentColumn.getName(), sqlType); this.currentIndex.addColumn(column); } else if (this.currentUnique != null) { this.currentUnique.addColumn(column);
protected void createUniqueKeyForColumns(Table table, String columnName, List<Column> columns) { Collections.reverse(columns); UniqueKey uk = new UniqueKey(); uk.setTable(table); uk.addColumns(columns.iterator()); if(LOG.isDebugEnabled()) { LOG.debug("create unique key for " + table.getName() + " columns = " + columns); } setGeneratedUniqueName(uk); table.addUniqueKey(uk); }
try { final String physicalColumnName = getPhysicalColumnName( table, logicalColumnName ); columns[index] = new Column( physicalColumnName ); unbound.add( columns[index] ); columns[index] = new Column( logicalColumnName ); unboundNoLogical.add( columns[index] ); keyName = keyNameIdentifier.render( getDatabase().getJdbcEnvironment().getDialect() ); UniqueKey uk = table.getOrCreateUniqueKey( keyName ); for ( int i = 0; i < columns.length; i++ ) { Column column = columns[i]; String order = orderings != null ? orderings[i] : null; if ( table.containsColumn( column ) ) { uk.addColumn( column, order ); unbound.remove( column ); keyName = keyNameIdentifier.render( getDatabase().getJdbcEnvironment().getDialect() ); Index index = table.getOrCreateIndex( keyName ); for ( int i = 0; i < columns.length; i++ ) { Column column = columns[i]; sb.append( ") on table " ).append( table.getName() ).append( ": database column " ); for ( Column column : unbound ) { sb.append("'").append( column.getName() ).append( "', " );
/** * Update the unique key constraint names, as per hibernate 2 naming. */ @SuppressWarnings("unchecked") public void updateUniqueKeyConstraints(final Metadata metadata) { for (Table table : metadata.collectTableMappings()) { Iterator<Column> i = table.getColumnIterator(); while (i.hasNext()) { final Column column = i.next(); if (column.isUnique()) { UniqueKey uk = table.getOrCreateUniqueKey(Constraint.generateName("UK_", table, column)); uk.setName(determineUniqueKeyName(table.getName(), column.getName())); } } } }
private void addConstraintToColumn(final String columnName ) { Column column = table.getColumn( new Column( buildingContext.getMetadataCollector().getPhysicalColumnName( table, columnName ) ) ); if ( column == null ) { throw new AnnotationException( "@Index references a unknown column: " + columnName ); } if ( unique ) { table.getOrCreateUniqueKey( indexName ).addColumn( column ); } else { table.getOrCreateIndex( indexName ).addColumn( column ); } }
return; Iterator uniqueIterator = hibernateTable.getUniqueKeyIterator(); while (uniqueIterator.hasNext()) { org.hibernate.mapping.UniqueKey hibernateUnique = (org.hibernate.mapping.UniqueKey) uniqueIterator.next(); uniqueConstraint.setName(hibernateUnique.getName()); uniqueConstraint.setTable(table); Iterator columnIterator = hibernateUnique.getColumnIterator(); int i = 0; while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); uniqueConstraint.addColumn(i, new Column(hibernateColumn.getName()).setRelation(table)); i++; table.getUniqueConstraints().add(uniqueConstraint); Iterator columnIterator = hibernateTable.getColumnIterator(); while (columnIterator.hasNext()) { org.hibernate.mapping.Column column = (org.hibernate.mapping.Column) columnIterator.next(); if (column.isUnique()) { UniqueConstraint uniqueConstraint = new UniqueConstraint(); uniqueConstraint.setTable(table); String name = "UC_" + table.getName().toUpperCase() + column.getName().toUpperCase() + "_COL"; if (name.length() > 64) { name = name.substring(0, 63);
protected void setGeneratedUniqueName(UniqueKey uk) { StringBuilder sb = new StringBuilder(uk.getTable().getName()).append('_'); for (Object col : uk.getColumns()) { sb.append(((Column) col).getName()).append('_'); } MessageDigest md; try { md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } try { md.update(sb.toString().getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } String name = "UK" + new BigInteger(1, md.digest()).toString(16); if (name.length() > 30) { // Oracle has a 30-char limit name = name.substring(0, 30); } uk.setName(name); }
pkname = ( (Column) getPrimaryKey().getColumnIterator().next() ).getQuotedName( dialect ); Column col = (Column) iter.next(); buf.append( col.getQuotedName( dialect ) ) .append( ' ' ); buf.append( col.getSqlType( dialect, p ) ); uk.addColumn( col ); .append( getPrimaryKey().sqlConstraintString( dialect ) ); Iterator ukiter = getUniqueKeyIterator(); while ( ukiter.hasNext() ) { UniqueKey uk = (UniqueKey) ukiter.next();
/** * Constructor used for {@link UniqueKey}s. */ public MongoDBIndexSpec(UniqueKey uniqueKey, Document options) { this.indexType = determineIndexType( options ); this.options = prepareOptions( this.indexType, options, uniqueKey.getName(), true ); this.collection = uniqueKey.getTable().getName(); this.indexName = uniqueKey.getName(); this.addIndexKeys( uniqueKey.getColumnIterator(), uniqueKey.getColumnOrderMap() ); }