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
@@ -3,8 +3,23 @@
3
3
  * execnodes.h
4
4
  * definitions for executor state nodes
5
5
  *
6
- *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Most plan node types declared in plannodes.h have a corresponding
7
+ * execution-state node type declared here. An exception is that
8
+ * expression nodes (subtypes of Expr) are usually represented by steps
9
+ * of an ExprState, and fully handled within execExpr* - but sometimes
10
+ * their state needs to be shared with other parts of the executor, as
11
+ * for example with SubPlanState, which nodeSubplan.c has to modify.
12
+ *
13
+ * Node types declared in this file do not have any copy/equal/out/read
14
+ * support. (That is currently hard-wired in gen_node_support.pl, rather
15
+ * than being explicitly represented by pg_node_attr decorations here.)
16
+ * There is no need for copy, equal, or read support for executor trees.
17
+ * Output support could be useful for debugging; but there are a lot of
18
+ * specialized fields that would require custom code, so for now it's
19
+ * not provided.
20
+ *
21
+ *
22
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
23
  * Portions Copyright (c) 1994, Regents of the University of California
9
24
  *
10
25
  * src/include/nodes/execnodes.h
@@ -17,6 +32,7 @@
17
32
  #include "access/tupconvert.h"
18
33
  #include "executor/instrument.h"
19
34
  #include "fmgr.h"
35
+ #include "lib/ilist.h"
20
36
  #include "lib/pairingheap.h"
21
37
  #include "nodes/params.h"
22
38
  #include "nodes/plannodes.h"
@@ -33,7 +49,6 @@
33
49
  #include "utils/tuplestore.h"
34
50
 
35
51
  struct PlanState; /* forward references in this file */
36
- struct PartitionRoutingInfo;
37
52
  struct ParallelHashJoinState;
38
53
  struct ExecRowMark;
39
54
  struct ExprState;
@@ -41,12 +56,13 @@ struct ExprContext;
41
56
  struct RangeTblEntry; /* avoid including parsenodes.h here */
42
57
  struct ExprEvalStep; /* avoid including execExpr.h everywhere */
43
58
  struct CopyMultiInsertBuffer;
59
+ struct LogicalTapeSet;
44
60
 
45
61
 
46
62
  /* ----------------
47
63
  * ExprState node
48
64
  *
49
- * ExprState is the top-level node for expression evaluation.
65
+ * ExprState represents the evaluation state for a whole expression tree.
50
66
  * It contains instructions (in ->steps) to evaluate the expression.
51
67
  * ----------------
52
68
  */
@@ -60,7 +76,7 @@ typedef Datum (*ExprStateEvalFunc) (struct ExprState *expression,
60
76
 
61
77
  typedef struct ExprState
62
78
  {
63
- NodeTag tag;
79
+ NodeTag type;
64
80
 
65
81
  uint8 flags; /* bitmask of EEO_FLAG_* bits, see above */
66
82
 
@@ -141,8 +157,11 @@ typedef struct ExprState
141
157
  * Unique is it a unique index?
142
158
  * OpclassOptions opclass-specific options, or NULL if none
143
159
  * ReadyForInserts is it valid for inserts?
160
+ * CheckedUnchanged IndexUnchanged status determined yet?
161
+ * IndexUnchanged aminsert hint, cached for retail inserts
144
162
  * Concurrent are we doing a concurrent index build?
145
163
  * BrokenHotChain did we detect any broken HOT chains?
164
+ * Summarizing is it a summarizing index?
146
165
  * ParallelWorkers # of workers requested (excludes leader)
147
166
  * Am Oid of index AM
148
167
  * AmCache private cache area for index AM
@@ -170,9 +189,13 @@ typedef struct IndexInfo
170
189
  uint16 *ii_UniqueStrats; /* array with one entry per column */
171
190
  Datum *ii_OpclassOptions; /* array with one entry per column */
172
191
  bool ii_Unique;
192
+ bool ii_NullsNotDistinct;
173
193
  bool ii_ReadyForInserts;
194
+ bool ii_CheckedUnchanged;
195
+ bool ii_IndexUnchanged;
174
196
  bool ii_Concurrent;
175
197
  bool ii_BrokenHotChain;
198
+ bool ii_Summarizing;
176
199
  int ii_ParallelWorkers;
177
200
  Oid ii_Am;
178
201
  void *ii_AmCache;
@@ -357,10 +380,6 @@ typedef struct ProjectionInfo
357
380
  * attribute numbers of the "original" tuple and the
358
381
  * attribute numbers of the "clean" tuple.
359
382
  * resultSlot: tuple slot used to hold cleaned tuple.
360
- * junkAttNo: not used by junkfilter code. Can be used by caller
361
- * to remember the attno of a specific junk attribute
362
- * (nodeModifyTable.c keeps the "ctid" or "wholerow"
363
- * attno here).
364
383
  * ----------------
365
384
  */
366
385
  typedef struct JunkFilter
@@ -370,7 +389,6 @@ typedef struct JunkFilter
370
389
  TupleDesc jf_cleanTupType;
371
390
  AttrNumber *jf_cleanMap;
372
391
  TupleTableSlot *jf_resultSlot;
373
- AttrNumber jf_junkAttNo;
374
392
  } JunkFilter;
375
393
 
376
394
  /*
@@ -388,6 +406,22 @@ typedef struct OnConflictSetState
388
406
  ExprState *oc_WhereClause; /* state for the WHERE clause */
389
407
  } OnConflictSetState;
