pg_query 4.2.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +6 -8
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/extconf.rb +14 -4
  6. data/ext/pg_query/include/pg_query.h +27 -3
  7. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +1 -1
  29. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
  30. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  31. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  32. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  34. data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
  36. data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
  37. data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
  38. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  39. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  40. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +58 -98
  42. data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
  43. data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
  44. data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
  45. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
  46. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  47. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
  48. data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
  49. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
  50. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
  52. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  53. data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
  54. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
  58. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
  60. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  82. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +1 -1
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
  125. data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
  126. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
  127. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
  129. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  130. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +4 -4
  132. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
  133. data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
  134. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
  135. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  136. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
  137. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  138. data/ext/pg_query/include/postgres/common/int.h +437 -0
  139. data/ext/pg_query/include/{common → postgres/common}/keywords.h +1 -1
  140. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  141. data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
  142. data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
  143. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  144. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  145. data/ext/pg_query/include/{common → postgres/common}/string.h +5 -3
  146. data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
  147. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
  148. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  149. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  150. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +11 -4
  151. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  152. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  153. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  154. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +34 -17
  155. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
  156. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
  157. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
  158. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  159. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  160. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +21 -2
  161. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  162. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
  163. data/ext/pg_query/include/postgres/gram.h +1127 -0
  164. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  165. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +2 -2
  166. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  167. data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
  168. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
  169. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  170. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
  171. data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
  172. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  173. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
  181. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  182. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  183. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +35 -18
  184. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  185. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
  186. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
  192. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  193. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +96 -511
  195. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  196. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +377 -139
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  203. data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
  204. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  205. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  206. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/value.h +12 -2
  208. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
  214. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
  215. data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
  216. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  224. data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
  225. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  226. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  227. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +1 -1
  228. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  229. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +158 -218
  230. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
  231. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  232. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
  233. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  234. data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
  235. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
  236. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
  237. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  238. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +1 -1
  239. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
  240. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
  241. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
  242. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  245. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  249. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  250. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  251. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  252. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +62 -25
  253. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  254. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  255. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  256. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  257. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  258. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  259. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  260. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  261. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  264. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  268. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  269. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  270. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  275. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  276. data/ext/pg_query/include/{port.h → postgres/port.h} +42 -75
  277. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  278. data/ext/pg_query/include/postgres/postgres.h +579 -0
  279. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  280. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +1 -4
  281. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  285. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
  289. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
  290. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
  291. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
  292. data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
  293. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  294. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
  295. data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
  296. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
  297. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
  298. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
  299. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
  300. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  301. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  304. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +1 -1
  305. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
  306. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  307. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
  308. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
  309. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
  310. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
  311. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
  312. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
  313. data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
  314. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -2
  315. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  316. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  317. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +94 -57
  318. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
  320. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
  321. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
  323. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
  324. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  325. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  326. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +1 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
  329. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
  330. data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
  331. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  332. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
  333. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
  335. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
  336. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
  337. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  338. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  339. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +3 -3
  340. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  341. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
  342. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
  343. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
  344. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
  345. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
  346. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  347. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
  348. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -1
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
  354. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
  355. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
  356. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  357. data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
  358. data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
  359. data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
  360. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
  361. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
  362. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  363. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  364. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +41 -21
  365. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  367. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
  368. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  369. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  370. data/ext/pg_query/include/{utils → postgres/utils}/float.h +7 -6
  371. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
  372. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
  374. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
  375. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  376. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
  377. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
  378. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
  379. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
  381. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  382. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
  383. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  384. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  385. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +20 -5
  386. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
  387. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  388. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
  389. data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
  390. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
  391. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
  392. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
  393. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  395. data/ext/pg_query/include/{utils → postgres/utils}/regproc.h +3 -3
  396. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
  397. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
  398. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  399. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  400. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +6 -1
  401. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  402. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
  403. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
  405. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
  407. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
  408. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
  409. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
  411. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
  412. data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
  413. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
  414. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
  415. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  416. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  417. data/ext/pg_query/pg_query.c +10 -1
  418. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  419. data/ext/pg_query/pg_query_deparse.c +1 -10635
  420. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  421. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  422. data/ext/pg_query/pg_query_internal.h +1 -1
  423. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  424. data/ext/pg_query/pg_query_normalize.c +1 -1
  425. data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
  426. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  427. data/ext/pg_query/pg_query_parse.c +47 -5
  428. data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
  429. data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
  430. data/ext/pg_query/pg_query_ruby.c +5 -0
  431. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  432. data/ext/pg_query/pg_query_scan.c +1 -1
  433. data/ext/pg_query/pg_query_split.c +3 -3
  434. data/ext/pg_query/postgres_deparse.c +11067 -0
  435. data/ext/pg_query/postgres_deparse.h +9 -0
  436. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  437. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  438. data/ext/pg_query/src_backend_commands_define.c +1 -1
  439. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  440. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  441. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  442. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  443. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  444. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  445. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  446. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  447. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  448. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  449. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  450. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  451. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  452. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  453. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  454. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  455. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  456. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  457. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  458. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  459. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  460. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  461. data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
  462. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  463. data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
  464. data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
  465. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  466. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  467. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  468. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  469. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  470. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  471. data/ext/pg_query/src_common_encnames.c +4 -1
  472. data/ext/pg_query/src_common_hashfn.c +1 -1
  473. data/ext/pg_query/src_common_keywords.c +1 -1
  474. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  475. data/ext/pg_query/src_common_kwlookup.c +1 -1
  476. data/ext/pg_query/src_common_psprintf.c +1 -1
  477. data/ext/pg_query/src_common_stringinfo.c +4 -4
  478. data/ext/pg_query/src_common_wchar.c +9 -8
  479. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  480. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  481. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  482. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  483. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  484. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  485. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  486. data/ext/pg_query/src_port_pg_bitutils.c +79 -5
  487. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  488. data/ext/pg_query/src_port_snprintf.c +6 -10
  489. data/ext/pg_query/src_port_strerror.c +1 -1
  490. data/ext/pg_query/src_port_strlcpy.c +79 -0
  491. data/lib/pg_query/fingerprint.rb +2 -3
  492. data/lib/pg_query/node.rb +16 -11
  493. data/lib/pg_query/parse.rb +1 -1
  494. data/lib/pg_query/pg_query_pb.rb +166 -3191
  495. data/lib/pg_query/treewalker.rb +23 -5
  496. data/lib/pg_query/version.rb +1 -1
  497. metadata +432 -380
  498. data/ext/pg_query/guc-file.c +0 -0
  499. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  500. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  501. data/ext/pg_query/include/commands/variable.h +0 -38
  502. data/ext/pg_query/include/common/ip.h +0 -31
  503. data/ext/pg_query/include/getaddrinfo.h +0 -162
  504. data/ext/pg_query/include/kwlist_d.h +0 -1095
  505. data/ext/pg_query/include/parser/gram.h +0 -1101
  506. data/ext/pg_query/include/pg_config_os.h +0 -8
  507. data/ext/pg_query/include/portability/instr_time.h +0 -256
  508. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  509. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  510. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  511. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  512. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  513. data/ext/pg_query/include/utils/dynahash.h +0 -20
  514. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  515. data/ext/pg_query/include/utils/pidfile.h +0 -56
  516. data/ext/pg_query/include/utils/ps_status.h +0 -25
  517. data/ext/pg_query/include/utils/rls.h +0 -50
  518. data/ext/pg_query/include/utils/tzparser.h +0 -39
  519. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  520. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  521. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  522. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  523. data/ext/pg_query/src_common_pg_prng.c +0 -152
  524. data/ext/pg_query/src_common_string.c +0 -92
  525. data/ext/pg_query/src_port_pgsleep.c +0 -69
  526. data/ext/pg_query/src_port_strnlen.c +0 -39
  527. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  528. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
  529. /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
  530. /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
  531. /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +0 -0
