pg_query 2.0.3 → 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 (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -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 +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  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 +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  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 +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -4,7 +4,7 @@
4
4
  * definitions for query plan nodes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, 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,9 +16,11 @@
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"
23
+ #include "nodes/parsenodes.h"
22
24
  #include "nodes/primnodes.h"
23
25
 
24
26
 
@@ -37,13 +39,18 @@
37
39
  * nodes; in such cases, commandType == CMD_UTILITY, the statement itself
38
40
  * is in the utilityStmt field, and the rest of the struct is mostly dummy.
39
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.
40
45
  * ----------------
41
46
  */
42
47
  typedef struct PlannedStmt
43
48
  {
49
+ pg_node_attr(no_equal, no_query_jumble)
50
+
44
51
  NodeTag type;
45
52
 
46
- CmdType commandType; /* select|insert|update|delete|utility */
53
+ CmdType commandType; /* select|insert|update|delete|merge|utility */
47
54
 
48
55
  uint64 queryId; /* query identifier (copied from Query) */
49
56
 
@@ -65,14 +72,11 @@ typedef struct PlannedStmt
65
72
 
66
73
  List *rtable; /* list of RangeTblEntry nodes */
67
74
 
68
- /* rtable indexes of target relations for INSERT/UPDATE/DELETE */
69
- List *resultRelations; /* integer list of RT indexes, or NIL */
75
+ List *permInfos; /* list of RTEPermissionInfo nodes for rtable
76
+ * entries needing one */
70
77
 
71
- /*
72
- * rtable indexes of partitioned table roots that are UPDATE/DELETE
73
- * targets; needed for trigger firing.
74
- */
75
- List *rootResultRelations;
78
+ /* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */
79
+ List *resultRelations; /* integer list of RT indexes, or NIL */
76
80
 
77
81
  List *appendRelations; /* list of AppendRelInfo nodes */
78
82
 
@@ -115,6 +119,8 @@ typedef struct PlannedStmt
115
119
  */
116
120
  typedef struct Plan
117
121
  {
122
+ pg_node_attr(abstract, no_equal, no_query_jumble)
123
+
118
124
  NodeTag type;
119
125
 
120
126
  /*
@@ -126,7 +132,7 @@ typedef struct Plan
126
132
  /*
127
133
  * planner's estimate of result size of this plan step
128
134
  */
129
- double plan_rows; /* number of rows plan is expected to emit */
135
+ Cardinality plan_rows; /* number of rows plan is expected to emit */
130
136
  int plan_width; /* average row width in bytes */
131
137
 
132
138
  /*
@@ -135,6 +141,11 @@ typedef struct Plan
135
141
  bool parallel_aware; /* engage parallel-aware logic? */
136
142
  bool parallel_safe; /* OK to use as part of parallel plan? */
137
143
 
144
+ /*
145
+ * information needed for asynchronous execution
146
+ */
147
+ bool async_capable; /* engage asynchronous-capable logic? */
148
+
138
149
  /*
139
150
  * Common structural data for all Plan types.
140
151
  */
@@ -202,31 +213,30 @@ typedef struct ProjectSet
202
213
 
203
214
  /* ----------------
204
215
  * ModifyTable node -
205
- * Apply rows produced by subplan(s) to result table(s),
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 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
- * subplan(s); they can't contain any info that varies across subplans.
227
+ * table(s); they can't contain any info that varies across tables.
216
228
  * ----------------
217
229
  */
218
230
  typedef struct ModifyTable
219
231
  {
220
232
  Plan plan;
221
- CmdType operation; /* INSERT, UPDATE, or DELETE */
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 */
225
- bool partColsUpdated; /* some part key in hierarchy updated */
236
+ Index rootRelation; /* Root RT index, if partitioned/inherited */
237
+ bool partColsUpdated; /* some part key in hierarchy updated? */
226
238
  List *resultRelations; /* integer list of RT indexes */
227
- int resultRelIndex; /* index of first resultRel in plan's list */
228
- int rootResultRelIndex; /* index of the partitioned table root */
229
- List *plans; /* plan(s) producing source data */
239
+ List *updateColnosLists; /* per-target-table update_colnos lists */
230
240
  List *withCheckOptionLists; /* per-target-table WCO lists */
231
241
  List *returningLists; /* per-target-table RETURNING tlists */
232
242
  List *fdwPrivLists; /* per-target-table FDW private data lists */
@@ -235,10 +245,13 @@ typedef struct ModifyTable
235
245
  int epqParam; /* ID of Param for EvalPlanQual re-eval */
236
246
  OnConflictAction onConflictAction; /* ON CONFLICT action */
237
247
  List *arbiterIndexes; /* List of ON CONFLICT arbiter index OIDs */
238
- List *onConflictSet; /* SET for INSERT ON CONFLICT DO UPDATE */
248
+ List *onConflictSet; /* INSERT ON CONFLICT DO UPDATE targetlist */
249
+ List *onConflictCols; /* target column numbers for onConflictSet */
239
250
  Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */
240
251
  Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */
241
252
  List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
253
+ List *mergeActionLists; /* per-target-table lists of actions for
254
+ * MERGE */
242
255
  } ModifyTable;
243
256
 
244
257
  struct PartitionPruneInfo; /* forward reference to struct below */
@@ -253,6 +266,7 @@ typedef struct Append
253
266
  Plan plan;
254
267
  Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
255
268
  List *appendplans;
269
+ int nasyncplans; /* # of asynchronous plans */
256
270
 
257
271
  /*
258
272
  * All 'appendplans' preceding this index are non-partial plans. All
@@ -272,14 +286,29 @@ typedef struct Append
272
286
  typedef struct MergeAppend
273
287
  {
274
288
  Plan plan;
275
- Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
289
+
290
+ /* RTIs of appendrel(s) formed by this node */
291
+ Bitmapset *apprelids;
292
+
276
293
  List *mergeplans;
294
+
277
295
  /* these fields are just like the sort-key info in struct Sort: */
278
- int numCols; /* number of sort-key columns */
279
- AttrNumber *sortColIdx; /* their indexes in the target list */
280
- Oid *sortOperators; /* OIDs of operators to sort them by */
281
- Oid *collations; /* OIDs of collations */
282
- 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
+
283
312
  /* Info for run-time subplan pruning; NULL if we're not doing that */
284
313
  struct PartitionPruneInfo *part_prune_info;
285
314
  } MergeAppend;
@@ -295,14 +324,24 @@ typedef struct MergeAppend
295
324
  typedef struct RecursiveUnion
296
325
  {
297
326
  Plan plan;
298
- int wtParam; /* ID of Param representing work table */
327
+
328
+ /* ID of Param representing work table */
329
+ int wtParam;
330
+
299
331
  /* Remaining fields are zero/null in UNION ALL case */
300
- int numCols; /* number of columns to check for
301
- * duplicate-ness */
302
- AttrNumber *dupColIdx; /* their indexes in the target list */
303
- Oid *dupOperators; /* equality operators to compare with */
304
- Oid *dupCollations;
305
- 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;
306
345
  } RecursiveUnion;
307
346
 
308
347
  /* ----------------
@@ -337,10 +376,14 @@ typedef struct BitmapOr
337
376
  /*
338
377
  * ==========
339
378
  * Scan nodes
379
+ *
380
+ * Scan is an abstract type that all relation scan plan types inherit from.
340
381
  * ==========
341
382
  */
342
383
  typedef struct Scan
343
384
  {
385
+ pg_node_attr(abstract)
386
+
344
387
  Plan plan;
345
388
  Index scanrelid; /* relid is index into the range table */
346
389
  } Scan;
@@ -349,7 +392,10 @@ typedef struct Scan
349
392
  * sequential scan node
350
393
  * ----------------
351
394
  */
352
- typedef Scan SeqScan;
395
+ typedef struct SeqScan
396
+ {
397
+ Scan scan;
398
+ } SeqScan;
353
399
 
354
400
  /* ----------------
355
401
  * table sample scan node
@@ -418,14 +464,28 @@ typedef struct IndexScan
418
464
  * index-only scan, in which the data comes from the index not the heap.
419
465
  * Because of this, *all* Vars in the plan node's targetlist, qual, and
420
466
  * index expressions reference index columns and have varno = INDEX_VAR.
421
- * Hence we do not need separate indexqualorig and indexorderbyorig lists,
422
- * since their contents would be equivalent to indexqual and indexorderby.
467
+ *
468
+ * We could almost use indexqual directly against the index's output tuple
469
+ * when rechecking lossy index operators, but that won't work for quals on
470
+ * index columns that are not retrievable. Hence, recheckqual is needed
471
+ * for rechecks: it expresses the same condition as indexqual, but using
472
+ * only index columns that are retrievable. (We will not generate an
473
+ * index-only scan if this is not possible. An example is that if an
474
+ * index has table column "x" in a retrievable index column "ind1", plus
475
+ * an expression f(x) in a non-retrievable column "ind2", an indexable
476
+ * query on f(x) will use "ind2" in indexqual and f(ind1) in recheckqual.
477
+ * Without the "ind1" column, an index-only scan would be disallowed.)
478
+ *
479
+ * We don't currently need a recheckable equivalent of indexorderby,
480
+ * because we don't support lossy operators in index ORDER BY.
423
481
  *
424
482
  * To help EXPLAIN interpret the index Vars for display, we provide
425
483
  * indextlist, which represents the contents of the index as a targetlist
426
484
  * with one TLE per index column. Vars appearing in this list reference
427
485
  * the base table, and this is the only field in the plan node that may
428
- * contain such Vars.
486
+ * contain such Vars. Also, for the convenience of setrefs.c, TLEs in
487
+ * indextlist are marked as resjunk if they correspond to columns that
488
+ * the index AM cannot reconstruct.
429
489
  * ----------------
430
490
  */
431
491
  typedef struct IndexOnlyScan
@@ -433,6 +493,7 @@ typedef struct IndexOnlyScan
433
493
  Scan scan;
434
494
  Oid indexid; /* OID of index to scan */
435
495
  List *indexqual; /* list of index quals (usually OpExprs) */
496
+ List *recheckqual; /* index quals in recheckable form */
436
497
  List *indexorderby; /* list of index ORDER BY exprs */
437
498
  List *indextlist; /* TargetEntry list describing index's cols */
438
499
  ScanDirection indexorderdir; /* forward or backward or don't care */
@@ -493,6 +554,19 @@ typedef struct TidScan
493
554
  List *tidquals; /* qual(s) involving CTID = something */
494
555
  } TidScan;
495
556
 
557
+ /* ----------------
558
+ * tid range scan node
559
+ *
560
+ * tidrangequals is an implicitly AND'ed list of qual expressions of the form
561
+ * "CTID relop pseudoconstant", where relop is one of >,>=,<,<=.
562
+ * ----------------
563
+ */
564
+ typedef struct TidRangeScan
565
+ {
566
+ Scan scan;
567
+ List *tidrangequals; /* qual(s) involving CTID op something */
568
+ } TidRangeScan;
569
+
496
570
  /* ----------------
497
571
  * subquery scan node
498
572
  *
@@ -503,16 +577,28 @@ typedef struct TidScan
503
577
  * relation, we make this a descendant of Scan anyway for code-sharing
504
578
  * purposes.
505
579
  *
580
+ * SubqueryScanStatus caches the trivial_subqueryscan property of the node.
581
+ * SUBQUERY_SCAN_UNKNOWN means not yet determined. This is only used during
582
+ * planning.
583
+ *
506
584
  * Note: we store the sub-plan in the type-specific subplan field, not in
507
585
  * the generic lefttree field as you might expect. This is because we do
508
586
  * not want plan-tree-traversal routines to recurse into the subplan without
509
587
  * knowing that they are changing Query contexts.
510
588
  * ----------------
511
589
  */
590
+ typedef enum SubqueryScanStatus
591
+ {
592
+ SUBQUERY_SCAN_UNKNOWN,
593
+ SUBQUERY_SCAN_TRIVIAL,
594
+ SUBQUERY_SCAN_NONTRIVIAL
595
+ } SubqueryScanStatus;
596
+
512
597
  typedef struct SubqueryScan
513
598
  {
514
599
  Scan scan;
515
600
  Plan *subplan;
601
+ SubqueryScanStatus scanstatus;
516
602
  } SubqueryScan;
517
603
 
518
604
  /* ----------------
@@ -607,18 +693,30 @@ typedef struct WorkTableScan
607
693
  * When the plan node represents a foreign join, scan.scanrelid is zero and
608
694
  * fs_relids must be consulted to identify the join relation. (fs_relids
609
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.
697
+ *
698
+ * If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan
699
+ * node to perform the UPDATE or DELETE operation directly in the remote
700
+ * server, it sets 'operation' and 'resultRelation' to identify the operation
701
+ * type and target relation. Note that these fields are only set if the
702
+ * modification is performed *fully* remotely; otherwise, the modification is
703
+ * driven by a local ModifyTable node and 'operation' is left to CMD_SELECT.
610
704
  * ----------------
611
705
  */
612
706
  typedef struct ForeignScan
613
707
  {
614
708
  Scan scan;
615
709
  CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
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 */
616
713
  Oid fs_server; /* OID of foreign server */
617
714
  List *fdw_exprs; /* expressions that FDW may evaluate */
618
715
  List *fdw_private; /* private data for FDW */
619
716
  List *fdw_scan_tlist; /* optional tlist describing scan tuple */
620
717
  List *fdw_recheck_quals; /* original quals not in scan.plan.qual */
621
- 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 */
622
720
  bool fsSystemCol; /* true if any "system column" is needed */
623
721
  } ForeignScan;
624
722
 
@@ -647,6 +745,12 @@ typedef struct CustomScan
647
745
  List *custom_private; /* private data for custom code */
648
746
  List *custom_scan_tlist; /* optional tlist describing scan tuple */
649
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
+ */
650
754
  const struct CustomScanMethods *methods;
651
755
  } CustomScan;
