Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Pawel Szymczyk
committed
Jan 19, 2015
1 parent
757cddd
commit b0031c8
Showing
7 changed files
with
111 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 47 additions & 10 deletions
57
javers-persistence-sql/src/main/java/org/javers/repository/sql/domain/CommitRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,66 @@ | ||
package org.javers.repository.sql.domain; | ||
|
||
import org.javers.core.commit.CommitMetadata; | ||
import org.javers.core.json.JsonConverter; | ||
import org.javers.repository.sql.poly.JaversPolyJDBC; | ||
import org.javers.repository.sql.schema.FixedSchemaFactory; | ||
import org.joda.time.LocalDateTime; | ||
import org.polyjdbc.core.query.InsertQuery; | ||
import org.polyjdbc.core.query.SelectQuery; | ||
import org.polyjdbc.core.query.mapper.ObjectMapper; | ||
import org.polyjdbc.core.type.Timestamp; | ||
|
||
import java.sql.ResultSet; | ||
import java.sql.SQLException; | ||
|
||
import static org.javers.repository.sql.schema.FixedSchemaFactory.COMMIT_TABLE_AUTHOR; | ||
|
||
/** | ||
* @author pawel szymczyk | ||
*/ | ||
public class CommitRepository { | ||
|
||
private JaversPolyJDBC javersPolyjdbc; | ||
private JsonConverter jsonConverter; | ||
|
||
public CommitRepository(JaversPolyJDBC javersPolyjdbc, JsonConverter jsonConverter) { | ||
public CommitRepository(JaversPolyJDBC javersPolyjdbc) { | ||
this.javersPolyjdbc = javersPolyjdbc; | ||
this.jsonConverter = jsonConverter; | ||
} | ||
|
||
public Long save(CommitMetadata commitMetadata) { | ||
public long save(CommitMetadata commitMetadata) { | ||
Long primaryKey = findCommitMetadata(commitMetadata); | ||
|
||
return primaryKey != null ? primaryKey : insert(commitMetadata); | ||
} | ||
|
||
private Long findCommitMetadata(CommitMetadata commitMetadata) { | ||
SelectQuery selectQuery = javersPolyjdbc.query() | ||
.select(FixedSchemaFactory.COMMIT_TABLE_PK) | ||
.from(FixedSchemaFactory.COMMIT_TABLE_NAME) | ||
.where(FixedSchemaFactory.COMMIT_TABLE_AUTHOR + " = :author " + | ||
"AND " + FixedSchemaFactory.COMMIT_TABLE_COMMIT_DATE + " = :date " + | ||
"AND " + FixedSchemaFactory.COMMIT_TABLE_COMMIT_ID + " = :id") | ||
.withArgument("author", commitMetadata.getAuthor()) | ||
.withArgument("date", toTimestamp(commitMetadata.getCommitDate())) | ||
.withArgument("id", commitMetadata.getId().value()); | ||
|
||
return javersPolyjdbc.queryRunner().queryUnique(selectQuery, new ObjectMapper<Long>() { | ||
@Override | ||
public Long createObject(ResultSet resultSet) throws SQLException { | ||
return resultSet.getLong(FixedSchemaFactory.COMMIT_TABLE_PK); | ||
} | ||
}, false); | ||
} | ||
|
||
private Long insert(CommitMetadata commitMetadata) { | ||
InsertQuery query = javersPolyjdbc.query().insert().into(FixedSchemaFactory.COMMIT_TABLE_NAME) | ||
.value(FixedSchemaFactory.COMMIT_TABLE_AUTHOR, commitMetadata.getAuthor()) | ||
.value(FixedSchemaFactory.COMMIT_TABLE_COMMIT_DATE, jsonConverter.toJson(commitMetadata.getCommitDate())) | ||
.value(FixedSchemaFactory.COMMIT_TABLE_COMMIT_ID, commitMetadata.getId().toString()); | ||
.value(COMMIT_TABLE_AUTHOR, commitMetadata.getAuthor()) | ||
.value(FixedSchemaFactory.COMMIT_TABLE_COMMIT_DATE, toTimestamp(commitMetadata.getCommitDate())) | ||
.value(FixedSchemaFactory.COMMIT_TABLE_COMMIT_ID, commitMetadata.getId().value()) | ||
.sequence(FixedSchemaFactory.COMMIT_TABLE_PK, FixedSchemaFactory.COMMIT_TABLE_PK_SEQ); | ||
|
||
javersPolyjdbc.queryRunner().insert(query); | ||
return javersPolyjdbc.queryRunner().insert(query); | ||
} | ||
|
||
return 1L; | ||
private Timestamp toTimestamp(LocalDateTime commitMetadata) { | ||
return Timestamp.from(commitMetadata.toDate()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
...ersistence-sql/src/test/groovy/org/javers/repository/sql/domain/BaseRepositoryTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package org.javers.repository.sql.domain | ||
|
||
import org.h2.tools.Server | ||
import org.javers.core.json.JsonConverterBuilder | ||
import org.javers.repository.sql.ConnectionProvider | ||
import org.javers.repository.sql.DialectName | ||
import org.javers.repository.sql.SqlRepositoryTestBuilder | ||
import spock.lang.Shared | ||
import spock.lang.Specification | ||
|
||
import java.sql.Connection | ||
import java.sql.DriverManager | ||
|
||
/** | ||
* @author pawel szymczyk | ||
*/ | ||
class BaseRepositoryTest extends Specification { | ||
|
||
@Shared def connectionProvider | ||
@Shared def dbConnection | ||
@Shared def sqlRepoBuilder | ||
|
||
def setupSpec() { | ||
Server.createTcpServer().start() | ||
dbConnection = DriverManager.getConnection("jdbc:h2:tcp://localhost:9092/mem:test") | ||
dbConnection.setAutoCommit(false) | ||
|
||
connectionProvider = new ConnectionProvider() { | ||
@Override | ||
Connection getConnection() { | ||
return dbConnection | ||
} | ||
} | ||
|
||
sqlRepoBuilder = SqlRepositoryTestBuilder.sqlRepository() | ||
.withConnectionProvider(connectionProvider) | ||
.withDialect(DialectName.H2) | ||
.withJSONConverter(JsonConverterBuilder.jsonConverter() | ||
.build()) | ||
|
||
sqlRepoBuilder.build() | ||
} | ||
} |
57 changes: 14 additions & 43 deletions
57
...sistence-sql/src/test/groovy/org/javers/repository/sql/domain/CommitRepositoryTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,60 +1,31 @@ | ||
package org.javers.repository.sql.domain | ||
|
||
import org.javers.core.Javers | ||
import org.javers.core.JaversBuilder | ||
import org.javers.core.commit.Commit | ||
import org.javers.core.commit.CommitId | ||
import org.javers.core.commit.CommitMetadata | ||
import org.javers.core.json.JsonConverterBuilder | ||
import org.javers.core.model.DummyUser | ||
import org.javers.repository.sql.ConnectionProvider | ||
import org.javers.repository.sql.DialectName | ||
import org.javers.repository.sql.SqlRepositoryTestBuilder | ||
import org.joda.time.LocalDateTime | ||
import spock.lang.Specification | ||
|
||
import java.sql.Connection | ||
import java.sql.DriverManager | ||
/** | ||
* @author pawel szymczyk | ||
*/ | ||
class CommitRepositoryTest extends BaseRepositoryTest { | ||
|
||
|
||
class CommitRepositoryTest extends Specification { | ||
|
||
def "should save commit"() { | ||
def "should save and next find persisted commit metadata"() { | ||
|
||
given: | ||
def jsonConverter = JsonConverterBuilder.jsonConverter().build() | ||
|
||
def connection = DriverManager.getConnection( | ||
"jdbc:postgresql://localhost:5432/pawel.szymczyk", "pawel.szymczyk", ""); | ||
connection.setAutoCommit(false); | ||
|
||
def builder = SqlRepositoryTestBuilder.sqlRepository().withConnectionProvider(new ConnectionProvider() { | ||
@Override | ||
Connection getConnection() { | ||
connection | ||
} | ||
}).withDialect(DialectName.POSTGRES).withJSONConverter(jsonConverter) | ||
def commitMetadata = new CommitMetadata("author", LocalDateTime.now(), new CommitId(1L, 0)) | ||
def commitRepository = sqlRepoBuilder.getComponent(CommitRepository) | ||
|
||
builder.build() | ||
when: | ||
def primaryKey = commitRepository.save(commitMetadata) | ||
dbConnection.commit() | ||
|
||
def commitRepository = builder.getComponent(CommitRepository) | ||
then: | ||
primaryKey != null | ||
|
||
when: | ||
def id = commitRepository.save(new CommitMetadata("author", LocalDateTime.now(), new CommitId(1L,0))) | ||
connection.commit() | ||
def persistedPrimaryKey = commitRepository.save(commitMetadata) | ||
|
||
then: | ||
true | ||
|
||
// then: | ||
// globalIdRepository.get(id).id == "kazik" | ||
// globalIdRepository.get(id).class == DummyUser | ||
// | ||
// when: | ||
// def nextId = globalIdRepository.save(globalId) | ||
// | ||
// then: | ||
// nextId == id | ||
|
||
persistedPrimaryKey == primaryKey | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters