@Override public Table snapshot(IdentifierGenerator ig) { TableGenerator tableGenerator = (TableGenerator) ig; Table table = new Table().setName(tableGenerator.getTableName()); Column pkColumn = new Column(); pkColumn.setName(tableGenerator.getSegmentColumnName()); DataType pkDataType = new DataType(PK_DATA_TYPE); pkDataType.setColumnSize(tableGenerator.getSegmentValueLength()); pkColumn.setType(pkDataType); pkColumn.setCertainDataType(false); pkColumn.setRelation(table); table.getColumns().add(pkColumn); PrimaryKey primaryKey = new PrimaryKey(); primaryKey.setName(tableGenerator.getTableName() + "PK"); primaryKey.addColumn(0, new Column(pkColumn.getName()).setRelation(table)); primaryKey.setTable(table); table.setPrimaryKey(primaryKey); Column valueColumn = new Column(); valueColumn.setName(tableGenerator.getValueColumnName()); valueColumn.setType(new DataType(VALUE_DATA_TYPE)); valueColumn.setNullable(false); valueColumn.setCertainDataType(false); valueColumn.setRelation(table); table.getColumns().add(valueColumn); return table; }
org.hibernate.mapping.Table hibernateTable = findHibernateTable(column.getRelation(), snapshot); if (hibernateTable == null) { return; while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); if (hibernateColumn.getName().equalsIgnoreCase(column.getName())) { column.setType(dataType); LOG.info("Found column " + column.getName() + " " + column.getType().toString()); column.setRemarks(hibernateColumn.getComment()); if (hibernateColumn.getValue() instanceof SimpleValue) { DataType parseType; column.setDefaultValue(SqlUtil.parseValue( snapshot.getDatabase(), defaultValue, parseType)); } else { column.setDefaultValue(hibernateColumn.getDefaultValue()); column.setNullable(hibernateColumn.isNullable()); column.setCertainDataType(false); column.setAutoIncrementInformation(new Column.AutoIncrementInformation()); String sequenceName = (column.getRelation().getName() + "_" + column.getName() + "_seq").toLowerCase(); column.setDefaultValue(new DatabaseFunction("nextval('" + sequenceName + "'::regclass)")); } else if (database.supportsAutoIncrement()) {
@Override protected DatabaseObject snapshotObject(DatabaseObject example, DatabaseSnapshot snapshot) throws DatabaseException, InvalidExampleException { Column column = (Column) example; if (column.getType() == null) { //not the actual full version found with the table if (column.getRelation() == null) { throw new InvalidExampleException("No relation set on " + column); } Relation relation = snapshot.get(column.getRelation()); if (relation != null) { for (Column columnSnapshot : relation.getColumns()) { if (columnSnapshot.getName().equalsIgnoreCase(column.getName())) { return columnSnapshot; } } } snapshotColumn((Column) example, snapshot); return example; //did not find it } else { return example; } }
Column pkColumn = new Column(); pkColumn.setName((String) pkColumnName.get(tableGenerator)); DataType pkDataType = new DataType(PK_DATA_TYPE); pkDataType.setColumnSize(keySize.getInt(tableGenerator)); pkColumn.setType(pkDataType); pkColumn.setCertainDataType(false); pkColumn.setRelation(table); table.getColumns().add(pkColumn); Column valueColumn = new Column(); valueColumn.setName((String) valueColumnName.get(tableGenerator)); valueColumn.setType(new DataType(VALUE_DATA_TYPE)); valueColumn.setCertainDataType(false); valueColumn.setRelation(table); table.getColumns().add(valueColumn);
@Override protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) throws DatabaseException, InvalidExampleException { if (foundObject instanceof Table) { org.hibernate.mapping.Table hibernateTable = findHibernateTable(foundObject, snapshot); if (hibernateTable == null) { return; } Iterator columnIterator = hibernateTable.getColumnIterator(); while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); Column column = new Column(); column.setName(hibernateColumn.getName()); column.setRelation((Table) foundObject); snapshotColumn(column, snapshot); ((Table) foundObject).getColumns().add(column); } } }
while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); Column column = new Column(); column.setName(hibernateColumn.getName()); column.setType(dataType); LOG.info("Found column " + column.getName() + " " + column.getType().toString()); column.setRemarks(hibernateColumn.getComment()); column.setDefaultValue(hibernateColumn.getDefaultValue()); column.setNullable(hibernateColumn.isNullable()); column.setCertainDataType(false); primaryKey.setName(hibernatePrimaryKey.getName()); primaryKey.addColumnName(pkColumnPosition++, column.getName()); if (("native".equals(identifierGeneratorStrategy) || "identity".equals(identifierGeneratorStrategy)) && dialect.getNativeIdentifierGeneratorClass().equals(IdentityGenerator.class)) { column.setAutoIncrementInformation(new Column.AutoIncrementInformation()); column.setRelation(table);
logger.debug("Synchronizing columns"); for(liquibase.structure.core.Column liquibaseColumn : liquibaseTable.getColumns()) { logger.debug("Processing column: {}", liquibaseColumn.getName()); targetColumn.setColumnName(liquibaseColumn.getName()); targetColumn.setAutoincrement(liquibaseColumn.isAutoIncrement()); Integer jdbcType = liquibaseColumn.getType().getDataTypeId(); String jdbcTypeName = liquibaseColumn.getType().getTypeName(); if("Oracle".equals(connectionProvider.getDatabaseProductName())) { targetColumn.setLength(liquibaseColumn.getType().getColumnSize()); targetColumn.setNullable(liquibaseColumn.isNullable()); targetColumn.setScale(liquibaseColumn.getType().getDecimalDigits()); Column sourceColumn = DatabaseLogic.findColumnByNameIgnoreCase(sourceTable, liquibaseColumn.getName()); if(sourceColumn != null) { targetColumn.setPropertyName(sourceColumn.getPropertyName());
@Override protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) throws DatabaseException, InvalidExampleException { if (!snapshot.getSnapshotControl().shouldInclude(Index.class)) { return; } if (foundObject instanceof Table) { Table table = (Table) foundObject; org.hibernate.mapping.Table hibernateTable = findHibernateTable(table, snapshot); if (hibernateTable == null) { return; } Iterator indexIterator = hibernateTable.getIndexIterator(); while (indexIterator.hasNext()) { org.hibernate.mapping.Index hibernateIndex = (org.hibernate.mapping.Index) indexIterator.next(); Index index = new Index(); index.setTable(table); index.setName(hibernateIndex.getName()); Iterator columnIterator = hibernateIndex.getColumnIterator(); while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); index.getColumns().add(new Column(hibernateColumn.getName()).setRelation(table)); } LOG.info("Found index " + index.getName()); table.getIndexes().add(index); } } }
@Override public void check(Database database) throws CustomPreconditionFailedException, CustomPreconditionErrorException { Column column = new Column(this.columnNames); UniqueConstraint uniqueConstraint = new UniqueConstraint(this.constraintName, null, null, this.tableName, column); boolean markFailed = false; try { if (!SnapshotGeneratorFactory.getInstance().has(uniqueConstraint, database)) { markFailed = true; } } catch (Exception e) { throw new CustomPreconditionErrorException("custom precondition check errored", e); } if (markFailed) { throw new CustomPreconditionFailedException(this.constraintName + " doesn't exist"); } } }
logger.debug("Synchronizing columns"); for(liquibase.structure.core.Column liquibaseColumn : liquibaseTable.getColumns()) { logger.debug("Processing column: {}", liquibaseColumn.getName()); targetColumn.setColumnName(liquibaseColumn.getName()); targetColumn.setAutoincrement(liquibaseColumn.isAutoIncrement()); Integer jdbcType = liquibaseColumn.getType().getDataTypeId(); String jdbcTypeName = liquibaseColumn.getType().getTypeName(); if("Oracle".equals(connectionProvider.getDatabaseProductName())) { targetColumn.setLength(liquibaseColumn.getType().getColumnSize()); targetColumn.setNullable(liquibaseColumn.isNullable()); targetColumn.setScale(liquibaseColumn.getType().getDecimalDigits()); Column sourceColumn = DatabaseLogic.findColumnByNameIgnoreCase(sourceTable, liquibaseColumn.getName()); if(sourceColumn != null) { targetColumn.setPropertyName(sourceColumn.getPropertyName());
@Override protected DatabaseObject snapshotObject(DatabaseObject example, DatabaseSnapshot snapshot) throws DatabaseException, InvalidExampleException { if (example.getSnapshotId() != null) { return example; } Table table = ((Index) example).getTable(); org.hibernate.mapping.Table hibernateTable = findHibernateTable(table, snapshot); if (hibernateTable == null) { return example; } Iterator indexIterator = hibernateTable.getIndexIterator(); while (indexIterator.hasNext()) { org.hibernate.mapping.Index hibernateIndex = (org.hibernate.mapping.Index) indexIterator.next(); Index index = new Index(); index.setTable(table); index.setName(hibernateIndex.getName()); Iterator columnIterator = hibernateIndex.getColumnIterator(); while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); index.getColumns().add(new Column(hibernateColumn.getName()).setRelation(table)); } if (index.getColumnNames().equalsIgnoreCase(((Index) example).getColumnNames())) { LOG.info("Found index " + index.getName()); table.getIndexes().add(index); return index; } } return example; }
fk.setForeignKeyTable(currentTable); for (Object column : hibernateForeignKey.getColumns()) { fk.addForeignKeyColumn(new liquibase.structure.core.Column(((org.hibernate.mapping.Column) column).getName())); fk.addPrimaryKeyColumn(new liquibase.structure.core.Column(((org.hibernate.mapping.Column) column).getName())); fk.addPrimaryKeyColumn(new liquibase.structure.core.Column(((org.hibernate.mapping.Column) column).getName()));
while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); uniqueConstraint.addColumn(i, new Column(hibernateColumn.getName()).setRelation(table)); i++; name = name.substring(0, 63); uniqueConstraint.addColumn(0, new Column(column.getName()).setRelation(table)); uniqueConstraint.setName(name); LOG.info("Found unique constraint " + uniqueConstraint.toString());
pk.setTable(table); for (Object hibernateColumn : hibernatePrimaryKey.getColumns()) { pk.getColumns().add(new Column(((org.hibernate.mapping.Column) hibernateColumn).getName()).setRelation(table));