652
756
 
@@ -680,6 +784,8 @@ typedef struct CustomScan
680
784
  */
681
785
  typedef struct Join
682
786
  {
787
+ pg_node_attr(abstract)
788
+
683
789
  Plan plan;
684
790
  JoinType jointype;
685
791
  bool inner_unique;
@@ -705,6 +811,8 @@ typedef struct NestLoop
705
811
 
706
812
  typedef struct NestLoopParam
707
813
  {
814
+ pg_node_attr(no_equal, no_query_jumble)
815
+
708
816
  NodeTag type;
709
817
  int paramno; /* number of the PARAM_EXEC Param to set */
710
818
  Var *paramval; /* outer-relation Var to assign to Param */
@@ -724,13 +832,26 @@ typedef struct NestLoopParam
724
832
  typedef struct MergeJoin
725
833
  {
726
834
  Join join;
727
- bool skip_mark_restore; /* Can we skip mark/restore calls? */
728
- 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
+
729
842
  /* these are arrays, but have the same length as the mergeclauses list: */
730
- Oid *mergeFamilies; /* per-clause OIDs of btree opfamilies */
731
- Oid *mergeCollations; /* per-clause OIDs of collations */
732
- int *mergeStrategies; /* per-clause ordering (ASC or DESC) */
733
- 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));
734
855
  } MergeJoin;
