001package io.ebean.config.dbplatform.h2;
002
003import io.ebean.BackgroundExecutor;
004import io.ebean.config.dbplatform.SequenceBatchIdGenerator;
005
006import javax.sql.DataSource;
007
008/**
009 * H2 specific sequence Id Generator.
010 */
011public class H2SequenceIdGenerator extends SequenceBatchIdGenerator {
012
013  private final String baseSql;
014  private final String unionBaseSql;
015
016  /**
017   * Construct given a dataSource and sql to return the next sequence value.
018   */
019  public H2SequenceIdGenerator(BackgroundExecutor be, DataSource ds, String seqName, int batchSize) {
020    super(be, ds, seqName, batchSize);
021    this.baseSql = "select " + seqName + ".nextval";
022    this.unionBaseSql = " union " + baseSql;
023  }
024
025  @Override
026  public String getSql(int batchSize) {
027
028    StringBuilder sb = new StringBuilder();
029    sb.append(baseSql);
030    for (int i = 1; i < batchSize; i++) {
031      sb.append(unionBaseSql);
032    }
033    return sb.toString();
034  }
035}