001package io.ebeaninternal.dbmigration.ddlgeneration.platform;
002
003import io.ebean.config.DatabaseConfig;
004import io.ebean.config.DbConstraintNaming;
005
006/**
007 * Base implementation for all histories, where we must maintain history table (trigger based, db2 and hana)
008 * 
009 * @author Roland Praml, FOCONIS AG
010 *
011 */
012public abstract class DbTableBasedHistoryDdl implements PlatformHistoryDdl.TableBased {
013
014  private DbConstraintNaming constraintNaming;
015  private String historySuffix;
016  protected PlatformDdl platformDdl;
017
018  @Override
019  public void configure(DatabaseConfig config, PlatformDdl platformDdl) {
020    this.platformDdl = platformDdl;
021    this.historySuffix = config.getHistoryTableSuffix();
022    this.constraintNaming = config.getConstraintNaming();
023  }
024
025  @Override
026  public String historyTableName(String baseTableName) {
027    return normalise(baseTableName, historySuffix);
028  }
029
030  protected String normalise(String tableName, String suffix) {
031    String normalized = quote(normalise(tableName) + suffix);
032    int lastPeriod = tableName.lastIndexOf('.');
033    return tableName.substring(0, lastPeriod + 1) + normalized;
034  }
035
036  protected String normalise(String tableName) {
037    return constraintNaming.normaliseTable(tableName);
038  }
039
040  protected String quote(String dbName) {
041    return platformDdl.quote(dbName);
042  }
043
044}