735
856
 
736
857
  /* ----------------
@@ -760,6 +881,48 @@ typedef struct Material
760
881
  Plan plan;
761
882
  } Material;
762
883
 
884
+ /* ----------------
885
+ * memoize node
886
+ * ----------------
887
+ */
888
+ typedef struct Memoize
889
+ {
890
+ Plan plan;
891
+
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;
924
+ } Memoize;
925
+
763
926
  /* ----------------
764
927
  * sort node
765
928
  * ----------------
@@ -767,11 +930,21 @@ typedef struct Material
767
930
  typedef struct Sort
768
931
  {
769
932
  Plan plan;
770
- int numCols; /* number of sort-key columns */
771
- AttrNumber *sortColIdx; /* their indexes in the target list */
772
- Oid *sortOperators; /* OIDs of operators to sort them by */
773
- Oid *collations; /* OIDs of collations */
774
- 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));
775
948
  } Sort;
776
949
 
777
950
  /* ----------------
@@ -793,10 +966,16 @@ typedef struct IncrementalSort
793
966
  typedef struct Group
794
967
  {
795
968
  Plan plan;
796
- int numCols; /* number of grouping columns */
797
- AttrNumber *grpColIdx; /* their indexes in the target list */
798
- Oid *grpOperators; /* equality operators to compare with */
799
- 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));
800
979
  } Group;