@@ -4,7 +4,7 @@
4
4
  * definitions for query plan nodes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/nodes/plannodes.h
@@ -16,6 +16,7 @@
16
16
 
17
17
  #include "access/sdir.h"
18
18
  #include "access/stratnum.h"
19
+ #include "common/relpath.h"
19
20
  #include "lib/stringinfo.h"
20
21
  #include "nodes/bitmapset.h"
21
22
  #include "nodes/lockoptions.h"
@@ -38,10 +39,15 @@
38
39
  * nodes; in such cases, commandType == CMD_UTILITY, the statement itself
39
40
  * is in the utilityStmt field, and the rest of the struct is mostly dummy.
40
41
  * (We do use canSetTag, stmt_location, stmt_len, and possibly queryId.)
42
+ *
43
+ * PlannedStmt, as well as all varieties of Plan, do not support equal(),
44
+ * not because it's not sensible but because we currently have no need.
41
45
  * ----------------
42
46
  */
43
47
  typedef struct PlannedStmt
44
48
  {
49
+ pg_node_attr(no_equal, no_query_jumble)
50
+
45
51
  NodeTag type;
46
52
 
47
53
  CmdType commandType; /* select|insert|update|delete|merge|utility */
@@ -66,6 +72,9 @@ typedef struct PlannedStmt
66
72
 
67
73
  List *rtable; /* list of RangeTblEntry nodes */
68
74
 
75
+ List *permInfos; /* list of RTEPermissionInfo nodes for rtable
76
+ * entries needing one */
77
+
69
78
  /* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */
70
79
  List *resultRelations; /* integer list of RT indexes, or NIL */
71
80
 
@@ -110,6 +119,8 @@ typedef struct PlannedStmt
110
119
  */
111
120
  typedef struct Plan
112
121
  {
122
+ pg_node_attr(abstract, no_equal, no_query_jumble)
123
+
113
124
  NodeTag type;
114
125
 
115
126
  /*
@@ -205,11 +216,12 @@ typedef struct ProjectSet
205
216
  * Apply rows produced by outer plan to result table(s),
206
217
  * by inserting, updating, or deleting.
207
218
  *
208
- * If the originally named target table is a partitioned table, both
209
- * nominalRelation and rootRelation contain the RT index of the partition
210
- * root, which is not otherwise mentioned in the plan. Otherwise rootRelation
211
- * is zero. However, nominalRelation will always be set, as it's the rel that
212
- * EXPLAIN should claim is the INSERT/UPDATE/DELETE/MERGE target.
219
+ * If the originally named target table is a partitioned table or inheritance
220
+ * tree, both nominalRelation and rootRelation contain the RT index of the
221
+ * partition root or appendrel RTE, which is not otherwise mentioned in the
222
+ * plan. Otherwise rootRelation is zero. However, nominalRelation will
223
+ * always be set, as it's the rel that EXPLAIN should claim is the
224
+ * INSERT/UPDATE/DELETE/MERGE target.
213
225
  *
214
226
  * Note that rowMarks and epqParam are presumed to be valid for all the
215
227
  * table(s); they can't contain any info that varies across tables.
@@ -221,7 +233,7 @@ typedef struct ModifyTable
221
233
  CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
222
234
  bool canSetTag; /* do we set the command tag/es_processed? */
223
235
  Index nominalRelation; /* Parent RT index for use of EXPLAIN */
224
- Index rootRelation; /* Root RT index, if target is partitioned */
236
+ Index rootRelation; /* Root RT index, if partitioned/inherited */
225
237
  bool partColsUpdated; /* some part key in hierarchy updated? */
226
238
  List *resultRelations; /* integer list of RT indexes */
227
239
  List *updateColnosLists; /* per-target-table update_colnos lists */
@@ -274,14 +286,29 @@ typedef struct Append
274
286
  typedef struct MergeAppend
275
287
  {
276
288
  Plan plan;
277
- Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
289
+
290
+ /* RTIs of appendrel(s) formed by this node */
291
+ Bitmapset *apprelids;
292
+
278
293
  List *mergeplans;
294
+
279
295
  /* these fields are just like the sort-key info in struct Sort: */
280
- int numCols; /* number of sort-key columns */
281
- AttrNumber *sortColIdx; /* their indexes in the target list */
282
- Oid *sortOperators; /* OIDs of operators to sort them by */
283
- Oid *collations; /* OIDs of collations */
284
- bool *nullsFirst; /* NULLS FIRST/LAST directions */
296
+
297
+ /* number of sort-key columns */
298
+ int numCols;
299
+
300
+ /* their indexes in the target list */
301
+ AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
302
+
303
+ /* OIDs of operators to sort them by */
304
+ Oid *sortOperators pg_node_attr(array_size(numCols));
305
+
306
+ /* OIDs of collations */
307
+ Oid *collations pg_node_attr(array_size(numCols));
308
+
309
+ /* NULLS FIRST/LAST directions */
310
+ bool *nullsFirst pg_node_attr(array_size(numCols));
311
+
285
312
  /* Info for run-time subplan pruning; NULL if we're not doing that */
286
313
  struct PartitionPruneInfo *part_prune_info;
287
314
  } MergeAppend;
@@ -297,14 +324,24 @@ typedef struct MergeAppend
297
324
  typedef struct RecursiveUnion
298
325
  {
299
326
  Plan plan;
300
- int wtParam; /* ID of Param representing work table */
327
+
328
+ /* ID of Param representing work table */
329
+ int wtParam;
330
+
301
331
  /* Remaining fields are zero/null in UNION ALL case */
302
- int numCols; /* number of columns to check for
303
- * duplicate-ness */
304
- AttrNumber *dupColIdx; /* their indexes in the target list */
305
- Oid *dupOperators; /* equality operators to compare with */
306
- Oid *dupCollations;
307
- long numGroups; /* estimated number of groups in input */
332
+
333
+ /* number of columns to check for duplicate-ness */
334
+ int numCols;
335
+
336
+ /* their indexes in the target list */
337
+ AttrNumber *dupColIdx pg_node_attr(array_size(numCols));
338
+
339
+ /* equality operators to compare with */
340
+ Oid *dupOperators pg_node_attr(array_size(numCols));
341
+ Oid *dupCollations pg_node_attr(array_size(numCols));
342
+
343
+ /* estimated number of groups in input */
344
+ long numGroups;
308
345
  } RecursiveUnion;
309
346
 
310
347
  /* ----------------
@@ -339,10 +376,14 @@ typedef struct BitmapOr
339
376
  /*
340
377
  * ==========
341
378
  * Scan nodes
379
+ *
380
+ * Scan is an abstract type that all relation scan plan types inherit from.
342
381
  * ==========
343
382
  */
344
383
  typedef struct Scan
345
384
  {
385
+ pg_node_attr(abstract)
386
+
346
387
  Plan plan;
347
388
  Index scanrelid; /* relid is index into the range table */
348
389
  } Scan;
@@ -652,6 +693,7 @@ typedef struct WorkTableScan
652
693
  * When the plan node represents a foreign join, scan.scanrelid is zero and
653
694
  * fs_relids must be consulted to identify the join relation. (fs_relids
654
695
  * is valid for simple scans as well, but will always match scan.scanrelid.)
696
+ * fs_relids includes outer joins; fs_base_relids does not.
655
697
  *
656
698
  * If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan
657
699
  * node to perform the UPDATE or DELETE operation directly in the remote
@@ -666,12 +708,15 @@ typedef struct ForeignScan
666
708
  Scan scan;
667
709
  CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
668
710
  Index resultRelation; /* direct modification target's RT index */
711
+ Oid checkAsUser; /* user to perform the scan as; 0 means to
712
+ * check as current user */
669
713
  Oid fs_server; /* OID of foreign server */
670
714
  List *fdw_exprs; /* expressions that FDW may evaluate */
671
715
  List *fdw_private; /* private data for FDW */
672
716
  List *fdw_scan_tlist; /* optional tlist describing scan tuple */
673
717
  List *fdw_recheck_quals; /* original quals not in scan.plan.qual */
674
- Bitmapset *fs_relids; /* RTIs generated by this scan */
718
+ Bitmapset *fs_relids; /* base+OJ RTIs generated by this scan */
719
+ Bitmapset *fs_base_relids; /* base RTIs generated by this scan */
675
720
  bool fsSystemCol; /* true if any "system column" is needed */
676
721
  } ForeignScan;
677
722
 
@@ -700,6 +745,12 @@ typedef struct CustomScan
700
745
  List *custom_private; /* private data for custom code */
701
746
  List *custom_scan_tlist; /* optional tlist describing scan tuple */
702
747
  Bitmapset *custom_relids; /* RTIs generated by this scan */
748
+
749
+ /*
750
+ * NOTE: The method field of CustomScan is required to be a pointer to a
751
+ * static table of callback functions. So we don't copy the table itself,
752
+ * just reference the original one.
753
+ */
703
754
  const struct CustomScanMethods *methods;
704
755
  } CustomScan;
