Don't merge JSON fields after save() when using Postgres to keep same behaviour as MongoDB (#4808) (#4815)

This commit is contained in:
Jaeger
2018-06-07 12:43:54 -04:00
committed by Florent Vilmart
parent 108c7e95e2
commit 348489784a
2 changed files with 28 additions and 1 deletions

View File

@@ -1980,4 +1980,31 @@ describe('Parse.Object testing', () => {
done(); done();
}) })
}); });
it ('Update object field should store exactly same sent object', async (done) => {
let object = new TestObject();
// Set initial data
object.set("jsonData", { a: "b" });
object = await object.save();
equal(object.get('jsonData'), { a: "b" });
// Set empty JSON
object.set("jsonData", {});
object = await object.save();
equal(object.get('jsonData'), {});
// Set new JSON data
object.unset('jsonData')
object.set("jsonData", { c: "d" });
object = await object.save();
equal(object.get('jsonData'), { c: "d" });
// Fetch object from server
object = await object.fetch()
console.log(object.id, object.get('jsonData'))
equal(object.get('jsonData'), { c: "d" });
done();
});
}); });

View File

@@ -1324,7 +1324,7 @@ export class PostgresStorageAdapter implements StorageAdapter {
return p + ` - '$${index + 1 + i}:value'`; return p + ` - '$${index + 1 + i}:value'`;
}, ''); }, '');
updatePatterns.push(`$${index}:name = ( COALESCE($${index}:name, '{}'::jsonb) ${deletePatterns} ${incrementPatterns} || $${index + 1 + keysToDelete.length}::jsonb )`); updatePatterns.push(`$${index}:name = ('{}'::jsonb ${deletePatterns} ${incrementPatterns} || $${index + 1 + keysToDelete.length}::jsonb )`);
values.push(fieldName, ...keysToDelete, JSON.stringify(fieldValue)); values.push(fieldName, ...keysToDelete, JSON.stringify(fieldValue));
index += 2 + keysToDelete.length; index += 2 + keysToDelete.length;