• Tom Lane's avatar
    Fix handling of nested JSON objects in json_populate_recordset and friends. · 57d8c127
    Tom Lane authored
    populate_recordset_object_start() improperly created a new hash table
    (overwriting the link to the existing one) if called at nest levels
    greater than one.  This resulted in previous fields not appearing in
    the final output, as reported by Matti Hameister in bug #10728.
    In 9.4 the problem also affects json_to_recordset.
    
    This perhaps missed detection earlier because the default behavior is to
    throw an error for nested objects: you have to pass use_json_as_text = true
    to see the problem.
    
    In addition, fix query-lifespan leakage of the hashtable created by
    json_populate_record().  This is pretty much the same problem recently
    fixed in dblink: creating an intended-to-be-temporary context underneath
    the executor's per-tuple context isn't enough to make it go away at the
    end of the tuple cycle, because MemoryContextReset is not
    MemoryContextResetAndDeleteChildren.
    
    Michael Paquier and Tom Lane
    57d8c127
json.sql 16.2 KB