package uk.co.acuminous.julez.jdbc; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import uk.co.acuminous.julez.util.StringUtils; public class DefaultEventSql implements SqlStatementProvider { private static final String SELECT_ALL = "SELECT * FROM event ORDER BY timestamp ASC, id ASC"; private final List<String> columnNames; private final String insertSql; public DefaultEventSql(String... columnNames) { this(Arrays.asList(columnNames)); } public DefaultEventSql(Collection<String> columnNames) { if (columnNames.isEmpty()) { throw new IllegalArgumentException("At least one column name is required"); } this.columnNames = new ArrayList<String>(columnNames); this.insertSql = buildInsertStatement(); } @Override public String getSelectStatement() { return SELECT_ALL; } @Override public String getInsertStatement() { return insertSql; } private String buildInsertStatement() { String commaSeparatedColumnNames = StringUtils.join(columnNames, ","); String placeHolders = commaSeparatedColumnNames.replaceAll("[^,]+", "?"); return String.format("INSERT INTO event (%s) VALUES (%s)", commaSeparatedColumnNames, placeHolders); } public List<String> getColumnNames() { return columnNames; } }