001package io.ebeaninternal.dbmigration.ddlgeneration.platform;
002
003import java.util.List;
004
005import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
006
007/**
008 * H2 history support using DB triggers to maintain a history table.
009 */
010public class H2HistoryDdl extends DbTriggerBasedHistoryDdl {
011
012  private static final String TRIGGER_CLASS = "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
013
014  H2HistoryDdl() {
015    this.sysPeriodType = "timestamp";
016    this.now = "now()";
017    this.sysPeriodEndValue = "now()";
018  }
019
020  @Override
021  protected void dropTriggers(DdlBuffer buffer, String baseTable) {
022    buffer.append("drop trigger ").append(updateTriggerName(baseTable)).endOfStatement();
023  }
024
025  @Override
026  protected void createTriggers(DdlBuffer buffer, String baseTable, List<String> columnNames) {
027    addCreateTrigger(buffer, updateTriggerName(baseTable), baseTable);
028  }
029
030  private void addCreateTrigger(DdlBuffer apply, String triggerName, String baseTable) {
031    // Note that this does not take into account the historyTable name (excepts _history suffix) and
032    // does not take into account excluded columns (all columns included in history)
033    apply
034      .append("create trigger ").append(triggerName).append(" before update,delete on ").append(quote(baseTable))
035      .append(" for each row call \"" + TRIGGER_CLASS + "\";").newLine();
036  }
037
038}