{"kind": "hook", "major": "18", "item": {"slug": "post_parse_analyze_hook", "name": "post_parse_analyze_hook", "name_zh": "post_parse_analyze_hook", "category": "Parsing and utility commands", "summary": "Hook for plugins to get control at end of parse analysis", "aliases": [], "versions": {"10": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_10_STABLE", "label": "10", "major": "10", "channel": "historical", "revision": "f4e8f137bfb08a664c8288824c1e36b5143ac875"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/include/parser/analyze.h#L20", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "da2617bbf55ec1a32ccc580be69f83e583b4aceefd8085288b08f7fb460f621b"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/parser/analyze.c#L49", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "bcc8afbc9d60d63cf84b993c546dbc2c7913bd52936df26636a3e2cf9619779b"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/parser/analyze.c#L115", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "bcc8afbc9d60d63cf84b993c546dbc2c7913bd52936df26636a3e2cf9619779b"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/tcop/postgres.c#L726", "path": "src/backend/tcop/postgres.c", "label": "Call sites", "sha256": "badfe30749794afa80a799dcdbd142fd4e4732ac1c913002d365549ae5313497"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/parser/analyze.c:115", "src/backend/parser/analyze.c:148", "src/backend/tcop/postgres.c:726"]}, {"code": "\n\tpstate->p_queryEnv = queryEnv;\n\n\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_analyze_varparams", "title": "Core call context: src/backend/parser/analyze.c:109\u2013123", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\t/* make sure all is well with parameter types */\n\tcheck_variable_parameters(pstate, query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_sub_analyze", "title": "Core call context: src/backend/parser/analyze.c:142\u2013156", "paragraphs": []}, {"code": "\tpstate->p_queryEnv = queryEnv;\n\t(*parserSetup) (pstate, parserSetupArg);\n\n\tquery = transformTopLevelStmt(pstate, parsetree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\tif (log_parser_stats)\n\t\tShowUsage(\"PARSE ANALYSIS STATISTICS\");\n\n\t/*\n\t * (2) Rewrite the queries, as necessary", "title": "Core call context: src/backend/tcop/postgres.c:720\u2013734", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "11": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_11_STABLE", "label": "11", "major": "11", "channel": "historical", "revision": "170e416034ec0231d9e9238f2577eeb76ca8d181"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/include/parser/analyze.h#L20", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "50b9d5eead81badcf732c091f3eae765af24206c8a45d9d27c092167b5072101"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/parser/analyze.c#L51", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "bdebe7767bc61487dc6f84e058e9507c0f5c8eed176057fd78f43dc962230200"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/parser/analyze.c#L119", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "bdebe7767bc61487dc6f84e058e9507c0f5c8eed176057fd78f43dc962230200"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/tcop/postgres.c#L738", "path": "src/backend/tcop/postgres.c", "label": "Call sites", "sha256": "f9c1faab582c948406049bc4dad1790e6f18113844d912b82490289e7030a88a"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/parser/analyze.c:119", "src/backend/parser/analyze.c:152", "src/backend/tcop/postgres.c:738"]}, {"code": "\n\tpstate->p_queryEnv = queryEnv;\n\n\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_analyze_varparams", "title": "Core call context: src/backend/parser/analyze.c:113\u2013127", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\t/* make sure all is well with parameter types */\n\tcheck_variable_parameters(pstate, query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_sub_analyze", "title": "Core call context: src/backend/parser/analyze.c:146\u2013160", "paragraphs": []}, {"code": "\tpstate->p_queryEnv = queryEnv;\n\t(*parserSetup) (pstate, parserSetupArg);\n\n\tquery = transformTopLevelStmt(pstate, parsetree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\tif (log_parser_stats)\n\t\tShowUsage(\"PARSE ANALYSIS STATISTICS\");\n\n\t/*\n\t * (2) Rewrite the queries, as necessary", "title": "Core call context: src/backend/tcop/postgres.c:732\u2013746", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "12": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_12_STABLE", "label": "12", "major": "12", "channel": "historical", "revision": "3f302f0ed06f69c5ebd33d4df95895323a3cbef6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/include/parser/analyze.h#L20", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "e435ace2e4c7cf5c154a484ec4fa6e9a8d5121f02b67850fc640a00402f8464a"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/parser/analyze.c#L51", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "563e674d24784f6628070df5ad8a22506e6c953c1bdcb5b03a41551209a95756"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/parser/analyze.c#L119", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "563e674d24784f6628070df5ad8a22506e6c953c1bdcb5b03a41551209a95756"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/tcop/postgres.c#L747", "path": "src/backend/tcop/postgres.c", "label": "Call sites", "sha256": "f367b9603dfc88e1d411acd92b80ae0b81e51c213e65a0dedc123399527edccd"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/parser/analyze.c:119", "src/backend/parser/analyze.c:152", "src/backend/tcop/postgres.c:747"]}, {"code": "\n\tpstate->p_queryEnv = queryEnv;\n\n\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_analyze_varparams", "title": "Core call context: src/backend/parser/analyze.c:113\u2013127", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\t/* make sure all is well with parameter types */\n\tcheck_variable_parameters(pstate, query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_sub_analyze", "title": "Core call context: src/backend/parser/analyze.c:146\u2013160", "paragraphs": []}, {"code": "\tpstate->p_queryEnv = queryEnv;\n\t(*parserSetup) (pstate, parserSetupArg);\n\n\tquery = transformTopLevelStmt(pstate, parsetree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\tif (log_parser_stats)\n\t\tShowUsage(\"PARSE ANALYSIS STATISTICS\");\n\n\t/*\n\t * (2) Rewrite the queries, as necessary", "title": "Core call context: src/backend/tcop/postgres.c:741\u2013755", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "13": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_13_STABLE", "label": "13", "major": "13", "channel": "historical", "revision": "05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/include/parser/analyze.h#L20", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "4a999be0b33a6b62d614711b2df358d308f4bad36f8987fa85634e7e55448bce"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/parser/analyze.c#L51", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "7ec5c2b001face7d570462e7eea8198c809bbfd11505aed0ad0c65be994ef106"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/parser/analyze.c#L119", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "7ec5c2b001face7d570462e7eea8198c809bbfd11505aed0ad0c65be994ef106"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/tcop/postgres.c#L743", "path": "src/backend/tcop/postgres.c", "label": "Call sites", "sha256": "9072571ab5d5706e0045284406282947f3b5beb6aaf2c99dd2971030954a23c9"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/parser/analyze.c:119", "src/backend/parser/analyze.c:152", "src/backend/tcop/postgres.c:743"]}, {"code": "\n\tpstate->p_queryEnv = queryEnv;\n\n\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_analyze_varparams", "title": "Core call context: src/backend/parser/analyze.c:113\u2013127", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\t/* make sure all is well with parameter types */\n\tcheck_variable_parameters(pstate, query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\treturn query;\n}\n\n/*\n * parse_sub_analyze", "title": "Core call context: src/backend/parser/analyze.c:146\u2013160", "paragraphs": []}, {"code": "\tpstate->p_queryEnv = queryEnv;\n\t(*parserSetup) (pstate, parserSetupArg);\n\n\tquery = transformTopLevelStmt(pstate, parsetree);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query);\n\n\tfree_parsestate(pstate);\n\n\tif (log_parser_stats)\n\t\tShowUsage(\"PARSE ANALYSIS STATISTICS\");\n\n\t/*\n\t * (2) Rewrite the queries, as necessary", "title": "Core call context: src/backend/tcop/postgres.c:737\u2013751", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "14": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_14_STABLE", "label": "14", "major": "14", "channel": "stable", "revision": "fba35c7c28a567839faba867db0808564c0a66db"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/include/parser/analyze.h#L21", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "f1234ad2214ce25ccb2b0bff2b05e22fe80163621dc63f272a5ebb2cce4687b1"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/parser/analyze.c#L58", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "05f6265a48f22c8f8b6024dcb64f2b9169b0fc7d168d7a707aee443bfdf670c2"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/commands/explain.c#L252", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "e091be4e2a083b8dea39ccd09beedede22c1716ef974da66c214a44f48be8c41"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/parser/analyze.c#L133", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "05f6265a48f22c8f8b6024dcb64f2b9169b0fc7d168d7a707aee443bfdf670c2"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/tcop/postgres.c#L714", "path": "src/backend/tcop/postgres.c", "label": "Call sites", "sha256": "a44a2eeed79705dec231ac4a033598aa99faf3670e99a7775bfe1758aef02300"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:252", "src/backend/parser/analyze.c:133", "src/backend/parser/analyze.c:172", "src/backend/tcop/postgres.c:714"]}, {"code": "\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, pstate->p_sourcetext);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:246\u2013260", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, sourceText);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:127\u2013141", "paragraphs": []}, {"code": "\tcheck_variable_parameters(pstate, query);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, sourceText);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:166\u2013180", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "15": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_15_STABLE", "label": "15", "major": "15", "channel": "stable", "revision": "0351991b8e7c7b64382e2f30ce581a8f276590a6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "b299176d588c6804195dfe18369f8f6f772aecb922c1010d99bdf0d2e806da34"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/parser/analyze.c#L59", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "2841ba1138b5f6f42f99c42e95d12e418bf91774a66b64cea82678dac8e17ddd"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/commands/explain.c#L252", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "bb3b442d0f1b098aa8707335250102f027a596cd94117308bd16d1d36b258f5c"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/parser/analyze.c#L129", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "2841ba1138b5f6f42f99c42e95d12e418bf91774a66b64cea82678dac8e17ddd"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:252", "src/backend/parser/analyze.c:129", "src/backend/parser/analyze.c:171", "src/backend/parser/analyze.c:208"]}, {"code": "\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, pstate->p_sourcetext);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:246\u2013260", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, sourceText);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:123\u2013137", "paragraphs": []}, {"code": "\tcheck_variable_parameters(pstate, query);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query, sourceText);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:165\u2013179", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "16": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_16_STABLE", "label": "16", "major": "16", "channel": "stable", "revision": "dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "4bf4ba1988c90afb63a762214c242e8a173654bf290b6771e72ec1c5b657f794"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/parser/analyze.c#L60", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "b65fdc84eed1b3601db3102881d084caa1bb9c741f42923cda119d434a001674"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/commands/explain.c#L261", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "8e017f0116dbea471339b40c37a667cc9f95039e7e0329c783e5e8ce194de7e1"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/parser/analyze.c#L130", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "b65fdc84eed1b3601db3102881d084caa1bb9c741f42923cda119d434a001674"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:261", "src/backend/parser/analyze.c:130", "src/backend/parser/analyze.c:172", "src/backend/parser/analyze.c:209"]}, {"code": "\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:255\u2013269", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:124\u2013138", "paragraphs": []}, {"code": "\tcheck_variable_parameters(pstate, query);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:166\u2013180", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "17": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_17_STABLE", "label": "17", "major": "17", "channel": "stable", "revision": "163288afd32a448244c8df75b3c33181aadd7f20"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "0a59b4253c0c47f41234611e2797c82d4928f91967ded4f2ca585aeb125ec518"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/parser/analyze.c#L58", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "810c4a9abacf70cf2064e8249a20813fed3f7f6d6041f9f50622c5c32ca93d94"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/commands/explain.c#L313", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "741251b1a3b6d269a52a673d42eb63b02e13a5872db7b359b137086ab21b63c8"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/parser/analyze.c#L127", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "810c4a9abacf70cf2064e8249a20813fed3f7f6d6041f9f50622c5c32ca93d94"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:313", "src/backend/parser/analyze.c:127", "src/backend/parser/analyze.c:169", "src/backend/parser/analyze.c:206"]}, {"code": "\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:307\u2013321", "paragraphs": []}, {"code": "\tquery = transformTopLevelStmt(pstate, parseTree);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:121\u2013135", "paragraphs": []}, {"code": "\tcheck_variable_parameters(pstate, query);\n\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\tfree_parsestate(pstate);\n\n\tpgstat_report_query_id(query->queryId, false);\n\n\treturn query;\n}\n", "title": "Core call context: src/backend/parser/analyze.c:163\u2013177", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "18": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "0d4ae51fc424c9d5e6d1d257e673e33066df4dcd1a31fb2ac875bfe6674b3cd2"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/parser/analyze.c#L59", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "98a23a176bbf95155d780b6512118999bc9fa68be8d88f0d013daf2a7512466a"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain.c#L194", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/parser/analyze.c#L128", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "98a23a176bbf95155d780b6512118999bc9fa68be8d88f0d013daf2a7512466a"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:194", "src/backend/commands/explain.c:427", "src/backend/commands/explain.c:453", "src/backend/parser/analyze.c:128", "src/backend/parser/analyze.c:170", "src/backend/parser/analyze.c:207"]}, {"code": "\t/* Extract the query and, if enabled, jumble it */\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:188\u2013202", "paragraphs": []}, {"code": "\t\t}\n\n\t\tctas_query = castNode(Query, copyObject(ctas->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(ctas_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, ctas_query, jstate);\n\t\trewritten = QueryRewrite(ctas_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tCURSOR_OPT_PARALLEL_OK, ctas->into, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, DeclareCursorStmt))\n\t{", "title": "Core call context: src/backend/commands/explain.c:421\u2013435", "paragraphs": []}, {"code": "\t\tJumbleState *jstate = NULL;\n\n\t\tdcs_query = castNode(Query, copyObject(dcs->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(dcs_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, dcs_query, jstate);\n\n\t\trewritten = QueryRewrite(dcs_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tdcs->options, NULL, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, ExecuteStmt))", "title": "Core call context: src/backend/commands/explain.c:447\u2013461", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "19": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_19_BETA4", "label": "19 Beta 4", "major": "19", "channel": "preview", "revision": "b73d13c32c834a2c8e1c60cb92f79530376cedf1"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "5c8229cc0689b53a1986d4c320f6278a8d9ec5b351b33b0f7a879d5d399b0c50"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/parser/analyze.c#L68", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "3208d52f6c768cb6a4c52a05701b83189c208db91a411f932cd419874a79ee9c"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/commands/explain.c#L199", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "8b115b1c194a4b54ae630209a741e293b1df49a9052f10b2de9ca092a48998e3"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/parser/analyze.c#L143", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "3208d52f6c768cb6a4c52a05701b83189c208db91a411f932cd419874a79ee9c"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:199", "src/backend/commands/explain.c:433", "src/backend/commands/explain.c:459", "src/backend/parser/analyze.c:143", "src/backend/parser/analyze.c:185", "src/backend/parser/analyze.c:222"]}, {"code": "\t/* Extract the query and, if enabled, jumble it */\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:193\u2013207", "paragraphs": []}, {"code": "\t\t}\n\n\t\tctas_query = castNode(Query, copyObject(ctas->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(ctas_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, ctas_query, jstate);\n\t\trewritten = QueryRewrite(ctas_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tCURSOR_OPT_PARALLEL_OK, ctas->into, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, DeclareCursorStmt))\n\t{", "title": "Core call context: src/backend/commands/explain.c:427\u2013441", "paragraphs": []}, {"code": "\t\tJumbleState *jstate = NULL;\n\n\t\tdcs_query = castNode(Query, copyObject(dcs->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(dcs_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, dcs_query, jstate);\n\n\t\trewritten = QueryRewrite(dcs_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tdcs->options, NULL, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, ExecuteStmt))", "title": "Core call context: src/backend/commands/explain.c:453\u2013467", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, const JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "20": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "master", "label": "20 devel", "major": "20", "channel": "devel", "revision": "2c10c2ce4d7bcd57543a49ab402af02a39724e0a"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "5c8229cc0689b53a1986d4c320f6278a8d9ec5b351b33b0f7a879d5d399b0c50"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/parser/analyze.c#L68", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "3ed3ffd693fa4abb259c34bfb32d3486871595b98d9a765037b9c8d87cd24e87"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/commands/createas.c#L249", "path": "src/backend/commands/createas.c", "label": "Call sites", "sha256": "b0edb9c9309c3304630778d5f8ac6e707c75079dadfa0e44b487d71c8293c30c"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/commands/explain.c#L199", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "13402758013520451539427b5993db06d463ca11c4e2d4cc5444e82367688077"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/commands/portalcmds.c#L82", "path": "src/backend/commands/portalcmds.c", "label": "Call sites", "sha256": "637b099a321482523a1c0120f308efab45221f14cc515bda8d9ea426a6fe2a2d"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/parser/analyze.c#L143", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "3ed3ffd693fa4abb259c34bfb32d3486871595b98d9a765037b9c8d87cd24e87"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/createas.c:249", "src/backend/commands/explain.c:199", "src/backend/commands/explain.c:433", "src/backend/commands/explain.c:459", "src/backend/commands/portalcmds.c:82", "src/backend/parser/analyze.c:143", "src/backend/parser/analyze.c:185", "src/backend/parser/analyze.c:222"]}, {"code": "\n\t/* Query contained by CTAS needs to be jumbled if requested */\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * The contained Query could be a SELECT, or an EXECUTE utility command.\n\t * If the latter, we just pass it off to ExecuteQuery.\n\t */\n\tif (query->commandType == CMD_UTILITY &&\n\t\tIsA(query->utilityStmt, ExecuteStmt))\n\t{", "title": "Core call context: src/backend/commands/createas.c:243\u2013257", "paragraphs": []}, {"code": "\t/* Extract the query and, if enabled, jumble it */\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:193\u2013207", "paragraphs": []}, {"code": "\t\t}\n\n\t\tctas_query = castNode(Query, copyObject(ctas->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(ctas_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, ctas_query, jstate);\n\t\trewritten = QueryRewrite(ctas_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tCURSOR_OPT_PARALLEL_OK, ctas->into, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, DeclareCursorStmt))\n\t{", "title": "Core call context: src/backend/commands/explain.c:427\u2013441", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, const JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}}, "content_hash": "c01640f35c773cc5a9ab5e31d37b64256b6be422994da2db8913fa4985dfd6cd", "imported_at": "2026-09-27T09:57:58.846"}, "snapshot": {"facts": [{"label": "Interface type", "value": "post_parse_analyze_hook_type"}, {"label": "Header", "value": "src/include/parser/analyze.h"}, {"label": "Subsystem", "value": "Parsing and utility commands"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/parser/analyze.h#L22", "path": "src/include/parser/analyze.h", "label": "Interface declaration", "sha256": "0d4ae51fc424c9d5e6d1d257e673e33066df4dcd1a31fb2ac875bfe6674b3cd2"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/parser/analyze.c#L59", "path": "src/backend/parser/analyze.c", "label": "Core definition", "sha256": "98a23a176bbf95155d780b6512118999bc9fa68be8d88f0d013daf2a7512466a"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/explain.c#L194", "path": "src/backend/commands/explain.c", "label": "Call sites", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/parser/analyze.c#L128", "path": "src/backend/parser/analyze.c", "label": "Call sites", "sha256": "98a23a176bbf95155d780b6512118999bc9fa68be8d88f0d013daf2a7512466a"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/commands/explain.c:194", "src/backend/commands/explain.c:427", "src/backend/commands/explain.c:453", "src/backend/parser/analyze.c:128", "src/backend/parser/analyze.c:170", "src/backend/parser/analyze.c:207"]}, {"code": "\t/* Extract the query and, if enabled, jumble it */\n\tquery = castNode(Query, stmt->query);\n\tif (IsQueryIdEnabled())\n\t\tjstate = JumbleQuery(query);\n\n\tif (post_parse_analyze_hook)\n\t\t(*post_parse_analyze_hook) (pstate, query, jstate);\n\n\t/*\n\t * Parse analysis was done already, but we still have to run the rule\n\t * rewriter.  We do not do AcquireRewriteLocks: we assume the query either\n\t * came straight from the parser, or suitable locks were acquired by\n\t * plancache.c.\n\t */\n\trewritten = QueryRewrite(castNode(Query, stmt->query));", "title": "Core call context: src/backend/commands/explain.c:188\u2013202", "paragraphs": []}, {"code": "\t\t}\n\n\t\tctas_query = castNode(Query, copyObject(ctas->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(ctas_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, ctas_query, jstate);\n\t\trewritten = QueryRewrite(ctas_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tCURSOR_OPT_PARALLEL_OK, ctas->into, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, DeclareCursorStmt))\n\t{", "title": "Core call context: src/backend/commands/explain.c:421\u2013435", "paragraphs": []}, {"code": "\t\tJumbleState *jstate = NULL;\n\n\t\tdcs_query = castNode(Query, copyObject(dcs->query));\n\t\tif (IsQueryIdEnabled())\n\t\t\tjstate = JumbleQuery(dcs_query);\n\t\tif (post_parse_analyze_hook)\n\t\t\t(*post_parse_analyze_hook) (pstate, dcs_query, jstate);\n\n\t\trewritten = QueryRewrite(dcs_query);\n\t\tAssert(list_length(rewritten) == 1);\n\t\tExplainOneQuery(linitial_node(Query, rewritten),\n\t\t\t\t\t\tdcs->options, NULL, es,\n\t\t\t\t\t\tpstate, params);\n\t}\n\telse if (IsA(utilityStmt, ExecuteStmt))", "title": "Core call context: src/backend/commands/explain.c:447\u2013461", "paragraphs": []}], "signature": "typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);\nextern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;", "description": ["Hook for plugins to get control at end of parse analysis"]}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}