@Override protected void addStoredFunction(DdlWrite writer, MTable table, HistoryTableUpdate update) throws IOException { String procedureName = procedureName(table.getName()); String historyTable = historyTableName(table.getName()); List<String> includedColumns = includedColumnNames(table); DdlBuffer apply = writer.applyHistory(); if (update != null) { apply.append("-- Regenerated ").append(procedureName).newLine(); apply.append("-- changes: ").append(update.description()).newLine(); } addFunction(apply, procedureName, historyTable, includedColumns); if (update != null) { // put a reverted version into the rollback buffer update.toRevertedColumns(includedColumns); DdlBuffer rollback = writer.rollback(); rollback.append("-- Revert regenerated ").append(procedureName).newLine(); rollback.append("-- revert changes: ").append(update.description()).newLine(); addFunction(rollback, procedureName, historyTable, includedColumns); } }
/** Use Postgres create table like to create the history table. */ @Override protected void createHistoryTable(DdlBuffer apply, MTable table) throws IOException { String baseTable = table.getName(); apply .append("create table ") .append(baseTable) .append(historySuffix) .append("(like ") .append(baseTable) .append(")") .endOfStatement(); }
@Override protected void createTriggers(DdlWrite writer, MTable table) throws IOException { String baseTableName = table.getName(); String procedureName = procedureName(baseTableName); String triggerName = triggerName(baseTableName); DdlBuffer apply = writer.applyHistory(); apply .append("create trigger ") .append(triggerName) .newLine() .append(" before update or delete on ") .append(baseTableName) .newLine() .append(" for each row execute procedure ") .append(procedureName) .append("();") .newLine() .newLine(); }