801
980
 
802
981
  /* ---------------
@@ -816,18 +995,39 @@ typedef struct Group
816
995
  typedef struct Agg
817
996
  {
818
997
  Plan plan;
819
- AggStrategy aggstrategy; /* basic strategy, see nodes.h */
820
- AggSplit aggsplit; /* agg-splitting mode, see nodes.h */
821
- int numCols; /* number of grouping columns */
822
- AttrNumber *grpColIdx; /* their indexes in the target list */
823
- Oid *grpOperators; /* equality operators to compare with */
824
- Oid *grpCollations;
825
- long numGroups; /* estimated number of groups in input */
826
- uint64 transitionSpace; /* for pass-by-ref transition data */
827
- 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
+
828
1024
  /* Note: planner provides numGroups & aggParams only in HASHED/MIXED case */
829
- List *groupingSets; /* grouping sets to use */
830
- List *chain; /* chained Agg/Sort nodes */
1025
+
1026
+ /* grouping sets to use */
1027
+ List *groupingSets;
1028
+
1029
+ /* chained Agg/Sort nodes */
1030
+ List *chain;
831
1031
  } Agg;
832
1032
 
833
1033
  /* ----------------
@@ -837,24 +1037,71 @@ typedef struct Agg
837
1037
  typedef struct WindowAgg
838
1038
  {
839
1039
  Plan plan;
840
- Index winref; /* ID referenced by window functions */
841
- int partNumCols; /* number of columns in partition clause */
842
- AttrNumber *partColIdx; /* their indexes in the target list */
843
- Oid *partOperators; /* equality operators for partition columns */
844
- Oid *partCollations; /* collations for partition columns */
845
- int ordNumCols; /* number of columns in ordering clause */
846
- AttrNumber *ordColIdx; /* their indexes in the target list */
847
- Oid *ordOperators; /* equality operators for ordering columns */
848
- Oid *ordCollations; /* collations for ordering columns */
849
- int frameOptions; /* frame_clause options, see WindowDef */
850
- Node *startOffset; /* expression for starting bound, if any */
851
- Node *endOffset; /* expression for ending bound, if any */
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
+
852
1083
  /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
