/** * Creates a statement to delete all snapshots of the aggregate with given {@code aggregateIdentifier}. * * @param connection The connection to the database. * @param aggregateIdentifier The identifier of the aggregate whose snapshots to delete. * @return A {@link PreparedStatement} that deletes all the aggregate's snapshots when executed. * * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement deleteSnapshots(Connection connection, String aggregateIdentifier, long sequenceNumber) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement( "DELETE FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? " + "AND " + schema.sequenceNumberColumn() + " < ?" ); preparedStatement.setString(1, aggregateIdentifier); preparedStatement.setLong(2, sequenceNumber); return preparedStatement; }
/** * Creates a statement to read the snapshot entry of an aggregate with given identifier. * * @param connection The connection to the database. * @param identifier The aggregate identifier. * @return A {@link PreparedStatement} that returns the last snapshot entry of the aggregate (if any) when executed. * * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement readSnapshotData(Connection connection, String identifier) throws SQLException { final String s = "SELECT " + domainEventFields() + " FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? ORDER BY " + schema.sequenceNumberColumn() + " DESC"; PreparedStatement statement = connection.prepareStatement(s); statement.setString(1, identifier); return statement; }
@Test public void testCreateSnapshotEventTable() throws Exception { // test passes if no exception is thrown testSubject.createSnapshotEventTable(connection, eventSchema) .execute(); connection.prepareStatement("SELECT * FROM " + eventSchema.snapshotTable()) .execute(); connection.prepareStatement("DROP TABLE " + eventSchema.snapshotTable()) .execute(); } }
SerializedObject<?> payload = snapshot.serializePayload(serializer, dataType); SerializedObject<?> metaData = snapshot.serializeMetaData(serializer, dataType); final String sql = "INSERT INTO " + schema.snapshotTable() + " (" + String.join(", ", schema.eventIdentifierColumn(), schema.aggregateIdentifierColumn(), schema.sequenceNumberColumn(), schema.typeColumn(), schema.timestampColumn(),
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " NUMBER(19) NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " BIGINT NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }
/** * Creates a statement to delete all snapshots of the aggregate with given {@code aggregateIdentifier}. * * @param connection The connection to the database. * @param aggregateIdentifier The identifier of the aggregate whose snapshots to delete. * @return A {@link PreparedStatement} that deletes all the aggregate's snapshots when executed. * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement deleteSnapshots(Connection connection, String aggregateIdentifier, long sequenceNumber) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement( "DELETE FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? " + "AND " + schema.sequenceNumberColumn() + " < ?" ); preparedStatement.setString(1, aggregateIdentifier); preparedStatement.setLong(2, sequenceNumber); return preparedStatement; }
/** * Creates a statement to delete all snapshots of the aggregate with given {@code aggregateIdentifier}. * * @param connection The connection to the database. * @param aggregateIdentifier The identifier of the aggregate whose snapshots to delete. * @return A {@link PreparedStatement} that deletes all the aggregate's snapshots when executed. * * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement deleteSnapshots(Connection connection, String aggregateIdentifier, long sequenceNumber) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement( "DELETE FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? " + "AND " + schema.sequenceNumberColumn() + " < ?" ); preparedStatement.setString(1, aggregateIdentifier); preparedStatement.setLong(2, sequenceNumber); return preparedStatement; }
/** * Creates a statement to read the snapshot entry of an aggregate with given identifier. * * @param connection The connection to the database. * @param identifier The aggregate identifier. * @return A {@link PreparedStatement} that returns the last snapshot entry of the aggregate (if any) when executed. * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement readSnapshotData(Connection connection, String identifier) throws SQLException { final String s = "SELECT " + domainEventFields() + " FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? ORDER BY " + schema.sequenceNumberColumn() + " DESC"; PreparedStatement statement = connection.prepareStatement(s); statement.setString(1, identifier); return statement; }
/** * Creates a statement to read the snapshot entry of an aggregate with given identifier. * * @param connection The connection to the database. * @param identifier The aggregate identifier. * @return A {@link PreparedStatement} that returns the last snapshot entry of the aggregate (if any) when executed. * * @throws SQLException when an exception occurs while creating the prepared statement. */ protected PreparedStatement readSnapshotData(Connection connection, String identifier) throws SQLException { final String s = "SELECT " + domainEventFields() + " FROM " + schema.snapshotTable() + " WHERE " + schema.aggregateIdentifierColumn() + " = ? ORDER BY " + schema.sequenceNumberColumn() + " DESC"; PreparedStatement statement = connection.prepareStatement(s); statement.setString(1, identifier); return statement; }
SerializedObject<?> payload = serializePayload(snapshot, serializer, dataType); SerializedObject<?> metaData = serializeMetaData(snapshot, serializer, dataType); final String sql = "INSERT INTO " + schema.snapshotTable() + " (" + String.join(", ", schema.eventIdentifierColumn(), schema.aggregateIdentifierColumn(), schema.sequenceNumberColumn(), schema.typeColumn(), schema.timestampColumn(),
SerializedObject<?> payload = snapshot.serializePayload(serializer, dataType); SerializedObject<?> metaData = snapshot.serializeMetaData(serializer, dataType); final String sql = "INSERT INTO " + schema.snapshotTable() + " (" + String.join(", ", schema.eventIdentifierColumn(), schema.aggregateIdentifierColumn(), schema.sequenceNumberColumn(), schema.typeColumn(), schema.timestampColumn(),
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " NUMBER(19) NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " NUMBER(19) NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " BIGINT NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }
@Override public PreparedStatement createSnapshotEventTable(Connection connection, EventSchema schema) throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS " + schema.snapshotTable() + " (\n" + schema.aggregateIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.sequenceNumberColumn() + " BIGINT NOT NULL,\n" + schema.typeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.eventIdentifierColumn() + " VARCHAR(255) NOT NULL,\n" + schema.metaDataColumn() + " " + payloadType() + ",\n" + schema.payloadColumn() + " " + payloadType() + " NOT NULL,\n" + schema.payloadRevisionColumn() + " VARCHAR(255),\n" + schema.payloadTypeColumn() + " VARCHAR(255) NOT NULL,\n" + schema.timestampColumn() + " VARCHAR(255) NOT NULL,\n" + "PRIMARY KEY (" + schema.aggregateIdentifierColumn() + ", " + schema.sequenceNumberColumn() + "),\n" + "UNIQUE (" + schema.eventIdentifierColumn() + ")\n" + ")"; return connection.prepareStatement(sql); }