[jOOQ/jOOQ#12023] JSONB equals, hashCode, toString() should be formatting agnostic
This commit is contained in:
parent
887518ee24
commit
59adfbf947
@ -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) {
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user