853
- Oid startInRangeFunc; /* in_range function for startOffset */
854
- Oid endInRangeFunc; /* in_range function for endOffset */
855
- Oid inRangeColl; /* collation for in_range tests */
856
- bool inRangeAsc; /* use ASC sort order for in_range tests? */
857
- bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
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;
858
1105
  } WindowAgg;
859
1106
 
860
1107
  /* ----------------
@@ -864,10 +1111,18 @@ typedef struct WindowAgg
864
1111
  typedef struct Unique
865
1112
  {
866
1113
  Plan plan;
867
- int numCols; /* number of columns to check for uniqueness */
868
- AttrNumber *uniqColIdx; /* their indexes in the target list */
869
- Oid *uniqOperators; /* equality operators to compare with */
870
- 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));
871
1126
  } Unique;
872
1127
 
873
1128
  /* ------------
@@ -899,16 +1154,35 @@ typedef struct Gather
899
1154
  typedef struct GatherMerge
900
1155
  {
901
1156
  Plan plan;
902
- int num_workers; /* planned number of worker processes */
903
- 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
+
904
1164
  /* remaining fields are just like the sort-key info in struct Sort */
905
- int numCols; /* number of sort-key columns */
906
- AttrNumber *sortColIdx; /* their indexes in the target list */
907
- Oid *sortOperators; /* OIDs of operators to sort them by */
908
- Oid *collations; /* OIDs of collations */
909
- bool *nullsFirst; /* NULLS FIRST/LAST directions */
910
- Bitmapset *initParam; /* param id's of initplans which are referred
911
- * 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;
912
1186
  } GatherMerge;
913
1187
 
914
1188
  /* ----------------
@@ -932,7 +1206,7 @@ typedef struct Hash
932
1206
  AttrNumber skewColumn; /* outer join key's column #, or zero */
933
1207
  bool skewInherit; /* is outer join rel an inheritance tree? */
934
1208
  /* all other info is in the parent HashJoin node */
935
- double rows_total; /* estimate total rows if parallel_aware */
1209
+ Cardinality rows_total; /* estimate total rows if parallel_aware */
936
1210
  } Hash;
937
1211
 
938
1212
  /* ----------------
@@ -942,16 +1216,31 @@ typedef struct Hash
942
1216
  typedef struct SetOp
943
1217
  {
944
1218
  Plan plan;
945
- SetOpCmd cmd; /* what to do, see nodes.h */
946
- SetOpStrategy strategy; /* how to do it, see nodes.h */
947
- int numCols; /* number of columns to check for
948
- * duplicate-ness */
949
- AttrNumber *dupColIdx; /* their indexes in the target list */
950
- Oid *dupOperators; /* equality operators to compare with */
951
- Oid *dupCollations;
952
- AttrNumber flagColIdx; /* where is the flag column, if any */
953
- int firstFlag; /* flag value for first input relation */
954
- 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;
955
1244
  } SetOp;
956
1245
 
957
1246
  /* ----------------
@@ -980,13 +1269,27 @@ typedef struct LockRows
980
1269
  typedef struct Limit
981
1270
  {
982
1271
  Plan plan;
983
- Node *limitOffset; /* OFFSET parameter, or NULL if none */
984
- Node *limitCount; /* COUNT parameter, or NULL if none */
985
- LimitOption limitOption; /* limit type */
986
- int uniqNumCols; /* number of columns to check for similarity */
987
- AttrNumber *uniqColIdx; /* their indexes in the target list */
988
- Oid *uniqOperators; /* equality operators to compare with */
989
- 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));
990
1293
  } Limit;
991
1294
 
992
1295
 
@@ -1007,7 +1310,7 @@ typedef struct Limit
1007
1310
  * doing a separate remote query to lock each selected row is usually pretty
1008
1311
  * unappealing, so early locking remains a credible design choice for FDWs.
1009
1312
  *
1010
- * 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
1011
1314
  * identify all the source rows, not only those from the target relations, so
1012
1315
  * that we can perform EvalPlanQual rechecking at need. For plain tables we
1013
1316
  * can just fetch the TID, much as for a target relation; this case is
@@ -1036,7 +1339,7 @@ typedef enum RowMarkType
1036
1339
  * PlanRowMark -
1037
1340
  * plan-time representation of FOR [KEY] UPDATE/SHARE clauses
1038
1341
  *
1039
- * 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
1040
1343
  * PlanRowMark node for each non-target relation in the query. Relations that
1041
1344
  * are not specified as FOR UPDATE/SHARE are marked ROW_MARK_REFERENCE (if
1042
1345
  * regular tables or supported foreign tables) or ROW_MARK_COPY (if not).
@@ -1045,9 +1348,9 @@ typedef enum RowMarkType
1045
1348
  * When the planner discovers that a relation is the root of an inheritance
1046
1349
  * tree, it sets isParent true, and adds an additional PlanRowMark to the
1047
1350
  * list for each child relation (including the target rel itself in its role
1048
- * as a child). isParent is also set to true for the partitioned child
1049
- * relations, which are not scanned just like the root parent. The child
1050
- * entries have rti == child rel's RT index and prti == parent's RT index,
1351
+ * as a child, if it is not a partitioned table). Any non-leaf partitioned
1352
+ * child relations will also have entries with isParent = true. The child
1353
+ * entries have rti == child rel's RT index and prti == top parent's RT index,
1051
1354
  * and can therefore be recognized as children by the fact that prti != rti.
1052
1355
  * The parent's allMarkTypes field gets the OR of (1<<markType) across all
1053
1356
  * its children (this definition allows children to use different markTypes).
@@ -1068,11 +1371,12 @@ typedef enum RowMarkType
1068
1371
  * means we needn't renumber rowmarkIds when flattening subqueries, which
1069
1372
  * would require finding and renaming the resjunk columns as well.)
1070
1373
  * Note this means that all tables in an inheritance hierarchy share the
1071
- * same resjunk column names. However, in an inherited UPDATE/DELETE the
1072
- * columns could have different physical column numbers in each subplan.
1374
+ * same resjunk column names.
1073
1375
  */
1074
1376
  typedef struct PlanRowMark
1075
1377
  {
1378
+ pg_node_attr(no_equal, no_query_jumble)
1379
+
1076
1380
  NodeTag type;
1077
1381
  Index rti; /* range table index of markable relation */
1078
1382
  Index prti; /* range table index of parent relation */
@@ -1117,6 +1421,8 @@ typedef struct PlanRowMark
1117
1421
  */
1118
1422
  typedef struct PartitionPruneInfo
1119
1423
  {
1424
+ pg_node_attr(no_equal, no_query_jumble)
1425
+
1120
1426
  NodeTag type;
1121
1427
  List *prune_infos;
1122
1428
  Bitmapset *other_subplans;
@@ -1141,14 +1447,27 @@ typedef struct PartitionPruneInfo
1141
1447
  */
1142
1448
  typedef struct PartitionedRelPruneInfo
1143
1449
  {
1450
+ pg_node_attr(no_equal, no_query_jumble)
1451
+
1144
1452
  NodeTag type;
1145
- Index rtindex; /* RT index of partition rel for this level */
1146
- Bitmapset *present_parts; /* Indexes of all partitions which subplans or
1147
- * subparts are present for */
1148
- int nparts; /* Length of the following arrays: */
1149
- int *subplan_map; /* subplan index by partition index, or -1 */
1150
- int *subpart_map; /* subpart index by partition index, or -1 */
1151
- 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));
1152
1471
 
1153
1472
  /*
1154
1473
  * initial_pruning_steps shows how to prune during executor startup (i.e.,
@@ -1158,8 +1477,9 @@ typedef struct PartitionedRelPruneInfo
1158
1477
  */
1159
1478
  List *initial_pruning_steps; /* List of PartitionPruneStep */
1160
1479
  List *exec_pruning_steps; /* List of PartitionPruneStep */
1161
- Bitmapset *execparamids; /* All PARAM_EXEC Param IDs in
1162
- * exec_pruning_steps */
1480
+
1481
+ /* All PARAM_EXEC Param IDs in exec_pruning_steps */
1482
+ Bitmapset *execparamids;
1163
1483
  } PartitionedRelPruneInfo;
1164
1484
 
1165
1485
  /*
@@ -1170,12 +1490,14 @@ typedef struct PartitionedRelPruneInfo
1170
1490
  */
1171
1491
  typedef struct PartitionPruneStep
1172
1492
  {
1493
+ pg_node_attr(abstract, no_equal, no_query_jumble)
1494
+
1173
1495
  NodeTag type;
1174
1496
  int step_id;
1175
1497
  } PartitionPruneStep;
1176
1498
 
1177
1499
  /*
1178
- * PartitionPruneStepOp - Information to prune using a set of mutually AND'd
1500
+ * PartitionPruneStepOp - Information to prune using a set of mutually ANDed
1179
1501
  * OpExpr clauses
1180
1502
  *
1181
1503
  * This contains information extracted from up to partnatts OpExpr clauses,
@@ -1243,9 +1565,28 @@ typedef struct PartitionPruneStepCombine
1243
1565
  */
1244
1566
  typedef struct PlanInvalItem
1245
1567
  {
1568
+ pg_node_attr(no_equal, no_query_jumble)
1569
+
1246
1570
  NodeTag type;
1247
1571
  int cacheId; /* a syscache ID, see utils/syscache.h */
1248
1572
  uint32 hashValue; /* hash value of object's cache lookup key */
1249
1573
  } PlanInvalItem;
1250
1574
 
1575
+ /*
1576
+ * MonotonicFunction
1577
+ *
1578
+ * Allows the planner to track monotonic properties of functions. A function
1579
+ * is monotonically increasing if a subsequent call cannot yield a lower value
1580
+ * than the previous call. A monotonically decreasing function cannot yield a
1581
+ * higher value on subsequent calls, and a function which is both must return
1582
+ * the same value on each call.
1583
+ */
1584
+ typedef enum MonotonicFunction
1585
+ {
1586
+ MONOTONICFUNC_NONE = 0,
1587
+ MONOTONICFUNC_INCREASING = (1 << 0),
1588
+ MONOTONICFUNC_DECREASING = (1 << 1),
1589
+ MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
1590
+ } MonotonicFunction;
1591
+
1251
1592
  #endif /* PLANNODES_H */