705
756
 
@@ -733,6 +784,8 @@ typedef struct CustomScan
733
784
  */
734
785
  typedef struct Join
735
786
  {
787
+ pg_node_attr(abstract)
788
+
736
789
  Plan plan;
737
790
  JoinType jointype;
738
791
  bool inner_unique;
@@ -758,6 +811,8 @@ typedef struct NestLoop
758
811
 
759
812
  typedef struct NestLoopParam
760
813
  {
814
+ pg_node_attr(no_equal, no_query_jumble)
815
+
761
816
  NodeTag type;
762
817
  int paramno; /* number of the PARAM_EXEC Param to set */
763
818
  Var *paramval; /* outer-relation Var to assign to Param */
@@ -777,13 +832,26 @@ typedef struct NestLoopParam
777
832
  typedef struct MergeJoin
778
833
  {
779
834
  Join join;
780
- bool skip_mark_restore; /* Can we skip mark/restore calls? */
781
- List *mergeclauses; /* mergeclauses as expression trees */
835
+
836
+ /* Can we skip mark/restore calls? */
837
+ bool skip_mark_restore;
838
+
839
+ /* mergeclauses as expression trees */
840
+ List *mergeclauses;
841
+
782
842
  /* these are arrays, but have the same length as the mergeclauses list: */
783
- Oid *mergeFamilies; /* per-clause OIDs of btree opfamilies */
784
- Oid *mergeCollations; /* per-clause OIDs of collations */
785
- int *mergeStrategies; /* per-clause ordering (ASC or DESC) */
786
- bool *mergeNullsFirst; /* per-clause nulls ordering */
843
+
844
+ /* per-clause OIDs of btree opfamilies */
845
+ Oid *mergeFamilies pg_node_attr(array_size(mergeclauses));
846
+
847
+ /* per-clause OIDs of collations */
848
+ Oid *mergeCollations pg_node_attr(array_size(mergeclauses));
849
+
850
+ /* per-clause ordering (ASC or DESC) */
851
+ int *mergeStrategies pg_node_attr(array_size(mergeclauses));
852
+
853
+ /* per-clause nulls ordering */
854
+ bool *mergeNullsFirst pg_node_attr(array_size(mergeclauses));
787
855
  } MergeJoin;
788
856
 
789
857
  /* ----------------
@@ -821,21 +889,38 @@ typedef struct Memoize
821
889
  {
822
890
  Plan plan;
823
891
 
824
- int numKeys; /* size of the two arrays below */
825
-
826
- Oid *hashOperators; /* hash operators for each key */
827
- Oid *collations; /* collations for each key */
828
- List *param_exprs; /* cache keys in the form of exprs containing
829
- * parameters */
830
- bool singlerow; /* true if the cache entry should be marked as
831
- * complete after we store the first tuple in
832
- * it. */
833
- bool binary_mode; /* true when cache key should be compared bit
834
- * by bit, false when using hash equality ops */
835
- uint32 est_entries; /* The maximum number of entries that the
836
- * planner expects will fit in the cache, or 0
837
- * if unknown */
838
- Bitmapset *keyparamids; /* paramids from param_exprs */
892
+ /* size of the two arrays below */
893
+ int numKeys;
894
+
895
+ /* hash operators for each key */
896
+ Oid *hashOperators pg_node_attr(array_size(numKeys));
897
+
898
+ /* collations for each key */
899
+ Oid *collations pg_node_attr(array_size(numKeys));
900
+
901
+ /* cache keys in the form of exprs containing parameters */
902
+ List *param_exprs;
903
+
904
+ /*
905
+ * true if the cache entry should be marked as complete after we store the
906
+ * first tuple in it.
907
+ */
908
+ bool singlerow;
909
+
910
+ /*
911
+ * true when cache key should be compared bit by bit, false when using
912
+ * hash equality ops
913
+ */
914
+ bool binary_mode;
915
+
916
+ /*
917
+ * The maximum number of entries that the planner expects will fit in the
918
+ * cache, or 0 if unknown
919
+ */
920
+ uint32 est_entries;
921
+
922
+ /* paramids from param_exprs */
923
+ Bitmapset *keyparamids;
839
924
  } Memoize;
840
925
 
841
926
  /* ----------------
@@ -845,11 +930,21 @@ typedef struct Memoize
845
930
  typedef struct Sort
846
931
  {
847
932
  Plan plan;
848
- int numCols; /* number of sort-key columns */
849
- AttrNumber *sortColIdx; /* their indexes in the target list */
850
- Oid *sortOperators; /* OIDs of operators to sort them by */
851
- Oid *collations; /* OIDs of collations */
852
- bool *nullsFirst; /* NULLS FIRST/LAST directions */
933
+
934
+ /* number of sort-key columns */
935
+ int numCols;
936
+
937
+ /* their indexes in the target list */
938
+ AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
939
+
940
+ /* OIDs of operators to sort them by */
941
+ Oid *sortOperators pg_node_attr(array_size(numCols));
942
+
943
+ /* OIDs of collations */
944
+ Oid *collations pg_node_attr(array_size(numCols));
945
+
946
+ /* NULLS FIRST/LAST directions */
947
+ bool *nullsFirst pg_node_attr(array_size(numCols));
853
948
  } Sort;
