[Fix] Fixed version when loading from PostgreSQL
This commit is contained in:
parent
8392ab24d8
commit
8c429ccb19
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.persistence.postgresql;
|
package li.strolch.persistence.postgresql;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
@ -26,6 +27,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import li.strolch.model.StrolchRootElement;
|
import li.strolch.model.StrolchRootElement;
|
||||||
|
import li.strolch.model.Version;
|
||||||
import li.strolch.persistence.api.StrolchDao;
|
import li.strolch.persistence.api.StrolchDao;
|
||||||
import li.strolch.persistence.api.StrolchPersistenceException;
|
import li.strolch.persistence.api.StrolchPersistenceException;
|
||||||
|
|
||||||
|
@ -170,7 +172,7 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
@Override
|
@Override
|
||||||
public T queryBy(String type, String id) {
|
public T queryBy(String type, String id) {
|
||||||
|
|
||||||
String sql = "select id, name, type, asxml from " + getTableName()
|
String sql = "select id, name, type, version, created_by, created_at, deleted, asxml from " + getTableName()
|
||||||
+ " where type = ? and id = ? and latest = true";
|
+ " where type = ? and id = ? and latest = true";
|
||||||
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
@ -183,6 +185,14 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
|
|
||||||
SQLXML sqlxml = result.getSQLXML("asxml");
|
SQLXML sqlxml = result.getSQLXML("asxml");
|
||||||
T t = parseFromXml(id, type, sqlxml);
|
T t = parseFromXml(id, type, sqlxml);
|
||||||
|
|
||||||
|
int v = result.getInt(4);
|
||||||
|
String createdBy = result.getString(5);
|
||||||
|
Date createdAt = result.getDate(6);
|
||||||
|
boolean deleted = result.getBoolean(7);
|
||||||
|
Version version = new Version(t.getLocator(), v, createdBy, createdAt, deleted);
|
||||||
|
t.setVersion(version);
|
||||||
|
|
||||||
if (result.next())
|
if (result.next())
|
||||||
throw new StrolchPersistenceException("Non unique result for query: " + sql);
|
throw new StrolchPersistenceException("Non unique result for query: " + sql);
|
||||||
return t;
|
return t;
|
||||||
|
@ -194,14 +204,14 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T queryBy(String type, String id, int version) {
|
public T queryBy(String type, String id, int versionNr) {
|
||||||
|
|
||||||
String sql = "select id, name, type, asxml from " + getTableName()
|
String sql = "select id, name, type, version, created_by, created_at, deleted, asxml from " + getTableName()
|
||||||
+ " where type = ? and id = ? and version = ?";
|
+ " where type = ? and id = ? and version = ?";
|
||||||
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
statement.setString(2, id);
|
statement.setString(2, id);
|
||||||
statement.setInt(3, version);
|
statement.setInt(3, versionNr);
|
||||||
|
|
||||||
try (ResultSet result = statement.executeQuery()) {
|
try (ResultSet result = statement.executeQuery()) {
|
||||||
if (!result.next()) {
|
if (!result.next()) {
|
||||||
|
@ -210,6 +220,17 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
|
|
||||||
SQLXML sqlxml = result.getSQLXML("asxml");
|
SQLXML sqlxml = result.getSQLXML("asxml");
|
||||||
T t = parseFromXml(id, type, sqlxml);
|
T t = parseFromXml(id, type, sqlxml);
|
||||||
|
|
||||||
|
int v = result.getInt(4);
|
||||||
|
if (v != versionNr)
|
||||||
|
throw new StrolchPersistenceException(
|
||||||
|
"Requested version " + versionNr + " != " + v + " for " + t.getLocator());
|
||||||
|
String createdBy = result.getString(5);
|
||||||
|
Date createdAt = result.getDate(6);
|
||||||
|
boolean deleted = result.getBoolean(7);
|
||||||
|
Version version = new Version(t.getLocator(), v, createdBy, createdAt, deleted);
|
||||||
|
t.setVersion(version);
|
||||||
|
|
||||||
if (result.next())
|
if (result.next())
|
||||||
throw new StrolchPersistenceException("Non unique result for query: " + sql);
|
throw new StrolchPersistenceException("Non unique result for query: " + sql);
|
||||||
return t;
|
return t;
|
||||||
|
@ -223,7 +244,7 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
@Override
|
@Override
|
||||||
public List<T> queryVersionsFor(String type, String id) {
|
public List<T> queryVersionsFor(String type, String id) {
|
||||||
|
|
||||||
String sql = "select id, name, type, asxml from " + getTableName()
|
String sql = "select id, name, type, version, created_by, created_at, deleted, asxml from " + getTableName()
|
||||||
+ " where type = ? and id = ? order by version";
|
+ " where type = ? and id = ? order by version";
|
||||||
|
|
||||||
List<T> list = new ArrayList<>(1);
|
List<T> list = new ArrayList<>(1);
|
||||||
|
@ -237,6 +258,14 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
while (result.next()) {
|
while (result.next()) {
|
||||||
SQLXML sqlxml = result.getSQLXML("asxml");
|
SQLXML sqlxml = result.getSQLXML("asxml");
|
||||||
T t = parseFromXml(id, type, sqlxml);
|
T t = parseFromXml(id, type, sqlxml);
|
||||||
|
|
||||||
|
int v = result.getInt(4);
|
||||||
|
String createdBy = result.getString(5);
|
||||||
|
Date createdAt = result.getDate(6);
|
||||||
|
boolean deleted = result.getBoolean(7);
|
||||||
|
Version version = new Version(t.getLocator(), v, createdBy, createdAt, deleted);
|
||||||
|
t.setVersion(version);
|
||||||
|
|
||||||
list.add(t);
|
list.add(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +301,8 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
|
|
||||||
List<T> list = new ArrayList<>();
|
List<T> list = new ArrayList<>();
|
||||||
|
|
||||||
String sql = "select id, name, type, asxml from " + getTableName() + " where latest = true";
|
String sql = "select id, name, type, version, created_by, created_at, deleted, asxml from " + getTableName()
|
||||||
|
+ " where latest = true";
|
||||||
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
try (ResultSet result = statement.executeQuery()) {
|
try (ResultSet result = statement.executeQuery()) {
|
||||||
|
@ -281,6 +311,14 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
String type = result.getString("type");
|
String type = result.getString("type");
|
||||||
SQLXML sqlxml = result.getSQLXML("asxml");
|
SQLXML sqlxml = result.getSQLXML("asxml");
|
||||||
T t = parseFromXml(id, type, sqlxml);
|
T t = parseFromXml(id, type, sqlxml);
|
||||||
|
|
||||||
|
int v = result.getInt(4);
|
||||||
|
String createdBy = result.getString(5);
|
||||||
|
Date createdAt = result.getDate(6);
|
||||||
|
boolean deleted = result.getBoolean(7);
|
||||||
|
Version version = new Version(t.getLocator(), v, createdBy, createdAt, deleted);
|
||||||
|
t.setVersion(version);
|
||||||
|
|
||||||
list.add(t);
|
list.add(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +335,8 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
|
|
||||||
List<T> list = new ArrayList<>();
|
List<T> list = new ArrayList<>();
|
||||||
|
|
||||||
String sql = "select id, name, type, asxml from " + getTableName() + " where type = ? and latest = true";
|
String sql = "select id, name, type, version, created_by, created_at, deleted, asxml from " + getTableName()
|
||||||
|
+ " where type = ? and latest = true";
|
||||||
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = tx().getConnection().prepareStatement(sql)) {
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
|
||||||
|
@ -306,6 +345,14 @@ public abstract class PostgresqlDao<T extends StrolchRootElement> implements Str
|
||||||
String id = result.getString("id");
|
String id = result.getString("id");
|
||||||
SQLXML sqlxml = result.getSQLXML("asxml");
|
SQLXML sqlxml = result.getSQLXML("asxml");
|
||||||
T t = parseFromXml(id, type, sqlxml);
|
T t = parseFromXml(id, type, sqlxml);
|
||||||
|
|
||||||
|
int v = result.getInt(4);
|
||||||
|
String createdBy = result.getString(5);
|
||||||
|
Date createdAt = result.getDate(6);
|
||||||
|
boolean deleted = result.getBoolean(7);
|
||||||
|
Version version = new Version(t.getLocator(), v, createdBy, createdAt, deleted);
|
||||||
|
t.setVersion(version);
|
||||||
|
|
||||||
list.add(t);
|
list.add(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue