pg.ddx.io pgsql-committers@postgresql.org mailing list archivehelp / color / mirror / Atom feed
pgsql: Add input function for data type pg_ndistinct 2+ messages / 1 participants [nested] [flat]
* pgsql: Add input function for data type pg_ndistinct @ 2025-11-26 01:16 Michael Paquier <michael@paquier.xyz> 0 siblings, 0 replies; 2+ messages in thread From: Michael Paquier @ 2025-11-26 01:16 UTC (permalink / raw) To: pgsql-committers@lists.postgresql.org Add input function for data type pg_ndistinct pg_ndistinct is used as data type for the contents of ndistinct extended statistics. This new input function consumes the format that has been established by 1f927cce4498 for the output function of pg_ndistinct, enforcing some sanity checks for: - Checks for the input object, which should be a one-dimension array with correct attributes and values. - The key names: "attributes", "ndistinct". Both are required, other key names are blocked. - Value types for each key: "attributes" requires an array of integers, and "ndistinct" an integer. - List of attributes. Note that this enforces a check so as an attribute list has to be a subset of the longest attribute list found. This does not enforce that a full group of attribute sets exist, based on how the groups are generated when the ndistinct objects are generated, making the list of ndistinct items a bit loose. Note a check would still be required at import to see if the attributes listed match with the attribute numbers set in the definition of a statistics object. - Based on the discussion, the checks on the values are loose, as there is also an argument for potentially stats injection. The relation and attribute level stats follow the same line of argument for the values. This is required for a follow-up patch that aims to implement the import of extended statistics. Some tests are added to check the code paths of the JSON parser checking the shape of the pg_ndistinct inputs, with 90% of code coverage reached. The tests are located in their own new test file, for clarity. Author: Corey Huinker <corey.huinker@gmail.com> Reviewed-by: Jian He <jian.universality@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Yuefei Shi <shiyuefei1004@gmail.com> Discussion: https://postgr.es/m/CADkLM=dpz3KFnqP-dgJ-zvRvtjsa8UZv8wDAQdqho=qN3kX0Zg@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/44eba8f06e5568be35fa3d112ab781e931fe04ae Modified Files -------------- src/backend/utils/adt/pg_ndistinct.c | 768 ++++++++++++++++++++++++++++- src/test/regress/expected/pg_ndistinct.out | 447 +++++++++++++++++ src/test/regress/parallel_schedule | 2 +- src/test/regress/sql/pg_ndistinct.sql | 106 ++++ src/tools/pgindent/typedefs.list | 2 + 5 files changed, 1316 insertions(+), 9 deletions(-) ^ permalink raw reply [nested|flat] 2+ messages in thread
* pgsql: Add input function for data type pg_dependencies @ 2025-11-26 02:01 Michael Paquier <michael@paquier.xyz> 0 siblings, 0 replies; 2+ messages in thread From: Michael Paquier @ 2025-11-26 02:01 UTC (permalink / raw) To: pgsql-committers@lists.postgresql.org Add input function for data type pg_dependencies pg_dependencies is used as data type for the contents of dependencies extended statistics. This new input function consumes the format that has been established by e76defbcf09e for the output function of pg_dependencies, enforcing some sanity checks for: - Checks for the input object, which should be a one-dimension array with correct attributes and values. - The key names: "attributes", "dependency", "degree". All are required, other key names are blocked. - Value types for each key: "attributes" requires an array of integers, "dependency" an attribute number, "degree" a float. - List of attributes. In this case, it is possible that some dependencies are not listed in the statistics data, as items with a degree of 0 are discarded when building the statistics. This commit includes checks for simple scenarios, like duplicated attributes, or overlapping values between the list of "attributes" and the "dependency" value. Even if the input function considers the input as valid, a value still needs to be cross-checked with the attributes defined in a statistics object at import. - Based on the discussion, the checks on the values are loose, as there is also an argument for potentially stats injection. For example, "degree" should be defined in [0.0,1.0], but a check is not enforced. This is required for a follow-up patch that aims to implement the import of extended statistics. Some tests are added to check the code paths of the JSON parser checking the shape of the pg_dependencies inputs, with 91% of code coverage reached. The tests are located in their own new test file, for clarity. Author: Corey Huinker <corey.huinker@gmail.com> Reviewed-by: Jian He <jian.universality@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Yuefei Shi <shiyuefei1004@gmail.com> Discussion: https://postgr.es/m/CADkLM=dpz3KFnqP-dgJ-zvRvtjsa8UZv8wDAQdqho=qN3kX0Zg@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/e1405aa5e3acd55a77838b0b7944198735ffccdf Modified Files -------------- src/backend/utils/adt/pg_dependencies.c | 791 +++++++++++++++++++++++++- src/test/regress/expected/pg_dependencies.out | 540 ++++++++++++++++++ src/test/regress/parallel_schedule | 2 +- src/test/regress/sql/pg_dependencies.sql | 133 +++++ src/tools/pgindent/typedefs.list | 2 + 5 files changed, 1459 insertions(+), 9 deletions(-) ^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2025-11-26 02:01 UTC | newest] Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2025-11-26 01:16 pgsql: Add input function for data type pg_ndistinct Michael Paquier <michael@paquier.xyz> 2025-11-26 02:01 pgsql: Add input function for data type pg_dependencies Michael Paquier <michael@paquier.xyz>
This inbox is served by DDX for PostgreSQL; see mirroring instructions for how to clone and mirror all data and code used for this inbox