854
949
 
855
950
  /* ----------------
@@ -871,10 +966,16 @@ typedef struct IncrementalSort
871
966
  typedef struct Group
872
967
  {
873
968
  Plan plan;
874
- int numCols; /* number of grouping columns */
875
- AttrNumber *grpColIdx; /* their indexes in the target list */
876
- Oid *grpOperators; /* equality operators to compare with */
877
- Oid *grpCollations;
969
+
970
+ /* number of grouping columns */
971
+ int numCols;
972
+
973
+ /* their indexes in the target list */
974
+ AttrNumber *grpColIdx pg_node_attr(array_size(numCols));
975
+
976
+ /* equality operators to compare with */
977
+ Oid *grpOperators pg_node_attr(array_size(numCols));
978
+ Oid *grpCollations pg_node_attr(array_size(numCols));
878
979
  } Group;
879
980
 
880
981
  /* ---------------
@@ -894,18 +995,39 @@ typedef struct Group
894
995
  typedef struct Agg
895
996
  {
896
997
  Plan plan;
897
- AggStrategy aggstrategy; /* basic strategy, see nodes.h */
898
- AggSplit aggsplit; /* agg-splitting mode, see nodes.h */
899
- int numCols; /* number of grouping columns */
900
- AttrNumber *grpColIdx; /* their indexes in the target list */
901
- Oid *grpOperators; /* equality operators to compare with */
902
- Oid *grpCollations;
903
- long numGroups; /* estimated number of groups in input */
904
- uint64 transitionSpace; /* for pass-by-ref transition data */
905
- Bitmapset *aggParams; /* IDs of Params used in Aggref inputs */
998
+
999
+ /* basic strategy, see nodes.h */
1000
+ AggStrategy aggstrategy;
1001
+
1002
+ /* agg-splitting mode, see nodes.h */
1003
+ AggSplit aggsplit;
1004
+
1005
+ /* number of grouping columns */
1006
+ int numCols;
1007
+
1008
+ /* their indexes in the target list */
1009
+ AttrNumber *grpColIdx pg_node_attr(array_size(numCols));
1010
+
1011
+ /* equality operators to compare with */
1012
+ Oid *grpOperators pg_node_attr(array_size(numCols));
1013
+ Oid *grpCollations pg_node_attr(array_size(numCols));
1014
+
1015
+ /* estimated number of groups in input */
1016
+ long numGroups;
1017
+
1018
+ /* for pass-by-ref transition data */
1019
+ uint64 transitionSpace;
1020
+
1021
+ /* IDs of Params used in Aggref inputs */
1022
+ Bitmapset *aggParams;
1023
+
906
1024
  /* Note: planner provides numGroups & aggParams only in HASHED/MIXED case */
