From 3a547bf487e4181c33ebac531e35000cdd593e46 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Fri, 24 Jul 2015 10:24:28 +1200 Subject: [PATCH] #347 - @History support with query.asOf(Timestamp) - javadoc update --- .../ebean/config/dbplatform/DatabasePlatform.java | 7 +++++++ .../config/dbplatform/Postgres8Platform.java | 15 +++++++++++++++ .../ebean/config/dbplatform/PostgresPlatform.java | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java index 149383c42..eb128c42a 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java @@ -442,6 +442,13 @@ public class DatabasePlatform { return disallowBatchOnCascade; } + /** + * Return the 'as of' predicate added for the given table alias. + * + * @param asOfTableAlias The table alias this predicate is added for + * @param asOfSysPeriod The name of the 'sys_period' column used for effective date time range. + * @return The predicate containing a single ? bind parameter which will be bound to the 'as at' timestamp value + */ public String getAsOfPredicate(String asOfTableAlias, String asOfSysPeriod) { throw new RuntimeException("AsOf query not support of this database platform yet"); } diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/Postgres8Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/Postgres8Platform.java index 512f24c4a..740c73c55 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/Postgres8Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/Postgres8Platform.java @@ -50,6 +50,21 @@ public class Postgres8Platform extends DatabasePlatform { } + /** + * Build and return the 'as of' predicate for a given table alias. + *

+ * Each @History entity involved in the query has this predicate added using the related table alias. + *

+ */ + public String getAsOfPredicate(String asOfTableAlias, String asOfSysPeriod) { + + // for Postgres we are using the 'timestamp with timezone range' data type + // as our sys_period column so hence the predicate below + StringBuilder sb = new StringBuilder(40); + sb.append(asOfTableAlias).append(".").append(asOfSysPeriod).append(" @> ?::timestamptz"); + return sb.toString(); + } + /** * Create a Postgres specific sequence IdGenerator. */ diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java index 9e20cface..950322a35 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java @@ -68,6 +68,8 @@ public class PostgresPlatform extends DatabasePlatform { */ public String getAsOfPredicate(String asOfTableAlias, String asOfSysPeriod) { + // for Postgres we are using the 'timestamp with timezone range' data type + // as our sys_period column so hence the predicate below StringBuilder sb = new StringBuilder(40); sb.append(asOfTableAlias).append(".").append(asOfSysPeriod).append(" @> ?::timestamptz"); return sb.toString();