390
408
 
409
+ /* ----------------
410
+ * MergeActionState information
411
+ *
412
+ * Executor state for a MERGE action.
413
+ * ----------------
414
+ */
415
+ typedef struct MergeActionState
416
+ {
417
+ NodeTag type;
418
+
419
+ MergeAction *mas_action; /* associated MergeAction node */
420
+ ProjectionInfo *mas_proj; /* projection of the action's targetlist for
421
+ * this rel */
422
+ ExprState *mas_whenqual; /* WHEN [NOT] MATCHED AND conditions */
423
+ } MergeActionState;
424
+
391
425
  /*
392
426
  * ResultRelInfo
393
427
  *
@@ -395,12 +429,15 @@ typedef struct OnConflictSetState
395
429
  * relation, and perhaps also fire triggers. ResultRelInfo holds all the
396
430
  * information needed about a result relation, including indexes.
397
431
  *
398
- * Normally, a ResultRelInfo refers to a table that is in the query's
399
- * range table; then ri_RangeTableIndex is the RT index and ri_RelationDesc
400
- * is just a copy of the relevant es_relations[] entry. But sometimes,
401
- * in ResultRelInfos used only for triggers, ri_RangeTableIndex is zero
402
- * and ri_RelationDesc is a separately-opened relcache pointer that needs
403
- * to be separately closed. See ExecGetTriggerResultRel.
432
+ * Normally, a ResultRelInfo refers to a table that is in the query's range
433
+ * table; then ri_RangeTableIndex is the RT index and ri_RelationDesc is
434
+ * just a copy of the relevant es_relations[] entry. However, in some
435
+ * situations we create ResultRelInfos for relations that are not in the
436
+ * range table, namely for targets of tuple routing in a partitioned table,
437
+ * and when firing triggers in tables other than the target tables (See
438
+ * ExecGetTriggerResultRel). In these situations, ri_RangeTableIndex is 0
439
+ * and ri_RelationDesc is a separately-opened relcache pointer that needs to
440
+ * be separately closed.
404
441
  */
405
442
  typedef struct ResultRelInfo
406
443
  {
@@ -421,6 +458,24 @@ typedef struct ResultRelInfo
421
458
  /* array of key/attr info for indices */
422
459
  IndexInfo **ri_IndexRelationInfo;
423
460
 
461
+ /*
462
+ * For UPDATE/DELETE result relations, the attribute number of the row
463
+ * identity junk attribute in the source plan's output tuples
464
+ */
465
+ AttrNumber ri_RowIdAttNo;
466
+
467
+ /* For UPDATE, attnums of generated columns to be computed */
468
+ Bitmapset *ri_extraUpdatedCols;
469
+
470
+ /* Projection to generate new tuple in an INSERT/UPDATE */
471
+ ProjectionInfo *ri_projectNew;
472
+ /* Slot to hold that tuple */
473
+ TupleTableSlot *ri_newTupleSlot;
474
+ /* Slot to hold the old tuple being updated */
475
+ TupleTableSlot *ri_oldTupleSlot;
476
+ /* Have the projection and the slots above been initialized? */
477
+ bool ri_projectNewInfoValid;
478
+
424
479
  /* triggers to be fired, if any */
425
480
  TriggerDesc *ri_TrigDesc;
426
481
 
@@ -447,6 +502,13 @@ typedef struct ResultRelInfo
447
502
  /* true when modifying foreign table directly */
448
503
  bool ri_usesFdwDirectModify;
449
504
 
505
+ /* batch insert stuff */
506
+ int ri_NumSlots; /* number of slots in the array */
507
+ int ri_NumSlotsInitialized; /* number of initialized slots */
508
+ int ri_BatchSize; /* max slots inserted in a single batch */
509
+ TupleTableSlot **ri_Slots; /* input tuples for batch insert */
510
+ TupleTableSlot **ri_PlanSlots;
511
+
450
512
  /* list of WithCheckOption's to be checked */
451
513
  List *ri_WithCheckOptions;
452
514
 
@@ -456,14 +518,13 @@ typedef struct ResultRelInfo
456
518
  /* array of constraint-checking expr states */
457
519
  ExprState **ri_ConstraintExprs;
458
520
 
459
- /* array of stored generated columns expr states */
460
- ExprState **ri_GeneratedExprs;
521
+ /* arrays of stored generated columns expr states, for INSERT and UPDATE */
522
+ ExprState **ri_GeneratedExprsI;
523
+ ExprState **ri_GeneratedExprsU;
461
524
 
462
525
  /* number of stored generated columns we need to compute */
463
- int ri_NumGeneratedNeeded;
464
-
465
- /* for removing junk attributes from tuples */
466
- JunkFilter *ri_junkFilter;
526
+ int ri_NumGeneratedNeededI;
527
+ int ri_NumGeneratedNeededU;
467
528
 
468
529
  /* list of RETURNING expressions */
469
530
  List *ri_returningList;
@@ -477,31 +538,73 @@ typedef struct ResultRelInfo
477
538
  /* ON CONFLICT evaluation state */
478
539
  OnConflictSetState *ri_onConflict;
479
540
 
480
- /* partition check expression */
481
- List *ri_PartitionCheck;
541
+ /* for MERGE, lists of MergeActionState */
542
+ List *ri_matchedMergeAction;
543
+ List *ri_notMatchedMergeAction;
482
544
 
483
- /* partition check expression state */
545
+ /* partition check expression state (NULL if not set up yet) */
484
546
  ExprState *ri_PartitionCheckExpr;
485
547
 
486
548
  /*
549
+ * Map to convert child result relation tuples to the format of the table
550
+ * actually mentioned in the query (called "root"). Computed only if
551
+ * needed. A NULL map value indicates that no conversion is needed, so we
552
+ * must have a separate flag to show if the map has been computed.
553
+ */
554
+ TupleConversionMap *ri_ChildToRootMap;
555
+ bool ri_ChildToRootMapValid;
556
+
557
+ /*
558
+ * As above, but in the other direction.
559
+ */
560
+ TupleConversionMap *ri_RootToChildMap;
561
+ bool ri_RootToChildMapValid;
562
+
563
+ /*
564
+ * Information needed by tuple routing target relations
565
+ *
487
566
  * RootResultRelInfo gives the target relation mentioned in the query, if
488
567
  * it's a partitioned table. It is not set if the target relation
489
568
  * mentioned in the query is an inherited table, nor when tuple routing is
490
569
  * not needed.
570
+ *
571
+ * PartitionTupleSlot is non-NULL if RootToChild conversion is needed and
572
+ * the relation is a partition.
491
573
  */
492
574
  struct ResultRelInfo *ri_RootResultRelInfo;
575
+ TupleTableSlot *ri_PartitionTupleSlot;
493
576
 
494
- /* Additional information specific to partition tuple routing */
495
- struct PartitionRoutingInfo *ri_PartitionInfo;
496
-
497
- /* For use by copy.c when performing multi-inserts */
577
+ /* for use by copyfrom.c when performing multi-inserts */
498
578
  struct CopyMultiInsertBuffer *ri_CopyMultiInsertBuffer;
579
+
580
+ /*
581
+ * Used when a leaf partition is involved in a cross-partition update of
582
+ * one of its ancestors; see ExecCrossPartitionUpdateForeignKey().
583
+ */
584
+ List *ri_ancestorResultRels;
499
585
  } ResultRelInfo;