907
- List *groupingSets; /* grouping sets to use */
908
- List *chain; /* chained Agg/Sort nodes */
1025
+
1026
+ /* grouping sets to use */
1027
+ List *groupingSets;
1028
+
1029
+ /* chained Agg/Sort nodes */
1030
+ List *chain;
909
1031
  } Agg;
910
1032
 
911
1033
  /* ----------------
@@ -915,28 +1037,71 @@ typedef struct Agg
915
1037
  typedef struct WindowAgg
916
1038
  {
917
1039
  Plan plan;
918
- Index winref; /* ID referenced by window functions */
919
- int partNumCols; /* number of columns in partition clause */
920
- AttrNumber *partColIdx; /* their indexes in the target list */
921
- Oid *partOperators; /* equality operators for partition columns */
922
- Oid *partCollations; /* collations for partition columns */
923
- int ordNumCols; /* number of columns in ordering clause */
924
- AttrNumber *ordColIdx; /* their indexes in the target list */
925
- Oid *ordOperators; /* equality operators for ordering columns */
926
- Oid *ordCollations; /* collations for ordering columns */
927
- int frameOptions; /* frame_clause options, see WindowDef */
928
- Node *startOffset; /* expression for starting bound, if any */
929
- Node *endOffset; /* expression for ending bound, if any */
930
- List *runCondition; /* qual to help short-circuit execution */
931
- List *runConditionOrig; /* runCondition for display in EXPLAIN */
1040
+
1041
+ /* ID referenced by window functions */
1042
+ Index winref;
1043
+
1044
+ /* number of columns in partition clause */
1045
+ int partNumCols;
1046
+
1047
+ /* their indexes in the target list */
1048
+ AttrNumber *partColIdx pg_node_attr(array_size(partNumCols));
1049
+
1050
+ /* equality operators for partition columns */
1051
+ Oid *partOperators pg_node_attr(array_size(partNumCols));
1052
+
1053
+ /* collations for partition columns */
1054
+ Oid *partCollations pg_node_attr(array_size(partNumCols));
1055
+
1056
+ /* number of columns in ordering clause */
1057
+ int ordNumCols;
1058
+
1059
+ /* their indexes in the target list */
1060
+ AttrNumber *ordColIdx pg_node_attr(array_size(ordNumCols));
1061
+
1062
+ /* equality operators for ordering columns */
1063
+ Oid *ordOperators pg_node_attr(array_size(ordNumCols));
1064
+
1065
+ /* collations for ordering columns */
1066
+ Oid *ordCollations pg_node_attr(array_size(ordNumCols));
1067
+
1068
+ /* frame_clause options, see WindowDef */
1069
+ int frameOptions;
1070
+
1071
+ /* expression for starting bound, if any */
1072
+ Node *startOffset;
1073
+
1074
+ /* expression for ending bound, if any */
1075
+ Node *endOffset;
1076
+
1077
+ /* qual to help short-circuit execution */
1078
+ List *runCondition;
1079
+
1080
+ /* runCondition for display in EXPLAIN */
1081
+ List *runConditionOrig;
1082
+
932
1083
  /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
