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}