500
586
 
587
+ /* ----------------
588
+ * AsyncRequest
589
+ *
590
+ * State for an asynchronous tuple request.
591
+ * ----------------
592
+ */
593
+ typedef struct AsyncRequest
594
+ {
595
+ struct PlanState *requestor; /* Node that wants a tuple */
596
+ struct PlanState *requestee; /* Node from which a tuple is wanted */
597
+ int request_index; /* Scratch space for requestor */
598
+ bool callback_pending; /* Callback is needed */
599
+ bool request_complete; /* Request complete, result valid */
600
+ TupleTableSlot *result; /* Result (NULL or an empty slot if no more
601
+ * tuples) */
602
+ } AsyncRequest;
603
+
501
604
  /* ----------------
502
605
  * EState information
503
606
  *
504
- * Master working state for an Executor invocation
607
+ * Working state for an Executor invocation
505
608
  * ----------------
506
609
  */
507
610
  typedef struct EState
@@ -518,6 +621,7 @@ typedef struct EState
518
621
  * pointers, or NULL if not yet opened */
519
622
  struct ExecRowMark **es_rowmarks; /* Array of per-range-table-entry
520
623
  * ExecRowMarks, or NULL if none */
624
+ List *es_rteperminfos; /* List of RTEPermissionInfo */
521
625
  PlannedStmt *es_plannedstmt; /* link to top of plan tree */
522
626
  const char *es_sourceText; /* Source text from QueryDesc */
523
627
 
@@ -527,23 +631,18 @@ typedef struct EState
527
631
  CommandId es_output_cid;
528
632
 
529
633
  /* Info about target table(s) for insert/update/delete queries: */
530
- ResultRelInfo *es_result_relations; /* array of ResultRelInfos */
531
- int es_num_result_relations; /* length of array */
532
- ResultRelInfo *es_result_relation_info; /* currently active array elt */
634
+ ResultRelInfo **es_result_relations; /* Array of per-range-table-entry
635
+ * ResultRelInfo pointers, or NULL
636
+ * if not a target table */
637
+ List *es_opened_result_relations; /* List of non-NULL entries in
638
+ * es_result_relations in no
639
+ * specific order */
533
640
 
534
- /*
535
- * Info about the partition root table(s) for insert/update/delete queries
536
- * targeting partitioned tables. Only leaf partitions are mentioned in
537
- * es_result_relations, but we need access to the roots for firing
538
- * triggers and for runtime tuple routing.
539
- */
540
- ResultRelInfo *es_root_result_relations; /* array of ResultRelInfos */
541
- int es_num_root_result_relations; /* length of the array */
542
641
  PartitionDirectory es_partition_directory; /* for PartitionDesc lookup */
543
642
 
544
643
  /*
545
644
  * The following list contains ResultRelInfos created by the tuple routing
546
- * code for partitions that don't already have one.
645
+ * code for partitions that aren't found in the es_result_relations array.
547
646
  */