933
- Oid startInRangeFunc; /* in_range function for startOffset */
934
- Oid endInRangeFunc; /* in_range function for endOffset */
935
- Oid inRangeColl; /* collation for in_range tests */
936
- bool inRangeAsc; /* use ASC sort order for in_range tests? */
937
- bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
938
- bool topWindow; /* false for all apart from the WindowAgg
939
- * that's closest to the root of the plan */
1084
+
1085
+ /* in_range function for startOffset */
1086
+ Oid startInRangeFunc;
1087
+
1088
+ /* in_range function for endOffset */
1089
+ Oid endInRangeFunc;
1090
+
1091
+ /* collation for in_range tests */
1092
+ Oid inRangeColl;
1093
+
1094
+ /* use ASC sort order for in_range tests? */
1095
+ bool inRangeAsc;
1096
+
1097
+ /* nulls sort first for in_range tests? */
1098
+ bool inRangeNullsFirst;
1099
+
1100
+ /*
1101
+ * false for all apart from the WindowAgg that's closest to the root of
1102
+ * the plan
1103
+ */
1104
+ bool topWindow;
940
1105
  } WindowAgg;
941
1106
 
942
1107
  /* ----------------
@@ -946,10 +1111,18 @@ typedef struct WindowAgg
946
1111
  typedef struct Unique
947
1112
  {
948
1113
  Plan plan;
949
- int numCols; /* number of columns to check for uniqueness */
950
- AttrNumber *uniqColIdx; /* their indexes in the target list */
951
- Oid *uniqOperators; /* equality operators to compare with */
952
- Oid *uniqCollations; /* collations for equality comparisons */
1114
+
1115
+ /* number of columns to check for uniqueness */
1116
+ int numCols;
1117
+
1118
+ /* their indexes in the target list */
1119
+ AttrNumber *uniqColIdx pg_node_attr(array_size(numCols));
1120
+
1121
+ /* equality operators to compare with */
1122
+ Oid *uniqOperators pg_node_attr(array_size(numCols));
1123
+
1124
+ /* collations for equality comparisons */
1125
+ Oid *uniqCollations pg_node_attr(array_size(numCols));
953
1126
  } Unique;
954
1127
 
955
1128
  /* ------------
@@ -981,16 +1154,35 @@ typedef struct Gather
981
1154
  typedef struct GatherMerge
982
1155
  {
983
1156
  Plan plan;
984
- int num_workers; /* planned number of worker processes */
985
- int rescan_param; /* ID of Param that signals a rescan, or -1 */
1157
+
1158
+ /* planned number of worker processes */
1159
+ int num_workers;
1160
+
1161
+ /* ID of Param that signals a rescan, or -1 */
1162
+ int rescan_param;
1163
+
986
1164
  /* remaining fields are just like the sort-key info in struct Sort */
