Skip to content

Commit

Permalink
feat(orm): store json values without escaping them (#8609)
Browse files Browse the repository at this point in the history
Signed-off-by: Yuriy Movchan <Yuriy.Movchan@gmail.com>
  • Loading branch information
yurem committed May 31, 2024
1 parent a938f01 commit d023e9a
Showing 1 changed file with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,15 @@
import io.jans.orm.extension.PersistenceExtension;
import io.jans.orm.model.AttributeData;
import io.jans.orm.model.AttributeDataModification;
import io.jans.orm.model.AttributeDataModification.AttributeModificationType;
import io.jans.orm.model.AttributeType;
import io.jans.orm.model.BatchOperation;
import io.jans.orm.model.EntryData;
import io.jans.orm.model.PagedResult;
import io.jans.orm.model.SearchScope;
import io.jans.orm.model.AttributeDataModification.AttributeModificationType;
import io.jans.orm.operation.auth.PasswordEncryptionHelper;
import io.jans.orm.sql.impl.SqlBatchOperationWraper;
import io.jans.orm.sql.model.ConvertedExpression;
import io.jans.orm.sql.model.JsonAttributeValue;
import io.jans.orm.sql.model.JsonString;
import io.jans.orm.sql.model.SearchReturnDataType;
import io.jans.orm.sql.model.TableMapping;
Expand Down Expand Up @@ -927,6 +926,7 @@ public Date decodeTime(String date, boolean silent) {
private Object convertValueToDbJson(Object propertyValue, Boolean jsonValue) {
try {
if (SupportedDbType.POSTGRESQL == connectionProvider.getDbType()) {

Object[] attributeValue;
if (propertyValue == null) {
attributeValue = new Object[0];
Expand All @@ -937,8 +937,22 @@ private Object convertValueToDbJson(Object propertyValue, Boolean jsonValue) {
} else {
attributeValue = new Object[] { propertyValue };
}

if (Boolean.TRUE.equals(jsonValue)) {
StringBuilder jsonString = new StringBuilder("[");
int count = 0;
for (Object val : attributeValue) {
if (count > 0) {
jsonString.append(", ");
}
jsonString.append(String.format("%s", val));
count++;
}
jsonString.append("]");
return new JsonString(jsonString.toString());
}

String value = JSON_OBJECT_MAPPER.writeValueAsString((Object[]) propertyValue);
String value = JSON_OBJECT_MAPPER.writeValueAsString((Object[]) attributeValue);

return new JsonString(value);
} else {
Expand Down Expand Up @@ -970,10 +984,17 @@ private Object convertValueToDbJson(Object propertyValue, Boolean jsonValue) {

private Object[] convertDbJsonToValue(String jsonValue) {
try {
// Object[] values = JSON_OBJECT_MAPPER.readValue(jsonValue, Object[].class);
if (SupportedDbType.POSTGRESQL == connectionProvider.getDbType()) {
Object[] values = JSON_OBJECT_MAPPER.readValue(jsonValue, Object[].class);

if (values != null) {
for (int i = 0; i < values.length; i++) {
if (!(values[i] instanceof String)) {
values[i] = JSON_OBJECT_MAPPER.writeValueAsString(values[i]);
}
}
}

return values;
} else {
HashMap<String, Object> attributeValue = JSON_OBJECT_MAPPER.readValue(jsonValue, HashMap.class);
Expand Down

0 comments on commit d023e9a

Please sign in to comment.