548
647
  List *es_tuple_routing_result_relations;
549
648
 
@@ -561,7 +660,10 @@ typedef struct EState
561
660
 
562
661
  List *es_tupleTable; /* List of TupleTableSlots */
563
662
 
564
- uint64 es_processed; /* # of tuples processed */
663
+ uint64 es_processed; /* # of tuples processed during one
664
+ * ExecutorRun() call. */
665
+ uint64 es_total_processed; /* total # of tuples aggregated across all
666
+ * ExecutorRun() calls. */
565
667
 
566
668
  int es_top_eflags; /* eflags passed to ExecutorStart */
567
669
  int es_instrument; /* OR of InstrumentOption flags */
@@ -605,6 +707,13 @@ typedef struct EState
605
707
  int es_jit_flags;
606
708
  struct JitContext *es_jit;
607
709
  struct JitInstrumentation *es_jit_worker_instr;
710
+
711
+ /*
712
+ * Lists of ResultRelInfos for foreign tables on which batch-inserts are
713
+ * to be executed and owning ModifyTableStates, stored in the same order.
714
+ */
715
+ List *es_insert_pending_result_relations;
716
+ List *es_insert_pending_modifytables;
608
717
  } EState;
609
718
 
610
719
 
@@ -612,8 +721,8 @@ typedef struct EState
612
721
  * ExecRowMark -
613
722
  * runtime representation of FOR [KEY] UPDATE/SHARE clauses
614
723
  *