987
- int numCols; /* number of sort-key columns */
988
- AttrNumber *sortColIdx; /* their indexes in the target list */
989
- Oid *sortOperators; /* OIDs of operators to sort them by */
990
- Oid *collations; /* OIDs of collations */
991
- bool *nullsFirst; /* NULLS FIRST/LAST directions */
992
- Bitmapset *initParam; /* param id's of initplans which are referred
993
- * at gather merge or one of it's child node */
1165
+
1166
+ /* number of sort-key columns */
1167
+ int numCols;
1168
+
1169
+ /* their indexes in the target list */
1170
+ AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
1171
+
1172
+ /* OIDs of operators to sort them by */
1173
+ Oid *sortOperators pg_node_attr(array_size(numCols));
1174
+
1175
+ /* OIDs of collations */
1176
+ Oid *collations pg_node_attr(array_size(numCols));
1177
+
1178
+ /* NULLS FIRST/LAST directions */
1179
+ bool *nullsFirst pg_node_attr(array_size(numCols));
1180
+
1181
+ /*
1182
+ * param id's of initplans which are referred at gather merge or one of
1183
+ * it's child node
1184
+ */
1185
+ Bitmapset *initParam;
994
1186
  } GatherMerge;
995
1187
 
996
1188
  /* ----------------
@@ -1024,16 +1216,31 @@ typedef struct Hash
1024
1216
  typedef struct SetOp
1025
1217
  {
1026
1218
  Plan plan;
1027
- SetOpCmd cmd; /* what to do, see nodes.h */
1028
- SetOpStrategy strategy; /* how to do it, see nodes.h */
1029
- int numCols; /* number of columns to check for
1030
- * duplicate-ness */
1031
- AttrNumber *dupColIdx; /* their indexes in the target list */
1032
- Oid *dupOperators; /* equality operators to compare with */
1033
- Oid *dupCollations;
1034
- AttrNumber flagColIdx; /* where is the flag column, if any */
1035
- int firstFlag; /* flag value for first input relation */
1036
- long numGroups; /* estimated number of groups in input */
1219
+
1220
+ /* what to do, see nodes.h */
1221
+ SetOpCmd cmd;
1222
+
1223
+ /* how to do it, see nodes.h */
1224
+ SetOpStrategy strategy;
1225
+
1226
+ /* number of columns to check for duplicate-ness */
1227
+ int numCols;
1228
+
1229
+ /* their indexes in the target list */
1230
+ AttrNumber *dupColIdx pg_node_attr(array_size(numCols));
1231
+
1232
+ /* equality operators to compare with */
1233
+ Oid *dupOperators pg_node_attr(array_size(numCols));
1234
+ Oid *dupCollations pg_node_attr(array_size(numCols));
1235
+
1236
+ /* where is the flag column, if any */
1237
+ AttrNumber flagColIdx;
1238
+
1239
+ /* flag value for first input relation */
1240
+ int firstFlag;
1241
+
1242
+ /* estimated number of groups in input */
1243
+ long numGroups;
1037
1244
  } SetOp;
1038
1245
 
1039
1246
  /* ----------------
@@ -1062,13 +1269,27 @@ typedef struct LockRows
1062
1269
  typedef struct Limit
1063
1270
  {
1064
1271
  Plan plan;
1065
- Node *limitOffset; /* OFFSET parameter, or NULL if none */
1066
- Node *limitCount; /* COUNT parameter, or NULL if none */
1067
- LimitOption limitOption; /* limit type */
1068
- int uniqNumCols; /* number of columns to check for similarity */
1069
- AttrNumber *uniqColIdx; /* their indexes in the target list */
1070
- Oid *uniqOperators; /* equality operators to compare with */
1071
- Oid *uniqCollations; /* collations for equality comparisons */
1272
+
1273
+ /* OFFSET parameter, or NULL if none */
1274
+ Node *limitOffset;
1275
+
1276
+ /* COUNT parameter, or NULL if none */
1277
+ Node *limitCount;
1278
+
1279
+ /* limit type */
1280
+ LimitOption limitOption;
1281
+
1282
+ /* number of columns to check for similarity */
1283
+ int uniqNumCols;
1284
+
1285
+ /* their indexes in the target list */
1286
+ AttrNumber *uniqColIdx pg_node_attr(array_size(uniqNumCols));
1287
+
1288
+ /* equality operators to compare with */
1289
+ Oid *uniqOperators pg_node_attr(array_size(uniqNumCols));
1290
+
1291
+ /* collations for equality comparisons */
1292
+ Oid *uniqCollations pg_node_attr(array_size(uniqNumCols));
1072
1293
  } Limit;
1073
1294
 
1074
1295
 
@@ -1089,7 +1310,7 @@ typedef struct Limit
1089
1310
  * doing a separate remote query to lock each selected row is usually pretty
