mirror of
https://github.com/postgres/postgres.git
synced 2026-04-14 21:47:31 -04:00
Complete the TODOs in to_json_is_immutable() and to_jsonb_is_immutable() by recursing into container types (arrays, composites, ranges, multiranges, domains) to check element/sub-type mutability, rather than conservatively returning "mutable" for all arrays and composites. The shared logic is factored into a single json_check_mutability() function in jsonfuncs.c, with the existing exported functions as thin wrappers. Composite type inspection uses lookup_rowtype_tupdesc() (typcache) instead of relation_open() to avoid unnecessary lock acquisition in the optimizer. Range and multirange types are now also checked recursively: if the subtype's conversion is immutable, the range is considered immutable for JSON purposes, even though range_out is generically marked STABLE. This is a behavioral change: range types with immutable subtypes (e.g., int4range) can now appear in expression indexes via JSON_ARRAY/JSON_OBJECT, whereas previously they were conservatively rejected. Add regression tests for JSON_ARRAY and JSON_OBJECT mutability with expression indexes and generated columns, covering arrays, composites, domains, ranges, multiranges and combinations thereof. Author: Jian He <jian.universality@gmail.com> Reviewed-by: Andrew Dunstan <andrew@dunslane.net> Discussion: https://postgr.es/m/CACJufxFz=OsXQdsMJ-cqoqspD9aJrwntsQP-U2A-UaV_M+-S9g@mail.gmail.com Commitfest: https://commitfest.postgresql.org/patch/5759 |
||
|---|---|---|
| .. | ||
| access | ||
| archive | ||
| backup | ||
| bootstrap | ||
| catalog | ||
| commands | ||
| common | ||
| datatype | ||
| executor | ||
| fe_utils | ||
| foreign | ||
| jit | ||
| lib | ||
| libpq | ||
| mb | ||
| nodes | ||
| optimizer | ||
| parser | ||
| partitioning | ||
| pch | ||
| port | ||
| portability | ||
| postmaster | ||
| regex | ||
| replication | ||
| rewrite | ||
| snowball | ||
| statistics | ||
| storage | ||
| tcop | ||
| tsearch | ||
| utils | ||
| .gitignore | ||
| c.h | ||
| fmgr.h | ||
| funcapi.h | ||
| getopt_long.h | ||
| Makefile | ||
| meson.build | ||
| miscadmin.h | ||
| pg_config.h.in | ||
| pg_config_manual.h | ||
| pg_getopt.h | ||
| pg_trace.h | ||
| pgstat.h | ||
| pgtar.h | ||
| pgtime.h | ||
| port.h | ||
| postgres.h | ||
| postgres_ext.h | ||
| postgres_fe.h | ||
| varatt.h | ||
| windowapi.h | ||