615
- * When doing UPDATE, DELETE, or SELECT FOR [KEY] UPDATE/SHARE, we will have an
616
- * ExecRowMark for each non-target relation in the query (except inheritance
724
+ * When doing UPDATE/DELETE/MERGE/SELECT FOR [KEY] UPDATE/SHARE, we will have
725
+ * an ExecRowMark for each non-target relation in the query (except inheritance
617
726
  * parent RTEs, which can be ignored at runtime). Virtual relations such as
618
727
  * subqueries-in-FROM will have an ExecRowMark with relation == NULL. See
619
728
  * PlanRowMark for details about most of the fields. In addition to fields
@@ -649,10 +758,7 @@ typedef struct ExecRowMark
649
758
  * Each LockRows and ModifyTable node keeps a list of the rowmarks it needs to
650
759
  * deal with. In addition to a pointer to the related entry in es_rowmarks,
651
760
  * this struct carries the column number(s) of the resjunk columns associated
652
- * with the rowmark (see comments for PlanRowMark for more detail). In the
653
- * case of ModifyTable, there has to be a separate ExecAuxRowMark list for
654
- * each child plan, because the resjunk columns could be at different physical
655
- * column positions in different subplans.
761
+ * with the rowmark (see comments for PlanRowMark for more detail).
656
762
  */
657
763
  typedef struct ExecAuxRowMark
658
764
  {
@@ -747,17 +853,6 @@ typedef tuplehash_iterator TupleHashIterator;
747
853
  * ----------------------------------------------------------------
748
854
  */
749
855
 
750
- /* ----------------
751
- * AggrefExprState node
752
- * ----------------
753
- */
754
- typedef struct AggrefExprState
755
- {
756
- NodeTag type;
757
- Aggref *aggref; /* expression plan node */
758
- int aggno; /* ID number for agg within its plan node */
759
- } AggrefExprState;
760
-
761
856
  /* ----------------
762
857
  * WindowFuncExprState node
763
858
  * ----------------
@@ -885,18 +980,6 @@ typedef struct SubPlanState
885
980
  ExprState *cur_eq_comp; /* equality comparator for LHS vs. table */
886
981
  } SubPlanState;
887
982
 
888
- /* ----------------
889
- * AlternativeSubPlanState node
890
- * ----------------
891
- */
892
- typedef struct AlternativeSubPlanState
893
- {
894
- NodeTag type;
895
- AlternativeSubPlan *subplan; /* expression plan node */
896
- List *subplans; /* SubPlanStates of alternative subplans */
897
- int active; /* list index of the one we're using */
898
- } AlternativeSubPlanState;
899
-
900
983
  /*
901
984
  * DomainConstraintState - one item to check during CoerceToDomain
902
985
  *
@@ -947,6 +1030,8 @@ typedef TupleTableSlot *(*ExecProcNodeMtd) (struct PlanState *pstate);
947
1030
  */
948
1031
  typedef struct PlanState
949
1032
  {
1033
+ pg_node_attr(abstract)
1034
+
950
1035
  NodeTag type;
951
1036
 
952
1037
  Plan *plan; /* associated Plan node */
@@ -991,6 +1076,8 @@ typedef struct PlanState
991
1076
  ExprContext *ps_ExprContext; /* node's expression-evaluation context */
992
1077
  ProjectionInfo *ps_ProjInfo; /* info for doing tuple projection */
993
1078
 
1079
+ bool async_capable; /* true if node is async-capable */
1080
+
994
1081
  /*
995
1082
  * Scanslot's descriptor if known. This is a bit of a hack, but otherwise
996
1083
  * it's hard for expression compilation to optimize based on the
@@ -1077,21 +1164,21 @@ typedef struct PlanState
1077
1164
  * EvalPlanQualSlot), and/or found using the rowmark mechanism (non-locking
1078
1165
  * rowmarks by the EPQ machinery itself, locking ones by the caller).
1079
1166
  *
1080
- * While the plan to be checked may be changed using EvalPlanQualSetPlan() -
1081
- * e.g. so all source plans for a ModifyTable node can be processed - all such
1082
- * plans need to share the same EState.
1167
+ * While the plan to be checked may be changed using EvalPlanQualSetPlan(),
1168
+ * all such plans need to share the same EState.
1083
1169
  */
1084
1170
  typedef struct EPQState
1085
1171
  {
1086
- /* Initialized at EvalPlanQualInit() time: */
1087
-
1172
+ /* These are initialized by EvalPlanQualInit() and do not change later: */
1088
1173
  EState *parentestate; /* main query's EState */
1089
1174
  int epqParam; /* ID of Param to force scan node re-eval */
1175
+ List *resultRelations; /* integer list of RT indexes, or NIL */
1090
1176
 
1091
1177
  /*
1092
- * Tuples to be substituted by scan nodes. They need to set up, before
1093
- * calling EvalPlanQual()/EvalPlanQualNext(), into the slot returned by
1094
- * EvalPlanQualSlot(scanrelid). The array is indexed by scanrelid - 1.
1178
+ * relsubs_slot[scanrelid - 1] holds the EPQ test tuple to be returned by
1179
+ * the scan node for the scanrelid'th RT index, in place of performing an
1180
+ * actual table scan. Callers should use EvalPlanQualSlot() to fetch
1181
+ * these slots.
1095
1182
  */
1096
1183
  List *tuple_table; /* tuple table for relsubs_slot */
1097
1184
  TupleTableSlot **relsubs_slot;
@@ -1125,11 +1212,21 @@ typedef struct EPQState
1125
1212
  ExecAuxRowMark **relsubs_rowmark;
1126
1213
 
1127
1214
  /*
1128
- * True if a relation's EPQ tuple has been fetched for relation, indexed
1129
- * by scanrelid - 1.
1215
+ * relsubs_done[scanrelid - 1] is true if there is no EPQ tuple for this
1216
+ * target relation or it has already been fetched in the current scan of
1217
+ * this target relation within the current EvalPlanQual test.
1130
1218
  */
1131
1219
  bool *relsubs_done;
1132
1220
 
1221
+ /*
1222
+ * relsubs_blocked[scanrelid - 1] is true if there is no EPQ tuple for
1223
+ * this target relation during the current EvalPlanQual test. We keep
1224
+ * these flags set for all relids listed in resultRelations, but
1225
+ * transiently clear the one for the relation whose tuple is actually
1226
+ * passed to EvalPlanQual().
1227
+ */
1228
+ bool *relsubs_blocked;
1229
+
1133
1230
  PlanState *recheckplanstate; /* EPQ specific exec nodes, for ->plan */
1134
1231
  } EPQState;
1135
1232
 
@@ -1163,6 +1260,12 @@ typedef struct ProjectSetState
1163
1260
  MemoryContext argcontext; /* context for SRF arguments */
1164
1261
  } ProjectSetState;
1165
1262
 
1263
+
1264
+ /* flags for mt_merge_subcommands */
1265
+ #define MERGE_INSERT 0x01
1266
+ #define MERGE_UPDATE 0x02
1267
+ #define MERGE_DELETE 0x04
1268
+
1166
1269
  /* ----------------
1167
1270
  * ModifyTableState information
1168
1271
  * ----------------
@@ -1170,21 +1273,34 @@ typedef struct ProjectSetState
1170
1273
  typedef struct ModifyTableState
1171
1274
  {
1172
1275
  PlanState ps; /* its first field is NodeTag */
1173
- CmdType operation; /* INSERT, UPDATE, or DELETE */
1276
+ CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
1174
1277
  bool canSetTag; /* do we set the command tag/es_processed? */
1175
1278
  bool mt_done; /* are we done? */
1176
- PlanState **mt_plans; /* subplans (one per target rel) */
1177
- int mt_nplans; /* number of plans in the array */
1178
- int mt_whichplan; /* which one is being executed (0..n-1) */
1179
- TupleTableSlot **mt_scans; /* input tuple corresponding to underlying
1180
- * plans */
1181
- ResultRelInfo *resultRelInfo; /* per-subplan target relations */
1182
- ResultRelInfo *rootResultRelInfo; /* root target relation (partitioned
1183
- * table root) */
1184
- List **mt_arowmarks; /* per-subplan ExecAuxRowMark lists */
1279
+ int mt_nrels; /* number of entries in resultRelInfo[] */
1280
+ ResultRelInfo *resultRelInfo; /* info about target relation(s) */
1281
+
1282
+ /*
1283
+ * Target relation mentioned in the original statement, used to fire
1284
+ * statement-level triggers and as the root for tuple routing. (This
1285
+ * might point to one of the resultRelInfo[] entries, but it can also be a
1286
+ * distinct struct.)
1287
+ */
1288
+ ResultRelInfo *rootResultRelInfo;
1289
+
1185
1290
  EPQState mt_epqstate; /* for evaluating EvalPlanQual rechecks */
1186
1291
  bool fireBSTriggers; /* do we need to fire stmt triggers? */
1187
1292
 
1293
+ /*
1294
+ * These fields are used for inherited UPDATE and DELETE, to track which
1295
+ * target relation a given tuple is from. If there are a lot of target
1296
+ * relations, we use a hash table to translate table OIDs to
1297
+ * resultRelInfo[] indexes; otherwise mt_resultOidHash is NULL.
1298
+ */
1299
+ int mt_resultOidAttno; /* resno of "tableoid" junk attr */
1300
+ Oid mt_lastResultOid; /* last-seen value of tableoid */
1301
+ int mt_lastResultIndex; /* corresponding index in resultRelInfo[] */
1302
+ HTAB *mt_resultOidHash; /* optional hash table to speed lookups */
1303
+
1188
1304
  /*
1189
1305
  * Slot for storing tuples in the root partitioned table's rowtype during
1190
1306
  * an UPDATE of a partitioned table.
@@ -1200,20 +1316,25 @@ typedef struct ModifyTableState
1200
1316
  /* controls transition table population for INSERT...ON CONFLICT UPDATE */
1201
1317
  struct TransitionCaptureState *mt_oc_transition_capture;
1202
1318
 
1203
- /* Per plan map for tuple conversion from child to root */
1204
- TupleConversionMap **mt_per_subplan_tupconv_maps;
1319
+ /* Flags showing which subcommands are present INS/UPD/DEL/DO NOTHING */
1320
+ int mt_merge_subcommands;
1321
+
1322
+ /* tuple counters for MERGE */
1323
+ double mt_merge_inserted;
1324
+ double mt_merge_updated;
1325
+ double mt_merge_deleted;
1205
1326
  } ModifyTableState;