1090
1311
  * unappealing, so early locking remains a credible design choice for FDWs.
1091
1312
  *
1092
- * When doing UPDATE, DELETE, or SELECT FOR UPDATE/SHARE, we have to uniquely
1313
+ * When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we have to uniquely
1093
1314
  * identify all the source rows, not only those from the target relations, so
1094
1315
  * that we can perform EvalPlanQual rechecking at need. For plain tables we
1095
1316
  * can just fetch the TID, much as for a target relation; this case is
@@ -1118,7 +1339,7 @@ typedef enum RowMarkType
1118
1339
  * PlanRowMark -
1119
1340
  * plan-time representation of FOR [KEY] UPDATE/SHARE clauses
1120
1341
  *
1121
- * When doing UPDATE, DELETE, or SELECT FOR UPDATE/SHARE, we create a separate
1342
+ * When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we create a separate
1122
1343
  * PlanRowMark node for each non-target relation in the query. Relations that
1123
1344
  * are not specified as FOR UPDATE/SHARE are marked ROW_MARK_REFERENCE (if
1124
1345
  * regular tables or supported foreign tables) or ROW_MARK_COPY (if not).
@@ -1154,6 +1375,8 @@ typedef enum RowMarkType
1154
1375
  */
1155
1376
  typedef struct PlanRowMark
1156
1377
  {
1378
+ pg_node_attr(no_equal, no_query_jumble)
1379
+
1157
1380
  NodeTag type;
1158
1381
  Index rti; /* range table index of markable relation */
1159
1382
  Index prti; /* range table index of parent relation */
@@ -1198,6 +1421,8 @@ typedef struct PlanRowMark
1198
1421
  */
1199
1422
  typedef struct PartitionPruneInfo
1200
1423
  {
1424
+ pg_node_attr(no_equal, no_query_jumble)
1425
+
1201
1426
  NodeTag type;
1202
1427
  List *prune_infos;
1203
1428
  Bitmapset *other_subplans;
@@ -1222,14 +1447,27 @@ typedef struct PartitionPruneInfo
1222
1447
  */
1223
1448
  typedef struct PartitionedRelPruneInfo
1224
1449
  {
1450
+ pg_node_attr(no_equal, no_query_jumble)
1451
+
1225
1452
  NodeTag type;
1226
- Index rtindex; /* RT index of partition rel for this level */
1227
- Bitmapset *present_parts; /* Indexes of all partitions which subplans or
1228
- * subparts are present for */
1229
- int nparts; /* Length of the following arrays: */
1230
- int *subplan_map; /* subplan index by partition index, or -1 */
1231
- int *subpart_map; /* subpart index by partition index, or -1 */
1232
- Oid *relid_map; /* relation OID by partition index, or 0 */
1453
+
1454
+ /* RT index of partition rel for this level */
1455
+ Index rtindex;
1456
+
1457
+ /* Indexes of all partitions which subplans or subparts are present for */
1458
+ Bitmapset *present_parts;
1459
+
1460
+ /* Length of the following arrays: */
1461
+ int nparts;
1462
+
1463
+ /* subplan index by partition index, or -1 */
1464
+ int *subplan_map pg_node_attr(array_size(nparts));
1465
+
1466
+ /* subpart index by partition index, or -1 */
1467
+ int *subpart_map pg_node_attr(array_size(nparts));
1468
+
1469
+ /* relation OID by partition index, or 0 */
1470
+ Oid *relid_map pg_node_attr(array_size(nparts));
1233
1471
 
1234
1472
  /*
1235
1473
  * initial_pruning_steps shows how to prune during executor startup (i.e.,
@@ -1239,8 +1477,9 @@ typedef struct PartitionedRelPruneInfo
1239
1477
  */
1240
1478
  List *initial_pruning_steps; /* List of PartitionPruneStep */
1241
1479
  List *exec_pruning_steps; /* List of PartitionPruneStep */
1242
- Bitmapset *execparamids; /* All PARAM_EXEC Param IDs in
1243
- * exec_pruning_steps */
1480
+
1481
+ /* All PARAM_EXEC Param IDs in exec_pruning_steps */
1482
+ Bitmapset *execparamids;
1244
1483
  } PartitionedRelPruneInfo;
1245
1484
 
1246
1485
  /*
@@ -1251,6 +1490,8 @@ typedef struct PartitionedRelPruneInfo
1251
1490
  */
1252
1491
  typedef struct PartitionPruneStep
1253
1492
  {
1493
+ pg_node_attr(abstract, no_equal, no_query_jumble)
1494
+
1254
1495
  NodeTag type;
1255
1496
  int step_id;
1256
1497
  } PartitionPruneStep;
@@ -1324,6 +1565,8 @@ typedef struct PartitionPruneStepCombine
1324
1565
  */
1325
1566
  typedef struct PlanInvalItem
1326
1567
  {
1568
+ pg_node_attr(no_equal, no_query_jumble)
1569
+
1327
1570
  NodeTag type;
1328
1571
  int cacheId; /* a syscache ID, see utils/syscache.h */
1329
1572
  uint32 hashValue; /* hash value of object's cache lookup key */