diff --git a/jOOQ-examples/jOOQ-spark-chart-example/src/main/java/org/jooq/example/chart/SakilaReportService.java b/jOOQ-examples/jOOQ-spark-chart-example/src/main/java/org/jooq/example/chart/SakilaReportService.java index d0924b864c..603f12c252 100644 --- a/jOOQ-examples/jOOQ-spark-chart-example/src/main/java/org/jooq/example/chart/SakilaReportService.java +++ b/jOOQ-examples/jOOQ-spark-chart-example/src/main/java/org/jooq/example/chart/SakilaReportService.java @@ -48,6 +48,7 @@ import org.jooq.Condition; import org.jooq.Configuration; import org.jooq.DSLContext; import org.jooq.ExecuteContext; +import org.jooq.SQLDialect; import org.jooq.impl.DSL; import org.jooq.impl.DefaultConfiguration; import org.jooq.impl.DefaultExecuteListener; @@ -92,6 +93,7 @@ public class SakilaReportService { // Some nice debug logging of formatted queries and the first 5 rows in each result set. dsl = DSL.using(new DefaultConfiguration() .set(ds) + .set(SQLDialect.POSTGRES) .set(DefaultExecuteListenerProvider.providers(new DefaultExecuteListener() { @Override public void executeEnd(ExecuteContext ctx) { diff --git a/jOOQ/src/main/java/org/jooq/JSONB.java b/jOOQ/src/main/java/org/jooq/JSONB.java index 1a18c09f3a..5316d02e12 100644 --- a/jOOQ/src/main/java/org/jooq/JSONB.java +++ b/jOOQ/src/main/java/org/jooq/JSONB.java @@ -38,6 +38,10 @@ package org.jooq; import java.io.Serializable; +import java.util.Objects; + +import org.jooq.tools.json.JSONParser; +import org.jooq.tools.json.ParseException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -53,7 +57,8 @@ import org.jetbrains.annotations.Nullable; */ public final class JSONB implements Serializable { - private final String data; + private final String data; + private transient Object parsed; private JSONB(String data) { this.data = String.valueOf(data); @@ -92,9 +97,23 @@ public final class JSONB implements Serializable { return data == null ? null : jsonb(data); } + private final Object parsed() { + if (parsed == null) { + try { + parsed = new JSONParser().parse(data); + } + catch (ParseException e) { + parsed = data; + } + } + + return parsed; + } + @Override public int hashCode() { - return data.hashCode(); + Object p = parsed(); + return p == null ? 0 : p.hashCode(); } @Override @@ -102,12 +121,12 @@ public final class JSONB implements Serializable { if (this == obj) return true; if (obj instanceof JSONB) - return data.equals(((JSONB) obj).data); + return Objects.equals(parsed(), (((JSONB) obj).parsed())); return false; } @Override public String toString() { - return String.valueOf(data); + return String.valueOf(parsed()); } }