1206
1327
 
1207
1328
  /* ----------------
1208
1329
  * AppendState information
1209
1330
  *
1210
1331
  * nplans how many plans are in the array
1211
- * whichplan which plan is being executed (0 .. n-1), or a
1212
- * special negative value. See nodeAppend.c.
1332
+ * whichplan which synchronous plan is being executed (0 .. n-1)
1333
+ * or a special negative value. See nodeAppend.c.
1213
1334
  * prune_state details required to allow partitions to be
1214
1335
  * eliminated from the scan, or NULL if not possible.
1215
- * valid_subplans for runtime pruning, valid appendplans indexes to
1216
- * scan.
1336
+ * valid_subplans for runtime pruning, valid synchronous appendplans
1337
+ * indexes to scan.
1217
1338
  * ----------------
1218
1339
  */
1219
1340
 
@@ -1229,12 +1350,26 @@ struct AppendState
1229
1350
  PlanState **appendplans; /* array of PlanStates for my inputs */
1230
1351
  int as_nplans;
1231
1352
  int as_whichplan;
1353
+ bool as_begun; /* false means need to initialize */
1354
+ Bitmapset *as_asyncplans; /* asynchronous plans indexes */
1355
+ int as_nasyncplans; /* # of asynchronous plans */
1356
+ AsyncRequest **as_asyncrequests; /* array of AsyncRequests */
1357
+ TupleTableSlot **as_asyncresults; /* unreturned results of async plans */
1358
+ int as_nasyncresults; /* # of valid entries in as_asyncresults */
1359
+ bool as_syncdone; /* true if all synchronous plans done in
1360
+ * asynchronous mode, else false */
1361
+ int as_nasyncremain; /* # of remaining asynchronous plans */
1362
+ Bitmapset *as_needrequest; /* asynchronous plans needing a new request */
1363
+ struct WaitEventSet *as_eventset; /* WaitEventSet used to configure file
1364
+ * descriptor wait events */
1232
1365
  int as_first_partial_plan; /* Index of 'appendplans' containing
1233
1366
  * the first partial plan */
1234
1367
  ParallelAppendState *as_pstate; /* parallel coordination info */
1235
1368
  Size pstate_len; /* size of parallel coordination info */
1236
1369
  struct PartitionPruneState *as_prune_state;
1370
+ bool as_valid_subplans_identified; /* is as_valid_subplans valid? */
1237
1371
  Bitmapset *as_valid_subplans;
1372
+ Bitmapset *as_valid_asyncplans; /* valid asynchronous plans indexes */
1238
1373
  bool (*choose_next_subplan) (AppendState *);
1239
1374
  };
1240
1375
 
@@ -1451,7 +1586,7 @@ typedef struct IndexScanState
1451
1586
  /* ----------------
1452
1587
  * IndexOnlyScanState information
1453
1588
  *
1454
- * indexqual execution state for indexqual expressions
1589
+ * recheckqual execution state for recheckqual expressions
1455
1590
  * ScanKeys Skey structures for index quals
1456
1591
  * NumScanKeys number of ScanKeys
1457
1592
  * OrderByKeys Skey structures for index ordering operators
@@ -1470,7 +1605,7 @@ typedef struct IndexScanState
1470
1605
  typedef struct IndexOnlyScanState
1471
1606
  {
1472
1607
  ScanState ss; /* its first field is NodeTag */
1473
- ExprState *indexqual;
1608
+ ExprState *recheckqual;
1474
1609
  struct ScanKeyData *ioss_ScanKeys;
1475
1610
  int ioss_NumScanKeys;
1476
1611
  struct ScanKeyData *ioss_OrderByKeys;
@@ -1633,6 +1768,24 @@ typedef struct TidScanState
1633
1768
  HeapTupleData tss_htup;
1634
1769
  } TidScanState;
1635
1770
 
1771
+ /* ----------------
1772
+ * TidRangeScanState information
1773
+ *
1774
+ * trss_tidexprs list of TidOpExpr structs (see nodeTidrangescan.c)
1775
+ * trss_mintid the lowest TID in the scan range
1776
+ * trss_maxtid the highest TID in the scan range
1777
+ * trss_inScan is a scan currently in progress?
1778
+ * ----------------
1779
+ */
1780
+ typedef struct TidRangeScanState
1781
+ {
1782
+ ScanState ss; /* its first field is NodeTag */
1783
+ List *trss_tidexprs;
1784
+ ItemPointerData trss_mintid;
1785
+ ItemPointerData trss_maxtid;
1786
+ bool trss_inScan;
1787
+ } TidRangeScanState;
1788
+
1636
1789
  /* ----------------
1637
1790
  * SubqueryScanState information
1638
1791
  *
@@ -1801,6 +1954,7 @@ typedef struct ForeignScanState
1801
1954
  ScanState ss; /* its first field is NodeTag */
1802
1955
  ExprState *fdw_recheck_quals; /* original quals not in ss.ps.qual */
1803
1956
  Size pscan_len; /* size of parallel coordination information */
1957
+ ResultRelInfo *resultRelInfo; /* result rel info, if UPDATE or DELETE */
1804
1958
  /* use struct pointer to avoid including fdwapi.h here */
1805
1959
  struct FdwRoutine *fdwroutine;
1806
1960
  void *fdw_state; /* foreign-data wrapper can keep state here */
@@ -1829,6 +1983,7 @@ typedef struct CustomScanState
1829
1983
  List *custom_ps; /* list of child PlanState nodes, if any */
1830
1984
  Size pscan_len; /* size of parallel coordination information */
1831
1985
  const struct CustomExecMethods *methods;
1986
+ const struct TupleTableSlotOps *slotOps;
1832
1987
  } CustomScanState;
1833
1988
 
1834
1989
  /* ----------------------------------------------------------------
@@ -1931,7 +2086,8 @@ typedef struct MergeJoinState
1931
2086
  * OuterTupleSlot is empty!)
1932
2087
  * hj_OuterTupleSlot tuple slot for outer tuples
1933
2088
  * hj_HashTupleSlot tuple slot for inner (hashed) tuples
1934
- * hj_NullOuterTupleSlot prepared null tuple for right/full outer joins
2089
+ * hj_NullOuterTupleSlot prepared null tuple for right/right-anti/full
2090
+ * outer joins
1935
2091
  * hj_NullInnerTupleSlot prepared null tuple for left/full outer joins
1936
2092
  * hj_FirstOuterTupleSlot first tuple retrieved from outer plan
1937
2093
  * hj_JoinState current state of ExecHashJoin state machine
@@ -1989,6 +2145,75 @@ typedef struct MaterialState
1989
2145
  Tuplestorestate *tuplestorestate;
1990
2146
  } MaterialState;
1991
2147
 
2148
+ struct MemoizeEntry;
2149
+ struct MemoizeTuple;
2150
+ struct MemoizeKey;
2151
+
2152
+ typedef struct MemoizeInstrumentation
2153
+ {
2154
+ uint64 cache_hits; /* number of rescans where we've found the
2155
+ * scan parameter values to be cached */
2156
+ uint64 cache_misses; /* number of rescans where we've not found the
2157
+ * scan parameter values to be cached. */
2158
+ uint64 cache_evictions; /* number of cache entries removed due to
2159
+ * the need to free memory */
2160
+ uint64 cache_overflows; /* number of times we've had to bypass the
2161
+ * cache when filling it due to not being
2162
+ * able to free enough space to store the
2163
+ * current scan's tuples. */
2164
+ uint64 mem_peak; /* peak memory usage in bytes */
2165
+ } MemoizeInstrumentation;
2166
+
2167
+ /* ----------------
2168
+ * Shared memory container for per-worker memoize information
2169
+ * ----------------
2170
+ */
2171
+ typedef struct SharedMemoizeInfo
2172
+ {
2173
+ int num_workers;
2174
+ MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
2175
+ } SharedMemoizeInfo;
2176
+
2177
+ /* ----------------
2178
+ * MemoizeState information
2179
+ *
2180
+ * memoize nodes are used to cache recent and commonly seen results from
2181
+ * a parameterized scan.
2182
+ * ----------------
2183
+ */
2184
+ typedef struct MemoizeState
2185
+ {
2186
+ ScanState ss; /* its first field is NodeTag */
2187
+ int mstatus; /* value of ExecMemoize state machine */
2188
+ int nkeys; /* number of cache keys */
2189
+ struct memoize_hash *hashtable; /* hash table for cache entries */
2190
+ TupleDesc hashkeydesc; /* tuple descriptor for cache keys */
2191
+ TupleTableSlot *tableslot; /* min tuple slot for existing cache entries */
2192
+ TupleTableSlot *probeslot; /* virtual slot used for hash lookups */
2193
+ ExprState *cache_eq_expr; /* Compare exec params to hash key */
2194
+ ExprState **param_exprs; /* exprs containing the parameters to this
2195
+ * node */
2196
+ FmgrInfo *hashfunctions; /* lookup data for hash funcs nkeys in size */
2197
+ Oid *collations; /* collation for comparisons nkeys in size */
2198
+ uint64 mem_used; /* bytes of memory used by cache */
2199
+ uint64 mem_limit; /* memory limit in bytes for the cache */
2200
+ MemoryContext tableContext; /* memory context to store cache data */
2201
+ dlist_head lru_list; /* least recently used entry list */
2202
+ struct MemoizeTuple *last_tuple; /* Used to point to the last tuple
2203
+ * returned during a cache hit and the
2204
+ * tuple we last stored when
2205
+ * populating the cache. */
2206
+ struct MemoizeEntry *entry; /* the entry that 'last_tuple' belongs to or
2207
+ * NULL if 'last_tuple' is NULL. */
2208
+ bool singlerow; /* true if the cache entry is to be marked as
2209
+ * complete after caching the first tuple. */
2210
+ bool binary_mode; /* true when cache key should be compared bit
2211
+ * by bit, false when using hash equality ops */
2212
+ MemoizeInstrumentation stats; /* execution statistics */
2213
+ SharedMemoizeInfo *shared_info; /* statistics for parallel workers */
2214
+ Bitmapset *keyparamids; /* Param->paramids of expressions belonging to
2215
+ * param_exprs */
2216
+ } MemoizeState;
1992
2217
 
1993
2218
  /* ----------------
1994
2219
  * When performing sorting by multiple keys, it's possible that the input
@@ -2029,6 +2254,7 @@ typedef struct SortState
2029
2254
  int64 bound_Done; /* value of bound we did the sort with */
2030
2255
  void *tuplesortstate; /* private state of tuplesort.c */
2031
2256
  bool am_worker; /* are we a worker? */
2257
+ bool datumSort; /* Datum sort instead of tuple sort? */
2032
2258
  SharedSortInfo *shared_info; /* one entry per worker */
2033
2259
  } SortState;
2034
2260
 
@@ -2193,7 +2419,7 @@ typedef struct AggState
2193
2419
  bool table_filled; /* hash table filled yet? */
2194
2420
  int num_hashes;
2195
2421
  MemoryContext hash_metacxt; /* memory for hash table itself */
2196
- struct HashTapeInfo *hash_tapeinfo; /* metadata for spill tapes */
2422
+ struct LogicalTapeSet *hash_tapeset; /* tape set for hash spill tapes */
2197
2423
  struct HashAggSpill *hash_spills; /* HashAggSpill for each grouping set,
2198
2424
  * exists only during first pass */
2199
2425
  TupleTableSlot *hash_spill_rslot; /* for reading spill files */
@@ -2233,6 +2459,18 @@ typedef struct AggState
2233
2459
  typedef struct WindowStatePerFuncData *WindowStatePerFunc;
2234
2460
  typedef struct WindowStatePerAggData *WindowStatePerAgg;
2235
2461
 
2462
+ /*
2463
+ * WindowAggStatus -- Used to track the status of WindowAggState
2464
+ */
2465
+ typedef enum WindowAggStatus
2466
+ {
2467
+ WINDOWAGG_DONE, /* No more processing to do */
2468
+ WINDOWAGG_RUN, /* Normal processing of window funcs */
2469
+ WINDOWAGG_PASSTHROUGH, /* Don't eval window funcs */
2470
+ WINDOWAGG_PASSTHROUGH_STRICT /* Pass-through plus don't store new
2471
+ * tuples during spool */
2472
+ } WindowAggStatus;
2473
+
2236
2474
  typedef struct WindowAggState
2237
2475
  {
2238
2476
  ScanState ss; /* its first field is NodeTag */
@@ -2259,6 +2497,7 @@ typedef struct WindowAggState
2259
2497
  struct WindowObjectData *agg_winobj; /* winobj for aggregate fetches */
2260
2498
  int64 aggregatedbase; /* start row for current aggregates */
2261
2499
  int64 aggregatedupto; /* rows before this one are aggregated */
2500
+ WindowAggStatus status; /* run status of WindowAggState */
2262
2501
 
2263
2502
  int frameOptions; /* frame_clause options, see WindowDef */
2264
2503
  ExprState *startOffset; /* expression for starting bound offset */
@@ -2285,8 +2524,17 @@ typedef struct WindowAggState
2285
2524
  MemoryContext curaggcontext; /* current aggregate's working data */
2286
2525
  ExprContext *tmpcontext; /* short-term evaluation context */
2287
2526
 
2527
+ ExprState *runcondition; /* Condition which must remain true otherwise
2528
+ * execution of the WindowAgg will finish or
2529
+ * go into pass-through mode. NULL when there
2530
+ * is no such condition. */
2531
+
2532
+ bool use_pass_through; /* When false, stop execution when
2533
+ * runcondition is no longer true. Else
2534
+ * just stop evaluating window funcs. */
2535
+ bool top_window; /* true if this is the top-most WindowAgg or
2536
+ * the only WindowAgg in this query level */
2288
2537
  bool all_first; /* true if the scan is starting */
2289
- bool all_done; /* true if the scan is finished */
2290
2538
  bool partition_spooled; /* true if all tuples in current partition
2291
2539
  * have been spooled into tuplestore */
2292
2540
  bool more_partitions; /* true if there's more partitions after